7月26日(月)2コマ目

今日、やったこと

  • シーケンス番号、確認応答番号のテスト
  • パケット解析(主にTCP)

今日のテスト

解答例を挙げておきます。
図 シーケンス番号、確認応答番号 確認テスト1 正解例


今日のホワイトボード

ホームページアクセスに使われるHTTP(TCPを利用する)のやりとりのパケットを解析しました。

①No.6コネクション確立要求

このパケットは172.16.14.160から172.16.8.10へのコネクション確立要求のパケットです。

図 No.6のパケット

コネクション確立

TCPはデータをやり取りする前に、お互いコネクション確立を行います。

まずはクライアント側(172.16.14.160)からサーバー側(172.16.8.10)へコネクション確立要求(TCPヘッダのコントロールフラグ中のSYNを1)します。

最大セグメント長

このコネクション確立時に、TCPヘッダのオプションで最大セグメント長を送信します。

最大セグメント長は1パケットで送信可能なデータサイズの上限です。送信データがこれ以上場合は分割して送信することになります。


②No.7コネクション確立要求

No.6を受信したサーバー側(172.16.8.10)からクライアント側(172.16.14.160)へコネクション確立要求を送信します。

図 No.7のパケット

ACKビット=1

このパケットはコントロールフラグのACKが1になっています。

ACKが1なら「確認応答番号が有効」です。クライアント側へ「1バイト目送って!」と伝えています。

最大セグメント長の決定

また、コネクション確立要求なので、最大セグメント長も送信しています。

今回は両方とも同じ1460バイトです。もし異なる場合は小さいほうに合わせます。

データサイズが1460バイトを超える場合は、複数のパケットに分割して送信されます。


③No.8

No.6からこのNo.8までのパケットでコネクション確立を行っています。

図 No.8のパケット

④No.9クライアントからサーバーへリクエスト

クライアントからサーバーへ「ホームページを見せて」とリクエストしています。

図 No.9のパケット

ホームページのリクエスト

このパケットのTCPヘッダの後ろにはHTTPが続きます。(宛先ポート番号が80より)

ホームページのデータのやり取りはHTTPを使います。

HTTPではホームページをリクエストする際は「GETコマンド」を利用するように決められています。今回は

 GET /yitjc/

を送信しています。

送信データ

このパケットでhシーケンス番号は1、データサイズは330バイトから、クライアント側のデータの1バイト目から330バイト分をサーバーへ送信しました。

ホームページのリクエストは330バイトだとわかります。


⑤No.10ホームページリクエストに対する受信応答

No.9を受信したサーバーはクライアントに受信応答を送信しています。

このパケットにはデータはありません。

図 No.10のパケット

受信応答

確認応答番号が331になっているため、「次は331バイト目を送信して」になります。

これは「330バイト目までは受信したよ」とも読み取れます。

No.9の330バイトはちゃんと受信できていることになります。


⑥No.11サーバーからホームページデータ送信その1

No.9のホームページリクエストに対するレスポンスです。

リクエストされたホームページの内容を送信しています。

図 No.11のパケット

送信データ

シーケンス番号は1、データサイズは1460バイトから、1バイト目から1460バイトのデータを送信しています。


⑦No.12サーバーからホームページデータ送信その2

No.9のホームページリクエストに対するレスポンスの続きです。

図 No.12のパケット

送信データ

シーケンス番号は1461、データサイズは1460からホームページデータの1461バイト目から1460バイト分のデータだとわかります。

No.11が1バイト目から1460バイトまで、No.12が1461バイト目から1460バイトを送信しています。受信側(クライアント)はシーケンス番号からNo.11->No.12の順であることがわかります。

データサイズが1460バイトの理由

コネクション確立時に送信した最大セグメント長で送信データサイズの上限が決まります。

今回の最大セグメント長は1460バイトです。よって、1460バイト以上のデータを送信する際は1460バイトで区切って分割して送信します。


⑧No.17サーバーからホームページデータ送信その7

No.11から7連続でホームページデータを送信しています。

図 No.17のパケット

送信データ

シーケンス番号は8761、データサイズは1000バイトです。

ホームページデータの8761バイト目から1000バイトです。

No.11からNo.16までデータサイズは最大セグメント長の1460バイトです。

ということで、

 6 x 1460 = 8760(バイト)

の8760バイト目までは送信したことになります。

このパケットはその続きの1000バイト分です。


⑨No.18受信応答

ちょっと変則的ですが、このパケットはNo.11からNo.17の7連続でサーバーから送信されたホームページデータに対する受信応答です。

図 No.18のパケット

受信応答

確認応答番号が9761になっていることから「次は9761バイト目から送信して!」ということになります。これは「9760バイト目までは受信したよ」ということにもなります。

No.11からNo.17で受信したデータサイズは

No.11からNo.16のデータサイズは1460バイト、No.17は1000バイトから

 1460 x 6(No.11~No.16) + 1000(No.17) = 9760 (バイト)

の9760バイトです。

よって、No.11からNo.17はちゃんと受信できたことがわかります。


次回は

シーケンス番号、確認応答番号、データサイズのテスト第2弾を行います。

今回はパケットが受信できない場合も含めます。

このブログの人気の投稿

8月18日(水)1コマ目

6月7日(月)2コマ目

5月31日(月)2コマ目