Chinaunix

标题: Ping包问题 [打印本页]

作者: geniusmen    时间: 2008-11-17 20:53
标题: Ping包问题
高手们:
       你们知道在LINUX下为什么PING大包PING不通吗? 我设置了MTU=1000
            
             我用的是REDHAT9.0  ,我编写的是一个MODEM驱动,用pppd, gprs拨号上网,能获得IP,也能PING通150个字节以内的包,但是问题是:我PING150个字节以

上包的时候,永远超时,一个包都发不出去;如果PING1000或者更大的字节的时候,提示usb-uhci.c: interrupt, status 3, frame#1704

    我认为是网络给我的数据,经我的模块处理后,写入端口,端口传给PPPD,可能是在写入端口USB的时候端口挂了。

     针对这样的情况,我目前做的处理是:

     网络下发给模块的数据,经模块处理后,我也把模块处理后的包按100字节分包写入端口再给给PPPD;  

     可是问题同样存在,MTU我是设置好了的,和这个没有关系,总的问题只出在模块写数据到USB和pppd从USB取数据这一段;

     烦请群主和所以朋友帮我分析分析,我先在次谢过了!!!!!!!
  
     祝愿大家在LINUX这个家庭里快乐开心,身体健康,HAPPY每天  ^-^

[ 本帖最后由 dreamice 于 2008-11-24 20:19 编辑 ]
作者: dreamice    时间: 2008-11-17 21:18
标题: 回复 #1 geniusmen 的帖子
我不是高手!

我不知道你这个端口死了是一个什么意思?网络断了还是数据进不来出不去?
作者: Godbach    时间: 2008-11-17 21:28
此贴有点嚣张,到底是问问题的,还是挑衅来了。
作者: sep    时间: 2008-11-17 21:46
大哥,既然说是高手才能进来,就在标题注明一下啊
搞到我进来了,很不好意思啊
放心,回了这个回复,我永不敢进这个贴了
作者: dreamice    时间: 2008-11-17 22:39
希望楼主不要发这么雷的帖子。技术论坛在于交流技术,不要动不动就高手低手这样来论。
作者: vermouth    时间: 2008-11-18 00:21
走路要看路有多宽,还有进出口有多大。
作者: geniusmen    时间: 2008-11-18 00:21
喔!
不好意思,我没有那个意思喔,嗯,我的问题是我PING包的时候受到限制,最多只能有125个字节,然后上网也上不了。我用的是pppd拨号  GPRS上网

我抓的LOG,发现端口不断的重复接受intel的部分数据!!PING外网也只能是小于125个字节的包,其它的都不通!

小弟有什么对不住的地方,请大家海涵,小弟知道错了,下次改,可以吗? 呵呵 !^_^ !
作者: changzi100    时间: 2008-11-18 07:57
有意思啊!呵呵

上厕所没带纸!
作者: eveson    时间: 2008-11-18 10:40
原帖由 geniusmen 于 2008-11-17 20:53 发表
高手们:
       你们知道在LINUX下为什么PING大包PING不通吗? 我设置了MTU=1000
            
             可是最多只能PING到150个字节的包!!(我是用PPPD GPRS拨号上网的,写的一个MODEM驱动!)
   ...


问个问题就问,那那么多废话啊
作者: zhj1011    时间: 2008-11-18 10:45
标题: 回复 #1 geniusmen 的帖子
做人不可犯众怒啊 呵呵
作者: dreamice    时间: 2008-11-18 12:59
看来大家都有必要学习一下《提问的智慧》
作者: luo118    时间: 2008-11-18 14:20
lz 认错了,大家就开一面吧!

lz 把你抓的log 和错误信息,和事情来龙去脉讲清楚出来,让大家分析。
作者: geniusmen    时间: 2008-11-19 12:28
呜呜呜呜!!你们太让我感动了。谢谢LUO118和管理!!呜呜,谢谢你们,让我有提问和继续探讨问题的勇气…………

   呵呵,我再次把问题说一遍,麻烦大家发表一下看法,谢谢!!

  我用的是REDHAT9.0  ,我编写的是一个MODEM驱动,用pppd, gprs拨号上网,能获得IP,也能PING通150个字节以内的包,但是问题是:我PING150个字节以

