内容简介:Wireshark(前称Ethereal)是一个网络封包分析软件,可分析网路状态,丢包率等。由于公司做的即时通讯业务,其中IM模块采用TCP发送数据和控制信令(心跳包)底层采用protobuf传输数据,音视频采用TRP协议,然后给大客户集团提供私有化部署,由于客户网络环境复杂,所以需具备一定的抓包分析能力。一般地,只是单个的一个SYN,它表示的只是建立连接。当出现SYN和ACK可能同时为1,我们认为客户端与服务器建立了一个连接。而当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而RST一般
Wireshark(前称Ethereal)是一个网络封包分析软件,可分析网路状态,丢包率等。
由于公司做的即时通讯业务,其中IM模块采用TCP发送数据和控制信令(心跳包)底层采用protobuf传输数据,音视频采用TRP协议,然后给大客户集团提供私有化部署,由于客户网络环境复杂,所以需具备一定的抓包分析能力。
下面介绍常见的TCP层的常用FLAGS。
标志位 | 描述 |
---|---|
SYN | 建立联机 |
ACK | 确认 |
PSH | 有 DATA数据传输 |
FIN | 关闭连接 |
RST | 连接重置 |
一般地,只是单个的一个SYN,它表示的只是建立连接。当出现SYN和ACK可能同时为1,我们认为客户端与服务器建立了一个连接。而当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。
Wireshark 抓包步骤
- 首先根据域名获取对应的ip,终端输入
ping 域名
telnet ip 端口
-
打开Wireshark,首页选择要抓取的通道(Wi-Fi,网卡等),然后设置过滤规则,点击右上角箭头配置过滤规则,或者点击某一条右键选中
Apply as Filter
,ip.src==103.219.186.235 or ip.dst==103.219.186.235
TCP三次握手
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机; 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包; 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。 复制代码
1. 客户端发送 SYN 报文 到服务器
2. 服务器接收到后 回复 SYN + ACK 报文
3.客户端接收到服务端的 SYN+ACK 报文后,回复 ACK报文
注意:理论上,Syn 应该初始值是个随机数的,后面的要根据初始值增加 ,wireshark为了好区分从0开始的,可以自行设置显示原始Syn
TCP 四次挥手,简略分析
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。 复制代码
抓包异常数据解读
1.[TCP Previous segment not captured]丢包
在TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len(三次握手和四次挥手是例 外)当后Seq>前Seq +Len,就知道中间缺失了一段数据。
[TCP Out-of-Order] 乱序 Wireshark在获取包序号26时发现seq=18981,而包序号25的数据包seq = 20441,所以wireshark认为数据包顺序错了
2.[TCP Dup ACK x#y]
当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。此时就会Ack就说我想获取seq=28852的数据包而你给了我其他包。
3、[TCP Spurious Retransmission] 丢包重传
4、[TCP Fast Retransmission] 快速重传
当发送方收到3个或以上[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传它(这是RFC的规定)。
5、[TCP Retransmission] 超时重传
如果一个包真的丢了,又没有后续包可以在接收方触发[Dup Ack],就不会快速重传,只能超时重传。
6、几种TCP连接中出现RST的情况
1.端口未打开服务器程序端口未打开而客户端来连接。这种情况是最为常见和好理解的一种了。去telnet一个未打开的TCP的端口可能会出现这种错误。
2. 请求超时查看2次包的时间间隔
3. 服务端关闭的socket
4. 防护墙拒绝了请求
5. 移动链路
移动网络下,国内是有5分钟后就回收信令,也就是IM产品,如果心跳>5分钟后服务器再给客户端发消息,就会收到rst。也要查移动网络下IM 保持<5min 心跳。
6. 负载等设备负载设备需要维护连接转发策略,长时间无流量,连接也会被清除,而且很多都不告诉两层机器,新的包过来时才通告rst。
Apple push 服务也有这个问题,而且是不可预期的偶发性连接被rst;rst 前第一个消息write 是成功的,而第二条写才会告诉你连接被重置
7. 超过超时重传次数、网络暂时不可达
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 大数据开发常见的9种数据分析手段
- 避坑指南:数据分析中这些常见错误你犯了几个?
- RFID实战应用之常见射频卡扇区数据分析及破解
- 数据分析是什么,如何完善数据分析知识体系
- 大数据分析工程师入门(二十):数据分析方法
- 蚂蚁数据分析平台的演进及数据分析方法的应用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mastering Regular Expressions, Second Edition
Jeffrey E F Friedl / O'Reilly Media / 2002-07-15 / USD 39.95
Regular expressions are an extremely powerful tool for manipulating text and data. They have spread like wildfire in recent years, now offered as standard features in Perl, Java, VB.NET and C# (and an......一起来看看 《Mastering Regular Expressions, Second Edition》 这本书的介绍吧!