我公司有1个3745,2611各一台,都装有vic-2fxo-m2模块。在公司做VOIP的实验。3745和2611之间的带宽为64K。我做了3个主题实验。
第一个实验:我在2个路由器采用优先级队列,设置语音数据的优先级为最高。然后用接在路由器上的2台PC传数据(PC1传数据给PC2)的方式测试优先队列的是否在起作用。发现接受数据的路由器端的的电话收听效果不好,而发送数据的路由器端的电话收听效果很好。反复测试结果一样。
第二个实验:我在2个路由器采用RSVP协议做的QOS,保留给语音的带宽为12(都采用了CRTP)。然后同样采用PC传数据的方法来测试,仍然有第一个实验所存在的问题。
第三个实验:在第二个实验的基础上,在2个路由器的串口上加了MTU 128配置后,用PC传数据测试发现,先前存在的问题消失了,两边通话质量非常好。
实验后的思考:前1,2次实验由于没有改变路由器默认的MTU值的大小(默认为1500字节),所以造成发送数据端的路由器在发送语音包时遇到阻塞。阻塞原因如下:1500字节的包在64K的链路下的串行延时为187毫秒,此VOIP模块的默认语音编码G.729r8,它在没有语音时则不产生数据,所以语音包虽然有高优先级但是当进入接口缓冲区的时候,已经有1500字节的数据包正在发送,所以语音数据包必须等待187毫秒才能被传送出去。要知道187毫秒对于语音数据来说是太长了些,所以话音质量就很不好。只有采用MTU命令改变默认的MTU值为128字节(128字节是针对64K带宽来考虑的,计算MTU大小根据延时为20毫秒来计算),才能让语音数据包的延时在任何时候都不超过20毫秒的要求。
但是采用MTU后,发现MTU命令必须在相邻的路由器上成对使用。因为如果一个MTU为128的接口接受到从对面路由器传来的数据包超过128字节,会认为它是个坏包而丢弃。不知道在路由器内部是否可以自动分割数据包以适合其发送接口的MTU值。那样的话就不需要在整个语音系统里全部统一MTU的值了。
这是本人的一些拙见,水平有限,如有错误请各位指出,谢谢!
作者:wanjunye