ARP的通信過程


  在當今的以太網絡通信中,在IP數據包中有兩個必不可少的地址,那就是IP地址和網卡地址(即MAC地址),在數據包中,無論是IP地址還是MAC地址,都有源地址和目標地址,因為通信是雙方的,所以就必須同時擁有雙方的地址!在同一IP網絡中通信,將會發生以下事件:

  同一網段:

  主機A與主機B通信,這時主機A肯定首先要封裝這些需要發給主機B的數據包,那么對於主機A來說,自己的IP地址和MAC自己肯定能夠輕易得到,對於主機B的IP地址這時主機A也應該知道,要不然它就不清楚自己將要和誰通信,當有了自己的IP地址,MAC地址以及主機B的IP地址后,主機A在數據包中可以正確地寫上源IP地址,目標IP地址,接下來的工作就是寫入自己的MAC地址(即源MAC),最后還必須正確寫入目標主機B的MAC地址,可這時主機A才發現自己根本沒有目標主機B的MAC地址,那該怎么辦呢?這時主機A就通過比較上面已經封裝好的源IP和目標IP,通過子網掩碼計算一下,發現源IP和目標IP恰好在同一個IP網絡內,那么它想要得到目標主機B的MAC地址就有辦法了,首先主機A就向本網段發過一個ARP請求,這個ARP請求包中包括主機A的源IP地址,源MAC地址,目標主機B的IP地址,而目標MAC地址為廣播MAC地址(全部為F),因為我們要找的就是目標MAC,所以這里用廣播MAC地址,又因為是以太網,所以整個局域網的所有主機都能收到這個請求MAC地址的數據包,當然主機B也能收到,因此在主機B收到此ARP請求后,立即構建一個包括自己的MAC地址的ARP回應包,回應給主機A,當主機A收到這個ARP回應后,終於完成了找尋目標MAC的重大任務,從而把目標主機B的MAC地址正確封裝進上面還未封裝結束的正准備發給主機B的數據包,在這時,源IP和源MAC以及目標IP和目標MAC都已正確存在於數據包中,那么這里主機A向網絡內發出這些數據包,因為目標地址在本網段,所以本網段所有主機都能收到這個數據包(這是以太網的特性),最后只有真正的目標主機B能夠打開這些數據包,在此,同網段兩台主機之間的通信就此圓滿結束!

  不同網段:

  在這里應該注意另外一個問題,因為主機A要尋找的目標主機B在同一網絡,所以主機A能夠通過ARP得到目標主機B的MAC地址,從而完成通信,當主機A在封裝數據包時檢測到目標主機並不在本網段,在這時,數據包不能把目標主機的MAC地址順利封裝進去,那么就用到另一種方法,那就是網關,主機A在准備發向主機B的數據中,封裝好自己的IP地址和MAC地址,同時也封裝好目標主機B的IP地址,數據包封裝到這里,主機A就利用上面得到同網段目標主機B的方法去請求得到網關的MAC地址,同樣也是用ARP去廣播,因為網關必須和本機在同一網段,理所當然,網關能夠收到這個ARP請求並能正確回應給主機A,這時主機A在數據包中封裝好自己的IP地址和MAC地址,同時也封裝好目標主機B的IP地址和網關的MAC地址,把數據包從網卡發出去,因為目標MAC是網關的,所以網關收到這個數據包后,發現目標MAC是自己,而目標IP卻是別人,所以它不可以再往上打開這個數據包,它要做的工作就是把這些數據包發給下一跳路由器(如果網關自身就是一台路由器的話),如果網關是一台普通PC,那么它就發給路由器,讓路由器把這些數據包正確傳輸到遠程目標網絡,到達遠程網絡后,它們的網關再將數據包發給數據包中的目標IP,即源主機A苦苦尋找的目標主機B,從而真正結束不同網絡之間的通信,回應的數據包也是用同樣的方法到達目的地,在這里,還需要注意的是,當網關把數據包發給下一跳路由器時,這個數據包必須由網關把目標MAC改成下一跳路由器的MAC地址(通過ARP得到),否則下一跳路由器收到目標MAC不是自己的數據包,會丟棄不予理睬,下一跳路由器再發給下一跳路由器同樣要把目標MAC地址改為下一跳路由器的MAC地址再發出去!

最后還可以總結出:在網段通信時,數據包中的地址就是源IP,目標IP,源MAC,目標MAC,根本用不到網關,而當檢測到需要把數據包發到遠程網絡時,這時,目標MAC就必須改變了,在還沒有出內網時,目標MAC必須寫成網關的MAC地址發出去,當網關收到時,再把目標MAC地址改成下一跳的MAC地址發出去,而源IP和源MAC以及目標IP不曾改變,就算到達了公網上,目標MAC仍然在不斷改變着,直到最后,這個數據包到達目標IP的網絡,最終通信結束!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM