流媒体传输网络问题定位

来源:互联网 发布:软件开发工程师是什么 编辑:程序博客网 时间:2024/05/22 00:43
一 在复杂的网络环境中,或多或少遇到过一些流媒体数据传输问题
   (1) 网络是通的,数据发不过去
   (2) 数据可以发过去,丢包率极高
   (3) 网络中出现大量的tcp outof order,tcp retransmission tcp dup ack.
二 我们讲一下网络传输数据的流程(这里以tcp为例)
   (1) 要进行tcp传输,先要三次握手,三次握手协商了什么,我们看看抓包数据。
本地:syn,seq=0(起始数据分片(MSS)序列号),win=5840(tcp窗口大小),len=0(数据包长度),MSS=1460(MSS大小,中间路由会修改这个值),
SACK_PERM=1(选择性确认选项),WS=256 窗口大小大小本来是16位的,WS是用来扩展窗口大小的。
对端:ack,sync  seq=0,ack=1,win=5480,len = 0,MSS=1460 SACK_PERM=1 WS=128
这里和上面的sync包是类似的,为什么MSS都是1460字节,MSS = mtu - tcp头长度 - ip头长度
ip头长20字节,tcp头长20字节 MTU默认是1500字节
因此MSS大小 =  mtu - ip 头 = 1460字节
本地:ack = 1,seq = 1,win=5888,len = 0
  
三 针对问题排查
   (1) 网络是通的,数据发不过去(可能是中间有某个路由器的mss比较小,导致数据经过该路由的时候被丢弃),可以先看看本机网卡的相关配置
用命令ethtool -k 网卡名
如果网卡开启了tso,gso选项,则MSS会等于mtu - ip头-tcp头
   如果tso,gso选项是关闭的,则看看mss设置是否于连接时候,对端传过来的mss值,对端传过来的mss值是线路上最小的mss值。

设置相应的mss值大小。


   (2) 可以ping一个固定大小的数据包,看丢包情况,存在丢包率可能是因为tcp分片太大导致的,只有小的分片能达到对端。
   (3) 可能是网络拥塞,可以通过traceroute查一下通信线路,或者ping确认网络质量。

   备注:追踪域名通路情况,可以直接用mtr命令,结合了ping nslookup traceroute命令的功能

更多开源流媒体技术,请关注我们的微信:EasyDarwin 


原创粉丝点击