• ベストアンサー

IPフラグメントの結合について

こんにちは。 ネットワーク通信において、IPフラグメントが発生した場合、受信側では、IPヘッダ内の「フラグメントオフセット」フィールドから、受信したパケットが分割されたパケットのどの部分かを特定し、「フラグ」フィールドから、最後のフラグメントかフラグメントの途中かを判定すると思います。 そこで質問なのですが、フラグメント化されたパケットを受信側で再構築する際に、分割されたパケットを全て受信し終えたことを、どこで判断するのでしょうか。 仮に受信したパケットの「フラグ」フィルードが最後のフラグメントだとしても、それ以降に受信順番が逆転してしまったパケットが残っている可能性があります。 また、IPヘッダ内の「ヘッダ長」フィールドは、分割されたサイズが格納されているようなので、分割前の合計サイズは分かりません。 以上、よろしくお願いします。

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

  • ベストアンサー
  • suzui
  • ベストアンサー率67% (199/297)
回答No.2

>分割されたパケットを全て受信し終えたことを、どこで判断するのでしょうか。 受信側で「どこまで受信済みか」というテーブルを持ちます。また、タイマーも持っています。 フラグメントされたパケットが届いて、しかも受信済み確認テーブルの状態が未受信フラグメントの存在を示している場合、タイマーを起動し、一定時間待ちます。 タイマーがExpireするまでの間に、他のフラグメントされたパケットが届かないと、再構成をあきらめます。 >IPヘッダ内の「ヘッダ長」フィールドは、分割されたサイズが格納されているようなので、分割前の合計サイズは分かりません。 最後のフラグメントされたパケットを見れば、分割前の合計サイズは分かりますよね。 Total Length + Fragment Offset = 分割前の合計サイズ 確かに最後のパケットが来るまでは分からないので、再構成用のバッファは十分な大きさを確保してあります。

参考URL:
http://www2s.biglobe.ne.jp/~hig/tcpip/ip.html
kerberos_001
質問者

お礼

ご回答ありがとうございます。 大変よく分かりました。 どうもありがとうございました。

その他の回答 (1)

  • kuma-ku
  • ベストアンサー率54% (1558/2845)
回答No.1
参考URL:
http://www.atmarkit.co.jp/fwin2k/network/baswinlan010/baswinlan010_03.html
kerberos_001
質問者

お礼

ご回答ありがとうございます。 参考にさせて頂きます。 どうもありがとうございました。

関連するQ&A

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

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

  • フラグメントオフセット

    学校での課題で意味不明な点があってので質問させてください。 以下の条件におけるIPヘッダを16進数で示せ. ヘッダチェックサムは#0000でよい. IPv4, IPヘッダ長:20バイト, サービスタイプ:指定なし(0). IPデータグラム長:40バイト, フラグメント識別子:16, フラグメント:後続フラグメントあり, フラグメントオフセット:32, TTL:64, プロトコル:TCP, 始点IPアドレス:100.101.102.103, 終点IPアドレス:200.201.202.203 という課題で, 答えが 4(版)   5(ヘッダ長)   00(サービスタイプ)   0028(データグラム長)       0010(フラグメント識別子)       2020(フラグメントオフセット) 40(TTL)       06(プロトコル)         0000(ヘッダチェックサム) 64656667(始点IPアドレス) C8C9CACB(終点IPアドレス) となっていてフラグメントオフセットが2020な理由がわかりません。。。確かに32だと0x20ですけど・・・・2020っていったいなんなんでしょうか?

  • ルータがIPヘッダをどのように読み取っているのか?

    ■ルータの動作について質問 IPヘッダの「ヘッダ長」フィールドに通常の5と違う7や8が入っており、「オプション」フィールドになんらかのデータが書き込まれていた場合、ルータは宛先IPアドレスに書かれているホストへパケットを通常のように送ってくれるのでしょうか?(一般的なルータに関して) もし、分かる方がいましたら、よろしくお願い致します。

  • IPパケット、TCPパケット、UDPパケット

    IPパケット、TCPパケット、UDPパケットのヘッダ構造とはどんなものなのでしょうか?また各々のフィールドがどのような役割を担っているのかについて教えてください。お願いしますm(__)m

  • IPヘッダーの変更の仕方

    接続しているルーターが100バイトまでしか受け付けてくれないので、送信するパケットのIPヘッダーを変更したいと思っています。 聞いた話によると、IPヘッダーの1バイト目を変更するとパケットを分割する設定になるそうですが、その設定はどこでどのように行うのかを調べたいと思っています。 この問題に関係するHPや書籍をぜひ教えてください。 *ネットワークには詳しくないのでおかしな質問になっていましたら、申しわけありません。 *ちなみにパケットを送信しているマシンのOSはUNIXです。

  • UDPソケット通信におけるデータパケット

    UDPソケット通信をする際、受信データサイズとして考慮するべきサイズはアプリサイズとUDPヘッダー(8バイト)としてソケットオプションで受信バッファサイズを増加させたのですが、予想より受信できるパケット数が少ないです。 例) 1パケットのアプリサイズを10バイトしUDPヘッダーも考慮して実際1パケットあたり18バイトとして、最大5パケット受け取れるようにソケットオプションで アプリサイズ(10バイト)× UDPヘッダー(8バイト)×パケット数(5) 上記のように設定したのですが、実際5パケットも受信できませんでした。 上記のほかにIPヘッダーなども考慮しなければならないのでしょうか? 開発環境:solaris8 C言語

  • 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も変わる事があると思いますが、、、そんな時にはどうやってリジュームを実現するのでしょうか? 長くなりましたが、わかる方、教えていただけると幸いです。

  • IPv4パケットについて

    最近インターネットについての勉強を始めました。 IPv4パケットのヘッダについてなのですが、ここにある主なフィールドって4つ挙げるとしたら、 ・TTL ・ヘッダチェックサム ・フラグ ・プロトコル で正しいですか?

  • アクセス元のグローバルIPアドレスについて

    TCPヘッダ内にはグローバルIPの情報は、無いようなのですが、 サーバがアクセス元のグローバルIPアドレスを知ることが出来るのは、 具体的に受信データ(パケット?)のどの階層のどの部分を解析して解るのですか?

  • NMapでのsyn-finパケットの作成

    NMapWin v1.3.1を使用してサーバのセキュリティをしらべています。 ネット上でNMapの機能として IPフラグメントを使ったSYN/FINスキャン(一部のパケットフィルタを通過する とありました。 そこでFINとSYNのフラグが両方立ったパケットを投げたいのですが、その項目が在りません。 どのようにして、FINとSYNのフラグがたったパケットを投げるようにできるのでしょうか。 項目にはSYN Stealth , FIN Stealthとそれぞれ単体のフラグの項目は在りますが、 両方がありません。御回答お待ちしています。