关于使用TC和IPTABLES模拟丢包的区别

这段时间在做一些有关广域网优化的工作,需要模拟丢包环境进行网络测试,自己写了一个收UDP包与发UDP包的程序,并统计丢包率,基本方法是接收端使用epoll,延时1s的时间,发送端发的udp包中第一个字节写上seq,接收端根据收到的seq置flag数组的相应位置为1,接收端在epoll_wait返回-1时统计flag数组中1的个数来统计丢包率。

在使用TC模拟丢包的过程中发现,在包长度为500B和1000B的时候,统计出的丢包率与tc设置的基本相同,但是当设置为2000B的时候,丢包率统计出大约是设置的2倍,在设置为5000B的时候,统计出的大约是设置的3倍。

关于使用TC和IPTABLES模拟丢包的区别_第1张图片

后使用iptables模拟了一下,即使在数据包较长的时候,丢包率统计出的和设置的也大致相同。

关于使用TC和IPTABLES模拟丢包的区别_第2张图片

 

我在想是不是tc模拟的时候是针对网卡操作,模拟出来的是丢帧,然后接收端收到丢了帧的udp包就直接丢了。2000B的时候需要2帧,然后我这边在tc设置5%的时候一般统计出来10%左右的丢包,我在想是不是两个udp各丢一帧,ip层两个udp包都丢了,就体现出来两倍的丢包率。具体是不是这个原因我还得询问一下老师或者其他了解的人员。

你可能感兴趣的:(关于使用TC和IPTABLES模拟丢包的区别)