場景:
wlan0?? 192.168.0.77?? 20:7c:8f:6b:e6:7c
wlan2?? 192.168.0.66?? 34:08:04:2e:23:7e
?
socket綁定192.168.0.77
?
開機默認路由:略
?
?
client成功連接server后再對路由修改:
ip route flush table main
route add default dev tun0
route add –net 192.168.0.0/24 dev wlan0
route add –net 192.168.0.0/24 dev wlan2
route add 219.245.89.144 gw 192.168.0.1 dev wlan0
route add 219.245.89.144 gw 192.168.0.1 dev wlan2
?
則此時route –n顯示的路由表:
內核 IP 路由表
目標??????????? 網關??????????? 子網掩碼??????? 標志? 躍點?? 引用? 使用 接口
0.0.0.0???????? 0.0.0.0???????? 0.0.0.0???????? U???? 0????? 0??????? 0 tun0
192.168.0.0???? 0.0.0.0???????? 255.255.255.0?? U???? 0????? 0??????? 0 wlan2
192.168.0.0???? 0.0.0.0???????? 255.255.255.0?? U???? 0????? 0??????? 0 wlan0
219.245.89.144? 192.168.0.1???? 255.255.255.255 UGH?? 0????? 0??????? 0 wlan2
219.245.89.144? 192.168.0.1???? 255.255.255.255 UGH?? 0????? 0??????? 0 wlan0
?
經HA wireshark抓包分析包的以太網MAC知client端經過wlan2路由出去。
?
?
?
?
?
如果將程序中的路由修改最后兩句調換,即
ip route flush table main
route add default dev tun0
route add –net 192.168.0.0/24 dev wlan0
route add –net 192.168.0.0/24 dev wlan2
route add 219.245.89.144 gw 192.168.0.1 dev wlan2
route add 219.245.89.144 gw 192.168.0.1 dev wlan0
?
則此時route –n顯示的路由表:
內核 IP 路由表
目標??????????? 網關??????????? 子網掩碼??????? 標志? 躍點?? 引用? 使用 接口
0.0.0.0???????? 0.0.0.0???????? 0.0.0.0???????? U???? 0????? 0??????? 0 tun0
192.168.0.0???? 0.0.0.0???????? 255.255.255.0?? U???? 0????? 0??????? 0 wlan0
192.168.0.0???? 0.0.0.0???????? 255.255.255.0?? U???? 0????? 0??????? 0 wlan2
219.245.89.144? 192.168.0.1???? 255.255.255.255 UGH?? 0????? 0??????? 0 wlan0
219.245.89.144? 192.168.0.1???? 255.255.255.255 UGH?? 0????? 0??????? 0 wlan2
?
經HA wireshark抓包分析包的以太網MAC知client端經過wlan0路由出去。
?
?
?
?
總結,最后路由出去的網卡接口和socket綁定的接口無關,與路由表有關,從路由表的第一條記錄往下,最先遇到的符合目標地址的記錄就是包遵循的路由記錄。
?
?
?
?
再考慮一個問題,包從對端回到本機時,是從哪個回來的,猜測從哪個網卡出去就從哪個網卡回來。
從wireshark抓到的以太包只有源MAC,沒有目的MAC?!所以不能從wireshark得知HA發到MN時,是發給MN的哪塊網卡的。
?
但是,我們可以從HA的arp表看出端倪。
從表中我們可以得出,雖然socket綁定的是wlan0 (20:7c:8f:6b:e6:7c)上的IP192.168.0.77,但當它通過wlan2路由出去時,添加的是wlan2的MAC(34:08:04:2e:23:7e),HA發往MN時,通過arp表知,是發給wlan2接口的,即MN通過哪塊接口發到HA,HA就將數據發給HA的哪塊接口。
root@ubuntu:~# arp -n
地址???????????????????? 類型??? 硬件地址??????????? 標志? Mask??????????? 接口
219.245.89.161?????????? ether?? 00:e0:4c:3b:64:e0?? C???????????????????? eth0
192.168.0.77???????????? ether?? 34:08:04:2e:23:7e?? C???????????????????? eth1
192.168.0.111??????????? ether?? 00:1b:38:a6:e3:61?? C???????????????????? eth1
219.245.89.214?????????? ether?? 20:6a:8a:43:ba:e3?? C???????????????????? eth0
219.245.89.254?????????? ether?? 00:23:89:1a:03:ed?? C???????????????????? eth0
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
