- ベストアンサー
TCP/IP通信の仕組みとパケット分割について
- TCP/IP通信では、データをパケットと呼ばれる小さな塊に分割して送信します。パケットの分割は、データの伝送途中で分割されないように最大サイズになるように区切られます。
- ルータの役割は、転送先の回線で決められたサイズに合わせてパケットを分割することです。例えば、端末Aからルータ1への通信では、ルータ1のMTUである1000Bに合わせてパケットが分割されます。
- 具体的なトポロジを仮定した場合、端末Aがサーバと通信する際には、各ルータのMTUに合わせてパケットが分割され、順次転送されます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そうですね、今はほとんどイーサネットでMTU長は1500byteですから。 ルータは、分割すると転送性能が落ちますので、あらかじめ分割しないようにしているのだと思います。
その他の回答 (3)
#2の補足への回答です。 >TCPは端末Aが属しているネットワークと隣接しているルータ1とルータ2の間のネットワークのMTUまで意識すると言うことでしょうか? いえ、そうではなく、「送信しようとするネットワークのMTU長しか意識しない」です。 端末AのTCP/IPはルータ1とのネットワークしか意識しません。 それから、 DFフラグが立っているパケットは分割禁止なので、分割されません。
補足
回答ありがとうございます。 >>送信しようとするネットワークのMTU長しか意識しない」です。 端末AのTCP/IPはルータ1とのネットワークしか意識しません。 意味が分りました。端末Aが属しているネットワークのMTUしかTCPは意識しないと言うことですね。 >>それから、 DFフラグが立っているパケットは分割禁止なので、分割されません。 通信方法は、shigureさんの説明を聞いて ルータで適切なサイズにパケットを分割して目的地まで伝送すると言うことは分かったのですが、 実際にキャプチャーしてみると、Http,Ftpなどは全てのパケットでDFのフラグが立っており、一部のプロトコル(ICMPの一部のメッセージやRIPv1)しかDFが立っていないみたいなのですが、これは通信の方法としてはルータで分割するようになっているが、一般的な通信ではほとんどルータではパケットを分割しないで行なうと言うことでしょうか? イーサネットが大部分で普及してるから!?とか考えてみたのですが・・ 度々、すみません。宜しくお願いいたします。
#1の補足への回答です。 1)の方です。 おっしゃるとおりTCPは、直接つながっているネットワークのMTU長しか意識しません。
補足
shigureさん、 迅速な回答ありがとうございます。 >>おっしゃるとおりTCPは、直接つながっているネットワークのMTU長しか意識しません。 と言うのは先の例で言うと、 TCPは端末Aが属しているネットワークと隣接しているルータ1とルータ2の間のネットワークのMTUまで意識すると言うことでしょうか? また、pingやftp、httpなどの通信を行ない、Etherealでパケットキャプチャーしてみたところ、IPヘッダーのFlagsの情報にDFフラグがたっているみたいなのですがこれはルータではパケット分割を行なっていないのでしょうか? (RIPは0がたっていたのですがICMP、TCPともに1がたっていました。) 環境 OS Fedora Core 2 方法 Yahooなどに接続,他のネットワークにあるFTPサーバへ接続しそれを端末でパケットキャプチャー 質問ばかりですみませんが宜しくお願いいたします。
端末Aからサーバに2000byteのデータを送信した場合 端末A→ルータ1:1500byte と 500 byte のパケット ルータ1→ルータ2:1000byte と 500 byte と 500byte のパケット ルータ2→サーバ:500byte と 500 byte と 500byte と 500 byte のパケット になります。
補足
さっそくの回答ありがとうございます。 端末Aが2000Bデータを送信する場合、 1)端末AからTCPによって1500B・500Bに分割されたパケットがルータ1に届くとその先はMTUが1000Bなのでルータ1が1000B・ 500B・500Bに分割しておくり、さらにルータ2とサーバ間はMTUが500Bなのでルータ2が500B *4に分割して送る。 2)端末AはTCPによって1500B・500Bに分割されたパケットをルータ1に送る。しかしルータ1とルータ2間のMTUは1000BなのでICMP で宛て先到達不能のメッセージを端末Aに返す。端末AはTCPで1000B・1000Bに分割して再びルータ1に送る。ルータ1はそのパケットをルータ2 に転送する。しかし、ルータ2とサーバ間のMTUは500Bなのでルータ2は端末AにICMPエラーを返す。それを受け取った端末AはTCPで 500B*4に分割したパケットをサーバ宛に送信する。 このどちらかだと考えたのですが、 1)の方式に該当し、 TCPがネットワークで伝送できるサイズを判断してパケットを分割するのは端末Aがつながっている先のネットワークまでであってその先はルータが判断して分割を行なうと言うことでしょうか?
お礼
shigureさん、回答ありがとうございました。 パケット転送に関する疑問を解決することができました。