Wireshark で [TCP ZeroWindow] , [TCP Window Update] , [TCP Window Full] が多発する原因とその対策

Wireshark でしばしば観測される TCP Window 関連の表示についてまとめてみました。

TCP Window とは

これらの表示に関連する TCP Window とは、TCP のフロー制御の実装のことです。

簡単に言うと、データを受信する立場からすると、『大量データを送り付けられても処理しきれない、とは言っても少量ずつ送られても効率が悪い』という問題をうまく制御して、程よい速さで相手に送らせる方法のことです。

TCP Window の詳細については以下をご参照下さい。

関連記事

TCP のフロー制御の実装 TCP ではデータ(セグメント)を受信したことを ACK で相手に知らせますが、TCP セグメントを受信するたびに ACK を返していては効率が悪いので、TCP では、規定の量の TCP セグメントを受信するま[…]

[TCP ZeroWindow] が示す状況

[TCP ZeroWindow] が送信される、というのは、TCP においてデータ受信側が「もう処理しきれないから一度送るのを待って!」と送信側に伝えている状況です。具体的には、相手に Ack と共に、TCP の"Windowフィールド" を 0 にセットしたパケットが観測されたときに表示されます。

[TCP Window Update] が示す状況

一方、[TCP Window Update] の送信は、「処理できるバッファが出来たから送信を再開して下さいね!」と送信側に伝えている状況です。具体的には、ZeroWindow と同じ ACK 番号で、TCP の "Windowフィールド" に自身の受信バッファ分の数値をセットしたパケットが観測されたときに表示されます。

なお、通常の TCP のやり取りの中でも Window の Update はしているのですが、特に相手に送る用事が無い(最後に受信したデータに対する Ack も送信済)ときに Update する場合は、この表示がされます。

[TCP Window Full] が示す状況

最後に、[TCP Window Full] ですが、これは送信側が、『受信側の受信バッファの限界まで送り切ったった』という状況です。これは Wireshark が Window と送信量を計算しており、この状況を把握してわざわざ表示してくれているのです。Expert Info には "tcp window specified by the receiver is now completely full" と表示されます。

これら3つの表示が多発する状況とは

可能性は 2 つあります。

単に受信側の処理が遅い

1 つは単純に『データ受信側のバッファがオーバーフローし、送信側にデータ送信を止めるように伝え (ZeroWindow)、バッファが出来たらその容量を伝え (Window Update)、またクライアント側が処理し切る前に送信側がバッファ容量の限界まで送りつける』という状態。

つまり、データ受信側の処理能力がネットワーク速度に比べて非常に遅い場合が該当します。

この場合の対策は、データ受信側のスペックを上げるしかありません。

データ受信側が帯域制御している

もう 1 つは、クライアント側が帯域制御のためにわざとそのような状態を作っている可能性です。

これは具体的にはアプリケーションの TCP/IP ソケット API に関する作り方に依るのですが、例えば curl コマンドや wget コマンドで "--limit-rate" オプションを付けた場合や、rsync コマンドで "--bwlimit" を付けた場合等には、クライアントは一定量をダウンロードした後、これらの一連の動作を繰り返して、速度を制御します。

以下は curl コマンドで速度を 100kbps に制限する例です。

# curl --limit-rate 100k http://www.yahoo.co.jp

この例ではあくまでコマンドのオプションで明示的に実行しているので分かり易いですが、アプリケーションによってはこのあたりは明示的でない可能性もありますので、頻発するようであればアプリ開発ベンダへ問い合わせする必要があります。

【厳選 3 冊】パケットキャプチャを学ぶための本

パケットキャプチャ関連でお奨めの本を 3 冊紹介します。どれも私のサイトからの購入率が高いものです。

パケットキャプチャの教科書
本書では、これからパケット解析を始める人を対象に、パケットキャプチャツールのデファクトスタンダード「Wireshark」の使い方や、実際に現場で見かけるパケットを理解するうえで必要な知識を、じっくり丁寧に解説します。
実践 パケット解析 第3版 ~Wiresharkを使ったトラブルシューティング~

現場での利用方法や具体的なトラブルシュート方法など、現場で活用できる技が豊富に記載されています。サンプルのキャプチャファイルを実際に見ながら学べるので初心者にも分かり易く学べます。

本書ではWiresharkで実際に取得したパケット情報の実例を使って問題やトラブルの解析方法を詳しく解説します。パケットのキャプチャファイルはWebからダウンロードでき、初心者も実際に試しながら理解を深めることができるので、ネットワーク管理の初心者に好適です。
パケットキャプチャ 無線LAN編 ~Wiresharkによる解析~

無線を見える化し、セキュリティやトラブルシュートを行うためのノウハウが豊富に記載されています。無線LANのエンジニアなら必携です。

大好評ロングセラー『パケットキャプチャ』シリーズ第3弾!無線LANのパケットを「見える化」! !ダウンロードして使えるサンプルパケット付き

あなたが成長の日々を歩めますように。

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG