2

私は、プログラマーがインターネット プロトコル スイートのレイヤー 2 (IP ヘッダー) にアクセスできるようにする C 言語の Raw Berkeley Sockets を使用してきました。特にワイヤレスローカルエリアネットワークに関して、生のソケットがレイヤー1(リンクレイヤー)でトランスポートを処理する方法を知りたいです。

たとえば、ソケットはどのネットワーク インターフェイス (eth0 または wlan0) にパケットを送信するかをどのように認識しますか?

ワイヤレス ルーターの背後にいる場合でも、IP ヘッダーの IP ソース アドレスに LAN アドレス (192.168.1.1) またはルーターのインターネット アドレス (74.125.226.68) を入力する必要がありますか?

IP ソース アドレスに LAN アドレス (192.168.1.1) を入力した場合、IP ヘッダーはルーターを通過するときに変更されますか、それともそのままで、パケットの受信側が送信しようとしますか?ネットワーク上のローカル ホストへの応答?

この分野での洞察をいただければ幸いです。

4

1 に答える 1

3

たとえば、ソケットはどのネットワーク インターフェイス (eth0 または wlan0) にパケットを送信するかをどのように認識しますか?

socket オプションSO_BINDTODEVICEを使用して、ソケットを特定のインターフェースにバインドできます。それ以外の場合は、オペレーティング システムがいずれかを選択します。

ワイヤレス ルーターの背後にいる場合でも、IP ヘッダーの IP ソース アドレスに LAN アドレス (192.168.1.1) またはルーターのインターネット アドレス (74.125.226.68) を入力する必要がありますか?

LAN アドレスを使用する必要があります。ルーターは、必要に応じて NAT (ネットワーク アドレス変換) を処理します。

IP ソース アドレスに LAN アドレス (192.168.1.1) を入力した場合、IP ヘッダーはルーターを通過するときに変更されますか、それともそのままで、パケットの受信側が送信しようとしますか?ネットワーク上のローカル ホストへの応答?

ルーターで NAT が有効になっている場合、送信元アドレスはルーターの外部アドレスを反映するように変更されます。そうしないと、送信元アドレスがコンテキスト内で無効になるため、パッケージがルーターまたはファイアウォールによってドロップされる可能性があります。

于 2012-05-19T17:43:32.150 に答える