データが送信される時、TCPヘッダがデータに付いた後に、IPヘッダが付くというのが私の理解なのですが、@ITによると、TCP擬似ヘッダに用いるIPアドレス情報はIPヘッダから抜き出す、とありました。
@ITの説明に従うと、TCPヘッダより、IPヘッダが先に、生成されていないと駄目な気がします。
私の理解の何処が間違っているか、ご指摘ください。
参照URL
http://www.atmarkit.co.jp/fwin2k/network/baswinlan015/baswinlan015_02.html
おそらく、パケットの組み立て方で、送るべきデータを内側から順に「くるむ」ようにヘッダが作られるイメージを持たれているからではないでしょうか。
送るべきデータが最初にあって、そのデータを TCP でくるみ、さらに IP でくるみ...。
でも実際は、先に通信条件、例えば IP アドレスなり、プロトコル種別(TCP なのか、UDP なのか)なり、ポート番号なりが先に決まっていて、そこに送りたいデータの塊がやってくる、という形になると思います。
例えると、先に段ボール箱が用意されて、送り状のあて先も書いてあって、後から送る中身がやってきて、それを仕分けしてダンボールに詰めていく、といった感じになると思います。
...という説明でどうかな(^^?
下記の URL の 1.4.3 に IP パケットの例がありますので参考まで。
おそらく釈然としないのは、TCP層ではまだIP層の処理に行っていく、IPヘッダもわからないはずなのに、どうしてTCP層でIPヘッダの内容が参照できるのかってところだと思います。
が、少なくともIPアドレス(自分、相手とも)の情報は、IP層ではじめてわかる情報ではなくて、TCP層に入ってきた時点で、すでに確定している情報です。それがIP層へも引き続き渡っているイメージです。
相手先IPアドレスは、アプリケーション層で接続先を指定する時点で既に決まっています。
自IPアドレスも、自身のルーティング情報によって、相手先IPアドレスと通信するためにはどのNIC(複数ある場合)から発信されるのかが確定して、IPアドレスが決まります。これがTCP層へ渡されるのです。
返信遅れてすいません。
ご説明ですと、擬似ヘッダはIPヘッダの情報を使っていないとういことになると思うのですが、そうすると@ITの情報が違うのでしょうか…?もう少し考えて見ます。
おそらく、パケットの組み立て方で、送るべきデータを内側から順に「くるむ」ようにヘッダが作られるイメージを持たれているからではないでしょうか。
送るべきデータが最初にあって、そのデータを TCP でくるみ、さらに IP でくるみ...。
でも実際は、先に通信条件、例えば IP アドレスなり、プロトコル種別(TCP なのか、UDP なのか)なり、ポート番号なりが先に決まっていて、そこに送りたいデータの塊がやってくる、という形になると思います。
例えると、先に段ボール箱が用意されて、送り状のあて先も書いてあって、後から送る中身がやってきて、それを仕分けしてダンボールに詰めていく、といった感じになると思います。
...という説明でどうかな(^^?
下記の URL の 1.4.3 に IP パケットの例がありますので参考まで。
回答ありがとうございます。
ご説明のように、先にすべてのヘッダが準備されていてそこにデータが来るという考えですと@ITの情報にも説明が付くと思います!
回答ありがとうございます。
ご説明のように、先にすべてのヘッダが準備されていてそこにデータが来るという考えですと@ITの情報にも説明が付くと思います!