TCP
再送があり、レイテンシがある
レイテンシの大きなネットワークでもなるべく高いスループットをだす工夫
受信側が、同時に何個受け取れるか(ウィンドウサイズ)を教えると、送信側がウィンドウサイズまでは複数パケットをNWに送れる
適切な分量の転送を維持するしくみ
データセグメントのサイズをコントロールするもの
大きいとたくさんのデータを取得できるってこと
輻輳制御
データの送りすぎを避ける(congestion avoidance)
データが飽和するとパケットがロスし、パフォーマンスが下がってしまう
slow-start
ACKの受信量で輻輳ウィンドウのサイズを変化させる
一定時間内にACKを受信できたらウィンドウを徐々に大きくする 受信できなかったらウィンドウを小さくする
上記は送信側が設定
重複するACKの受信から欠損したパケットを再送する
このときタイマーを待たない
高速回復
重複するACK検出後、slow-startを再設定する
TCPのパフォーマンス
サーバーはpassiveに接続をlistenする
クライアントはactiveに接続を主導する
https://gyazo.com/d11588b8c1e56b47af5a28e532e8e68b
もしパケロスしたら失敗したらタイムアウトして再送される
1. client - SYN -> server 2. client <- SYN, ACK - server
3. client - ACK -> server この後データ転送が開始される
重複ACK検出
輻輳制御アルゴリズム
遅延ACK
Selective ACKnowledgement: SACK
再送の数を減らすしくみ
拡張版がForward ACKnowledgement: FACK
監視する状態を増やし、NW上の残りデータ量をよりうまく調節
疑問
輻輳ウィンドウとスライディングウィンドウは別物か?
現代のインターネットでは多くのアプリケーションがHTTPを利用しており、そのHTTP接続の信頼性は長年にわたってトランスポート層のTCPが一手に担ってきた。TCPは歴史あるプロトコルであり、接続の確立手順といった基本的な機能こそ変化していないが、再送制御機能や輻輳制御機能を中心としてさまざまな改良が加えられている。
トランスポート層の巧妙な仕組みは、TCPの仕様や入門書に当たるだけではなかなか全貌を掴むのが難しい。本誌では、IETFのTransport Areaで活動を続けている西田氏に、トランスポート層を取り巻く技術とその変遷を何回かにわけて解説していただく。今回はその第1回として、ベストエフォートのインターネットにおける再送制御という難題にトランスポート層がどのように立ち向かってきたか、TCPにおける再送制御機構に焦点を当てる。(編集部)