有人给我发来了下面的跟踪,问我这是否代表重传,因为"包号"是重复的。
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A T 0486 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 PA。 R 0000 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 A R 0000 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 A R 0000 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 A R 0000 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 A R 0044 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 PA。 T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com 49957 4000 A
我对她使用的"数据包号"有点困惑,她指的是最后两列数字。我解释说,这些是源端口和目的端口号,而不是数据包号。不幸的是,我无法回答她的问题,因为她没有从TCP包头中捕捉到足够的信息,所以无法判断这些是否是重传。
要确定任何TCP数据包是否是重传,你必须捕获数据包的序列号。在每个TCP连接开始时,两个主机选择随机的序列号,然后他们每发送一个字节的TCP数据就增加一个序列号。接收主机会在确认字段中回传它期望下一个看到的序列号。
下面的例子显示了我推荐的packet_monitor的最小控制参数集;假设你感兴趣的不仅仅是一个数据包被发送或接收的信息。interface参数标识了要监控的IP接口。如果您没有提供接口名称,packet_monitor将监控所有接口。Packet_monitor可以使用大量的流内存,使用interface参数将有助于减少这个数量。-verbose参数将实际打印序列和确认号,同样,如果没有这个参数,就无法识别重传。它还将打印其他对分析跟踪有用的信息,例如生存时间(TTL)和窗口大小(window)值。-filter -host和-port参数有助于识别特定的连接,并减少你必须查看的数据包数量。
packet_monitor-interface#sdlmux.m16.11-2-verbose -filter -host172.16.1.34-p +ort23 dir icmp type tcp dir len proto source destination src port dst port type(端口类型) Xmit IP Ver/HL 45,ToS 0,Len 29,ID 8569,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum 9eaf,Src ac100174,Dst ac100122。 TCP从phx_vos-m16.51094到172.16.1.34.telnet。 seq448953077, Ack 1766884569, window 65535, 1个数据字节, flags Push Ack.X/Off 05, Flags 18, Cksum 9c85, Urg-> 0000。 X/Off 05,Flags 18,Cksum 9c85,Urg-> 0000。
Rcvd IP Ver/HL 45,ToS 0,Len 29,ID 45db,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum de3d,Src ac100122,Dst ac100174。 从172.16.1.34.telnet到phx_vos-m16.51094的TCP。 seq 1766884569, ack448953078, window 8192, 1个数据字节, flags Push Ack.X/Off 05, Flags 18, Cksum c984, Urg-> 0000。 X/Off 05,Flags 18,Cksum c984,Urg-> 0000。
Xmit IP Ver/HL 45,ToS 0,Len 29,ID 8576,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum 9ea2,Src ac100174,Dst ac100122。 TCP从phx_vos-m16.51094到172.16.1.34.telnet。 seq448953078, ack 1766884570, window 65535, 1个数据字节, flags Push Ack.X/Off 05, Flags 18, Cksum d883, Urg-> 0000。 X/Off 05,标志18,Cksum d883,Urg-> 0000。
Rcvd IP Ver/HL 45,ToS 0,Len 29,ID 45dc,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum de3c,Src ac100122,Dst ac100174。 从172.16.1.34.telnet到phx_vos-m16.51094的TCP。 seq 1766884570, ack448953079, window 8192, 1个数据字节, flags Push Ack.X/Off 05, Flags 18, Cksum c982, Urg-> 0000。 X/Off 05,Flags 18,Cksum c982,Urg-> 0000。
Xmit IP Ver/HL 45,ToS 0,Len 28,ID 8580,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum 9e99,Src ac100174,Dst ac100122。 TCP从phx_vos-m16.51094到172.16.1.34.telnet。 seq 448953079, Ack 1766884571, window 65535, 0 data bytes, flags Ack. X/Off 05, Flags 10, Cksum 098b, Urg-> 0000。 X/Off 05,Flags 10,Cksum 098b,Urg-> 0000。
Rcvd IP Ver/HL 45,ToS 0,Len 28,ID 45dd,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum de3c,Src ac100122,Dst ac100174。 从172.16.1.34.telnet到phx_vos-m16.51094的TCP。 seq 1766884571, ack448953079, window 8192, 0 data bytes, flags Ack. X/Off 05, Flags 10, Cksum e98a, Urg-> 0000。 X/Off 05,Flags 10,Cksum e98a,Urg-> 0000。
上述序列号增加1是因为每个数据包只包含1个字节的数据,如果数据包包含10个字节、23个字节或1023个字节,序列号就会增加10、23或1023。
那么重传是怎样的呢?重传时,序列号小于或等于前一个序列号,且至少有1个字节的数据,没有数据的数据包不计。在下面的例子中,序列号448953089重复了多次。除第一次外,每次都是重发。
packet_monitor -interface #sdlmux.m16.11-2 -verbose -filter -host 172.16.1.34 -p +ort 23 dir icmp type tcp dir len proto source destination src port dst port type(端口类型)
Rcvd IP Ver/HL 45,ToS 0,Len 28,ID 4d43,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum d6d6,Src ac100122,Dst ac100174。 从172.16.1.34.telnet到phx_vos-m16.51094的TCP。 seq 1766885133, ack448953089, window 8192, 0 data bytes, flags Ack. X/Off 05, Flags 10, Cksum e74e, Urg-> 0000。 X/Off 05,Flags 10,Cksum e74e,Urg-> 0000。
Xmit IP Ver/HL 45,ToS 0,Len 29,ID 9191,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum 9287,Src ac100174,Dst ac100122 TCP从phx_vos-m16.51094到172.16.1.34.telnet。 seq448953089, ack 1766885133, window 65535, 1个数据字节, flags Push Ack. X/Off 05,Flags 18,Cksum 9745,Urg-> 0000。
Xmit IP Ver/HL 45,ToS 0,Len 29,ID 919a,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum 927e,Src ac100174,Dst ac100122 TCP从phx_vos-m16.51094到172.16.1.34.telnet。 seq448953089, ack 1766885133, window 65535, 1个数据字节, flags Push Ack. X/Off 05,Flags 18,Cksum 9745,Urg-> 0000。
Xmit IP Ver/HL 45,ToS 0,Len 29,ID 91a0,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum 9278,Src ac100174,Dst ac100122 TCP从phx_vos-m16.51094到172.16.1.34.telnet。 seq448953089, ack 1766885133, window 65535, 1个数据字节, flags Push Ack. X/Off 05,Flags 18,Cksum 9745,Urg-> 0000。
.. .
Xmit IP Ver/HL 45,ToS 0,Len 29,ID 91f9,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum 921F,Src ac100174,Dst ac100122 TCP从phx_vos-m16.51094到172.16.1.34.telnet。 seq448953089, ack 1766885133, window 65535, 1个数据字节, flags Push Ack. X/Off 05,Flags 18,Cksum 9745,Urg-> 0000。
Rcvd IP Ver/HL 45,ToS 0,Len 29,ID 4f04,Flg/Frg 0,TTL 3c,Prtl 6。 Cksum d514,Src ac100122,Dst ac100174。 从172.16.1.34.telnet到phx_vos-m16.51094的TCP。 seq 1766885133, ack448953090, window 8192, 1个数据字节, flags Push Ack.X/Off 05, Flags 18, Cksum 7744, Urg-> 0000。 X/Off 05,Flags 18,Cksum 7744,Urg-> 0000。
除了接口和verbose参数之外,我还会加入time_stamp和数值参数。time_stamp参数在显示的每一个数据包上都有一个时间戳,这样可以很容易地将日志文件中的消息与跟踪信息关联起来,并允许你估计事件(如重传序列)实际持续的时间。数字参数通过不查找主机或端口名来减少开销。
packet_monitor -interface #sdlmux.m16.11-2 -verbose-time_stamp -numeric-filter + -host 172.16.1.34 -port 23 dir icmp type + tcp hh:mm:ss.ttt dir len proto source destination src port ds. +t端口类型 14:30:17.604 Xmit IP Ver/HL 45, ToS 0, Len 29, ID 9b7b, Flg/Frg 0, TTL 3。 +c,Prtl 6 Cksum 889d,Src ac100174,Dst ac100122。 从172.16.1.116.51094到172.16.1.34.telnet的TCP。 seq 448953090, Ack 1766885134, window 65535, 1个数据字节, flags Push Ack.X/Off 05, Flags 18, Cksum 9b43, Urg-> 0000。 X/Off 05,Flags 18,Cksum 9b43,Urg-> 0000。
14:30:17.606 Rcvd IP Ver/HL 45, ToS 0, Len 29, ID 5442, Flg/Frg 0, TTL 3。 +c,Prtl 6 Cksum cfd6,Src ac100122,Dst ac100174。 从172.16.1.34.telnet到172.16.1.116.51094的TCP。 seq 1766885134,ack 448953091,window 32768,1个数据字节,flags Push Ack。 X/Off 05,Flags 18,Cksum 1b42,Urg-> 0000。
如果你知道问题出在TCP或IP层,这通常是你需要的所有信息。然而,如果问题可能在应用层,你还需要实际的数据。你可以用-hex_dump参数来显示数据。默认情况下,只显示前128字节的数据,为了安全起见,我总是用-hex_dump参数来显示数据。为了安全起见,我总是将长度设置为1500,这将显示数据包中的所有数据。
数据包监测 -接口 #sdlmux.m16.11-2 -verbose -time_stamp -numeric-hex_du +mp -length1500 -filter -host 172.16.1.34 -port 23 dir icmp type + tcp hh:mm:ss.ttt dir len proto source destination src port ds. +t端口类型 10:25:19.387 Rcvd IP Ver/HL 45, ToS 0, Len 3b, ID f8f, Flg/Frg 0, TTL 3。 +c,Prtl 6 Cksum 1478, SRC ac100122, Dst ac100174 从172.16.1.34.49562到172.16.1.116.telnet的TCP。 seq 110526313, ack 1206659552, window 32768, 19个数据字节, flags Push Ack. +. X/Off 05,Flags 18,Cksum d3ee,Urg-> 0000。 偏移量0 . . .4 . . . 8 . . .C . . .0...4...8...C... 0 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 61 20 74 * 这仅仅是一个例子。 10 65 73 74 * est
10:25:19.389 Xmit IP Ver/HL 45, ToS 0, Len 3b, ID f969, Flg/Frg 0, TTL 3。 +c,Prtl 6 Cksum 2a9d,Src ac100174,Dst ac100122。 从172.16.1.116.telnet到172.16.1.34.49562的TCP。 seq 1206659552, ack 110526332, window 8192, 19个数据字节, flags Push Ack. +. X/Off 05,Flags 18,Cksum 33dc,Urg-> 0000。 偏移量0 . . .4 . . . 8 . . .C . . .0...4...8...C... 0 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 61 20 74 * 这仅仅是一个例子。 10 65 73 74 * est
10:25:22.263 Xmit IP Ver/HL 45, ToS 0, Len 28, ID f994, Flg/Frg 0, TTL 3。 +c,Prtl 6 Cksum 2a85,Src ac100174,Dst ac100122 从172.16.1.116.telnet到172.16.1.34.49562的TCP。 Seq 1206659571, Ack 110526332, window 8192, 0 data bytes, flags Ack. X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000。 X/Off 05,Flags 10,Cksum 7b7a,Urg-> 0000。 没有tcp数据。
在向任何人发送带有数据的packet_monitor跟踪之前,记得对数据进行消毒 - 包括文本和十六进制值,以删除专有信息。在某些情况下,您可能还希望对 IP 地址进行消毒。IP地址出现在两个地方,在协议头的解码行中,它们以标准的点阵十进制符号出现。在紧靠解码行的一行中,它们以十六进制值的形式出现。
10:25:22.263 Xmit IP Ver/HL 45, ToS 0, Len 28, ID f994, Flg/Frg 0, TTL 3。 +c,Prtl 6 Cksum 2a85,Srcac100174,Dstac100122 从172.16.1.116.telnet到172.16.1.34.49562的TCP。 Seq 1206659571, Ack 110526332, window 8192, 0 data bytes, flags Ack. X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000。 X/Off 05,Flags 10,Cksum 7b7a,Urg-> 0000。 没有tcp数据。