在TCP连接期间,如果客户端发送一个大小大于握手期间同意的MSS值的段,会发生什么?连接是否终止?它会导致服务器出错吗?
例如 - 让握手期间的客户同意其MSS值为1200,然后发送大小为1600的数据包。
感谢任何进一步的阅读链接。
答案 0 :(得分:1)
MSS值是为了避免数据包碎片。它被计算为MTU-IP报头(20字节)-TCP报头(20字节),其中MTU是接口的硬件限制。比如说,以太网上的常规MTU为1500,我们的MSS值为1460.
现在,如果有问题的服务器不是你正在摆弄的东西,它宣布MSS = 1200,你应该认为这是一个物理约束。也就是说,如果您的客户端应用程序(通过标准API)发送大小为1600字节的缓冲区,则内核将形成两个数据包。
如果有问题的服务器是您的,并且它具有接收大MTU的物理能力(例如,1640),但由于某些模糊的原因,您强制它的TCP宣布MSS = 1200,然后您的客户端使用MSS = 1600无视公告,这非常好:您将看到没有错误。您可以找到一些有趣的相关实验,例如: http://hacked10bits.blogspot.co.uk/2013/11/forcing-higher-mss-to-improve-tcp.html