nチャンネル通信のための 経路制御 200703006 小川 真人 木下研究室 Nチャンネル通信 N本の経路を用いて、ファイルを分散させて通信を行う方式である。 分散されたファイルが、すべて違う経路を通り相手に届くことが理想である。 N本の経路を用意すれば良い しかし、実装するにあたって 次のような問題点がある 一般のネットワーク インターネット等の通信 指定したルートでデーターを送ることはできない。 経路制御(ルーティング) 提案手法 nチャンネルまでの流れ N本の経路を用いた通信をしたい しかし、ルーターが最短経路を選択してしまう ために不可能 ↓ そこで、ソースルーティングに着目した ソースルーティング SSRR(strict soruce and record route)というオプション を使用する。 IPアドレスのリストを送信前に埋め込まなければなら ない。 ソース・ルート・オプションはデータグラムが経路を通 過するごとにIPアドレスリストが更新される。 ソース・ルート・オプションの形式 39バイト コード データ長 ポインタ 1 1 1 IP アドレス #1 IP アドレス #2 IP アドレス #3 ・・・・・ IP アドレス #9 4バイト 4バイト 4バイト ・・・・・ 4バイト 実験の概要 パソコン4台を使用し、A、Bのパソコンを任意に 選択し通信できるか、実験した • 192.168.1.2 eth1 192.168.1.1 eth1 net1 192.168.3.2 eth2 net3 192.168.3.4 eth1 192.168.2.1 eth2 eth2 192.168.4.4 net2 eth1 192.168.2.3 net4 eth2 192.168.4.3 送信プログラム LSR SourceRoute; memset(&SourceRoute,0,sizeof(LSR)); SourceRoute.Nop = IPOPT_NOP; SourceRoute.Code = 0x89; SourceRoute.Len = 11; SourceRoute.Offset = 4; SourceRoute.Addrs[0] = inet_addr("192.168.1.2"); SourceRoute.Addrs[1] = inet_addr("192.168.3.4"); setsockopt(sock,IPPROTO_IP,IP_OPTIONS,(char*)&SourceRoute,SourceRoute.Len+1) ; n = sendto(sock, "HELLO-1", 7, 0, (struct sockaddr *)&addr, sizeof(addr)); if (n < 1) { perror("sendto"); return 1; } 送信プログラム LSR SourceRoute; memset(&SourceRoute,0,sizeof(LSR)); SourceRoute.Nop = IPOPT_NOP; SSRRを指定 SourceRoute.Code = 0x89; SourceRoute.Len = 11; SourceRoute.Offset = 4; SourceRoute.Addrs[0] = inet_addr("192.168.1.2"); SourceRoute.Addrs[1] = inet_addr("192.168.3.4"); 192.168.1.2を通り 192.168.3.4に 着くように設定 setsockopt(sock,IPPROTO_IP,IP_OPTIONS,(char*)&SourceRoute,SourceRoute.Len+1) ; n = sendto(sock, "HELLO-1", 7, 0, (struct sockaddr *)&addr, sizeof(addr)); if (n < 1) { perror("sendto"); return 1; } 実験の結果 パケットの詳細 listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 c0a8 010b c0a8 ./..@.?..v...... 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c8e8 ................ 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 パケットの詳細 時刻; HH:MM:SS.マイクロ秒 192.168.1.1のポート50002から 192.168.3.4のポート12345に listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 UDPで7文字 c0a8 010b c0a8 ./..@.?..v...... (HELLO-1) 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c8e8 ................ 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 パケットの詳細 イーサネットのプロトコル ヘッダと IPヘッダ 08:00:27:a0:03:39 受信側MACアドレス 08:00:27:a4:22:db 送信側MACアドレス イーサネットタイプ 0800(IP) listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 c0a8 0101 c0a8 ./..@.?......... 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c352 ................R 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 Version:4, ヘッダ長:8(8x4=32byte), サービスタイプ:00, IPから見た全データ長:002f(47) ここから IPヘッダ パケットの詳細 IPヘッダ 識別ID:0000 フラグメント:4000(オクテッ ト) listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 c0a8 0101 c0a8 ./..@.?......... 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c352 ................R 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 生存時間(TTL):3f(63) プロトコル:11(17=UDP) チェックサム1f76 パケットの詳細 IPヘッダ 送信先IPアドレス:192.168.3.4 送信元IPアドレス:192.168.1.1 (受信側) listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 c0a8 0101 c0a8 ./..@.?......... 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c352 ................R 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 オプション:01 0x89:SSRR SourceRoute.Len:0b(11) SourceRoute.Offset :08 パケットの詳細 IPヘッダ 送信先IPアドレス:192.168.3.4 (受信側) listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 c0a8 0101 c0a8 ./..@.?......... 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c352 ................R 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 経由アドレス:192.168.3.2 パケットの詳細 ここからがUDPのヘッダ listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 c0a8 0101 c0a8 ./..@.?......... 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c352 ................R 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 ポート番号:3039 (12345) ポート番号:c352(50002) パケットの詳細 UDPのヘッダ とデータ listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 20:40:08.660333 IP 192.168.1.1.50002 > 192.168.3.4.12345: UDP, length 7 0x0000: 0800 27a0 0339 0800 27a4 22db 0800 4800 ..'..9..'."...H. 0x0010: 002f 0000 4000 3f11 1f76 c0a8 0101 c0a8 ./..@.?......... 0x0020: 0304 0189 0b08 c0a8 0302 c0a8 0304 c352 ................R 0x0030: 3039 000f 6c8f 4845 4c4c 4f2d 31 09..l.HELLO-1 UDPから見たデータ長:000f(15byte) チェックサム:6c8f データ: 4845 4c4c 4f2d 31 (HELLO-1) 禁止設定の解除 各ホストで、 /etc/sysctl.conf を以下のように修正する。 #があれば外して、項目が無ければ追加する。 net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.ip_forward=1 net.ipv4.conf.all.accept_source_route = 1 この設定をしないと、ソースルーティングができない。 まとめ ・nチャンネル通信の実装手法としてソースルーティング を用いることを提案した ・送信パケットのヘッダにオプションを加えるだけで済む ため、ネットワークに負荷をかけずに実現が可能である ・パケットに経路情報を付け加えるだけで、複数の経路 に異なるデータを同時に送信できることを実験によって 確認できた ・ソースルーティングはその危険性のため、各ルーター ごとに設定を解除する必要があることが分かった 課題 ①ルート検索を自動で行い、ソースルーティン グを自動的に行えるようにする ②ソースルーティングは危険性があるために、 制限されているので、対策を考える ③IPv6ではルーティングヘッダを付けるだけで ソースルーティングが可能になったので、IPv6で の実装も今後の課題である
© Copyright 2024 ExpyDoc