一、ARP在同網段下的工作原理
每台主機都會在自己的ARP緩沖區中建立一個 ARP列表,以表示IP地址和MAC地址的對應關系。當源主機需要將一個數據包要發送到目的主機時,會首先檢查自己 ARP列表中是否存在該 IP地址對應的MAC地址,如果有,就直接將數據包發送到這個MAC地址;
如果沒有,就向本地網段發起一個ARP請求的廣播包,查詢此目的主機對應的MAC地址。ARP請求數據包里包括源主機的IP地址、硬件地址、以及目的主機的IP地址。網絡中所有的主機收到這個ARP請求后,會檢查數據包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此數據包;如果相同,該主機首先將發送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已經存在該IP的信息,則將其覆蓋,然后給源主機發送一個 ARP響應數據包,告訴對方自己是它需要查找的MAC地址;源主機收到這個ARP響應數據包后,將得到的目的主機的IP地址和MAC地址添加到自己的ARP列表中,並利用此信息開始數據的傳輸。
如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗。
例如:
A的地址為:IP:192.168.10.1 MAC: AA-AA-AA-AA-AA-AA
B的地址為:IP:192.168.10.2 MAC: BB-BB-BB-BB-BB-BB
根據上面的所講的原理,我們簡單說明這個過程:A要和B通訊,A就需要知道B的以太網地址,於是A發送一個ARP廣播請求(誰是192.168.10.2 ,請告訴192.168.10.1),當B收到該廣播,就檢查自己,結果發現和自己的一致,然后就向A發送一個ARP單播應答(192.168.10.2 的MAC地址是BB-BB-BB-BB-BB-BB)。
二、局域網中跨網段主機間通訊
不同網段的主機通信時,主機會封裝網關(通常是路由器)的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地址和IP地址192.168.3.2存到自己的mac地址表中(跨網關通信,其他網段IP地址的mac地址均為網關mac),然后將緩存中的數據包,封裝網關mac地址進行發送;
5、路由收到數據包,檢查目的IP地址,發現不是給自己的,決定要進行路由,然后查詢路由表,需要發往192.168.4.0網段中的192.168.4.2地址。路由准備從相應接口上發出去,然后查詢mac地址表,發現沒有主機B的映射。路由器發送arp請求查詢主機B的mac地址;
6、路由器收到主機B的mac地址后,將其添加到路由mac地址表中,然后將緩存中的數據幀頭去掉,封裝自己的mac地址為源mac,主機B的mac地址為目的mac(源和目的IP地址不變),加上幀頭及校驗,發送給主機B;
7、主機B收到數據之后,進行處理,發送過程結束;
8、如果主機B收到數據后進行回復,主機B會進行地址判斷,不在同一網段,然后決定將數據發送給網關,主機B查詢mac地址表獲得網關mac地址,將數據封裝后發送(ARP地址解析的過程不再需要了,mac地址表條目有一定的有效時間),網關收到數據后直接查詢mac表,將二層幀mac地址更改為A的mac發送出去。如此,主機A收到主機B的回復;
此外需注意點:
1、ARP請求以廣播發送、以單播回應
2、路由器隔離廣播,每一個網段都是獨立的廣播域
3、跨越網段通信需要使用網關的mac地址
4、整個過程中,源IP和目的IP不變,只改變源MAC和目的MAC
原文鏈接:https://blog.csdn.net/qq_32220231/article/details/53511362