【IPA対策】TCPで信頼性を担保する機能

本稿ではIPA試験で必要とされる知識をまとめます。

目次

Retransmit(再送)

Retransmit(再送)

Retransmit(再送)はタイムアウト値に基づく再送機能です。受信側から送信側に想定する確認応答番号(ACK)が返ってこない状態でRTO(Retransmission Time Out:再送タイムアウト)を経過した場合に,送信側から該当パケットを再送します。

RTOはRTT(Round Trip Time:パケットの往復時間)から算出されます。

Fast Retransmit(高速再送)

Fast Retransmit(高速再送)

Fast Retransmit(高速再送)はACKの重複回数に基づいた再送機能です。パケットが欠損するとシーケンス番号も欠損しますが,その際に欠損する直前のシーケンス番号に対応するACKをサーバ側に送り続けます。送信側は「何度も同じACKが送られてきているから,このACKに対応するパケットを送り直さないといけない」と気付ける訳です。この「何度も送られてくるACK」を重複ACKと呼びます。

RTOでタイムアウトする前に再送を開始することから高速再送と呼ばれています。

SACK(Selective Acknowledgement)

SACK(Selective Acknowledgement)

SACK(Selective Acknowledgement)は無駄なTCPセグメントの再送を防ぐための機能です。Fast RetransmitではTCPセグメントが部分的に欠損しても,重複ACKが一定回数検知されないと送信側からは次々とTCPセグメントを送ってしまいます。後続のTCPセグメントが正常に受信されたとしても,Fast Retransmitでは後続の全てのTCPセグメントが再送されてしまいます。

SACKでは,ACKと共に正常に受信できたTCPパケットの範囲を送信側に通知します。重複ACKが一定回数検知された場合でも後続で正常に受信されたTCPセグメントを再送する必要はなく,欠損したTCPセグメントのみを再送すればよくなります。

TCP Fast Open

TCP Fast Open

TCP Fast Open(TFO)は2回目以降のTCPハンドシェイク時にアプリケーションデータも載せて通信する機能です。送信側で初回ハンドシェイク時のSYNでTCPヘッダのオプションフィールドにTFO Cookieリクエストを載せ,通常はサーバ側で発行したTFO CookieをSYN/ACKに載せて返します。このTFO Cookieを次回以降のTCPハンドシェイクのSYNに載せて同時にHTTPリクエストを送ることで,サーバ側は送信側はハンドシェイク済みと判定してSYN/ACKと同時にHTTPレスポンスを送ります。

Nagleアルゴリズム

Nagleアルゴリズム

Nagleアルゴリズムはデータサイズが小さいTCPセグメントをまとめて送信する機能です。ファイルの送受信等のユースケースで効果的ですが,時間的に間隔が空くユースケースでは逆効果になることがあります。

遅延ACK

遅延ACK

遅延ACKはデータサイズが小さいTCPセグメントに対する確認応答をまとめて送信する機能です。送信側で遅延させるNagleアルゴリズムとは対照的な機能であり,Nagleアルゴリズムと同時に有効化すると遅延が発生してしまう可能性があります。

Early Retransmit

Early Retransmit

Early Retransmitは重複ACKの閾値を下げる機能です。Fast Retransmitでは重複ACKが一定回数連続して検知されないと発動されないため,未処理のTCPセグメントが少なくなるパケットの末尾側ではFast Retransmitが発動しなくなってしまいます。Early Retransmitでは,未処理のTCPセグメントに応じてFast Retransmitを発動させる閾値を下げることでパケットの末尾でも迅速な再送を可能にしています。

Trail Loss Probe

Trail Loss Probe

Trail Loss Probeは再送タイムアウト値を下げる機能です。Fast Retransmitでは重複ACKが一定回数連続して検知されないと発動されないため,未処理のTCPセグメントが少なくなるパケットの末尾側ではFast Retransmitが発動しなくなってしまいます。Trail Loss Probeでは,通常再送タイムアウト値よりも小さくなるようなProbe Timeout(PTO)を設定することで迅速な再送を可能にしています。

シェアはこちらからお願いします!
目次