上包的时候,永远超时,一个包都发不出去;如果PING1000或者更大的字节的时候,提示usb-uhci.c: interrupt, status 3, frame#1704

    我认为是网络给我的数据,经我的模块处理后,写入端口,端口传给PPPD,可能是在写入端口USB的时候端口挂了。

     针对这样的情况,我目前做的处理是:

     网络下发给模块的数据,经模块处理后,我也把模块处理后的包按100字节分包写入端口再给给PPPD;  

     可是问题同样存在,MTU我是设置好了的,和这个没有关系,总的问题只出在模块写数据到USB和pppd从USB取数据这一段;

     烦请群主和所以朋友帮我分析分析,我先在次谢过了!!!!!!!
  
     祝愿大家在LINUX这个家庭里快乐开心,身体健康,HAPPY每天  ^-^

[ 本帖最后由 geniusmen 于 2008-11-19 12:31 编辑 ]
作者: dreamice    时间: 2008-11-19 12:31
原帖由 geniusmen 于 2008-11-19 12:28 发表
呜呜呜呜!!你们太让我感动了。谢谢LUO118和管理!!呜呜,谢谢你们,让我有提问和继续探讨问题的勇气…………

   呵呵,我再次把问题说一遍,麻烦大家发表一下看法,谢谢!!

  我用的是REDHAT9.0  , ...



兄弟,我看出了你能说会道的本领
作者: geniusmen    时间: 2008-11-19 12:34
管理, 你速度真快呀,我发帖子没有一分钟,你就回复了,晕,也太快了………… 麻烦管理帮我分析分析,小弟先谢过!!!

   感激万分,万分感激!
作者: dreamice    时间: 2008-11-19 12:38
标题: 回复 #15 geniusmen 的帖子
你要先检查一个问题:
发超过150字节的包时,程序是怎么处理的,会不会你的缓冲区溢出了?
作者: geniusmen    时间: 2008-11-19 12:47
嗯 管理的建议我也考虑过。认为是缓冲区溢出了。我最后把缓冲区调试为4096个字节,同事打印出实际包的大小,发现包最大也才1500左右,
  
  是不是需要LINUX平台上有什么配置呀,以前我拨号拨上,但是发不了PING命令,最后在/etc/ppp/options里面加了asyncmap 0xa0000后,就能

  PING通150字节以内的包,是不是LINUX也需要什么设置!
作者: dreamice    时间: 2008-11-19 12:50
原帖由 geniusmen 于 2008-11-19 12:47 发表
嗯 管理的建议我也考虑过。认为是缓冲区溢出了。我最后把缓冲区调试为4096个字节,同事打印出实际包的大小,发现包最大也才1500左右,
  
  是不是需要LINUX平台上有什么配置呀,以前我拨号拨上,但是发不了P ...


发最大1500应该是正确的,这个是不是允许最大发MTU的数据包,你可以查阅一下。
如果说缓冲区改成4096可以发超过150自己的包,这个应该可以肯定你原先的缓冲区是有问题的。
作者: geniusmen    时间: 2008-11-19 13:02
哎呀,我的管理呀,俺真是嘴笨,没有说清楚,呵呵!!
  
  我的缓存没有问题,是这样,网络给我下发最大的包有1500左右,然后我经过模块处理,模块也能吐出处理后的包信息,但是问题是在模块吐出

  的包给USB端口,然后PPPD从USB端口取东西,这个过程出错了,当网络下发很大的数据包给模块的时候,模块给USB端口的时候,PPPD好像没有取到
  
  USB端口的数据,并且好像这个USB端口突然挂了,提示上面USB-USHL.的提示;然后模块也突然挂了!

  缓存用到2个,第一个是网络给模块的数据的时候,有一个缓存,另外一个缓存是模块对网络下发的数据大包的时候,需要一个缓存帧,然后把这个数据经USB给

  pppd,这2个缓存都有足够的大!
