您的位置:首页 > 理论基础 > 计算机网络

《深入理解Linux网络技术内幕》阅读笔记(十九)

2015-10-09 00:41 651 查看
如果封包没有被分段,offset=0且MF=0.相反的,如果我们手上有一个片段,则满足下列条件:

1.第一个片段有offset=0且MF=1.

2.界于第一个片段和最后的片段之间的所有片段,这两个字段都为非0.

3.最后一个片段有MF=0且offset为非0.

2.4版以前的内核有个名为ip_build_xmit_slow的函数,会以倒序方式为本地产生的封包建立并传输IP片段。这种做法有一些有点:

1.最后一个片段是唯一可以通知接收者原有未分段封包尺寸的片段。尽可能早地知道这件事,有助于重组器对其内存的妥善运用。

2.重组器有可能更快建立起一个封包。片段会以偏移量递增的次序加入一个链表,如果每个片段都比其后片段晚到,则片段就可迅速加入链表头部。

ip_fragment:把等待传输的缓冲区转变成实际的封包。





片段存储在一个会定期改变的hash表内。每个封包都会关联一个定时器。如果定时器到期,该封包就会被删除。每个片段都会检查是否损毁,以及是否和先前接收的片段彼此重叠。

该hash链表定期重新组织表中所有的IP片段,来尽可能避开DoS攻击。重新组织是用一个定时器实现的,默认每10分钟到期一次。每次执行时,会产生一个随机数,然后使用这个随机数重算hash值,并以此重组hash表内的每个元素。



内核为IP片段实现两种垃圾收集:

1.系统内存使用限度

2.重组定时器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: