• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TCP/IP通信3ハンドシェイクについて)

TCP/IP通信3ハンドシェイクとは?パケットのやり取りについての疑問

このQ&Aのポイント
  • TCP/IPのTCP通信の3ハンドシェイク通信について疑問があります。インターネットを使ったある端末でセンターのサーバーとの通信を行い、インターネット回線の正常性を判定する機能があるそうです。その際、1回の通信でどの程度のパケットをやり取りしているのか質問しましたが、約1.2kbyte程度のパケットをやり取りしていると回答されました。
  • WireSharkでパケット通信を観察したところ、端末が1.2kbyteのデータを送信し、サーバーからのACKと思われるパケットが1.2kbyteで返ってきていました。その後、端末が60バイト程度のパケットをサーバーのIPアドレスに送信していました。3ウェイハンドシェイクの総量は1.2kbyteだと思っていましたが、実際には2.46kbyteのやり取りが行われているようです。
  • サーバーが受け取ったデータをACKとして返しているのか疑問です。Wiresharkで確認したところ、サーバーからのACKパケットは送信されたデータと同じではないようでした。データの受信を確認するためには、1か0のデータが返れば十分だと思いますが、なぜ同じ容量のデータを返しているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.2

TCPのAckは、「ここまでのデータを受信したよ」という信号なので、ペイロード(アプリケーションデータ)が乗っている必要はありません。 もちろん、相互にデータをやりとりするようなアプリケーションであればAckのパケットにデータをつけて送信することもありますが、FTPなどでデータをダウンロードする場合などデータが一方向しか流れない場合は、AckはTCPのヘッダだけ流れることもよくあります。 開発はやったことがないので、実際のプログラムでどのように作るかまでは知識が無く、お答えできません。 > Wiresharkでモニタできるデータというのは”あくせとめでぶ”の”あくせ”の層ぐらいまでしか確認できないみたいなことを聞いたことがありました。 Wiresharkは時々使用しますが、データリンク層のプロトコルまでしっかり拾えますが。データリンク層が拾えないなんて言うのは何かの間違いでしょう。 # 余談ですが、「あくせとめでぶ」は「あぷせとねでぶ」の間違いでは? # http://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB

diy_sunny
質問者

お礼

回答頂きありがとうございました。 私も憶測でいろいろと発言してしまい大変申し分けありません。いろいろな状況でACKに乗せるデータもいろいろみたいですね。いろいろなことを勝手に勘ぐってしまっています。確かなことはACKは応答の意味だから、”ちゃんと届いたよ”ということを受けた方が送信した側に返せば大方役目を果たしてますね。 私は勝手に送信側が出したデータが受信側に届くと、受信側が”ちゃんと届いたよ、だって、あなたが送ったデータってこれでしょ! ほら”みたいに全部のデータを送り返すようなやり方はちょっと非効率ですね。別にそこまでしなくてもTCP通信ってデータのチェックサム機能にCRCチェックを行っていたと思うし、かなり厳しいことをやったりしてましたよね、確か。遅れてなければ、TCPなら再送のをWireSharkで見たことがありますし、2,3重のデータの正確性を重んじていることはなんとなくわかります。 ”め”と”ね”は大変申し訳ありません。ありがとうございました。 ”め”ってなに?ってかんじですね。 周りにWireShark仲間がおらず勝手に勘ぐりながら使わせて頂いているような状態です。物理層以外はすべて表示されるというのは知りませんでした。今後ともよろしゅう。

その他の回答 (1)

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.1

TCPの3way handshakeであれば、通常 SYN, SYNACK, ACKのいずれもペイロードを乗せることは通常有りません。なので、パケットサイズとしてはIP+TCPで40byteくらい(イーサネットのフレームヘッダ入れたらもう少し大きい)のはずです。 もし1.2kbyte程度のデータを持っているのであれば、TCPレベルではなくてアプリケーションレベルで何らかのセッション確認をしているものと推測します。こうなるとアプリケーションの仕様などを知らないと何ともいえませんね。

diy_sunny
質問者

お礼

回答頂きありがとうございました。 アプリケーションレベルで何らかの確認をしているということですね。そうすると、そのやり取りはあくまでユーザ側のプログラムでの取り決めだからそこはユーザの仕様によるということなのですね。 私はTCPというプロトコルは、自分がクライアントで送ったデータが1.2kbyteあったら、サーバ側でACKとして返信している1.2kbyteは、ちゃんとサーバ側にクライアントが送信してきたデータがちゃんと届いているということを確認させるためにわざわざそれと同じものを送ってきて、”ほら、ちゃんと届いているでしょ”と確認させるために同じものを送ってきていて、クラアント側もそのデータとチェックサムを確認して、最後は60byte”OK! 了解”って感じで最後のデータを送信しているように感じていたのですが、 別にこれはTCPの物理層に近いプロトコルのやり取りというわけではないのですね。たぶんMicrosoftのVC++とかで作ったプログラムではVC++のTCP/IP通信のソケットプログラムのモジュールに、アプリケーション層のデフォルトの仕様として入っている可能性は十分に考えられますね。 そういえば、Wiresharkでモニタできるデータというのは”あくせとめでぶ”の”あくせ”の層ぐらいまでしか確認できないみたいなことを聞いたことがありました。私の勘違いかも

関連するQ&A