为何我的电话总是有杂音? - Kirin博客

为何我的电话总是有杂音?

作者: Bee

全网最全的网络资源分享网站

标签:

手机电话

特别声明:部分文章为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系站长!请勿违法!本站文章仅供学习了解!技术无罪!

感谢各位朋友友情分享文章,为了感谢大家的支持,特意写这篇计划外的文章。这篇文章是【一台服务器两个网卡接入同一网段,会发生什么】两篇文章的后续,文章总是从浅入深展开,没有完整看完前两篇文章的读者可能难以理解本篇文章。
 
故事依然发生在网络监控设备商工作期间,代理商接到客户电话,客户打电话时,总会伴随时序上的前后串音,希望能借助我司的产品将Root Cause 找出来。
 
于是,我们带上Time Machine来到了客户公司,插好探针开始抓包。抓包的性能特别好,可以实时抓1G流速的流量,抓包完成开始分析报文。Time Machine将语音UDP/RTP流按照session为单位组织起来,不需要filter即可快速找到感兴趣的要分析的session 流量。
 
看了一下,好像没有什么问题,双向UDP/RTP来回正常穿梭。但是看着看着有一点比较奇怪的现象,session的源端口好像一直在变化。换句话说,每一个语音包的源端口(Source Port)都是不同的,每一个语音包的目的端口(Destination Port)一直是固定的。
 
快速查阅了资料,语音包的源端口可以使用固定的端口号(语音呼叫双方协商的端口号),也可以使用动态随机端口号,只要保证语音包的目的端口固定为协商的端口号即可。
 
立马开动逻辑计算,既然语音发生了前后窜音,说明语音包发生了乱序(Out of Order),什么情况下会发生乱序?

当多链路ECMP负载均衡时,将属于同一个session的流量分摊到多条链路上,而每一条链路到达目的地的延迟是不一样的,有的大些,有的相对小些。这样就非常有可能后发的语音包先到达目的地,而早发的语音包稍后到达,这样就形成了时序上的前后颠倒。
 
在ECMP算法里,根据四元组做为输入参数,而四元组的一项参数(source port)发生了实时改变,造成了digest发生了天翻地覆的变化,最后得出的余数也是一直变化的。那么流量会分摊到多条链路,从而造成潜在的语音报文的乱序。
 
当逻辑计算满足不前后矛盾,基本上预示着找到了root cause。接下来的工作其实很简单,修改配置,将语音客户端的源端口号option,修改成使用固定的(使用双方协商的端口号)。再次拨打电话,语音通话完全正常,没有先前的毛病。
 
抓包软件再厉害,没有懂它的人也是白搭。用户能将这个隐藏的逻辑发现出来吗?

也许,如果用户精通协议分析。大多数情况下是没有这个能力的,术业有专攻,社会分工而已。
 
学习,讲究融会贯通,用积累到扎实的知识去分析新鲜的事物。也许好多人正在学习VxLAN,如果学习这项技术很吃力,说明基础没有打好。
 
VxLAN
VxLAN是一种UDP隧道技术,数据平面(Data Plane)可以运输二层帧(Ethernet Frame)、也可以运输三层IP包(IP Packet)。控制平面(Control Plane)由MP-BGP负责分发二层路由表(MAC Table)、或三层路由表(Routing Table)。如果多说一点,VxLAN本身是不安全的,本身只是一个裸UDP隧道,没有加密机制。如果保证被运输货物的安全,有三种选择:
 
  • 货物本身加密(SSH、TLS、DTLS)
  • 使用IPsec加密UDP隧道
  • 或者同时使用上面两种加密技术
 
当然,这些内容不是今天讨论的重点,今天的重点只和端口号有关,为何VxLAN这种基于UDP隧道,可以使用动态随机的源端口号,不怕流量ECMP负载均衡时,发生流量乱序吗?
 
欢迎来到粉丝会员群(点击文末“加入交流群”扫码即可加入)一起参与讨论,在群里会给你以启发,让你快速找到协议设计种种潜在的考量,当再次看到这些技术时,不再是面目可憎,而是如沐春风,因为它们已经成为你继续飞翔的翅膀!
本文最后更新于2021-2-21,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
分享到:
加入交流群
未经允许不得转载:

作者: Bee, 转载或复制请以 超链接形式 并注明出处 Kirin博客
原文地址: 《为何我的电话总是有杂音?》 发布于2021-2-21

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册

觉得文章有用就加入交流群吧

QQ扫一扫