TCP/IP通信の仕組みとパケット分割について

このQ&Aのポイント
  • TCP/IP通信では、データをパケットと呼ばれる小さな塊に分割して送信します。パケットの分割は、データの伝送途中で分割されないように最大サイズになるように区切られます。
  • ルータの役割は、転送先の回線で決められたサイズに合わせてパケットを分割することです。例えば、端末Aからルータ1への通信では、ルータ1のMTUである1000Bに合わせてパケットが分割されます。
  • 具体的なトポロジを仮定した場合、端末Aがサーバと通信する際には、各ルータのMTUに合わせてパケットが分割され、順次転送されます。
回答を見る
  • ベストアンサー

TCP/IPでの通信の仕組み(パケット分割)について

TCP/IPでのパケットの分割の仕組みで疑問に思ったことがあったので質問します。 本を見ると(日経NETWORK 新ネットワーク超入門より) TCPの役割:IP機能の負荷を減らすため、データが伝送途中で分割されないで送れる最大サイズになるように区切る。 ルータの役割:ルータ内のIP機能が、転送先の回線で決められたサイズに合わせて分割したりする。 と書いてあったのですが、 端末A -- ルータ1 -- ルータ2 -- サーバ (MTU:1500B) (1000B) (500B) (それぞれ、端末A ルータ1 MTU 1500B ルータ1 ルータ2 MTU 1000B ルータ2 サーバ MTU 500B と仮定) のようなトポロジを仮定した場合 端末Aがサーバと通信する場合はどのように通信が行なわれるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#6581
noname#6581
回答No.4

そうですね、今はほとんどイーサネットでMTU長は1500byteですから。 ルータは、分割すると転送性能が落ちますので、あらかじめ分割しないようにしているのだと思います。

pirosuke88
質問者

お礼

shigureさん、回答ありがとうございました。 パケット転送に関する疑問を解決することができました。

その他の回答 (3)

noname#6581
noname#6581
回答No.3

#2の補足への回答です。 >TCPは端末Aが属しているネットワークと隣接しているルータ1とルータ2の間のネットワークのMTUまで意識すると言うことでしょうか? いえ、そうではなく、「送信しようとするネットワークのMTU長しか意識しない」です。 端末AのTCP/IPはルータ1とのネットワークしか意識しません。 それから、 DFフラグが立っているパケットは分割禁止なので、分割されません。

pirosuke88
質問者

補足

回答ありがとうございます。 >>送信しようとするネットワークのMTU長しか意識しない」です。 端末AのTCP/IPはルータ1とのネットワークしか意識しません。 意味が分りました。端末Aが属しているネットワークのMTUしかTCPは意識しないと言うことですね。 >>それから、 DFフラグが立っているパケットは分割禁止なので、分割されません。 通信方法は、shigureさんの説明を聞いて ルータで適切なサイズにパケットを分割して目的地まで伝送すると言うことは分かったのですが、 実際にキャプチャーしてみると、Http,Ftpなどは全てのパケットでDFのフラグが立っており、一部のプロトコル(ICMPの一部のメッセージやRIPv1)しかDFが立っていないみたいなのですが、これは通信の方法としてはルータで分割するようになっているが、一般的な通信ではほとんどルータではパケットを分割しないで行なうと言うことでしょうか? イーサネットが大部分で普及してるから!?とか考えてみたのですが・・ 度々、すみません。宜しくお願いいたします。

noname#6581
noname#6581
回答No.2

#1の補足への回答です。 1)の方です。 おっしゃるとおりTCPは、直接つながっているネットワークのMTU長しか意識しません。

pirosuke88
質問者

補足

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サーバへ接続しそれを端末でパケットキャプチャー 質問ばかりですみませんが宜しくお願いいたします。

noname#6581
noname#6581
回答No.1

端末Aからサーバに2000byteのデータを送信した場合 端末A→ルータ1:1500byte と 500 byte のパケット ルータ1→ルータ2:1000byte と 500 byte と 500byte のパケット ルータ2→サーバ:500byte と 500 byte と 500byte と 500 byte のパケット になります。

pirosuke88
質問者

補足

さっそくの回答ありがとうございます。 端末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がつながっている先のネットワークまでであってその先はルータが判断して分割を行なうと言うことでしょうか?

