【てぃーしーぴーうぃんどう】

TCPウィンドウ とは?

💡 ACKを待たずに送れる量が、通信速度の上限を決める窓
📌 このページのポイント
TCPウィンドウ(送信ウィンドウ制御) 送信側 Seg 1 ✓ 送信済 Seg 2 ✓ 送信済 Seg 3 → 送信中 Seg 4 → 送信中 Seg 5 待機中 ウィンドウ サイズ データ送信(ACK不要) ACK(受信確認) 受信側 受信バッファ 空き = 受信可能ウィンドウ 「ウィンドウ = 4096B」 と送信側に通知 ウィンドウ内のデータはACKなしに連続送信できる
TCPウィンドウのイメージ
ひよこ ひよこ

TCPで通信するとき、パケットを一個送るたびにACKを待つの?

ペンギン先生 ペンギン先生

毎回待っていたら遅くてしょうがないから、「ウィンドウサイズ」という量のデータをACK前にまとめて送っていいよ、というルールがあるんだよ。

ひよこ ひよこ

ウィンドウサイズって大きければ大きいほどいいの?

ペンギン先生 ペンギン先生

受信側のバッファが満杯だと受け取れないから、受信側が「今これだけ受け取れる」とウィンドウサイズで伝えてくるんだ。送信側はそれを超えないように送る。これをフロー制御というよ。

ひよこ ひよこ

ネットワークが混んでいるときはどうなるの?

ペンギン先生 ペンギン先生

輻輳(ふくそう)といって、ネットワークが混んでくるとパケットが落ちやすくなるんだ。TCPはそれを検知すると「輻輳ウィンドウ」を絞り込んで送信量を減らし、混雑を回復させようとするよ。

ひよこ ひよこ

衛星通信とか遠い国との通信でウィンドウが足りないってことはあるの?

ペンギン先生 ペンギン先生

あるよ!遅延が大きい回線では、ACKが戻ってくる間にウィンドウが使い切れてしまって回線が余るんだ。「ウィンドウスケーリング」という拡張を使うと、ウィンドウを数GBまで広げられて、高遅延・大帯域回線でも性能を出せるんだ。

ひよこ ひよこ

じゃあウィンドウサイズを監視するとネットワーク問題の調査に使えるの?

ペンギン先生 ペンギン先生

そう!WiresharkでTCPストリームを見ると「Zero Window」というアラートが出ることがあって、受信バッファが詰まっているサインだよ。ウィンドウサイズの変化を追うと、ボトルネックがサーバ側なのかネットワーク側なのか切り分けられるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
TCPウィンドウ」って出てきたら「ACKを待たずに一度に送れるデータの量を調整する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「TCP Window / TCP Window Size」 = TCP送信ウィンドウサイズ
💬 Window は「窓」の意味で、一度に覗ける範囲=送れるデータの範囲を窓枠に例えた言葉だよ
← 用語集にもどる