1. 192.168.1.2 欲访问 7.7.7.7 的 HTTP 服务器
2. 192.168.1.2 的 HTTP 客户端构造完成 HTTP 请求后通过套接字送由系统 TCP/IP 协议栈进行 TCP/IP 封包并开始握手?
3. 192.168.1.2 根据子网掩码算得自身与 7.7.7.7 处于不同的 IP 子网(《计算机网络》中管 VLSM 子网(无类网络)叫超网),因此需要查系统路由表(去往 7.7.7.7 的路由是多少?)
4. 根据系统路由表(终端主机的系统路由表通常就是默认路由去网关,根据最长匹配原则,去往 7.7.7.7 的下一跳是默认网关 192.168.1.1)
5. 开始依次执行 TCP、IP、以太网封包(封包顺序为自顶向下)
6. 首先执行 TCP 封包,flags 置 SYN 已经确定,目的端口 TCP 80,源端口由系统协议栈随机分配,源目 IP 分别为 192 和 7777(构造 TCP 伪首部需要源目 IP 信息),根据伪首部、真首部和 payload 算得 TCP 报文校验和,TCP 封包完成
7. 然后执行 IP 封包,源目 IP 192 和 7777
8. 最后执行以太网封包,源 MAC 为 192.168.1.2 的出接口网卡 MAC,目的 MAC 为下一跳 IP 的 MAC(也就是 192.168.1.1 的路由器接口 MAC),系统会首先查找系统 ARP 表(包含静态 ARP 和 ARP 缓存),如果没查到则发送 ARP 请求进行 ARP 学习
9.主机发送ARP数据报给交换机,交换机通过地址学习记录端口和MAC地址,并且将ARP请求数据包泛洪
10.??ARP广播包到达其他三台主机丢弃,路由器接收到ARP发现目的IP是自身,发送ARP单播回应包给交换机,交换机转发给192.168.1.2,主机将MAC地址记录ARP表中
11. 完成以太网封包后,首个 TCP SYN 握手包送由网卡发出(此时尚未携带任何 HTTP 载荷)
12.192.168.1.2发送TCP包给服务器,服务器接收到主机发送SYN,将SYN中的Seq+1作为自己的ACK,并且发送自己的SYN
13. 主机接收到SYN+ACK后将SYN再+1作为自己的ACK再给服务器
14. TCP 握手顺利完成后,开始发送 payload 携带 HTTP 请求载荷的 TCP 报文
|