社区
Linux_Kernel
帖子详情
对IP进行强制分片,发现PING包大量丢包,不知什么原因
晋南大黄牛
2011-11-12 02:17:24
在有线驱动中对接收到的主机的IP报文进行强制分片,从STA向主机PING包,然后在STA与主机同时抓包,发现STA ping包时,如果一个正常收到回复(回复的报文是分片的),之后就会丢好几个包,从主机上抓包看,发现STA发送的request包在主机上没有收到,只有当主机收到1个LLC报文,主机才会正常接收与回复。因此,怀疑在进行分片时,哪些参数没有设置对,请各位大侠给指点一下!
...全文
850
6
打赏
收藏
对IP进行强制分片,发现PING包大量丢包,不知什么原因
在有线驱动中对接收到的主机的IP报文进行强制分片,从STA向主机PING包,然后在STA与主机同时抓包,发现STA ping包时,如果一个正常收到回复(回复的报文是分片的),之后就会丢好几个包,从主机上抓包看,发现STA发送的request包在主机上没有收到,只有当主机收到1个LLC报文,主机才会正常接收与回复。因此,怀疑在进行分片时,哪些参数没有设置对,请各位大侠给指点一下!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jiahehao
2011-11-16
打赏
举报
回复
"看它ping通的时候,会重新做一次arp过程。"这个细节很有意思。做ARP动作,表示它只知道对方的目的IP而不知道MAC。那你每次分包后,把每个包的源/目的IP,MAC全打出来。观察是不是全是一样的?
再用“arp -a”,看你的系统学习到了对方的MAC没有?或者你设的多长时间会刷新一次ARP表?
晋南大黄牛
2011-11-16
打赏
举报
回复
我打了一下客户端发送过来的包,发现客户端的包传不上来,而我只是改的下行的啊!觉得很是奇怪,而arp -a,发现没有学习到!而这个应该与学习的时间长短没有关系了吧,我把这段代码去掉,就可以正常ping通!
晋南大黄牛
2011-11-15
打赏
举报
回复
只拆分数据部分。
代码段,还请大侠指点:
{
hlen = iph->ihl * 4;
left = skb->len - hlen-ETH_HLEN;
ptr = raw + hlen+ETH_HLEN;
offset = (ntohs(iph->frag_off) & 0x1fff) << 3;
not_last_frag = iph->frag_off & htons(IP_MF);
while(left > 0){
len = left;
if (len > 1424)
len = 1424;
if (len < left) {
len &= ~7;
}
if ((skb2 = alloc_skb(len+hlen+ETH_HLEN,GFP_ATOMIC)) ==NULL)
{
printk("IP: frag: no memory for new fragment!\n");
return 0;
}
ip_copy_metadata_copy(skb2, skb);
skb_put(skb2, len + hlen+ETH_HLEN);
if (skb->sk)
skb_set_owner_w(skb2, skb->sk);
memcpy(skb2->data, skb->data, hlen+ETH_HLEN);
memcpy(skb2->data+hlen+ETH_HLEN, skb->data+ptr,len);
skb2->nh.raw = skb2->data+ETH_HLEN;
skb2->h.raw = skb2->data + hlen+ETH_HLEN;
skb2->mac.raw = skb2->data;
left -= len;
iphnew = (struct iphdr *)(skb2->data + ETH_HLEN);
iphnew->frag_off = htons((offset >> 3));
if (offset == 0)
ip_options_fragment_copy(skb);
if (left > 0 || not_last_frag)
iphnew->frag_off |= htons(IP_MF);
ptr += len;
offset += len;
iphnew->tot_len = htons(len + hlen);
ip_send_check(iphnew);
ret = dev_queue_xmit(skb2);
}
if (skb != NULL)
kfree_skb(skb);
return 1;
}
}
晋南大黄牛
2011-11-15
打赏
举报
回复
拆分数据后,每个分片都有ETH头与IP头的,抓包的时候能抓到ping通的包,只是ping通后,之后会有很多包会丢,然后过了十个包左右,又会通一个包。看它ping通的时候,会重新做一次arp过程。不知道在分包的时候是不是参数没设置对还是怎么的?
充电宝111
2011-11-15
打赏
举报
回复
只拆分数据部分?拆分后每个都有头么?没头当然丢了
jiahehao
2011-11-14
打赏
举报
回复
你是如何分片的?只拆分包的数据部分?请帖代码。
【Linux】Linux
ping
参数解析/禁止报文
分片
-M/ 设置
包
长-s/ 指定出接口-I/ 指定
ping
包
个数-c / 发送
ping
包
时间间隔-i
不管在windows平台,还是在linux平台,
ping
都是非常常用的网络命令;
ping
命令通过ICMP(Internet控制消息协议)工作;
ping
可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。 一、
ping
用法:
ping
命令运行在命令提示符终端,用法为:“
ping
参数 目标主机”。其中参数为零到多个,目标主机可以是
IP
或者域名。 1 2 3 4 Usage:
ping
[-aAbBdDfhLnOqrRUvV] [-c co...
【网络篇】第十八篇——
ping
的工作原理
当遇到问题的时候,总不能死的不明不白,没头没脑的作风不是计算机网络的风格。如果跨网段的话,还会涉及网关的转发、路由器的转发等等。
ping
是基于ICMP协议工作的,所以要明白
ping
的工作原理,就要理解ICMP协议。地址,选择路由的下一跳,还有每经过一个路由器到达一个新的局域网,需要换 MAC。收到这个消息的主机借此了解在整个线路的某一处发生了拥堵的情况,从而增大。协议访问对端主机时,能找到对端的主机了,可是对端主机的防火墙已经禁止。当路由表中没有该主机的信息,或者该主机没有连接到网络,那么会通过。
网络
丢
包
故障如何定位?如何解决?
引言本期分享一个比较常见的网络问题--
丢
包
。例如我们去
ping
一个网站,如果能
ping
通,且网站返回信息全面,则说明与网站服务器的通信是畅通的,如果
ping
不通,或者网站返回的信息不全等,则很可能是数据被
丢
包
了,类似情况想必大家都不陌生。针对网络
丢
包
,本人提供一些常见的
丢
包
故障定位方法,希望能够帮助大家对网络
丢
包
有更多的认识,遇到
丢
包
莫要慌,且跟着一起来涨姿(知)势(识)···什么是
丢
包
数据在Internet上是以数据
包
为单位传输的,单位为字节,数据在网络上传输,受网络设备,网络质量等
原因
的影响,使得接收到
干货!网络
丢
包
故障定位全景指南
极客星球:深入理解网络子系统欢迎加入极客星球,一起学习,快速成长:修炼基本功,打好高薪基础:分享基础技术深度理解,基础概念深度解析,经典书籍推荐和读书分享,经典源码阅读分享等,不定期直播分享,问题答疑解惑;扩展技术深度和技术视野:分享热门技术发展,国内外大厂技术内幕,业界解决方案;校招/社招免费就业指导:模拟面试,简历修改,面试题分析,学习路线就业指导,面试指导等;职场普升/技术专家:分享各种不同...
深度好文:云网络
丢
包
故障定位,看这一篇就够了~
深度好文:云网络
丢
包
故障定位,看这一篇就够了~ https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ Alex高效运维今天 来源:本文经授权转自公众号“职场重生”,(ID:zccs2021) 作者简介: 冯荣,腾讯云网络高级工程师,腾讯云网络核心开发人员。 引言 本期分享一个比较常见的⽹络问题—
丢
包
。例如我们去
Ping
⼀个⽹站,如果能
Ping
通,且⽹站返回信息全⾯,则说明与⽹站服务器的通信是畅通的,如果
Ping
不通,或者⽹..
Linux_Kernel
4,436
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章