7月10日(水)1コマ目
今日、やったこと
パケットからTCPの処理のながれを確認 その2
今日のホワイトボード
パケットからTCPの処理のながれを確認 その2
前回配布したTCPパケットキャプチャ結果を使って、パケットのやり取りを特にTCPに注目して確認。
コネクション確立
①172.164.253->172.16.8.11 コネクション確立1
シーケンス番号が0でない点に注目。
シーケンス番号は0でスタートしません。乱数生成した値を使います。
172.16.4.253のシーケンス番号0相当の値は70668です。
②172.16.8.11->172.16.4.253 コネクション確立2
こちらもシーケンス番号が0でない点に注目。
172.16.8.11のシーケンス番号0相当の値は92019です。
③172.16.4.253->172.16.8.11 コネクション確立3
ここまでがコネクション確立です。
![]() |
| 図 ①~③ コネクション確立 |
データ連続送信
④172.16.4.253->172.16.8.11 データ送信
1460バイトのデータ(1バイト目~1460バイト目)を送信。
①、②のコネクション確立でMSSを通知し、1460より大きなデータは1460バイトに分割して送信することになりました。
シーケンス番号70669から送信元のシーケンス番号初期値を引くと1。1バイト目のデータです。1バイト目から1460バイト目までの1460バイトのデータを送信。
⑤172.16.4.253->172.16.8.1 データ送信
シーケンス番号72129から送信元のシーケンス番号初期値を引くと1461。1461バイト目のデータです。1461バイト目から1631バイト目までの171バイトのデータを送信。
④の続きと思われます。
![]() |
| 図 ④、⑤ データ送信 |
④、⑤と連続してデータを送信していますが、これはTCPの基本動作(データ送信->受信応答受信->データ送信)と異なります。大丈夫なんでしょうか?
受信応答
⑥172.16.8.11->172.16.4.253 ④の受信応答
確認応答番号72129から宛先のシーケンス番号初期値を引くと1461。これは1461バイト目をリクエストしています。
④(1~1460バイト目まで)受信で1460バイト目まで受信しているので、④の受信応答だとわかります。
⑦172.16.8.11->172.16.4.253 ⑤の受信応答
確認応答番号72300から宛先のシーケンス番号初期値を引くと1632。これは1632バイト目をリクエストしています。
⑤(1461~1631バイト目まで)受信で1631バイト目まで受信しているので、⑤の受信応答だとわかります。
![]() |
| 図 ⑥、⑦ データ受信応答 |
データ送信、受信応答+データ送信
⑧172.16.8.11->172.16.4.253 データ送信
シーケンス番号92020から送信元のシーケンス番号初期値を引くと1。1バイト目のデータです。1バイト目から811バイト目までの171バイトのデータを送信。
⑨172.16.4.253->172.16.8.11 ⑧の受信応答+データ送信
確認応答番92831から宛先のシーケンス番号初期値を引くと812。これは812バイト目をリクエストしています。
⑧(1~811バイト目まで)受信で8111バイト目まで受信しているので、⑧の受信応答だとわかります。
さらに、723バイトのデータ(1632バイト目~2354バイト目)も送信しています。
⑩172.16.8.11->172.16.4.253 ⑨の受信応答
確認応答番73023から宛先のシーケンス番号初期値を引くと2355。これは2355バイト目をリクエストしています。
⑨(1632~2354バイト目まで)受信で2354バイト目まで受信しているので、⑨の受信応答だとわかります。
![]() |
| 図 ⑧~⑩ データ送信、受信応答 |
⑨は受信応答をしつつ、データも送信しています。これをピギーバックを呼びます。
データ送信、受信応答+データ送信
⑪172.16.8.11->172.16.4.253 データ送信
シーケンス番号92831から送信元のシーケンス番号初期値を引くと812。812バイト目のデータです。812バイト目から1449バイト目までの638バイトのデータを送信。
⑫172.16.4.253->172.16.8.11 ⑪の受信応答+データ送信
確認応答番93469から宛先のシーケンス番号初期値を引くと1450。これは1450バイト目をリクエストしています。
⑪(812~1449バイト目まで)受信で638バイト目まで受信しているので、⑪の受信応答だとわかります。
さらに、1041バイトのデータ(2355バイト目~3395バイト目)も送信しています。
⑬172.16.8.11->172.16.4.253 ⑫の受信応答
確認応答番74064から宛先のシーケンス番号初期値を引くと3396。これは3396バイト目をリクエストしています。
⑫(2355~3395バイト目まで)受信で3396バイト目まで受信しているので、⑫の受信応答だとわかります。
![]() |
| 図 ⑪~⑬ データ送信、受信応答 |
データ連続送信、まとめて受信応答
⑭172.16.8.11->172.16.4.253 データ送信
シーケンス番号93469から送信元のシーケンス番号初期値を引くと1450。1450バイト目のデータです。1450バイト目から2909バイト目までの1460バイトのデータを送信。
⑮172.16.8.11->172.16.4.253 データ送信
シーケンス番号94929から送信元のシーケンス番号初期値を引くと2910。2910バイト目のデータです。2910バイト目から3221バイト目までの312バイトのデータを送信。
⑯172.16.3.254->172.16.8.11 ⑭、⑮の受信応答
確認応答番95241から宛先のシーケンス番号初期値を引くと3222。これは3222バイト目をリクエストしています。
⑭(1450~2909バイト目まで)受信で2909バイト目まで受信している。
⑮(2910~3221バイト目まで)受信で3221バイト目まで受信している。
⑭と⑮の受信応答をこの1つのパケットでしています。
![]() |
| 図 ⑭~⑯ データ送信、受信応答 |
受信応答を待たずに連続してデータを送信したり、複数のパケットの受信応答を1つのパケットでしてしまうなど、謎の動きがありました。次回はこのあたりを確認します。
次回は
データの連続送信について。
テストはまだしません。





