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弾を行います。
今回はパケットが受信できない場合も含めます。









