如何计算 TCP 中的最大段大小?
最大段大小是指本地主机在单个数据包中接受的最大段的大小。它表示主机在单个 TCP 段中可以接受的最大数据量。
为了建立 TCP 连接,发送方和接收方都指示他们可以接受的最大段大小。通过 TCP 连接发送数据包时,发送方根据接收到的 MSS 减小数据包的大小。它对于具有少量内存的设备很有用,因为它允许设备对其将接收的数据包的大小设置限制。
网络驱动程序知道直接连接网络的最大传输单元。最大传输单元是可以跨数据链路层传输的最大尺寸帧。 IP 向网络驱动程序询问最大传输单元的值,并在以下关系中使用它来计算最大数据报数据大小:
MDDS = MTU - IP_HL
where,
MDDS = Maximum Datagram Size
MTU = Maximum Transmission Unit
IP_HL = IP Header Length
最大数据报数据大小是指 IP 数据包中接受的最大数据量。
现在,TCP 从 IP 询问最大数据报数据大小的值,并在以下关系中使用它来计算最大段大小:
MSS = MDDS - TCP_HL
where,
MSS = Maximum Segment Size
MDDS = Maximum Datagram Data Size
TCP_HL = TCP Header Length
示例:假设最大传输单元的有效负载为 1500B,标头包含有关数据包数量的信息,尾部表示数据链路层中数据包流的结束,TCP 和 IP 标头的大小均为 20B。因此,我们可以按照给定的步骤找到最大段大小:
- 网络层接收 1500B 的负载,分为 1480B 最大数据报数据大小负载和 20B IP 头。这意味着通过网络层传输的IP数据包最多可以存储1480B的信息,并有20B的报头来存储IP版本、源地址、目标地址和数据包的生存时间等信息。
- 传输层接收 1480B 的有效载荷,分为 1460B 最大段大小和 20B TCP 头。这意味着通过传输层传输的 TCP 数据包最多可以存储 1460B 的信息,并有 20B 的包头来存储源端口、目标端口、序列号、确认号、包头长度、校验和、窗口大小、紧急指针和保留位等信息。
因此,最大段大小将为 1460B,即可以在单个 TCP 数据包中接收 1460B 数据。
必须通过考虑以下性能问题来选择最大段大小:
- 开销管理:如果 MSS 太低,则会导致带宽使用效率低下,因为存储在段中的数据量与效率不高的标头相比。
- IP 分片:如果 MSS 太大,则会导致大 IP 数据报需要分片才能传输。分片会降低效率并增加部分 TCP 段丢失的机会,导致需要重新传输整个段。