1. 发送数据包之前,需要知道目的域名代表的 ip 地址
    1. 向 DNS 服务器(53端口)发送一个 DNS 数据包,DNS 服务器会响应目的域名的 ip 地址给本机
  2. 浏览器会按照应用层的 http 协议,封装一个应用层数据包,内容为 http 请求报文
  3. 接着封装一个 tcp 数据包 (标头 + 数据;前者包含接收者的端口号、发送者的端口号,20kb,后者为 http 请求报文)
  4. 接着封装一个 ip 数据包(标头 + 数据;前者包含接收者的ip地址,发送者的ip地址,20kb,后者为 tcp 数据包)
  5. 接着封装一个以太网数据包(标头 + 数据;前者包含发送者和接收者的 MAC 地址,数据为 ip 数据包)
    1. 由于以太网数据包总长度最长为 1500 kb,所以会切分数据包为多个以太网数据包
    2. 在封装以太网数据包之前会判断目标 ip 是否和本机为同一子网,决定了以太网标头写入的目标MAC地址的内容 和 转发的目的地
      1. 是,则目标 MAC 地址即为目标机的 MAC 地址(此处省去ARP介绍),通过交换机进行转发
      2. 否,则目标 MAC 地址即为网关(一般是路由器)的 MAC 地址,通过网关判断转发
        1. 网关会根据自己的 ARF cache(?) 等操作会修改以太网数据包中的接收者 MAC 地址
          1. 接收者 MAC 地址可能是另一个网关的 MAC 地址,也可能是目标机的 MAC 地址
        2. 最终会通过目标机的交换机将该以太网请求报进行广播,目标机进行响应
  6. 服务器将一组以太网数据包进行组合,层层解包,获得 http 请求报文,然后进行后续处理

数据包的图

image.png