在基于TCP/IP结构,HTTP1.1的网络中,一条消息从A主机发送到B主机收到,会经历哪些呢?

“历程”

  • 应用层(HTTP, HTTP报文)

    HTTP报文是基于文本的,是没有长度限制的。也就是说资源有多大,就会一次性都会发过去。HTTP报文的首部行之间是用换行回车来分隔。另外,发送过去的报文实际内容就是将一个个的字符用ASCII码来表示。

  • 运输层(TCP,报文段)

    如果TCP需要发送一个很大的数据,TCP通常会把文件化成长度为MSS(注1)的若干块再发送。

    会将长报文划分成短报文,并提供拥塞控制机制

    TCP报文的首部一般是20字节,包括端口号,序号(注3)和确认号(注4),以及做验证的一些字段。

  • 网络层(IP, 数据报)

    增加了源IP地址和目的IP地址;同时规定了数据报长度(包括首部长),理论上是65535字节

    有可能从发送方到接受方这一路径中每段链路使用的链路层协议不同,且这些协议具有不同的MTU(注2),因此就需要对ip数据报进行分片。

    只有完全重构为初始ip的数据报才会被交付到上层,否则会被直接丢弃。如果运输层是TCP,那么TCP会要求源重传。

  • 链路层(帧)

    传输的数据量有固定大小,不同的链路层协议能传送的最大数据量不同。可见参考1

    会增加源mac地址和目的mac地址。

  1. MSS: 最大报文段长度,不包括TCP报文的头部。受最大链路层帧长度MTU的限制。
  2. MTU: 最大传输单元,链路层协议不同,议具的MTU也有可能不同,其中以太网和PPP链路层的MTU是1500字节。
  3. 序号:这个分组的第一字节排在整个消息的第几位。
  4. 确认号:期望下次从主机那儿获得字节的序号。

参考

  1. 链路层常见报文格式及长度