電子書籍の厳選無料作品が豊富!

現在WiresharkのFlow Graphという機能を使用して、クライアント端末がサーバー端末へのTCP通信での3ウェイハンドシェイクのパケットやりとりを観測したいと思っています。

次のようなパケットをモニターしました。


|Time | 192.168.1.111 |
| | | 192.168.1.222 |
|6.402 | PSH, ACK - Len: 1212 |Seq = 1 Ack = 1
| |(6057) ------------------> (5000) |
|6.606 | PSH, ACK - Len: 1212 |Seq = 1 Ack = 1
| |(6057) ------------------> (5000) |
|6.835 | PSH, ACK - Len: 1212 |Seq = 1 Ack = 1213
| |(6057) <------------------ (5000) |
|7.039 | ACK | |Seq = 1213 Ack = 1213
| |(6057) ------------------> (5000) |
|7.150 | ACK | |Seq = 1213 Ack = 1213


このパケットのやりとりを観ていて思ったのですが、TCP通信は3ウェイハンドシェイクは

SYN--->SYN ACK---> ACK

という順序でのパケットのやりとりをクライアントとサーバー間で行うと思っていたのですが、


PSH, ACK ----> PSH, ACK ----> ACK ----> ACK

このような順序になっているように思うのですが、これはなぜなのかご教授頂けないでしょうか?

どうぞ、よろしくお願い致します。

A 回答 (2件)

>ip.dst == 192.168.1.222 || ip.src == 192.168.1.222



一応、正しい…ですかねぇ。
Flow Graphではなく、WireSharkの画面ではどうなっていますか?
パケットキャプチャから漏れた…という可能性も捨てきれない…というところでしょうか……。

さもなくば……
既にハンドシェーク終わった後からキャプチャしていた…という可能性もありますかね。
# 対象アプリ(サーバアプリ)を終了している状態からキャプチャ開始するとか。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。ハンドシェイクし終わったら、その後はやらないんですね。常にTCPは3wayハンドシェイクをしている物だと思っていました。

お礼日時:2012/12/21 15:09

Flow Graphで表示する前の、フィルタ条件がおかしかった…ということはありませんか?



手元の環境(WireShark 1.8.2とLinuxで動作しているPOP3サーバ)でキャプチャして、
ip.addr == 192.168.1.250
でフィルタしてからFlow Graphで表示すると、ちゃんと3ウェイハンドシェークしていますよ。
# クライアントPCが192.168.1.2(Win7 64Bit)
# POP3サーバが192.168.1.250でDebian。

全角空白とかで成形したけど、ちゃんと見えるかなぁ…。
# ズレてたらテキストエディタなどに貼り付けてください。固定ピッチフォントの。

|Time | 192.168.1.2     192.168.1.250 |
|3.702|     SYN           |Seq = 0
|   |(52553) ------------------> (110)|
|3.702|     SYN, ACK         |Seq = 0 Ack = 1
|   |(52553) <------------------ (110)|
|3.702|     ACK           |Seq = 1 Ack = 1
|   |(52553) ------------------> (110)|
|3.703|     PSH, ACK - Len: 20    |Seq = 1 Ack = 1
|   |(52553) <------------------ (110)|


フィルタをip.dst == 192.168.1.250にしてからだと…
# キャプチャし直したものなのでTimeは異なりますが…。
|Time | 192.168.1.2     192.168.1.250 |
|2.118|     SYN           |Seq = 0
|   |(52557) ------------------> (110)|
|2.118|     ACK           |Seq = 1 Ack = 1
|   |(52557) ------------------> (110)|
|2.120|     PSH, ACK - Len: 6    |Seq = 1 Ack = 21
|   |(52557) ------------------> (110)|
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。

私は

192.168.1.111(クライアント端末) <---> 192.168.1.222(サーバ端末側)

この端末間のパケット通信を

ip.dst == 192.168.1.222 || ip.src == 192.168.1.222 このようなフィルター条件でdisplayしました。

たぶんこれで、

192.168.1.111(クライアント端末) <---> 192.168.1.222(サーバ端末側)

この端末間の通信は全部表示できているんじゃないかと思うのですが、
もし間違いありましたらご指摘頂けるとありがたいです。

お礼日時:2012/10/12 10:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!