2012-05-19 66 views
2

我一直在使用C中的Raw Berkeley套接字,它允許程序員訪問Internet協議套件的第2層(IP標頭)。我想知道原始套接字如何處理第1層(鏈路層)上的傳輸,特別是無線局域網。原始套接字 - 網際協議層

例如,套接字如何知道將數據包發送到哪個網絡接口(eth0或wlan0)?

如果我在無線路由器後面,我還應該使用我的LAN地址(192.168.1.1)還是我的路由器的Internet地址(74.125.226.68)來填充IP頭的IP源地址?

如果我用我的局域網地址(192.168.1.1)來填充IP源地址,那麼當IP頭經過路由器時會發生變化,還是保持這種狀態,以便數據包的接收端嘗試將響應發送到其網絡上的本地主機?

我將不勝感激這方面的任何見解。

回答

3

例如,插座如何知道將數據包發送到哪個網絡接口(eth0或wlan0)?

您可以使用套接字選項SO_BINDTODEVICE將套接字綁定到特定接口。否則,操作系統會選擇一個。

如果我是一個無線路由器後面,我應該還是填補我的IP報頭的IP源地址與我的局域網地址(192.168.1.1),或者用我的路由器的互聯網地址(74.125.226.68)?

您應該使用您的LAN地址。如有必要,路由器負責照顧NAT(網絡地址轉換)。

如果我用我的局域網地址(192.168.1.1)來填充IP源地址,那麼在IP頭經過路由器時會發生變化,還是保持這種狀態,這樣接收端數據包嘗試將響應發送到其網絡上的本地主機?

如果在路由器上啓用了NAT,源地址將更改爲反映路由器的外部地址。否則,您的軟件包可能會被路由器或防火牆丟棄,因爲您的源地址在其上下文中無效。

+0

謝謝澄清,nyi。 – Kokopelli