seant
驱动牛犊
驱动牛犊
  • 注册日期2001-07-05
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1467回复:2

一个现象很奇怪,与大家讨论讨论

楼主#
更多 发布于:2002-05-29 14:40
我编写了一个NDIS驱动(Windows2000下),与PC机上的一块PCI卡通信,模拟了一个网络通道。现在通过这个通道,Ping很顺利。但在FTP或其他SOCKET连接时,会出现某种阻塞现象。用Sniffer捕捉了一下FTP时的包(FTP Server在PC机上),发现在打开FTP连接时,TCP的三次握手很顺利,但握手完后,FTP Server却没有立即收到连接请求;在过了一段时间后(这段时间的长短不定,可以长达若干分钟),FTP Server才收到连接请求,这时登录的交互通信很快。在这种阻塞情况下,如果在PC机上Ping一下localhost,则阻塞立刻被解除。但如果阻塞时去Ping PCI卡,则能够Ping通,但FTP仍处于阻塞状态。
根据这种现象,估计阻塞是发生在系统的TCP/IP栈上。但详细的原因,我一直没有找到,因为Windows的TCP/IP栈是个黑盒子。
由于对应的PCI卡上驱动的不完善,在这个通道上,有些服务不支持,比如ARP。所以也有可能是因为Windows在这个网络通道上有些信息没有获得,才产生了阻塞。如果PC机上运行的是Linux,那么一切通信就都正常了。
还有个可能就是Windows上的网络配置或相关的注册表项不正确。
不知各位高手有何见解?

最新喜欢:

zackaryzackar...
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
沙发#
发布于:2002-05-29 17:42
你是怎么实现的?是不是造了一个Nic driver, 然后抓到这发送到这个网卡的包,通过pci通道把爆发送出去?我觉得奇怪,既然其他的包能发送出去,为什么不能实现ARP,你的驱动写在哪一层?
seant
驱动牛犊
驱动牛犊
  • 注册日期2001-07-05
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-31 17:52
这个问题现在已经解决了。
我以前在驱动中是用NdisMEthIndicateReceive()向上层传包,现在我改成了用NdisMIndicateReceivePacket(),结果故障就消失了。
但我现在还不清楚这种现象的根本原因,不知是NDIS库的问题,还是我对NdisMEthIndicateReceive()的使用不对。

至于ARP,是因为PCI卡上Linux系统的驱动是合作方写的,对方声称不能实现ARP,我想是因为他们不想去做。
游客

返回顶部