1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ネットワーク】TCPウィンドウ制御

Posted at

はじめに

こんにちは。アメリカに住みながら、独学でエンジニアを目指しているTairaです。

現在インターネットの知識の確認するインターネットクイズを定期的にやっているのですが、そこで出てきたTCPのウィンドウ制御について説明していきたいと思います。


TCPウィンドウ制御とは?

TCPウィンドウ制御を説明する前に、TCPの確認です。TCPはインターネット上の通信でよく使われるプロトコルで、以下のような特徴を持っています:

  • パケットの順序を保証する
  • データの正確な送受信を確認する(ACK応答)
  • 必要に応じて再送処理を行う

そして、TCPのデータ転送を効率よく安全に行うために登場するのが「ウィンドウ制御(Window Control)」です。


TCPウィンドウ制御の目的

TCPウィンドウ制御の目的は、以下の2点に集約されます:

  • 送信側が一気に大量のデータを送りすぎないようにする
  • 受信側のバッファに合わせて送信量を調整する

これにより、受信側の処理に不要な負担をかけず、給信線を最大限活用した通信が可能になります。


ウィンドウサイズとは何か

TCPでは、受信側が送信側に対し「現在受け取れるデータ量」を通知します。

このバイト単位の容量を ウィンドウサイズ と言います。


TCPの通信の流れ

  1. 受信側が「ウィンドウサイズ: 1000バイト」を伝達
  2. 送信側は最大 1000バイト までデータを送信
  3. 受信側はデータを処理したら、次のウィンドウサイズを指示

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

TCPは「一度に送信できるデータの範囲」を管理し、ACKが届くたびにその範囲をずらして送信範囲を広げていきます。


TCPヘッダ内のウィンドウサイズ

TCPのヘッダには16ビットのWindow Sizeフィールドがあり、ここに現在の受信可能量が入ります。


TCPウィンドウ制御を理解することで何が良いか?

ソフトウェアエンジニアにとってTCPウィンドウ制御の理解は、以下のような実務上の大きなメリットにつながります:

  • 通信が遅い原因をアプリケーションの問題だけでなく、ネットワークレベルで分析できるようになる
  • RailsなどのWebアプリが「APIレスポンスが遅い」ときに、TCP層に原因があることも特定できる
  • 高遅延ネットワーク(例:海外サーバーや5G)で最大スループットを出すための条件(帯域遅延積)を理解できる

例えば、ウィンドウサイズが小さいと高速回線でも通信速度が上がらず、アプリケーションのボトルネックになってしまうことがあります。


ウィンドウサイズが小さいかどうかを確認する方法

ウィンドウサイズが通信遅延や低速の原因かを調べるには、以下のような方法があります:

クライアント側(ローカルPC)で確認

  • Wireshark:TCPヘッダの Window SizeCalculated Window Size を確認
  • curl -vChrome DevTools:通信時間やTTFB(Time To First Byte)の遅延傾向を把握

サーバー側(EC2や開発中のローカル環境)で確認

  • ss -ti:現在のTCPセッションの送受信キューやウィンドウサイズを確認
  • tcpdump:パケットキャプチャをしてWiresharkで解析

まとめ

項目 内容
目的 送信量を制限して通信を最適化
ウィンドウサイズ 受信側が受け取れるデータ量
送信側の動作 指示された範囲内でデータを送信
動的調整 ACKと一緒にウィンドウサイズを更新
利点 ネットワークのボトルネックを特定し、より高速な通信設計が可能に
確認方法 Wireshark / ss / X-Ray / CloudWatch Logs など
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?