首页 文章

TCP如何分割其数据

提问于
浏览
2

我们都知道TCP是一种流媒体协议 .

与UDP不同,它保证整个客户端消息将作为单个数据报传递给服务器(我们正在谈论传输层,因此此时避免使用MTU),TCP可以将一个"message"(传递给 send 函数的数据)分段)到几个较小的数据包,所以我们必须使用我们自己的分隔符作为消息的边界 .

问题是 - TCP如何选择哪些数据应该分段以及大小?它是否使用任何通用/标准方法?

1 回答

  • 2

    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选项控制参数:

    如果在连接 Build 之前设置了此选项,它还会将初始数据包中公布的MSS值更改为另一端 . 大于(最终)接口MTU的值无效 . TCP还将对所提供的值施加最小和最大边界 .

相关问题