ネットワークの基礎
TCPの送信側が、セグメントが失われたと判断して再送するきっかけとして正しいものはどれか。
- A受信側から、届かなかったセグメントの再送を求める否定応答(NAK)を受け取ったとき
- B途中のルータから、パケットを捨てたことを知らせるICMPのメッセージを受け取ったとき
- C決められた時間内にACKが返ってこないとき(再送タイムアウト)か、同じ確認番号のACK(重複ACK)を続けて受け取ったとき
答えと解説を見る
正解:C. 決められた時間内にACKが返ってこないとき(再送タイムアウト)か、同じ確認番号のACK(重複ACK)を続けて受け取ったとき
TCPの受信側は、届いたデータの続きの番号(次に受け取りたいシーケンス番号)をACKで返します。途中のセグメントが失われると、その後のセグメントが届いても同じ番号のACK(重複ACK)を返し続けます。送信側は重複ACKを3つ受け取ると、タイムアウトを待たずにそのセグメントを再送します(高速再送)。ACKがまったく返らない場合は、RTTの測定から決めた再送タイムアウトの時間が過ぎてから再送し、失敗が続くとタイムアウトの時間を倍々に延ばしていきます。TCPには否定応答(NAK)はなく、混雑で捨てたパケットについてルータが知らせることも一般にはないため、損失はACKの様子から推定します。
- A. TCPには否定応答(NAK)はありません。損失はACKの様子から送信側が推定します。
- B. 混雑で捨てたパケットについて、ルータは一般に送信元に知らせません。
- C. 正しい。再送タイムアウトと、重複ACKによる高速再送の2つがきっかけです。