プロが教えるわが家の防犯対策術!

TCP/IPのTCP通信の3ハンドシェイク通信に関して質問なのですが、インターネットを使ったある端末でセンターのサーバーと6秒に1度程度3ハンドシェイク通信を行ってインターネット回線が正常かどうかを判定する機能を持っているそうなのですが、その時に1回の通信でどの程度のパケットをやり取りしているのかということを質問してみたら、約1.2kbyte程度のパケットをやり取りしていると業者の方が言っていました。

ちょっと興味があってWireSharkでこの端末とサーバ間のパケット通信をのぞいてみたところ、端末が1.2kbyte送信していたのですが、サーバからのACKと思われるパケットが1.2kbyteのパケットを返してきていて、再度端末が60バイト程度のパケットをサーバのIPアドレスに送信していました。

私はてっきり、端末とサーバー間のこの3ウェイハンドシェイクのパケットの総量が1.2kbyteだと思っていたのですが、これだと1.2k + 1.2k + 60 = 2.46kbyteとなると思うのですが、パケットのやり取りとしては正しいのでしょうか?

サーバー側が受信したら同じ容量の1.2kbyteのデータをACKとして返してきているように思うのですが、Wiresharkで見ても全く同じデータでは無いようでした。サーバはデータを受け取ったら、ちゃんと受信したという1 or 0のデータみたいなものを返せばよいだけだと思うのですが、理由はあるのでしょうか?

A 回答 (2件)

TCPの3way handshakeであれば、通常 SYN, SYNACK, ACKのいずれもペイロードを乗せることは通常有りません。

なので、パケットサイズとしてはIP+TCPで40byteくらい(イーサネットのフレームヘッダ入れたらもう少し大きい)のはずです。
もし1.2kbyte程度のデータを持っているのであれば、TCPレベルではなくてアプリケーションレベルで何らかのセッション確認をしているものと推測します。こうなるとアプリケーションの仕様などを知らないと何ともいえませんね。
    • good
    • 0
この回答へのお礼

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

アプリケーションレベルで何らかの確認をしているということですね。そうすると、そのやり取りはあくまでユーザ側のプログラムでの取り決めだからそこはユーザの仕様によるということなのですね。

私はTCPというプロトコルは、自分がクライアントで送ったデータが1.2kbyteあったら、サーバ側でACKとして返信している1.2kbyteは、ちゃんとサーバ側にクライアントが送信してきたデータがちゃんと届いているということを確認させるためにわざわざそれと同じものを送ってきて、”ほら、ちゃんと届いているでしょ”と確認させるために同じものを送ってきていて、クラアント側もそのデータとチェックサムを確認して、最後は60byte”OK! 了解”って感じで最後のデータを送信しているように感じていたのですが、

別にこれはTCPの物理層に近いプロトコルのやり取りというわけではないのですね。たぶんMicrosoftのVC++とかで作ったプログラムではVC++のTCP/IP通信のソケットプログラムのモジュールに、アプリケーション層のデフォルトの仕様として入っている可能性は十分に考えられますね。

そういえば、Wiresharkでモニタできるデータというのは”あくせとめでぶ”の”あくせ”の層ぐらいまでしか確認できないみたいなことを聞いたことがありました。私の勘違いかも

お礼日時:2009/11/25 10:08

TCPのAckは、「ここまでのデータを受信したよ」という信号なので、ペイロード(アプリケーションデータ)が乗っている必要はありません。


もちろん、相互にデータをやりとりするようなアプリケーションであればAckのパケットにデータをつけて送信することもありますが、FTPなどでデータをダウンロードする場合などデータが一方向しか流れない場合は、AckはTCPのヘッダだけ流れることもよくあります。

開発はやったことがないので、実際のプログラムでどのように作るかまでは知識が無く、お答えできません。

> Wiresharkでモニタできるデータというのは”あくせとめでぶ”の”あくせ”の層ぐらいまでしか確認できないみたいなことを聞いたことがありました。

Wiresharkは時々使用しますが、データリンク層のプロトコルまでしっかり拾えますが。データリンク層が拾えないなんて言うのは何かの間違いでしょう。
# 余談ですが、「あくせとめでぶ」は「あぷせとねでぶ」の間違いでは?
# http://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85% …
    • good
    • 0
この回答へのお礼

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

私も憶測でいろいろと発言してしまい大変申し分けありません。いろいろな状況でACKに乗せるデータもいろいろみたいですね。いろいろなことを勝手に勘ぐってしまっています。確かなことはACKは応答の意味だから、”ちゃんと届いたよ”ということを受けた方が送信した側に返せば大方役目を果たしてますね。

私は勝手に送信側が出したデータが受信側に届くと、受信側が”ちゃんと届いたよ、だって、あなたが送ったデータってこれでしょ! ほら”みたいに全部のデータを送り返すようなやり方はちょっと非効率ですね。別にそこまでしなくてもTCP通信ってデータのチェックサム機能にCRCチェックを行っていたと思うし、かなり厳しいことをやったりしてましたよね、確か。遅れてなければ、TCPなら再送のをWireSharkで見たことがありますし、2,3重のデータの正確性を重んじていることはなんとなくわかります。


”め”と”ね”は大変申し訳ありません。ありがとうございました。
”め”ってなに?ってかんじですね。

周りにWireShark仲間がおらず勝手に勘ぐりながら使わせて頂いているような状態です。物理層以外はすべて表示されるというのは知りませんでした。今後ともよろしゅう。

お礼日時:2009/11/26 12:01

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