作者: dreamice    时间: 2008-11-19 13:10
原帖由 geniusmen 于 2008-11-19 13:02 发表
哎呀,我的管理呀,俺真是嘴笨,没有说清楚,呵呵!!
  
  我的缓存没有问题,是这样,网络给我下发最大的包有1500左右,然后我经过模块处理,模块也能吐出处理后的包信息,但是问题是在模块吐出

  的包给 ...


看来你这个有点像是USB驱动的问题了
作者: geniusmen    时间: 2008-11-19 13:11
以前我拨上号,但是发不了PING命令,最后在/etc/ppp/options里面加了asyncmap 0xa0000后,就能

  PING通150字节以内的包,是不是LINUX也需要什么设置!???
   
    管理觉得这个问题能引起怀疑吗?????????
作者: dreamice    时间: 2008-11-19 13:14
原帖由 geniusmen 于 2008-11-19 13:11 发表
以前我拨上号,但是发不了PING命令,最后在/etc/ppp/options里面加了asyncmap 0xa0000后,就能

  PING通150字节以内的包,是不是LINUX也需要什么设置!???
   
    管理觉得这个问题能引起怀疑吗????? ...


你可以检查一下,这个问题我确实不是很了解
作者: luo118    时间: 2008-11-19 13:28
lz 你说的东西,偶还没有水平看懂,偶帮你顶起
作者: aobai    时间: 2008-11-20 09:06
看了标题才进来的
作者: geniusmen    时间: 2008-11-20 11:16
我找到问题出在哪了!!!我自己用PPPD的CHAT脚本拨号上网的时候,可以拨上号,但是就是PING不出去,我用WVDIAL拨号的时候,可以拨上去,

    但是PING不通150字节以外的包,我查了相关资料,说wvdial会初始化MODEM的相关信息,我是自己写的MODEM驱动,可能我没有初始化MODEM的想

    相关信息,问题主要是在设置modem串口的问题上,可能需要一些特殊设置,你们知道wvdial一般初始化MODEM的哪些信息吗???


    看法一:我自己写的MODEM驱动中,调用PPPD chat拨号的时候,没有初始化MODEM的串口相关设置,另外可能是串口缓存没有设置;

    看法二:在我调用wvdial的时候,可能是初始化缓存不够,所以让150字节以外的包丢失,或者是设置串口读取时间不够;


    大家帮帮我,wvdail究竟对MODEM做了什么???
作者: dreamice    时间: 2008-11-20 13:33
你可以查看一下,开源的MODEM驱动程序,应该有这方面的资料。
作者: geniusmen    时间: 2008-11-20 16:05
是不是串口缓存的问题呀???谁知道串口缓存的大小?我是在虚拟机上弄的,会不会串口缓存很小?????????
作者: dreamice    时间: 2008-11-20 16:56
标题: 回复 #27 geniusmen 的帖子
串口缓存通常是很小的
作者: geniusmen    时间: 2008-11-22 09:30
我查出来为什么我的用CHAT脚本拨号不能PING通而WVDIAL可以了,因为需要在/etc/ppp/options  里面加上asyncmap 0xa0000 意思是让控制符xon  x0ff
  
   特殊传输,呵呵 这样就可以了,但是还是有个很麻烦的事情呢,这个时候和wvdial 一样,不能ping通150字节以上的包,哇哇,离胜利就一步了,真是急煞我也!!

  兄弟朋友,Linux革命同志,帮帮出出主意,呵呵!!
