キャプチャされたパケットを見ていたら、TCPプロトコルで、相手から一つのパケットに対して逐一1つのACKを返すときと、複数のパケットを受け取ってから一つだけACKを返すときがあるのを見つけたのですが、この挙動は正しいのでしょうか。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2007/07/08 14:34:23
  • 終了:2007/07/08 16:28:16

回答(2件)

id:nobu_chiba No.1

nobu_chiba回答回数1ベストアンサー獲得回数02007/07/08 15:05:41

ポイント35pt

正しい挙動ではないでしょうか。

通常大きなデータをTCPでやり取りする際は、パケット単位でACKを

返すのではなく、ある程度のパケットが正常に届いた段階で

ACKを返す仕組みになっています。(効率的に通信するため)

以下のサイトでわかりやすく説明されていますので、参考にしてください。

http://www.networkworld.jp/b-course/-/26204.html

(出典:IDGネットワークワールド)

id:nev

ありがとうございます。

 

しかし、記載されたURLのページを見てみたのですが、そのページの図だと、送信元から受け取ったパケットに対し、受信側は毎回ACKを返しているようです。

 

また、本文にも、

SEND(1)のセグメントがBに届くと、Bはバッファに格納して、ACK(2,2)を返す。これは、「1は受け取ったので、次はシーケンス番号2を送信してください。空いているスペースは、残り2つ分です」という意味だ。同じようにSEND(2)と(3)に対しても、同様のACKを返す。

とあり、毎回ACKを返すような意味合いの文になっているようです。

他に適当な説明URLがありましたら御紹介頂ければ幸いです。

2007/07/08 15:17:03
id:tomo_k No.2

tomo_k回答回数426ベストアンサー獲得回数262007/07/08 16:18:02

ポイント100pt

http://itpro.nikkeibp.co.jp/word/page/10007089/

ここを読むとRWINを大きくするとACKの送信回数が減るとなっています。

つまり、複数パケット分まとめてACKを返すと考えられます。

http://www.7key.jp/nw/tcpip/tcp/tcp2.html

ここをみると、以下のようになっています。

TCP では、別途説明しますウィンドウサイズ(受信バッファの大きさ)以内であれば、ACK パケットを待たずに次のセグメントを送信しても良いことになっています。受信側もまとめて受信したセグメントに対して1つのACK パケットを返せば良いので幾分か効率が上がるのです。

id:nev

理解できました。有り難うございます。

2007/07/08 16:27:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません