当前位置: 首页 > web >正文

从浏览器到服务器:TCP 段的网络传输之旅

本文以简化的网络架构为例,详细介绍了当你在浏览器中输入网址(例如www.google.com)并按下回车键后,TCP段的完整传输过程。我们将探讨DNS解析、ARP、TCP/IP封装、PAT和路由如何协同工作,将数据从个人电脑通过局域网和广域网发送到谷歌的服务器。需要注意的是,本文为了便于学习,展示的是一个基础案例,而实际应用中的网络实现往往更为复杂。

在这里插入图片描述

1. DNS解析:将域名转换为IP地址

当你输入www.google.com这样的域名时,浏览器首先需要将其解析为IP地址才能发起通信,步骤如下:

  1. 系统会检查本地DNS缓存,包括/etc/hosts文件或操作系统缓存。
  2. 如果在本地缓存中未找到对应记录,就会向电脑中配置的DNS服务器(通常由互联网服务提供商或路由器提供)发送DNS查询请求。
  3. DNS服务器会返回对应的IP地址(例如142.250.190.132)。
  4. 此时,浏览器已准备好与目标IP地址建立TCP连接。

2. 准备建立TCP连接

在发送数据包之前,系统需要做一些准备工作:

  1. 源IP地址:网卡的IP地址。
  2. 目的IP地址:从DNS服务器获取到的IP地址。
  3. 源MAC地址:网卡的MAC地址。
  4. 目的MAC地址:
    • 如果目标设备与本机在同一子网,可通过ARP协议获取其MAC地址。
    • 如果目标设备在不同子网(通常情况如此),数据包必须经过默认网关转发,因此需要获取网关的MAC地址。

系统如何获取网关的MAC地址:通过ARP(地址解析协议)

  1. 利用子网掩码判断目标设备是否在子网外。
  2. 如果是,发送ARP广播:“谁拥有192.168.1.1这个IP地址?”
  3. 网关会回复其MAC地址。
  4. 个人电脑会将该MAC地址缓存起来,以便后续进行帧封装。

3. 数据封装:四层协议栈

  1. 应用层(HTTP消息):
    • 例如,GET / HTTP/1.1请求。
  2. 传输层(TCP段):
    • 添加源端口和目的端口(例如,40000 → 443,443是HTTPS的默认端口),源端口是操作系统分配的动态端口(1024-65535,例如40000)。
    • 必要时对数据进行分段。
  3. 网络层(IP数据包):
    • 添加源IP地址和目的IP地址。
    • 其他字段:TTL(生存时间)、校验和等。
  4. 数据链路层(以太网帧):
    • 添加源MAC地址和目的MAC地址。
    • 包含一个带有FCS(帧校验序列)的尾部,用于错误检查。

最后,完整的以太网帧会被发送到局域网交换机。

4. 通过交换机发送到网关(第二层)

交换机维护着一张MAC地址表。例如:00:1A:2B:3C:4D:5E → Gi0/1, VLAN 10,表示拥有该MAC地址的设备连接在Gi0/1端口。

  1. 当交换机从某个端口接收到帧时,会检查源MAC地址与该端口的映射关系是否存在于表中。如果不存在,就将该映射添加到表中。
  2. 交换机检查网关的目的MAC地址是否存在于表中。
  3. 如果不存在,交换机就会将帧从除源端口之外的所有端口发送出去。网关收到广播帧后,会回复其MAC地址(例如00:1A:2B:3C:4D:5E)。交换机随后会将这个MAC地址与端口的映射记录到表中,这样后续发往网关的帧就可以直接转发(不再需要广播)。

5. 网关执行PAT(端口地址转换)

如果个人电脑使用私有IP地址,边缘路由器(PAT设备)必须进行地址转换:

  • 源IP地址:从私有IP地址(例如192.168.1.100)转换为路由器的公网IP地址(例如203.0.113.10)。
  • 源端口:替换为临时的公网端口(例如50000)。
  • PAT表条目:192.168.1.100:8080 → 203.0.113.10:50000。

之后,路由器会将修改后的IP数据包转发到广域网。

6. 广域网中的路由器:寻找最短路径

路由表的构建方式有两种:手动配置(静态路由)或通过动态路由协议自动生成(例如,用于内部网络的OSPF协议、用于互联网服务提供商之间通信的BGP协议)。这些协议通过交换路径信息来找到最佳路由。每台广域网路由器都维护着一个路由表数据库,该数据库将目的IP网络映射到:

  • “下一跳”路由器(路径中的下一台路由器)。
  • 出接口(用于发送数据包的物理端口)。
  • 度量值(例如跳数、带宽、延迟),用于确定“最佳”路径。

路由决策过程:

  1. 检查IP头部:TTL、校验和等。
  2. 最长前缀匹配:将目的IP地址与最具体的网络进行匹配。
  3. 选择最佳路径:基于成本最低的度量值。
  4. 更新头部:
    • 递减TTL值。
    • 将目的MAC地址替换为下一跳路由器的MAC地址。
  5. 转发到下一跳路由器。

这个过程会逐跳重复,直到数据包到达目标所在的本地互联网服务提供商。

7. 最终交付与解封装

最后一台路由器确定该数据包属于某个直接连接的局域网段:

  1. 它将帧转发到交换机或直接转发到服务器。
  2. 服务器接收到帧后开始解封装:
    • 数据链路层 → 网络层 → TCP段 → HTTP消息。
  3. 该消息最终由应用程序(例如Nginx或Apache等Web服务器)处理。

8. 服务器如何响应

服务器的响应遵循与请求相同的封装过程,但源IP地址、目的IP地址以及源端口、目的端口是反向的(例如,源IP地址:谷歌服务器的IP地址;目的IP地址:经过PAT转换后的个人电脑私有IP地址)。

  • 服务器生成响应并发送回去。
  • 在第一台路由器(PAT网关)处,利用PAT表进行映射:203.0.113.10:50000 → 192.168.1.100:8080。
  • 路由器相应地重写IP地址和端口字段,并将数据包转发回个人电脑。
http://www.xdnf.cn/news/15541.html

相关文章:

  • 微信小程序翻书效果
  • Linux修改ssh默认端口,禁止root登录,禁止密码登录并同时开启公钥认证
  • 笔试——Day9
  • 【机器学习深度学习】大模型推理速度与私有化部署的价值分析
  • 前端开发常见问题技术文章大纲
  • 企业级实时流处理:Kafka Streams完整解决方案
  • html js express 连接数据库mysql
  • MCP 第三波升级!Function Call 多步调用 + 流式输出详解
  • document.documentElement详解
  • LVS的集群技术和分布式
  • HTTP 四种常见方法
  • 飞桨AI Studio云编程环境搭建
  • redis实现红锁
  • MCP终极篇!MCP Web Chat项目实战分享
  • 【牛客刷题】小红的数字删除
  • 算法:投票法
  • VUE export import
  • MinIo快速入门
  • JJ20 Final Lap演唱会纪念票根生成工具
  • MIPI DSI (一) MIPI DSI 联盟概述
  • Oracle 学习笔记
  • Docker入门基础
  • GaussDB between的用法
  • 文心一言 4.5 开源深度剖析:中文霸主登场,开源引擎重塑大模型生态
  • 用基础模型构建应用(第九章)AI Engineering: Building Applications with Foundation Models学习笔记
  • # 检测 COM 服务器在线状态
  • python 双下划线开头函数
  • 网络协议和基础通信原理
  • Go泛型完全指南:从基础到实战应用
  • Fluent许可文件安装和配置