通过 Socket 系统接口,链接到一个TCP服务器,那么在链接成功之后会被配置一个从本地端到目的端最佳的TCP_MSS大小。
我们通过这个特点,即可轻松的实现,链路MTU大小发现功能,在不依赖ROOT管理员权限的情况下,推算出一个较为OK的MTU大小。
一般来说,TCP在服务器SYN|ACK的时候,指定的TCP选项设置的最大分段大小,通常是需要-12字节的,这是因为在PUSH/ACK分段的时候头部有扩展12字节的TCP选项,两个NOP填充,一个TIMESPAN时间戳。
所以:
当如上图,TCP选项协商设置最大分段大小为;1332,那么意味着TCP_MSS为1320,扣除TCP PUSH/在协议头上额外设定的12字节,一个TCP选项占四个字节,三个则12字节。
所以:
我们只要需要通过 socket 接口,获取 TCP_MAXSEG 的值,加12,那么就是TCP的大小,IPV4头20字节,那么意味着;
MTU=1320+12+20=1352,则:从本机到目的主机最