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

如果封包没有被分段,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.重组定时器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值