シェルスクリプトマガジン

もしインターネットの1秒が1年だったら 第3回(vol.49掲載)

TLS終了アラートとTCPコネクション切断

9月13日 午前2時51分 HTTPレスポンスの最後のパケット送信

お別れが近づいてきました。夏の間ずっとHTTPレスポンスの手紙を送り続けてきたサーバーちゃんですが、伝えるべき話もだんだんと減っていき、残暑険しい9月の中旬に、ついに71通目の最後の手紙をポストに投函しました。
今回の通信ではデータを送りきってしまえばTCPコネクションはもう必要ないため、名残惜しいですが、サーバーちゃんはデータを送る最後の手紙のTCPヘッダにFIN フラグを立てて、クライアントちゃんにメッセージの終わりを告げます。
この夏の間、サーバーちゃんは平均して47 時間間隔、つまりおよそ1日おきに手紙を送ったことになります。実際にはネットワークの状況によってかなりムラが発生するのですが、今回は実時間換算で5.4ミリ秒がサーバー側の平均パケット送出間隔となりました。この間、データを送出すると同時にクライアント側からのACKセグメントを適宜受け取り、クライアントがデータをどこまで正常に受信できているかをずっと監視し続けます。もし一定時間内にACK応答が返って来ない場合はデータ再送などの処理を行うのですが、今回の計測ではデータ再送は一度も発生しませんでした。郵便局員が有能で助かります。
ちなみに、この最後のFINパケットを送信した段階で、クライアント側から平均60KB程度のACK応答を受け取っています。よって残りの40KBはネットワーク経路上のどこかでバッファリングされていることになります。

10月30日 午前2時29分 HTTPレスポンスの最後のパケット受信

秋も終わりに近づいてきました。渋谷が騒がしくなるハロウィンの前日、サーバーちゃんからの手紙が届きます。
サーバー側とクライアント側のスループットが異なるため、最後のパケットはサーバーが送信してからクライアントで受信するまでにだいぶ時間がかかります。経路上でのバッファリングにも限界があるため、TCPのヘッダには、送信側でパケットの勢いを調節するためのウィンドウサイズという値があるのですが、今回はこれがゼロになることはなく、フロー制御による送出停止は発生しませんでした。
クライアントちゃんがサーバーちゃんからの71通目のお便りを開封すると、FINフラグが立っていました。残念ですが、クライアントちゃんはサーバーちゃんにお別れを告げなければなりません。

「今回のお手紙もこれで終わりね。寂しいなぁ」