分类: IT职场
2015-08-17 10:04:16
1. 准备一台笔记本电脑,并且安装360免费wifi。
2. 两部移动终端连接上360共享的wifi
3. 在笔记本电脑上开启wireshark抓包,并且在linux服务器上用tcpdump进行抓包
4. 停止抓包,并且下载服务器上的数据包到本地
1. 首先分析笔记本电脑的数据包,看移动终端的发送端视频包,RTP的SEQ是否连续;如果SEQ不连续说明移动终端有问题,否则,需要接下来分析
2. 移动终端的发送端视频包,RTP的SEQ是连续,但在服务器端接收的RTP包的SEQ是否连续;如果接收到收到的RTP不连续,说明发送端到接收端的网络环境有问题或者发送端发送的数据包有问题,导致RTP丢包,否则,接收的RTP是连续的。
3. 服务器端接收的RTP包是连续的,接下来分析,服务器端进行转发的RTP包是否连续,如果不连续,服务器端对数据包的转发程序有问题,否则,需要接下来分析,移动终端接收RTP包端。
4. 移动终端的接收RTP端数据包是否连续,如果不连续,说明服务器到接收端的网络环境有问题或者发送端的数据包有问题,导致RTP丢包,否则,需要分析移动终端RTP流的视频解码程序。
1. 首先用wireshark工具分析移动发送端RTP报数据,看RTP数据包是否有丢包,SEQ是否连续,从下图红色框选部分可以看出,发送端的RTP数据包没有丢包发生。
2. 接下来用wireshark工具分析服务器接收端RTP数据,看RTP数据包是否有丢包,SEQ是否连续,从下图红色框选部分可以看出,接收端和发送端接收数据包的总数一致,但接收端的丢包率28.60%,SEQ出错259次。
3. 根据以上两段数据包的分析,丢包可能是网络导致,也可能是终端发送的数据不正确导致。
4. 接下来分析服务器接收端的RTP数据包,SEQ的那个数据丢包了。
5. 分析服务器端收据RTP包,发现seq=26的数据包,服务器端没有收到。
6. 分析移动终端的发送端RTP包,seq=26的数据包,发现RTP发送但长度为54。详细见下图。
? 分析SEQ=26的数据包
? 分析该包发现,发送SEQ=26的数据包大小为54,IP包长度为40,但UDP数据包长度为1396。
? 再次分析多个丢失的数据包,发现存在同样的问题。
? 分析移动终端发送的RTP流数据用udp.length > 1350进行过滤,发现没有找到任何一条RTP数据,用udp.length > 1300进行过滤,发现有数据包,并且也是正常的。
? 根据以上数据的分析,发现导致该问题的是移动终端进行RTP分片超过1350,就会导致RTP严重丢包。
? 因此,修改移动终端RTP分片为1300,进行测试,终端之前图像显示正常。
通信术语 最大传输单元(MaximumTransmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。
MTU越大,通信效率越高而传输延迟增大,所以要权衡通信效率和传输延迟选择合适的MTU。
以以太网传送IPv4报文为例。MTU表示的长度包含IP包头的长度,如果IP层以上的协议层发送的数据报文的长度超过了MTU,则在发送者的IP层将对数据报文进行分片,在接收者的IP层对接收到的分片进行重组。
这里举一个具体的例子说明IP包分片的原理。以太网的MTU值是1500 bytes,假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则该报文在添加20 bytes的IP包头后IP包的总长度是 3028 bytes,因为3028 > 1500,所以该数据报文将被分片,分片过程如下:
1. 首先计算最大的IP包中IP净荷的长度 =MTU-IP包头长度=1500-20= 1480bytes。
2. 然后把3028 bytes按照1480 bytes的长度分片,将要分为3片,3028=1480+1480+68。
3. 最后发送者将为3个分片分别添加IP包头,组成3个IP包后再发送,3个IP包的长度分别为1500 bytes、1500 bytes和 88 bytes。
从以上分片例子可以看出第一、二个分片包组成的IP包的长度都等于MTU即1500 bytes。