时尚

wiresharkrtp流分析

时间:2010-12-5 17:23:32  作者:休闲   来源:探索  查看:  评论:0
内容摘要:抓包抓到RTP流,第一件事不是急着点“分析”,而是先确认Wireshark有没有把SSRC正确识别出来。我见过太多人对着一条VoIP通话的RTP包发愣,明明看到一串UDP,端口号也对,但菜单里的“电话

抓包抓到RTP流,流分第一件事不是流分急着点“分析”,而是流分先确认Wireshark有没有把SSRC正确识别出来。我见过太多人对着一条VoIP通话的流分RTP包发愣,明明看到一串UDP,流分端口号也对,流分但菜单里的流分“电话→RTP→显示所有流”是灰的。原因往往很简单:Wireshark默认只对特定端口范围(比如16384-32767)做RTP启发式解析,流分如果对方用的流分是自定义端口,比如50000以上,流分或者更离谱的流分30000,它就不认。流分这时候得手动来——右键任意一个UDP包,流分选“解码为”,流分在“当前”那一栏填udp.port,流分下一栏填rtp,确定之后整个会话的RTP流才会亮起来。

RTP流分析的核心其实就两个维度:时间线和序列号。打开“RTP流分析”窗口,你会看到一张图,横轴是时间,纵轴是序列号。正常通话应该是一条几乎笔直的斜线,斜率代表包间隔。如果中间出现一段水平线,说明序列号没涨,但时间在走——丢包了。更隐蔽的是序列号跳变,比如从1200直接跳到1250,中间少了50个包,但时间戳只增加了20ms,这通常是发送端出了问题,而不是网络丢包。我上个月排查一个客户投诉,就是这种模式:每隔三秒跳一次,每次跳30个包。最后定位到是他们的SBC在转码时缓冲区配置错了,不是网络抖动。

抖动(Jitter)的数值在Wireshark里直接给出来了,单位是毫秒。但别只看平均值。点开“抖动”那一列,右键选“应用为列”,然后按大小排序。真正要命的是那些尖峰,比如平均抖动2ms,但偶尔蹦到80ms。这种间歇性抖动比持续高抖动更烦人,因为终端设备的抖动缓冲区可能来不及调整。我一般会把RTP流导出成CSV,用Python的pandas画个抖动随时间变化的图,比Wireshark自带的折线图清楚得多。导出方法:在RTP流分析窗口点“导出”,选“作为CSV”,然后自己写两行代码的事。

还有一个容易被忽略的字段:时间戳增量。RTP的时间戳不是毫秒,而是采样率相关的。比如PCMU的采样率是8000,那么每个20ms的包,时间戳应该增加160。如果你看到增量是159或者161,别慌,那是正常的时钟漂移。但如果增量变成320,说明发送端每40ms才发一个包,而载荷类型还写着PCMU——这会导致接收端播放速度减半,声音变调。这种问题在Wireshark的“RTP流分析”里看“时间戳”那一列就能发现,不需要听录音。

最后说个实操技巧。Wireshark的RTP分析默认只分析单播流,如果遇到组播或者多SSRC的流(比如视频会议里同时传音频和视频),得先过滤出单个SSRC。在过滤器栏输入“rtp.ssrc == 0x12345678”,把十六进制换成你实际看到的那个。然后重新打开RTP流分析,图就干净了。我习惯把常用的几个SSRC记在记事本上,下次直接粘贴,比在菜单里翻来翻去快得多。

别指望Wireshark能告诉你“为什么丢包”。它只能告诉你“丢了哪些包、什么时候丢的”。真正的原因——是Wi-Fi干扰、是队列溢出、还是对端网卡驱动bug——得结合抓包位置和网络拓扑去推。我一般会在通话两端同时抓包,对比着看。如果发送端发了1000个包,接收端只收到950个,那问题在中间网络;如果发送端自己就只发了950个,那问题在源头。就这么简单,但很多人只抓一端,然后对着丢包统计瞎猜。

最近更新
热门排行
copyright © 2026 powered by 烟消火灭网   sitemap