選択確認応答(SACK)

選択確認応答(SACK)

 SACK(Selective Acknowledgment)は、TCPプロトコルで使用される選択的な確認応答の一種です。TCPでは、データ転送時に受信側が正常に受信したデータを確認するために、アクノリッジ(ACK)を送信することで通信の確立や安定性を維持します。しかし、データ転送時に一部のパケットが失われた場合、通常のACKでは再送要求するパケットを特定することができないため、通信の効率が低下します。

 SACKは、受信側が受信したデータのシーケンス番号を記録し、欠落したパケットを送信側に通知することで、再送要求するパケットを特定し、通信の効率を向上させる技術です。また、SACKは通信路において特定の箇所が混雑した際に、特定のパケットをスルーすることで混雑を回避することも可能です。

 SACKは、TCP Fast RetransmitやTCP Selective Retransmitなどの高速化技術と併用されることが多く、現代のTCP/IPネットワークにおいては、高速・高品質な通信を実現する上で欠かせない技術の一つとなっています。

 SACK(Selective Acknowledgment、選択的確認応答)は、TCP(Transmission Control Protocol)において、受信したパケットのうち、正常に受信できたものと欠落しているものを区別して送信元に通知するためのメカニズムです。SACKを使用することで、通信の品質を向上させることができます。

 TCPでは、パケットの送信元が受信側からのACK(Acknowledgment、確認応答)を受け取ることで、パケットの受信を確認します。一方、パケットが欠落している場合、受信側は欠落しているパケットを要求するために、再送要求を送信します。しかし、複数のパケットが欠落している場合、再送要求が重複して送信されることがあります。これは、通信帯域を無駄に使用し、通信の品質を低下させる原因となります。

 SACKでは、受信側が正常に受信したパケットのシーケンス番号をACKとともに送信元に通知することで、再送要求が重複して発生するのを防ぎます。また、欠落しているパケットのシーケンス番号も送信元に通知することで、再送要求を行う必要のあるパケットを特定することができます。

 SACKは、RFC 2018で規定されています。ただし、すべてのTCP実装がSACKをサポートしているわけではなく、サポートしていない場合でも通信が行われるように、SACKオプションは通信のオプションフィールド内に格納されます。