一些Wireshark的提示
1.[Packet size limited during capture]
tcpdump默认只抓每个帧的前96个字节,可以使用 -s 参数来指定抓到的字节数
1 | tcpdump -i eth0 -s 1000 -w /tmp/tcpdump.cap |
2.[TCP Previous segment not captured]
在TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq+Len(三次握手和四次挥手是例外)。如果Wireshark发现后一个包的Seq号大于前一个包的Seq+Len,就知道中间缺失了一段数据。假如缺失的那段数据在整个网络包中都找不到(即排除了乱序),就会提示[TCP Previous segment not captured]
网络包没被抓到还分两种情况:一种是真的丢了;另一种是实际上没有丢,但被抓包工具漏掉了。在 Wireshark 中如何区分这两种情况呢?只要看对方回复的确认(Ack)就行了。如果该确认包含了没抓到的那个包,那就是抓包工具漏掉而已,否则就是真的丢了。
3.[TCP ACKed unseen segment]
当 Wireshark 发现被 Ack的那个包没被抓到,就会提示[TCP ACKed unseensegment]。这可能是最常见的 Wireshark 提示了,幸好它几乎是永远可以忽略的。
4.[TCP Out-of-Order]
在 TCP传输过程中(不包括三次握手和四次挥手),同一台主机发出的数据包应该是连续的,即后一个包的 Seq号等于前一个包的 Seq+Len。也可以说,后一个包的 Seg 会大于或等于前一个包的Seq。当 Wireshark发现后一个包的 Seq号小于前一个包的 Seq+Len 时,就会认为是乱序了,因此提示[TCP Out-of-Order]。
小跨度的乱序影响不大,比如原本顺序为1、2、3、4、5 号包被打乱成 2、1、3、4、5 就没事。但跨度大的乱序却可能触发快速重传,比如打乱成2、3、4、51时,就会触发足够多的 Dup ACK,从而导致1号包的重传。
5.[TCP Dup ACK]
当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。它每收到一个这种包就会 Ack一次期望的Seq值,以此方式来提醒发送方,于是就产生了一些重复的 Ack。Wireshark 会在这种重复的 Ack 上标记[TCP Dup ACK]。
6.[TCP Fast Retransmission]
当发送方收到3个或以上[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传它(这是RFC的规定)。
7.[TCP Retransmission]
如果一个包真的丢了,又没有后续包可以在接收方触发[DupAck],就不会快速重传。这种情况下发送方只好等到超时了再重传,此类重传包就会被Wireshark标上[TCP Retransmission]。
8.[TCP zerowindow]
TCP 包中的“win=”代表接收窗口的大小,即表示这个包的发送方当前还有多少缓存区可以接收数据。当 Wireshark在一个包中发现“win=0”时,就会给它打上“TCP zerowindow”的标志,表示缓存区已满,不能再接收数据了。
9.[TCP window Full]
当 Wireshark 在一个包中打上[TCP window Full]标志时,就表示这个包的发送方已经把对方所声明的接收窗口耗尽了。
[TCP window Full]很容易跟[TCP zerowindow]混淆,实际上它们也有相似之处。前者表示这个包的发送方暂时没办法再发送数据了,后者表示这个包的发送方暂时没办法再接收数据了,也就是说两者都意味着传输暂停,都必须引起重视。
10.[TCP segment of a reassembled PDU]
当你收到这个提示,肯定已经在Edit>Preferences->Protocols→TCP菜单里启用了 Allow sub dissector to reassemble TCP streams。它表示 Wireshark可以把屈于同一个应用层PDU(比如SMB的Read Response和 Write Request之类)的 TCP包虚拟地集中起来。
11.[Continuation to #]
你看到这个提示,说明已经在 Edit->Preferences→Protocols→TCP菜单里关闭了Allow sub dissector toreassemble TCPstreams。
12.[Time-to-live exceeded (Fragment reassembly time exceeded)]
ICMP 的报错有好多种,大都不难理解,所以我们只举其中的一种为例。[Fragment reassembly time exceeded]表示这个包的发送方之前收到了一些分片,但是由于某些原因迟迟无法组装起来。
- 来源于《Wireshark网络分析的艺术》