ある人が次のようなトレースを送ってきて、「パケット番号」が重複しているので、それが再送を表しているかどうかを尋ねてきました。
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 R0000 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 A R0000 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 A R0000 TCP host2.sub2.dom2.com host.subdomain.domain.co 4000 49957 A R0000 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 接続の最初に、2 つのホストはランダムなシーケンス番号を選択し、送信する TCP データのバイトごとにシーケンス番号をインクリメントします。受信側のホストは、次に表示されると予想されるシーケンス番号を確認応答フィールドにエコーで返します。
以下の例は、パケットが送信されたか受信されたかという情報以上のものに興味がある場合に、packet_monitorの制御引数の最小セットとして推奨するものを示しています。interface 引数は監視するIPインターフェースを識別します。インターフェース名を指定しない場合、 packet_monitor は全てのインターフェースを監視します。Packet_monitorは大量のストリームメモリを使用することができます。これがないと再送を識別する方法がありません。これがなければ、再送を識別する方法がありません。また、トレースを分析する際に有用な他の情報、例えば time to live (TTL) やウィンドウサイズ (ウィンドウ) の値も表示されます。filter -host と -port 引数は、特定の接続を識別するのに役立ち、見なければならないパケットの数を減らすのに役立ちます。
packet_monitor -interface #sdlmux.m16.11-2 -verbose -filter -host 172.16.1.34 -p +フト23号 ディレクトリ icmp 型 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 phx_vos-m16.51094 から 172.16.1.34.telnet への TCP seq 448953077, ack 1766884569, window 65535, 1 データバイト, flags Push Ack. X/Off 05、フラグ 18、Cksum 9c85、Urg-> 0000
Rcvd IP Ver/HL 45, ToS 0, Len 29, ID 45db, Flg/Flg 0, TTL 3c, Prtl 6 Cksum de3d, Src ac100122, Dst ac100174 172.16.1.34.telnet から phx_vos-m16.51094 への TCP seq 1766884569, ack 448953078, window 8192, 1 データバイト, flags Push Ack. X/Off 05, フラグ 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 phx_vos-m16.51094 から 172.16.1.34.telnet への TCP seq 448953078, ack 1766884570, window 65535, 1 データバイト, flags Push Ack. X/Off 05、フラグ 18、Cksum d883、Urg->0000
Rcvd IP Ver/HL 45, ToS 0, Len 29, ID 45dc, Flg/Flg 0, TTL 3c, Prtl 6 Cksum de3c, Src ac100122, Dst ac100174 172.16.1.34.telnet から phx_vos-m16.51094 への TCP seq 1766884570, ack 448953079, window 8192, 1 データバイト, flags Push Ack. X/Off 05、フラグ 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 phx_vos-m16.51094 から 172.16.1.34.telnet への TCP seq 448953079, ack 1766884571, window 65535, 0 データバイト, flags Ack. X/Off 05、フラグ10、Cksum098b、Urg->0000
Rcvd IP Ver/HL 45, ToS 0, Len 28, ID 45dd, Flg/Flg 0, TTL 3c, Prtl 6 Cksum de3c, Src ac100122, Dst ac100174 172.16.1.34.telnet から phx_vos-m16.51094 への TCP seq 1766884571, ack 448953079, window 8192, 0 データバイト, flags Ack. X/Off 05、フラグ 10、Cksum e98a、Urg-> 0000
各パケットには1バイトのデータしか含まれていないため、上記のシーケンス番号は1ずつ増加していますが、もしパケットに10バイト、23バイト、1023バイトが含まれている場合、シーケンス番号は10、23、1023によって上昇します。
では、再送とはどのようなものでしょうか?再送では、シーケンス番号が前のシーケンス番号より小さいか、またはそれと同じで、少なくとも1バイトのデータを持っているものが再送されます。次の例では、シーケンス番号 448953089 が複数回繰り返されています。1回目以外はすべて再送です。
packet_monitor -interface #sdlmux.m16.11-2 -verbose -filter -host 172.16.1.34 -p +フト23号 ディレクトリ icmp 型 tcp dir len proto source destination src port dst port type
Rcvd IP Ver/HL 45, ToS 0, Len 28, ID 4d43, Flg/Flg 0, TTL 3c, Prtl 6 Cksum d6d6, Src ac100122, Dst ac100174 172.16.1.34.telnet から phx_vos-m16.51094 への TCP seq 1766885133, ack 448953089, window 8192, 0 データバイト, flags Ack. X/Off 05、フラグ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 phx_vos-m16.51094 から 172.16.1.34.telnet への TCP seq 448953089, ack 1766885133, window 65535, 1 データバイト, flags Push Ack. X/Off 05、フラグ 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 phx_vos-m16.51094 から 172.16.1.34.telnet への TCP seq 448953089, ack 1766885133, window 65535, 1 データバイト, flags Push Ack. X/Off 05、フラグ 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 phx_vos-m16.51094 から 172.16.1.34.telnet への TCP seq 448953089, ack 1766885133, window 65535, 1 データバイト, flags Push Ack. X/Off 05、フラグ 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 phx_vos-m16.51094 から 172.16.1.34.telnet への TCP seq 448953089, ack 1766885133, window 65535, 1 データバイト, flags Push Ack. X/Off 05、フラグ 18、Cksum 9745、Urg->0000
Rcvd IP Ver/HL 45, ToS 0, Len 29, ID 4f04, Flg/Flg 0, TTL 3c, Prtl 6 Cksum d514, Src ac100122, Dst ac100174 172.16.1.34.telnet から phx_vos-m16.51094 への TCP seq 1766885133, ack 448953090, window 8192, 1 データバイト, flags Push Ack. X/Off 05, フラグ 18, Cksum 7744, Urg->0000
インターフェースと冗長引数の他に、私は time_stamp と数値引数を含めます。time_stamp 引数は、表示されたすべてのパケットにタイムスタンプを置きます。これは、ログファイルのメッセージとトレースの関連付けを容易にし、再送シーケンスのようなイベントが実際にどのくらい続くかを推定することを可能にします。数値引数は、ホスト名やポート名を調べないことでオーバーヘッドを減らします。
packet_monitor -interface #sdlmux.m16.11-2 -verbose -time_stamp -numeric -filter + ホスト 172.16.1.1.34 -ポート 23 ディレクトリアイシーピーがた + 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/Flg 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、フラグ 18、Cksum 9b43、Urg->0000
14:30:17.606 Rcvd IP Ver/HL 45, ToS 0, Len 29, ID 5442, Flg/Flg 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、フラグ 18、Cksum 1b42、Urg->0000
問題がTCPまたはIP層にあることがわかっている場合、通常はこれで必要な情報はすべて揃っています。しかし、問題がアプリケーション層にある可能性がある場合は、実際のデータも必要です。データを表示するには -hex_dump 引数を指定します。デフォルトでは、最初の128バイトのデータのみが表示されます。安全なサイズにするために、私は常にパケット内のすべてのデータを表示するために、長さを1500に設定しています。
packet_monitor -interface #sdlmux.m16.11-2 -verbose -time_stamp -numeric -hex_du +mp -length 1500 -filter -host 172.16.1.34 -port 23 ディレクトリアイシーピーがた + 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.1.34.49562 から 172.16.1.116.telnet までの TCP seq 110526313、ACK 1206659552、ウィンドウ 32768、19 データバイト、フラグ 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 ※これはあくまでもT 10 65 73 74 *エスト
10:25:19.389 Xmit IP Ver/HL 45, ToS 0, Len 3b, ID f969, Flg/Flg 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 データバイト、フラグ 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 ※これはあくまでもT 10 65 73 74 *エスト
10:25:22.263 Xmit IP Ver/HL 45, ToS 0, Len 28, ID f994, Flg/Flg 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データバイト, flags Ack. X/Off 05、フラグ10、Cksum 7b7a、Urg->0000 tcpデータがありません。
packet_monitorトレースを誰かに送信する前に、データをサニタイズすることを忘れないでください。状況によっては、IPアドレスをサニタイズしたいと思うかもしれません。IPアドレスは2つの場所にあり、プロトコルヘッダのデコード行では、標準的な点線付き10進法で表示されます。デコード行のすぐ上の行では、16進数の値として表示されます。
10:25:22.263 Xmit IP Ver/HL 45, ToS 0, Len 28, ID f994, Flg/Flg 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データバイト, flags Ack. X/Off 05、フラグ10、Cksum 7b7a、Urg->0000 tcpデータがありません。