如果源主機和目的主機不在同一網段,ARP請求的廣播幀無法穿過路由器,源主機如何與目標主機實現通信?
補充一下問題,避免因問題不完整而出現誤解。
----------------------------------------------------------------------------------------------不同網段的主機通信時,主機會封裝網關(通常是路由器)的mac地址,然后主機將數據發送給路由器,后續路由進行路由轉發,通過arp解析目標地址的mac地址,然后將數據包送達目的地。
具體過程分析如下:
如上圖,主機A、B通過路由器連接,屬於兩個不同的網段子網掩碼24(255.255.255.0)
1、主機A有數據發往主機B,數據封裝IP之后發現沒有主機B的mac地址;然后查詢ARP,ARP回應:“我在192.168.3.0/24網段,目標地址在192.168.4.0/24,不屬於同一網段,需要使用默認網關”;ARP發現默認網關是192.168.3.2,但是沒有網關mac地址,需要先進行查詢
2、主機將數據包先放到緩存中,然后發送ARP查詢報文:封裝自己的mac地址為源mac,目標mac地址寫全F的廣播地址,請求網關192.168.3.2的mac地址。然后以廣播方式發送出去
3、路由器收到廣播數據包,首先將原192.168.3.1添加到自己的mac地址表中,對應mac地址為0800.0222.2222。路由發現是請求自己的mac地址,然后路由回復一個ARP應答:封裝自己的IP地址為源IP自己的mac地址為源mac,主機A的IP為目的IP主機A的mac為目的mac,發送一個單播應答“我是192.168.3.2.我的mac地址為 0800.0333.2222”
4、主機收到應答后,將網關mac地址對應192.168.4.2(跨網關通信,其他網段IP地址的mac地址均為網關mac),然后將緩存中的數據包,封裝網關mac地址進行發送
5、路由收到數據包,檢查目的IP地址,發現不是給自己的,決定要進行路由,然后查詢路由表,需要發往192.168.4.0網段中的192.168.4.2地址。路由准備從相應接口上發出去,然后查詢mac地址表,發現沒有主機B的映射。路由器發送arp請求查詢主機B的mac地址(原理同2、3步,主機B收到請求后首先會添加網關的mac地址,然后單播回復arp請求)。
6、路由器收到主機B的mac地址后,將其添加到路由mac地址表中,然后將緩存中的數據2層幀頭去掉,封裝自己的mac地址為源mac,主機B的mac地址為目的mac(源和目的IP地址不變),加上二層幀頭及校驗,發送給主機B。
7、主機B收到數據之后,進行處理,發送過程結束。
8、如果主機B收到數據后進行回復,主機B會進行地址判斷,不在同一網段,然后決定將數據發送給網關,主機B查詢mac地址表獲得網關mac地址,將數據封裝后發送(arp地址解析的過程不再需要了,mac地址表條目有一定的有效時間),網關收到數據后直接查詢mac表,將二層幀mac地址更改為A的mac發送出去。如此,主機A收到主機B的回復。
綜上在跨網段通信過程中有以下過程:
1、判斷地址是否同一網段
2、查詢目的IP地址的mac(發送arp請求)
此外需注意點:
1、ARP請求以廣播發送、以單播回應
2、路由器隔離廣播。每一個網段都是獨立的廣播域
3、跨越網段通信需要使用網關的mac地址
ps:如想深入分析,建議模擬環境,進行抓包操作,可以看到具體經歷了哪些過程,有助於深入了解。