関連するQ&A

  • TCP/IP通信時のパケット分割について、パケットがMTU以下なのになぜ分割されるの?

    Linux-PCと組み込みボード間でTCP/IP(Ethernetで)で通信を行ったときの なぜ?な現象について質問です。 Linux上のプログラムでボードに対して1300バイトのデータを送信(write) しているのですがTCPDUMPでモニタしたところ1024/276バイトに分割されて 送信されています。Linux側のMTUが1500になっているのになぜパケットが 分割されてしまうのでしょうか? ちなみにCygwin上でテストしたときには1つのパケットで送信されていま した。

  • TCP/IPにおける端末間の通信について(NAPT)

    TCP/IPにおける端末間の通信について(NAPT) お世話になります。 TCP/IPについて質問です。 NAPT機能の付いたルータを介し、インターネット越しに通信を行う場合を想定します。 1.端末A(送信側)から端末B(受信側)にTCPあるいはUDPを用いてデータを送信する場合、端末Bでは必ず待ち受けるポートにbind(listen)し、また端末Aでは指定されたポート宛てにデータを送信する必要があると聞きました。 ここまでは理解できますが、ここにNAPT機能の付いたルータが介入する場合、"例外なく"端末B側のルータでポートマッピングを行う必要があるのでしょうか? 2.上記の認識がもし正しい場合、2台の端末で通信を行う場合は少なくとも片方でポートマッピングが必要ということになります。 だとするならば、SkypeやMSNメッセンジャーなどのクライアント側でポートマッピングが必要のないアプリケーションは、必ずサーバを介した通信を行っているということでしょうか? Skypeなどの仕組みを説明しているサイトを見ると、接続の手順を踏んだのちに端末間で通信を行うとの記述があるのですが、いくら接続先のIPがわかっていても、アプリケーション間で接続を確立するには、片方でポートマッピングが必要になると思うのですが、これはどういうことなのでしょうか? 3.上記の認識が正しい場合、UDPで受信する為には必ずポートマッピングが必要ということになります。 だとするならば、クライアント側でポートマッピングが必要のないアプリケーションは、少なくとも受信にはUDPを用いていないということでしょうか? 以上の3点についてお答え頂けると幸いです。 回答お待ちしています。

  • TCP及びUDP通信について

    TCP及びUDP通信について 現在WinSockAPIを用いた通信を行うプログラムを組んでいます。 しかしながらネットワークに関しては初心者で、わからない点がいくつか出てきたので質問させて頂きます。 -------------------------------------------------- 1.TCPで双方向通信を行う場合、サーバ側は指定したポートにbind→listenし、接続を待ち受けます。 クライアント側はサーバのIPを指定し、接続確立後にポートはOSが自動で割り振ると聞きました。 つまり、クライアント側がポートを開放せずに通信が出来るのは、OSなどが自動でポートを割り当て、割り当てたポートに到着したデータを該当アプリケーションに渡すからでしょうか? ポート関連は全てルータが管理しているものだと思っていたのですが、OSがポートを割り当てるという動作がよく理解できません。 -------------------------------------------------- 2.UDPで双方向通信を行う場合、端末A・端末Bともに指定したポートにbindする必要があると聞きました。 つまり、UDPで双方向通信を行う場合、端末A・端末Bの双方でポートを開放する必要があるということでしょうか? -------------------------------------------------- 是非ともご教授ください。

  • 往復でパケットの経路が変わったら?

    お世話になります。 二つの離れた拠点A(192.168.1.0/24)拠点B(192.168.2.0/24)に 2本の拠点間接続(InternetVPNと専用線)が存在すると仮定し、 それぞれ、VPNは192.168.*.254のルータで受け、専用線は*.1の ルータで受けるものとします。 その上で、それぞれのルータは拠点間通信のパケットはすべて 自身のWAN回線に流すものとします。 この際、拠点Aの端末Aから拠点BのサーバBに通信を行うにあたり、 端末AのデフォルトゲートウェイはInternetVPNルータ(192.168.1.254) にし、サーバBのデフォルトゲートウェイは専用線ルータ(192.168.2.1) と設定します。                  ←←   +--[専用線1]----専用線----[専用線1]--+ A-|                           |-B   +--[VPN254]----Internet----[VPN254]--+   →→ (こんな感じ) こういう設定をしてしまうと、 端末AからサーバBに対して通信を行う場合、TCPのSYNは VPN経路を当然のように通ってBに到達しますが、帰り(ACK)は Bから吐き出される場合、専用線側に送出され、専用線経由で 戻っていくように思われます。 まず、この認識は間違いないでしょうか? また、この場合TCP/IPの通信(HTTPとかTelnet、FTP)は 一般的に問題なく行えるのでしょうか?

  • TCP/IP通信3ハンドシェイクについて

    TCP/IPのTCP通信の3ハンドシェイク通信に関して質問なのですが、インターネットを使ったある端末でセンターのサーバーと6秒に1度程度3ハンドシェイク通信を行ってインターネット回線が正常かどうかを判定する機能を持っているそうなのですが、その時に1回の通信でどの程度のパケットをやり取りしているのかということを質問してみたら、約1.2kbyte程度のパケットをやり取りしていると業者の方が言っていました。 ちょっと興味があってWireSharkでこの端末とサーバ間のパケット通信をのぞいてみたところ、端末が1.2kbyte送信していたのですが、サーバからのACKと思われるパケットが1.2kbyteのパケットを返してきていて、再度端末が60バイト程度のパケットをサーバのIPアドレスに送信していました。 私はてっきり、端末とサーバー間のこの3ウェイハンドシェイクのパケットの総量が1.2kbyteだと思っていたのですが、これだと1.2k + 1.2k + 60 = 2.46kbyteとなると思うのですが、パケットのやり取りとしては正しいのでしょうか? サーバー側が受信したら同じ容量の1.2kbyteのデータをACKとして返してきているように思うのですが、Wiresharkで見ても全く同じデータでは無いようでした。サーバはデータを受け取ったら、ちゃんと受信したという1 or 0のデータみたいなものを返せばよいだけだと思うのですが、理由はあるのでしょうか?

  • IP/TCPの通信規格がわか

    現在、遠隔操縦ロボットの製作で通信システムをクライアントサーバー方式を使用しています。 IP/TCPを使っていましたが、質疑応答で、IP/TCPの通信規格は何かと言われましたが答えることができませんでした。どなたか教えてくれませんか?

  • TCP/IPにおけるリジュームの仕組みについて

    現在、「マスタリングTCP/IP 応用編」を読んで、TCP/IPについて学習をしています。 本を読んでいく中で、分からないことがあり、ネットで調べてもいまいち要領を得ませんでしたので質問いたします。 疑問に感じたのは上記書籍の2つの文言です。 (1)「データグラムがネットワークを通るとき、データグラムがネットワークのMTUを超えていれは、フラグメント化を行わなければなりません。」(101Pより引用) (2)「マルチフラグメントデータグラムの最初のフラグメントを受信すると、受信側のホストはバッファースペースを割り当て、タイマー(再構成タイマー)を起動させます。このタイマーが終了しないうちに、すべてのフラグメントが受信されなければなりません。受信終了前にタイマーが終了すると、それまでに受信したフラグメントはすべて破棄され、ICMPメッセージが送信元ホストに送られます。」(102Pより引用) ●質問1 IEにて(LinuxOSのような)大きいサイズのデータをダウンロードしている際に、データ伝送に遅延が発生し、(2)におけるタイマーが終了してしまった場合に、「Internet Explorerではxxxxxxxをダウンロードできません。処理がタイムアウトになりました」といったメッセージが出るという考えで合っていますでしょうか? ●質問2 IEなどではデータのダウンロードが95%まで行っていてもタイムアウトエラーなどでダウンロードが中断すれば、また始めからダウンロードを開始しなければなりません。(この考えは(1)と合っている気がします。) しかし、リジュームに対応しているダウンローダーなどを用いれば、中断しても95%からダウンロードを再開できますが、ダウンローダのリジューム機能というのはどのように実装されているのでしょうか? もう少し具体的に書きますと、自分のPCからOSを格納しているサーバまでのルートが常に一定(たとえばA→B→Z)であれば、(1)で判明したMTUに従って分割された残りの5%に相当するフラグメントファイルのみダウンロードすれば残りファイル全てが手に入るのかもしれませんが、そもそもそんな要求ができるのでしょうか? もし出来るとしても、それは中断前と再開時のルートが同じであるという前提であると考えています。たとえば、1日前にダウンロードを中断し、翌日にダウンロードを再開した際に、ルートが変わっていた場合(例えばA→C→Z)、MTUも変わる事があると思いますが、、、そんな時にはどうやってリジュームを実現するのでしょうか? 長くなりましたが、わかる方、教えていただけると幸いです。

  • TCP/IPについて

    今回自宅サーバを構築しようと思ってるのですが、 説明書を見てやろうと思い、手順どおりやっていったら 問題が発生しました。 最初に説明書には『サーバーとなるパソコンのIPアドレスを設定する』 という項目があるのですが、私のやつはこうなってます。↓(画像) ttp://red.ribbon.to/~mikoto/img.jpg しかし説明書ですはTCP/IPのところに他に[TCP/IP->(ネットワーク カードの名称)]があり、これを選択してIPを設定すると書いてあります。 説明書の画像ではTCP/IP->AtermRCBT(Network)と出てました。 どうしたら表示させることができるのでしょうか? ちなみにWindowsMeでルーターはNEC製のWARP STERΔ AtermWBR75Hです。無線LANでノートパソコンなので横っちょに カード挿してます。どうか宜しく御願い致します。

  • フラグメントIPの再フラグメントについて

    こんにちは。 DFビットが「MoreFragment」かつ、ルータのMTUより大きなサイズのIPパケットが 届いた場合、ルータはフラグメントしてIPを送信しますでしょうか? 下記のような構成と通信フローです。 [PC_A] → [ルータA(MTU1300)] → [ルータB] → [PC_B] ・PC_AがフラグメントしたIPパケット(サイズ:1400byte、DFビット:MoreFragment)  を、PC_B宛に送信 以上、宜しくお願いします。

  • データ通信にかかるパケットについて

    質問です。書籍やWEBで検索しても一向に分かりませんでした。 問題 MTUが1500バイトの通信回線システムにおいて、300KBのデータを送信することを考える。このとき下記の問いに答えなさい。ただし、1KB=1024Bとして計算しなさい。 (1)IPヘッダに20バイト、TCPヘッダに20バイト付加して送信する。すべてのデータを送るためには、何パケットに分割すればよいか。