mones2/05.ICMP応答準備編 IPパケット送信/01.ルーティング解決


Top / mones2 / 05.ICMP応答準備編 IPパケット送信 / 01.ルーティング解決

これは何か

ICMP応答をするためにIPパケット送信の仕組みを作ります。
そのための第一段階として、ルーティング解決が何か?を調べます。

route.png

ここまでの成果

実装準備のためのリファクタリング
ルーティング解決

動作について

QEMUで動作します。

  1. contrib_0.3Net/monesにsampleAppをおき、arptest で make && make install します。
  2. MonaNew/tool/mkimg で make して、ISOをつくります。
  3. QEMUでMonaを起動して、arptest を実行して、Windows側からpingを打つと動作します
  4. WindowsとQEMUのネットワーク連携については、Yamamiさんのまとめをご参照ください。

詳しい解説・資料

IPパケット送信の流れは以下のようになることがわかりました。

  1. ルーティング解決
  2. ARPによるMACアドレス取得
  3. ICMPヘッダの作成
  4. IPヘッダの作成
  5. IPパケットの送出

1番目のルーティング解決が何かを調べました。
IPパケット送信時には本当のあて先のIPアドレス(destIP)がありますが、これが同じサブネットマスク内にあるかどうか?で処理が分岐します。
同じサブネットマスク内にあるということは同一のネットワークに相手がいて、そこに直接パケットを送ればよいということになります。(相手がいる場所がわかっているから。)
逆に同じサブネットマスクではない場合は、相手は自分とは違うネットワークにいることになります。
その場合はネットワークとネットワークを中継する役割を持つルーター(ルートを決定してパケットを配送する機器)に、まずパケットを送ることになります。

つまりパケットを送る際に、あて先によって配送ルートが違いそれを判定するのがルーティング解決になります。 というわけで実装はまた明日。

実装

こんな感じで

dword getIpRoute(Config& config, dword destIp)
{
    dword destSubnet = destIp & config.getSubnetAddress();
    dword mySubnet = config.getIpAddress() & config.getSubnetAddress();
    // 同一サブネット
    if (destSubnet == mySubnet)
    {
        return destIp;
    }
    // ルーターへ
    return config.getDefaultGateway();
}

ついでに、IPアドレスの扱いをきちんとまとめました。
エンディアン変換やら文字列への変換など。

えびさんから貴重なコメントを頂きました。

えび 『はじめまして。いつもROMさせてもらってました。
あえてはじめは簡略化しているのだとは思いますが
同一サブネットじゃなかった場合のあて先は
必ずしもDefaultGatewayではないですよね?
同一サブネットでなかった場合には、次はルーティングテーブルを参照
するのだと思うのですがいかがでしょうか?

なるほど。どちらとも確信が持てなかったので、本で調べてみました。 ISBN:4274062562:titleの第9章「ルーティングの原理」の9.3「ルーティングとサブネットマスク」によると

データの配信にルーターを使う必要があるかどうかを判断するために、ステーションは自分のIPアドレスとサブネットマスクとを、ビットごとにAND計算します。・・・

と書いてあり、同じサブネット内であれば直接ルーティング、異なるネットワークであればルーターにルーティングを任せるようです。

ちなみにネットワーク用語的に「デフォルトゲイトウェイ」と「ルーター」が同義語として使われているか?という部分が自分には分かっていなかったり(´ヘ`;)

コメント

コメントはありません。 コメント/mones2/05.ICMP応答準備編 IPパケット送信/01.ルーティング解決?

お名前:

MENU

now: 7

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2844, today: 1, yesterday: 0

添付ファイル: filesampleApp-2005111302.zip 410件 [詳細] fileroute.png 430件 [詳細] filesampleApp-20051113.zip 408件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (3916d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.028 sec.