IP分片重组的问题

在IP层协议处理IP分片重组时,会调用ip_defrag() -> ip_frag_queue()
在ip_frag_queue函数中有关于分片与前个分片或后个分片重叠的情形,比如与前个分片重叠的处理:
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if  (prev) {
     int  i = (FRAG_CB(prev)->offset + prev->len) - offset;
 
     if  (i > 0) {
         offset += i;
         err = -EINVAL;
         if  (end <= offset)
             goto  err;
         err = -ENOMEM;
         if  (!pskb_pull(skb, i))
             goto  err;
         if  (skb->ip_summed != CHECKSUM_UNNECESSARY)
             skb->ip_summed = CHECKSUM_NONE;
     }
}

我想问的是,在什么情况下会发生分片间重叠的情况?IP分片时应该都是分割的不会重叠的


内核对分片队列fragments限制了内存大小的,应该不会被溢出

C/C++ code
?
1
2
if  (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
     ip_evictor(net);

不明白的还是如果重叠攻击才会导致分片重叠,直接在IP重组时丢弃掉不行吗?


一定不只是攻击行为,分片重叠一定还有其他用途,可我现在只能举出这个例子。
现在的内核一定不会有溢出的可能,限制ip碎片的大小应该不是关键,最后ip包要整合在一起送给上一层协议处理,ip包声明的长度和实际送上来的数据长度就有可能出现偏差。
重叠部分的大小不确定,这个丢弃的工作也不好完成把。个人认为ip层的数据应该尽量多的交给上层,这样上层控制才能更灵活。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值