扑朔迷离~~之~~~~~~TCP分片
遇见一个奇怪的情况。排查此问题颇费一番周折。
TCP 发出超过1500 的大包!!!
SUSE linux系统
2.6.7-201-bigsmp 内核
上层业务层只有两种报文,一种长度100,一种300 ,每次发送都是直接调用 send 非阻塞式发送。
非常简单的TCP socket ,没有设置任何属性,保留 nagle 算法。
我奇怪的是,TCP每次发送数据的时候,都会严格用MSS 来切分报文段。所以发送出去的TCP报文长度不会超过1460 。
但是实际情况,用 tcpdump 抓包 却看到了 IP分片的包。(该包 的 more fragment 字段置为1 ,且紧跟着的字段 的 IP Identification 字段和前一个一致)该类报文最大长度达到了2900 。
在 IP_LOCAL_OUT 处做了一个钩子函数,通过打印 IP TOTAL LENGTH 字段,观察到 TCP 扔给 IP 层的包就已经超过了 1500 ,最大达到 2900
哪位高手可以解释一下,这是什么原因?
难道 2.6内核 本来就有这个bug吗?


dpuhook 于 2007-03-11 15:04:54发表:
哪位高手帮小弟解惑?