本文以简化的网络架构为例,详细介绍了当你在浏览器中输入网址(例如www.google.com)并按下回车键后,TCP段的完整传输过程。我们将探讨DNS解析、ARP、TCP/IP封装、PAT和路由如何协同工作,将数据从个人电脑通过局域网和广域网发送到谷歌的服务器。需要注意的是,本文为了便于学习,展示的是一个基础案例,而实际应用中的网络实现往往更为复杂。
1. DNS解析:将域名转换为IP地址
当你输入www.google.com这样的域名时,浏览器首先需要将其解析为IP地址才能发起通信,步骤如下:
2. 准备建立TCP连接
在发送数据包之前,系统需要做一些准备工作:
- 如果目标设备与本机在同一子网,可通过ARP协议获取其MAC地址。
- 如果目标设备在不同子网(通常情况如此),数据包必须经过默认网关转发,因此需要获取网关的MAC地址。
系统如何获取网关的MAC地址:通过ARP(地址解析协议)
3. 数据封装:四层协议栈
- 例如,GET / HTTP/1.1请求。
- 添加源端口和目的端口(例如,40000 → 443,443是HTTPS的默认端口),源端口是操作系统分配的动态端口(1024-65535,例如40000)。
- 必要时对数据进行分段。
- 添加源IP地址和目的IP地址。
- 其他字段:TTL(生存时间)、校验和等。
- 添加源MAC地址和目的MAC地址。
- 包含一个带有FCS(帧校验序列)的尾部,用于错误检查。
最后,完整的以太网帧会被发送到局域网交换机。
4. 通过交换机发送到网关(第二层)
交换机维护着一张MAC地址表。例如:00:1A:2B:3C:4D:5E → Gi0/1, VLAN 10,表示拥有该MAC地址的设备连接在Gi0/1端口。
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网络映射到:
- “下一跳”路由器(路径中的下一台路由器)。
- 出接口(用于发送数据包的物理端口)。
- 度量值(例如跳数、带宽、延迟),用于确定“最佳”路径。
路由决策过程:
- 递减TTL值。
- 将目的MAC地址替换为下一跳路由器的MAC地址。
这个过程会逐跳重复,直到数据包到达目标所在的本地互联网服务提供商。
7. 最终交付与解封装
最后一台路由器确定该数据包属于某个直接连接的局域网段:
- 数据链路层 → 网络层 → TCP段 → HTTP消息。
8. 服务器如何响应
服务器的响应遵循与请求相同的封装过程,但源IP地址、目的IP地址以及源端口、目的端口是反向的(例如,源IP地址:谷歌服务器的IP地址;目的IP地址:经过PAT转换后的个人电脑私有IP地址)。
- 服务器生成响应并发送回去。
- 在第一台路由器(PAT网关)处,利用PAT表进行映射:203.0.113.10:50000 → 192.168.1.100:8080。
- 路由器相应地重写IP地址和端口字段,并将数据包转发回个人电脑。
评论前必须登录!
注册