wireshark TCP常见异常报文分析
流媒体播放中,常常需要借助wireshark从TCP层面对交互过程进行分析,本文记录一些常见的TCP异常报文及其分析。
乱序与丢包
1、[TCP Previous segment not captured]
[TCP Previous segment not captured]报文指的是在TCP发送端传输过程中,该Seq前的报文缺失了。一般在网络拥塞的情况下,造成TCP报文乱序、丢包时,会出现该标志。
需要注意的是,[TCP Previous segment not captured]解析文字是wireshark添加的标记,并非TCP报文内容。
例子:
流媒体服务器39.135.135.81,端口80,发送序号Seq=147154的包,长度Len=1360,那么下一个数据包序号应该为Seq=147154+1360=148514,可以看到客户端请求的也是Ack=148514。而服务器下一个包序号为Seq=149874,中间的包丢失了。
2、[TCP Out-Of-Order]
[TCP Out-Of-Order]指的是TCP发送端传输过程中报文乱序了。
例子:
继续上面的包分析,因为208142包序号为Seq=148514,而前一个序号为Seq=149874,故有此错误标志。
Seq=148514实际是208139包的响应,因为网络拥塞的情况下,TCP包不能按顺序到达,所以出现[TCP Previous segment not captured] 和 [TCP Out-Of-Order]标志。
本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)↓↓↓↓↓↓见下面↓↓私信或文章底部领取↓↓
3、[TCP dup ack XXX#X]
[TCP dup ack XXX#X]表示第几次重新请求某一个包,#前XXX表示第几个包(不是Seq),#后的X表示第几次请求。丢包或者乱序的情况下,会出现该标志。
例子:下图表示客户端一直请求101261的包。
重传
1、[TCP Fast Retransmission]
快速重传,一般快速重传算法在收到三次冗余的Ack,即三次[TCP dup ack XXX#X]后,发送端进行快速重传。
为什么是三次呢?因为两次 duplicated ACK 肯定是乱序造成的,丢包肯定会造成三次 duplicated ACK。
例子:
205113的包Seq=11154,重复请求4次后,发送端快速重传。至于为什么是4次,可能因为Ack包也有丢失。
2、[TCP Retransmission]
超时重传,如果一个包的丢了,又没有后续包可以在接收方触发[Dup Ack],或者[Dup Ack]也丢失的情况下,TCP会触发超时重传机制。
例子:
TCP Window
1、[TCP ZeroWindow]
作为接收方发出现的标志,表示接收缓冲区已经满了,此时发送方不能再发送数据,一般会做流控调整。接收窗口,也就是接收缓冲区win=xxx ,告诉对方接收窗口大小。
例子:
传输过程中,接收方TCP窗口满了,win=0,wireshark会打上[TCP ZeroWindow]标签。
2、[TCP window update]
当接收端接收窗口大小发生变化,可以接收数据了,则有该标志。
例子:
接收方消耗缓冲数据后,更新TCP窗口,,可以看到从win=0逐渐变大,这时wireshark会打上[TCP window update]标签。
3、[TCP window Full]
作为发送方的标识,当前发送包的大小已经超过了接收端窗口大小,wireshark会打上此标识,标识不能在发送。
例子:
原文链接:wireshark TCP常见异常报文分析 - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛
本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)↓↓↓↓↓↓见下面↓↓私信或文章底部领取↓↓
相关文章
- Dubbo 异常封装引出的排错日记
- SCIENCE | 肿瘤中 RNA 结合蛋白 FMRP 的异常高表达介导免疫逃避
- TCP和UDP协议的区别_tcp和ip是什么意思
- tcp网络模型_TCP/IP协议模型
- EasyPlayer播放H.265的HLS视频流出现加载异常的问题分析及解决方法
- java异常处理
- Python内置(2)异常、常量、globals
- tcp心跳包 - python TCP服务器v1.3 - 服务器抗压测试及关闭套接字处理
- 监控网站是否异常的shell脚本详解程序员
- 系统捕获异常并发送到服务器详解编程语言
- Python自定义异常类及用法
- 端口揭示Linux系统监听TCP端口的真相(linux监听tcp)
- 服务端利用Linux开发多线程TCP服务端实现网络通信(linux多线程tcp)
- 报文:Linux网络层TCP报文转发实现(linux转发tcp)
- Linux系统中调整TCP连接数的方法(linux的tcp连接数)
- linux下使用TCP命令掌握网络礼仪(linux命令tcp)
- 排查Oracle数据库异常信息方法(oracle输出异常信息)
- Oracle抛出的异常:一个警示(oracle抛异常)
- Linux命令大全:如何查看TCP连接?(linux查看tcp)
- Linux如何关闭TCP连接(linux关闭tcp连接)
- Linux下TCP流量转发技术研究(linux tcp 转发)
- 上海Redis设置失控,急需解决(上海redis设置异常)
- Redis数据转移出现异常排查方法(redis转移异常排查)