2017/3/30

TCPのウィンドウ制御を見てみる


TCPではデータをセグメントと呼ぶ単位に分けて転送します。 セグメントの受け渡しには、確認のやり取りをすることで、信頼性を高めています。 今回は高信頼性と高効率な通信のために用いられるTCPのウィンドウ制御を見ていきます。

はじめに

クライアント:mac(192.168.10.2) サーバ:mio.yokohama(202.181.99.77) クライアントからサーバへのHTTPリクエストパケットをクライアント側のwiresharkでキャプチャします。 確認応答という言葉を使っていますが、ACKと同じ意味です。

TCPの確認応答

図はTCPでAliceからBobにデータを送る例です。 セグメントごとに受信の確認応答を送信しています。 そのため、下の図のように、途中で送信エラーが発生した場合でも、送信失敗を検知して再送処理を行うことで高い信頼性を実現しています。 しかし、このように確認応答を行う場合、送信側がセグメントを送信するたび受信側が確認応答を返す必要があり非効率です。 そこで確認応答を待たずにセグメントを送信する仕組みがTCPウィンドウ制御です。 セグメント3つに対して確認応答が1つで済むので通信容量の効率化につながります。 この方法ではセグメントを3つ送信した後、確認応答が返ってくるのを待つ必要があります。 そこでスライディングウィンドウをいう技術を使います。

スライディングウィンドウ

スライディングウィンドウは通信を確立した時に決めておいたウィンドウサイズの範囲内で、最後に確認応答を受け取ってから連続してセグメントを送信する技術です。 つまり、送信側は最後に確認応答を受け取るごとに送信できるセグメントサイズが更新され送信し続けることができます。

参考

Wiresharkを使った解析|ネットワーク入門サイト TCP/IP – TCP Window Control / Flow Control|ネットワークエンジニアとして @network Cisco・アライド実機で学ぶ|TCPの制御(フロー制御・ウィンドウサイズ)その2