ルーター動作内でのフラグメンテーション機能について

【ネットワークはなぜつながるのか 第2版 】より

ルーターの動作に関して、大きいパケットをフラグメンテーションする際

クライアントが送った元のパケットは

(MACヘッダー) (IPヘッダー) (TCPヘッダー) (データ)

とあります。これを分割すると
◼︎パケットA
(MACヘッダー) (IPヘッダー) 【(TCPヘッダー) (分割データ1)】
◼︎パケットB
(MACヘッダー) (IPヘッダー) 【(分割データ2)】

となり、IPから見ればTCPヘッダーもデータを扱うので、このような扱いになると図3に書いています。

初心者なので理解にも時間が掛かるのだと思いますが、
もし、この場合で分割して送った場合、サーバーで受け取るとパケットAはTCPヘッダーがあるので、接続情報が読み取れますが、
パケットBに関しては、図3の方に、TCPヘッダーの記入がないため、TCPヘッダーを含まないただのデータとして私が理解してしまい、
サーバーが接続情報が読み取れないのではと疑問に思ってしまいました。

分割したデータは元のデータに戻し、それもシーケンス番号等使用すると思うのですが、
その番号が記述されているのもTCPヘッダーだと思います。

この場合のパケットBの扱いが、私が知識不足ため理解出来ませんでした
分割したパケットBにもTCPヘッダーがあるのでしょうか?
読みにくい文章であると思いますが、何卒教えて頂きたいと思います。

名前: 
匿名希望
日時: 
14/12/16 09:44

コメント

匿名希望さん、
返事遅くなりました。

フラグメンテーションの機能で分割されたパケットは
分割された姿で受信側まで中継されていきます。
そして、受信する際に、受信側のIPが、
分割された断片を結合して元のパケットに復元します。
そして、その復元したパケットを上位の階層(TCPが代表例)に渡します。

つまり、IPの上位にいるプロトコルが受信するのは、
復元したパケットであって、分割したパケットAとかパケットBではありませんから、
パケットBにTCPヘッダがないから困った、というような事態は起こりません。

それから、フラグメンテーションで分割したパケット断片を元に戻す際に参照するヘッダ情報は
IPヘッダにあるフラグとフラグメントオフセットというフィールドです。
TCPのシーケンス番号ではありません。

質問内容から察するに、
IPのフラグメンテーションと、TCPのデータ分割を混同しているのでは?

両者は全然違うもので、
TCPのデータ分割はIPパケットを作成する前に行うのに対して、
IPフラグメンテーションはIPパケットを作成した後、
それをIPの下位のパケットシステムを使って運ぶ際に発生します。

その違いを整理すれば、疑問は解けるように思います。