TCPでは、送信したデータが受信ホストに到達した時にACKという確認応答でデータの到達を知らせる。また、届かなかった場合にはNACKという否定確認応答を返す
これによって、データが正しく届いたかの信頼性を保つようになっている。
しかし、ACKが帰ってこなかった場合にそれをデータが届かなかったのか、それとも帰りのACKが途中で壊れてしまったのか判断がつかない。そこで利用するのがシーケンス番号である
シーケンス番号は、データ1オクテットごとにつけられる連続した番号である
これによって、受信したデータの重複を防ぐ。
シーケンス番号とは、TCPで送信されるパケットに付けられる通し番号。受信側ではシーケンス番号を参照することによりパケットの正しい順番や通信途上でのパケットの欠落を知ることができる。
再送タイムアウトとは、再送せずに確認応答の到着を待つ時間
理想的なのは、「この時間が経過したら確認応答は帰ってこない」と言える最小の時間に設定する
再送タイムアウト時間の決定方法は、
「ラウンドトリップ時間」: 往復時間 (パケット送信のたびに計測)
「揺らぎ」: ラウンドトリップ時間の分散
を合計した値よりも少し大きな時間を設定する
TCPはコネクション型なので、通信の初めと終わりに確認応答をする