次はICMP応答だ
(IP)Internet Protocolについて調べています。
例のごとく、ネットワークの知識は皆無な実装のために調べたことをメモがてら書いていきます。
ネットワークの知識がある人から怒られそうですが(汗。
次にやりたいこと
MonaからICMPエコー応答を返したい。
ICMP(Internet Control Message Protocol)はIPと不可分のプロトコルで、IPのやり取りの途中で起こったエラーメッセージを運ぶ役割があります。
と小難しい話は横においておいて、ICMPでは受け取るメッセージに「ICMPエコー要求メッセージ」というものがあります。
これは何に使われるかというと、リモートのネットワークやホストに到達できるかどうかを調べるために使われます。
ホスト→(ICMPエコー要求)→どこか
という流れで、ホストからICMPエコー要求して
ホスト←(ICMPエコー応答)←どこか
とICMPエコー応答が返ってきます。
応答が返って来れば、到達可能ということになります。
あれこれどこかで出会ったことありますね。そう ping です。(白々しいな)
ping の中身はこういう実装になっているわけです。
ということなので次の目標は Mona が WindowsからのICMPエコー要求にICMPエコー応答を返すこととしようと思います。
つまり Windowsからの ping にMonaが応答するということになります。
どこまでできているか
つい先日までの実装で、ARP応答、IPヘッダ受信、ICMPヘッダ受信までは実現しています。
IPヘッダはこんな感じの構造で
typedef struct{ byte verhead; byte tos; word len; word id; word frag; byte ttl; byte prot; word chksum; dword srcip; dword dstip; char data[0]; }IPHeader;
ICMPヘッダは以下のような構造です。
typedef struct{ unsigned char type; unsigned char code; unsigned short chksum; char data[32]; }ICMPHeader;
IPHeaderのdata部に、ICMPヘッダが含まれている構造なっており、IPにICMPが含まれているということが分かるでしょう。
受信は簡単でパケットを受信後、ヘッダを解析するだけです。
次にやるべきことは何か?
プロトコルの性質上、ICMPの応答をするということは IPのパケットを送ることを含んでいるので、まずはここから準備が必要そうです。
この手順がさっぱり分からないので調べてみると、大筋で以下の流れになりそうです。
まずはルーティング解決から調べてみます。
- 作者: 竹下隆史,村山公保,荒井透,苅田幸雄
- 出版社/メーカー: オーム社
- 発売日: 2002/02/26
- メディア: 単行本
- 購入: 4人 クリック: 76回
- この商品を含むブログ (136件) を見る