最近在调试NDK的时候,发现NDK会出现丢帧的问题,最后重传数据(TCP Retransmission).具体的现象如下:
1.使用OMAPL138处理器,NDK在ARM端,网络芯片为KSZ8863LL。使用TCP传输,socket专用一个线程,100M网络芯片,整个网络数据量不大。另外Bios/NDK/NSP的版本,我测试过各种不同的BIOS/NDK/NSP的版本,均出现此问题。
2.应用层在某一时刻发送数据量较大,例如,每150ms发送一次数据,数据量大小约为10K Byte.应用层将这10K的数据分4次发送,即调用4次sendto函数。
3.使用wireshark对数据进行抓包分析。如图所示。偶尔会出现数据丢帧现象,抓包数据显示几秒后重传丢失的数据。
4.每丢一帧数据,EMAC的寄存器-TXUNDERRUN(0x01e2325c)计数增加,其值等于重传数据帧数(wireshark所抓到的重传数据包)。
分析:
1.因为后面还能够重传成功,证明TCP/IP能够确实保存了应用层传过来的数据;
2.TXUNDERRUN寄存器计数在不断增长,其值等于wireshark抓到的重传数据包,是否可以认定在数据发送出网口之前就发生了丢帧现象。
因此我猜测是IP向ETH层传输的时候,出现了这样的问题。请各位帮我分析一下是什么原因。我应该如何解决这个问题。
