千兆以太网、Fedora Core 5 环境下 Ethernet 丢包的问题!
现在我有一个千兆以太网的环境,两台workstation(千兆的网卡),还有一台千兆的思科交换机,操作系统是fedora core 5,将他们建立一个单独的环境,没有外界干扰。同时,为了能够传输大包,打开了网卡、交换机的jumbo frame选项,将mtu设成了9000(我作实验的时候,所传输的包的大小均小于9000)。
机器A作为发送方,机器B作为接收方,利用raw socket直接传输以太网的帧。接收方先打开,来等待接收;然后机器A开始向B发送数据。我会在接收方记录传输的包的数目和传输过程中的时间,然后根据传输过程中包的大小来计算出传输速度。
我遇到的问题是,利用现在的收发程序,在速度>40MBps的情况下,接收方并不能接收到所有的数据包;在传输过程中出现了丢包的现象,我现在想知道到底是在什么地方丢的包。。。
1. 如果速度太快(对千兆以太网卡来说,速度达到100M以上的时候会不可避免的出现非常少量的包被drop掉的情况),网卡就会把无法放进缓冲区的包给丢掉。处理这个问题时,我就在程序的循环发送中,加入了一些延时(作一定数目的空循环)来控制速度。所以在我的实验环境中,这个原因应该是不存在的。而且我通过检查网卡的信息(通过ifconfig命令可以看到missed packets, dropped packets的数目),在控制速度在90MBps一下的时候,网卡没有丢包。
2. 在我写的程序里面,发送方在构造完ethernet packet后,就定时的发送数据,而接收方一直是在接收数据,那么接收程序只要是收到了包,就不会有错误的包;这么简单的程序没有什么地方使得数据包被丢掉。
那还会有什么地方会出现丢包的现象呢!?哪位大侠有经验的给解释一下啊!怀疑是在协议栈上给丢掉了,但是没有什么根据。
渴望指导!多谢!