继续追杀VOIP语音质量不好的问题,从呼叫中心的开发同学了解到,RTP数据包本身是带有序列号的。虽然是UDP协议,但是因为有序列号所以可以通过计算知道丢包率。但是同样是因为UDP协议,发出去的包是否到达是无法知道的。所以目前在客户端的日志中记录了dump数据,但是只能知道收到的数据包丢包情况,终端上行丢包率无法统计到。这个时候就需要在服务器端抓包,分析丢包率了。
需要用到两个命令,抓包:/usr/bin/dumpcap -f 'udp portrange 19384-32468' -i eth0 -w /tmp/qos.pcap -b duration:3600
, 分析:sudo tshark -qr /tmp/qos.pcap -o rtp.heuristic_rtp:TRUE -z rtp,streams
。需要抓取的UDP包范围看自己的配置,需要安装抓包工具dumpcap和tshark。dumpcap是wireshark出品的抓包工具,同样适用的libpcap,之前没了解过,目测和tcpdump区别不大,tshark是wireshark的linux版本。输出内容如下:
Src IP addr Port Dest IP addr Port SSRC Payload Pkts Lost Max Delta(ms) Max Jitter(ms) Mean Jitter(ms) Problems? 10.64.179.3 4408 10.86.0.21 24526 0x40C9D870 ITU-T G.711 PCMU 3714 46 (1.2%) 961.91 61.67 6.69 X
这样就能看到数据的丢包率、抖动等数据。服务器端也能抓到下行到终端的数据,不过貌似是不准的。所以上行的从服务器端抓包看,下行的从终端日志看,比较痛苦。还是的继续研究VOIP的STCP的东东,看看正经监控是怎么搞的。