作者: luo118    时间: 2008-11-22 10:34
恭喜你找到原因
作者: dreamice    时间: 2008-11-22 10:38
原帖由 geniusmen 于 2008-11-22 09:30 发表
我查出来为什么我的用CHAT脚本拨号不能PING通而WVDIAL可以了,因为需要在/etc/ppp/options  里面加上asyncmap 0xa0000 意思是让控制符xon  x0ff
  
   特殊传输,呵呵 这样就可以了,但是还是有个很麻烦的事情 ...



这个可能和你串口控制有关,不知道你的串口工作模式是怎样的
作者: geniusmen    时间: 2008-11-22 11:53
呵呵,管理,谢谢你一直对我的帮着呵呵,来抱抱!!…………(*^__^*)...嘻嘻!!!

我的串口是异步传输,无奇偶,一个停止位,现在能解决我的那个包为什么在自己的CHAT脚本拨不上号码的原因,嘻嘻,但是就剩下最后一个问题了

为什么只能PING通150字节以内的包,而且我抓LOG也看了,MODEM可以返回PING的包,可是PPD好像不识别,怎么可能呢?150以内的包都识别呀?奇怪
作者: voxxu    时间: 2008-11-22 13:37
我不愁,也不哭
作者: bluestome    时间: 2008-11-22 17:06
不是高手,进来瞧瞧!
作者: dreamice    时间: 2008-11-22 18:15
标题: 回复 #32 geniusmen 的帖子
你这个问题确实很让人费解啊
作者: 别无选择    时间: 2008-11-23 15:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: yizfml    时间: 2008-11-23 16:49
问个问题就问,那那么多废话啊
作者: geniusmen    时间: 2008-11-24 14:20
朋友们,我已经解决了不能传输大于150字节的问题,因为我PING的包里面含有部分特殊字符,这样PPPD是识别不了的,所以我的驱动中得对

  这部分内容做转移,现在就是为什么在1000字节左右的包的时候,设备USB端口会挂掉,LOG为:

  usb-uhci.c: interrupt, status 3, frame# *****

   在google上查了,没有什么收获,好像这个是USB驱动的问题!
作者: dreamice    时间: 2008-11-24 15:01
标题: 回复 #1 geniusmen 的帖子
请不要随便改标题,另外,发帖也不要这么彪悍的言辞吧
作者: geniusmen    时间: 2008-11-27 11:05
朋友们,usb-uhci.c: interrupt, status 3, frame# *****

是什么错误呀,我在向串口写东西的时候,提示这个信息,然后串口就挂了,得重新启动,请指教谢谢!!!
作者: dreamice    时间: 2008-11-27 11:13
又是usb,又是串口,还有中断,这个真是够复杂的
作者: geniusmen    时间: 2008-11-28 12:49
莫名其妙呀,我头都大了,我串口死了,以为是串口缓存不行或者是强行写入数据有问题,

最有我加了一个阻塞,当可以写数据的时候才写,可是还是提示上面的错误

usb-uhci.c: interrupt,status 3,frame# 数字

我在GOOGLE上查了没有查到!真是焦头烂额!
作者: dreamice    时间: 2008-11-28 15:57
标题: 回复 #42 geniusmen 的帖子
我觉得你还是根据你的板子,加一些调试信息,一层一层定位问题,不一定别人跟你遇到同样的问题,所以很难google到
作者: geniusmen    时间: 2008-12-01 12:30
usb-uhci.c: interrupt,status 3,frame# 数字

   真是让我头疼的东西!哎!
作者: geniusmen    时间: 2008-12-16 21:55
问题已经得到了解决,主要是在虚拟机下开发的时候 控制器出了问题 ,所以希望大家开发的时候最好不要用虚拟机呵呵!!
作者: dreamice    时间: 2008-12-16 22:20
原帖由 geniusmen 于 2008-12-16 21:55 发表
问题已经得到了解决,主要是在虚拟机下开发的时候 控制器出了问题 ,所以希望大家开发的时候最好不要用虚拟机呵呵!!


呵呵,感谢分享。虚拟机有时候就是会出现无法预知的问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2