协议速查:你要知道的所有TCP协议的一切----实战篇

一、正常TCP报文解析:

 

1)正常抓包,Ack=上一个包的Seq+Len(源地址 和 目的地址对调),否则TCP ACKed unseen segment.
Ack总是关注不同方向上的流量

2)正常抓包,Seq=上一个包的Seq+Len(源地址 和 目的地址一致),否则TCP Previous segment not captured.
Seq总是关注同一方向上的流量

3)大块报文后分解成段后发出去(TCP segment of a reassembled PDU)
Wireshark可以把属于同一个应用层的PDU的TCP包虚拟地集中起来。
TCP层收到上层大块报文后分解成段后发出去,主机响应一个查询或者命令时如果要回应很多数据(信息)而这些数据超出了TCP的最大MSS时,
主机会通过发送多个数据包来传送这些数据(注意:这些包并未被分片)。
  
每个数据包的Protocol Length都是1502 Byte,这是因为以太网帧的封包格式为:Frame = Ethernet Header + IP Header + TCP Header + TCP Segment Data。即:
1、Ethernet Header = 14 Byte = Dst Physical Address(6 Byte)+ Src Physical Address(6 Byte)+ Type(2 Byte),以太网帧头以下称之为数据帧。
2、IP Header = 20 Byte(without options field),数据在IP层称为Datagram,分片称为Fragment。
3、TCP Header = 20 Byte(without options field),数据在TCP层称为Stream,分段称为Segment(UDP中称为Message)。
4、TCP Segment Data = 1448 Byte(从下图可见)。
所以,每个数据包的Protocol Length = 14 Byte + 20 Byte + 20 Byte + 1448 Byte = 1502 Byte。

收到一个报文后如何确定它是一个"TCP segment"?如果有几个报文的ACK序号都一样,并且这些报文的Sequence Number都不一样,并且后一个Sequence Number为前一个
Sequence Number加上前一个报文大小再加上1的话,肯定是TCP segment了,对于没有ACK标志时,则无法判断。

 

二、异常TCP报文解析:

1)Packet size limited during capture
说明被标记的那个包没有抓全。一般是由抓包方式引起,有些操作系统中默认只抓每个帧的前96个字节。
4号包全长171字节,但只有96字节被抓到。

 

2)TCP Previous segment not captured
如果Wireshark发现后一个包的Seq大于前一个包的Seq+Len,就知道中间缺失了一段。
如果缺失的那段在整个网络包中找不到(排除了乱序),就会提示。
6号包(Server-->Client)的Seq是1449,大于5号包(Server-->Client)的Seq+Len=1+0=1,说明中间有个1448字节的包没被抓到,就是“Seq=1,Len=1448”的Psh包丢失了。

 

3)TCP ACKed unseen segment
当Wireshark发现被Ack的那个包没被抓到,就会提示。
32号包(Server-->Client)的Seq+Len=6889+1448=8337,说明下一个响应包(Client-->Server)正确的Ack=8337
而我们看到的是34号包的Ack=11233,意味着8337~11232这段数据没抓到。

 

4)TCP Out-of-Order
当Wireshark发现同一个方向(Server-->Client)后一个包的Seq号小于前一个包的Seq+Len时,就会认为乱序,发出提示。
3362号包的Seq小于3360包的Seq,所以就是乱序。

 

5)TCP Dup ACK
当乱序或丢包发生时,接收方会收到一些Seq号比期望值大的包。每收到一个这种包就会Ack一次期望的Seq值,提醒发送方。
7号包期望的下一个Seq=30763,但8号包Seq=32223,说明Seq=30763包丢失,9号包发了Ack=30763,表示“我要的是Seq=30763”。
10号、12号、14号也都是大于30763的,因此每收到一个,就回复一次Ack。

 

6)TCP Fast Retransmission
当发送方收到3个或以上的【TCP Dup ACK】,就意识到之前发的包可能丢了,于是快速重传它。

 

7)TCP Retransmission
如果一个包真的丢了,又没有后续包可以在接收方触发【Dup Ack】就不会快速重传;
这种情况下发送方只好等到超时了再重传;
1053号包发出后,一直没有等到相应的Ack,只能在100多毫秒之后重传了;

 

8)TCP zerowindow
包种的“win”代表接收窗口的大小,当Wireshark在一个包中发现“win=0”时,就会发提示。

 

9)TCP window Full
此提示表示这个包的发送方已经把对方所声明的接收窗口耗尽了。
当Wireshark计算出Middle East已经有65535字节未被确认,就会发出此提示。

【TCP window Full】表示发送方暂时没办法再发送数据;
【TCP zerowindow】表示发送方暂时没办法再接收数据。


10)Time-to-live exceeded(Fragment reassembly time exceeded)
表示这个包的发送方之前收到了一些分片,但由于某些原因迟迟无法组装起来。

  • 0
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值