阅读:1781回复:5
关于包捕获,使用packet.sys
请问各位高手,使用packet.sys来捕获包,是否会出现丢包的情况。
我认为这种情况是可能发生的。 |
|
沙发#
发布于:2002-03-08 22:42
不会吧,你看NT的网络监视器,它就是调用packet.sys!
如果要丢包,都是上面应用程序的问题,它没有考虑捕获多包发送的情况! |
|
|
板凳#
发布于:2002-03-09 22:23
先谢谢flyfox.
packet.sys执行过程似乎是这样的:当有读命令后,它就捕获一个包,典型的轮询方式。我想,如果是这样的话,是会丢包的,除非从网卡的缓存中读包。 |
|
地板#
发布于:2002-03-10 09:17
先谢谢flyfox. 所以上面应用程序调用时,就应该不断先读,如采用ReadFileEx,用告警端口或完成端口,采用回调方式,(具体可以看《Advanced Windows Programming》第三版,这样就不会丢包了。 记住,采用ReadFile,是肯定会丢包的。 而IPMAN中采用DeviceIoControl时采用了另外的方法,我记不清了,似乎也不会丢包。 我现在没有环境,所以不能回答太清楚。 |
|
|
地下室#
发布于:2002-03-10 19:56
[quote]先谢谢flyfox. 所以上面应用程序调用时,就应该不断先读,如采用ReadFileEx,用告警端口或完成端口,采用回调方式,(具体可以看《Advanced Windows Programming》第三版,这样就不会丢包了。 记住,采用ReadFile,是肯定会丢包的。 而IPMAN中采用DeviceIoControl时采用了另外的方法,我记不清了,似乎也不会丢包。 我现在没有环境,所以不能回答太清楚。 [/quote] 这个问题有分,我有兴趣:-)。 packet.sys基本上不丢包,我做过试验,4块pci 100M的网卡, 分别连在4个hub上,峰值速度大概是4*70左右,丢包率在0.1% 左右。如果是一个网段,只要内存够大,cpu够快,不会丢包。 我做试验的时候是99年,cpu:p3 450,内存256M。 设计过程很大取决于应用层的策略。异步io是一定要用的,你去 读一读本站上的一篇关于驱动程序和应用层通讯的文章,里面 有一段函数,你可以直接参考。 |
|
|
5楼#
发布于:2002-03-11 20:11
感谢斑竹的厚爱,我查了许多资料,基本可以确定,像packet.sys这样的协议层驱动,当网络流量很大时,一定会丢包的!这没有太好的解决办法,只能尽量减少丢包,而且,当有PPP协议时,LCP ,NCP也捕获不到。
|
|