我们都知道TCP是一种流媒体协议 .
与UDP不同,它保证整个客户端消息将作为单个数据报传递给服务器(我们正在谈论传输层,因此此时避免使用MTU),TCP可以将一个"message"(传递给 send 函数的数据)分段)到几个较小的数据包,所以我们必须使用我们自己的分隔符作为消息的边界 .
send
问题是 - TCP如何选择哪些数据应该分段以及大小?它是否使用任何通用/标准方法?
TCP使用名为Maximum Segment Size的参数:
最大段大小(MSS)是TCP标头的选项字段的参数,用于指定计算机或通信设备可在单个TCP段中接收的最大数据量(以字节为单位) . 它不计算TCP标头或IP标头 . 包含TCP段的IP数据报可以是单个分组内的自包含的,或者可以从几个分段的片段重建;无论哪种方式,MSS限制都适用于最终重建的TCP段中包含的数据总量 . 默认TCP最大段大小为536.如果主机希望将最大段大小设置为默认值以外的值,则最大段大小将指定为TCP选项,最初在TCP握手期间在TCP SYN数据包中 . Build 连接后,无法更改该值 .
如果启用path MTU discovery,则将MSS设置为减去TCP标头大小 .
在Linux上 TCP_MAXSEG socket选项控制参数:
TCP_MAXSEG
如果在连接 Build 之前设置了此选项,它还会将初始数据包中公布的MSS值更改为另一端 . 大于(最终)接口MTU的值无效 . TCP还将对所提供的值施加最小和最大边界 .
1 回答
TCP使用名为Maximum Segment Size的参数:
如果启用path MTU discovery,则将MSS设置为减去TCP标头大小 .
在Linux上
TCP_MAXSEG
socket选项控制参数: