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