スライド タイトルなし

Timeout と再送

往復時間
– 予知が困難
– 他のトラフィックに依存

適応再送アルゴリズム
– データの採取
Round Trip Sample の計測

再送に伴う ack-ambiguity
– 最初の伝送からの時間
• 1回おきに紛失 → 徐々に長くなり発散
– 最後の再送からの時間
• 遅延の急増で徐々に短縮し,収束先は
正しい往復時間  k  RTT
Round trip time
Karn のアルゴリズム


あいまいな ack での RTT の更新をしない
遅延の急増
– いつまでも適応しない.
– Timer の backoff
RTT の変動(分散)

RTT の変動   1 /(1  L)
L はネットワークの負荷
– たとえば   2  L  0.3
–  を推定して  として用いる.

新しいアルゴリズム
Diff  Sample  Old_RTT
RTT  Old_RTT    Diff
D  D  h  ( Diff  D)
RTO  RTT  4 D
  0.125
h  0.25
輻輳に対する対応

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になるとコネクションは解放
その他の操作

コネクションのリセット
– 異常事態にRSTビットを立てる
– Abort,切断

Push
– telnet バッファの flush
– ユーザにも通知される.

Urgent
– ^S, ^C
予約済みTCPポート

UDPとは独立であるが,TCP/UDP両方の
サービスを持つものには同じ番号
– たとえば,
• DNS
53
TCP/UDP
/etc/services を見よ.
まとめ
– Reliable, stream, 全2重コネクション
– 大量データの高速高効率転送(sliding window)
– Flow control 広範なネットワークに適用可能
– セグメント単位
– 相乗りで制御情報を運ぶ
• window advertise, バッファ量
• push, urgent, out-of-band message