红联Linux门户
Linux帮助

扑朔迷离~~之~~~~~~TCP分片

发布时间:2007-03-08 21:46:54来源:红联作者:dpuhook
扑朔迷离~~之~~~~~~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吗?
文章评论

共有 1 条评论

  1. dpuhook 于 2007-03-11 15:04:54发表:

    哪位高手帮小弟解惑?