私は10Base-Tイーサネットを介して外界と通信しなければならない組み込みシステムを開発しています。ARP、IP、TCP、ICMP(ping)、HTTP、FTPの一部など、Webページを提供するために必要なすべての機能を構築しました。次に、残りのコードをビルドする必要があります。これにより、クライアントとして機能できるようになります。上記のすべてのプロトコルは、サーバーの観点から数か月間正常に機能しています。
次に、他のサーバーにデータを要求するために、これらのプロトコルの半分のクライアントを構築する必要があります。ステップ1は、リモートサーバーのハードウェアアドレスのARPです。私が理解しているように、サーバーは別のネットワーク上にあるため、ゲートウェイはそのMACアドレスで応答する必要があります。これにより、そのIP宛てのすべてのパケットをゲートウェイに渡すことができます。ここに問題があります:
デバイス(192.168.1.251、サブネットマスク255.255.255.0)は、ゲートウェイ(192.168.1.1)またはネットワーク外のマシンからARP応答を取得しません。ただし、私のデバイス(X.251)は、同じルーターの下にあるラップトップ(192.168.1.100)からARP応答を受け取ります。
私は毎回ARP要求に正しく応答するので、基本的なARPイーサネットフレーム構造は正しいと確信しています。違いはOPERATIONフィールドにあり、REQUESTまたはREPLYに応じて1または2になります。
ゲートウェイ(192.168.1.1)へのデバイス(192.168.1.251)の要求は次のとおりですが、応答はありません。
FF FF FF FF FF FF <-宛先MAC-ブロードキャスト(0x00も試行)
00 04 A3 7F C157<-ソースMAC-私のデバイス
08 06 <-ARP
0001<-イーサネット
08 00 <-IP
06<-6バイトのMACアドレス
04<-4バイトのIPアドレス
00 01 <-リクエスト(2 =返信)
00 04 A3 7F C157<-送信者MAC-鉱山
C0 A8 01FB<-送信者IP-鉱山=192.168.1.251
00 00 00 00 00 00 <-ターゲットMAC-不明、要求の理由
C0 A8 0101<-ターゲットIP-ゲートウェイ=192.168.1.1
00 00 00 00 ..... 00 0000<-パディング用の00の18セットのトレーラー
これで、私のデバイス(192.168.1.251)は私のラップトップ(192.168.1.100)とほぼ同じ要求になり、有効な応答が得られます。
FF FF FF FF FF FF <-宛先MAC-ブロードキャスト(0x00も試行)
00 04 A3 7F C157<-ソースMAC-私のデバイス
08 06 <-ARP
0001<-イーサネット
08 00 <-IP
06<-6バイトのMACアドレス
04<-4バイトのIPアドレス
00 01 <-リクエスト(2 =返信)
00 04 A3 7F C157<-送信者MAC-鉱山
C0 A8 01FB<-送信者IP-鉱山=192.168.1.251
00 00 00 00 00 00 <-ターゲットMAC-不明、要求の理由
C0 A8 0164<-ターゲットIP-ラップトップ=192.168.1.100
00 00 00 00 ..... 00 0000<-パディング用の00の18セットのトレーラー
重要な場合と重要でない場合があるサイドノート:
- デバイスとゲートウェイの両方がラップトップのARPテーブルに表示されます。
- 私のラップトップはWin7を実行しています。
- 私のゲートウェイはLinksysWRT54GLWireless-Gブロードバンドルーターです。
- 上記の結果を提供するために、Wiresharkを介してパケットを分析しました。
- DHCPブロックはX.100からX.149をカバーしているので、ラップトップはルーターによってX.100に割り当てられます
- X.251のデバイスIPがデバイスにハードコードされています。ルーター構成アプリで、このIPとデバイスのMACの関係を設定する手段がありません。他のすべての機能は私のデバイスをサーバーとして使用しているように見えるので、これは問題ではないと思います。
- リモートサーバー(google = 173.194.43.33)のARP要求を、サーバーのIPとゲートウェイのIPの両方に直接送信しようとしました(プロキシである必要があることを認識してくれることを期待しています)。
- 机の上で頭を叩いてみましたが、残念ながら少し助かりました。