Timeout と再送 往復時間 予知が困難 他のトラフィックに依存 適応再送アルゴリズム データの採取
Round Trip Sample の計測 再送に伴う ack-ambiguity 最初の伝送からの時間 最後の再送からの時間 1回おきに紛失 → 徐々に長くなり発散 最後の再送からの時間 遅延の急増で徐々に短縮し,収束先は
Round trip time
Karn のアルゴリズム あいまいな ack での RTT の更新をしない 遅延の急増 いつまでも適応しない. Timer の backoff
RTT の変動(分散) RTT の変動 L はネットワークの負荷 たとえば を推定して として用いる. 新しいアルゴリズム
輻輳に対する対応 Congestion collapse congestion window 輻輳→遅延→再送→輻輳の悪化 allowed_window = min(受信公告, cong-win) multiplicative decrease (×0.5) window size が1 segment長になるまで減らす. timer backoff slow-start Ackがきたらもう1セグメント広げる.
コネクションの確立 一般には一方が listen 一度の双方向のコネクションを合意 正しい同期のための必要十分条件 双方から同時にでもよい. 3-way handshake timeout で再送,初期seq# の合意(必ずしも1ではない)
3-way handshake
コネクションの close Fin を送る.これを受け取るとEOFを応用プログラムに渡す. 両方がcloseになるとコネクションは解放
その他の操作 コネクションのリセット Push Urgent 異常事態にRSTビットを立てる Abort,切断 telnet バッファの flush ユーザにも通知される. Urgent ^S, ^C
予約済みTCPポート UDPとは独立であるが,TCP/UDP両方のサービスを持つものには同じ番号 /etc/services を見よ. たとえば, DNS 53 TCP/UDP /etc/services を見よ.
まとめ Reliable, stream, 全2重コネクション 大量データの高速高効率転送(sliding window) Flow control 広範なネットワークに適用可能 セグメント単位 相乗りで制御情報を運ぶ window advertise, バッファ量 push, urgent, out-of-band message