Wireshark(前称Ethereal)是一个网络封包分析软件,可分析网路状态,丢包率等。bash
因为公司作的即时通信业务,其中IM模块采用TCP发送数据和控制信令(心跳包)底层采用protobuf传输数据,音视频采用TRP协议,而后给大客户集团提供私有化部署,因为客户网络环境复杂,因此需具有必定的抓包分析能力。服务器
下面介绍常见的TCP层的经常使用FLAGS。markdown
标志位 | 描述 |
---|---|
SYN | 创建联机 |
ACK | 确认 |
PSH | 有 DATA数据传输 |
FIN | 关闭链接 |
RST | 链接重置 |
通常地,只是单个的一个SYN,它表示的只是创建链接。当出现SYN和ACK可能同时为1,咱们认为客户端与服务器创建了一个链接。而当出现FIN包或RST包时,咱们便认为客户端与服务器端断开了链接;而RST通常是在FIN以后才会出现为1的状况,表示的是链接重置。网络
ping 域名
telnet ip 端口
Apply as Filter
, ip.src==103.219.186.235 or ip.dst==103.219.186.235
第一次握手:主机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)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN同样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的链接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
复制代码
在TCP传输过程当中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq + Len(三次握手和四次挥手是例 外)当后Seq>前Seq +Len,就知道中间缺失了一段数据。socket
当乱序或者丢包发生时,接收方会收到一些Seq号比指望值大的包。此时就会Ack就说我想获取seq=28852的数据包而你给了我其余包。oop
当发送方收到3个或以上[TCP Dup ACK],就意识到以前发的包可能丢了,因而快速重传它(这是RFC的规定)。spa
若是一个包真的丢了,又没有后续包能够在接收方触发[Dup Ack],就不会快速重传,只能超时重传。.net
1.端口未打开 服务器程序端口未打开而客户端来链接。这种状况是最为常见和好理解的一种了。去telnet一个未打开的TCP的端口可能会出现这种错误。
2. 请求超时 查看2次包的时间间隔
3. 服务端关闭的socket
4. 防御墙拒绝了请求
5. 移动链路
移动网络下,国内是有5分钟后就回收信令,也就是IM产品,若是心跳>5分钟后服务器再给客户端发消息,就会收到rst。也要查移动网络下IM 保持<5min 心跳。
6. 负载等设备 负载设备须要维护链接转发策略,长时间无流量,链接也会被清除,并且不少都不告诉两层机器,新的包过来时才通告rst。code
Apple push 服务也有这个问题,并且是不可预期的偶发性链接被rst;rst 前第一个消息write 是成功的,而第二条写才会告诉你链接被重置
orm
7. 超过超时重传次数、网络暂时不可达
参考:
www.wireshark.org/
blog.csdn.net/yuanbinquan…
blog.csdn.net/yuanbinquan…