ARP相關知識點

bian_qing_quan11發表於2017-08-24

在騰訊實習生面試時,一個有關ARP的知識點被面試官問到了,但是當時對ARP知識點一點也不懂。今天根據《TCP/IP詳解》上對ARP的學習,在這裡做下筆記。

當時問的題目是:ARP從源主機到目的主機在核心中被拷貝了幾次?

ARP知識點:

1、ARP在哪一個層工作?

ARP在資料鏈路層工作。


2、ARP的作用

ARP是通過請求/應答模式根據目的主機的IP地址獲取目的主機的MAC地址。

HTTP也是基於請求/應答模式工作的。


3、ARP的工作方式

源主機想要向目的主機傳送資料,需要通過ARP協議來獲取目的主機的實體地址(MAC地址)。ARP請求分組以廣播形式傳送,以單播形式應答。


4、ARP緩衝機制

ARP是計算機中的一緩衝區,裡邊存放著最近訪問的目的主機的IP--->MAC的對映(目的主機IP------>目的主機MAC)。如果某條對映超過一定的時間不被使用(20Mins),就會被刪除掉。


5、ARP分組格式

ARP分組中最為重要的是:傳送端的IP地址、傳送端的MAC地址、目的端的IP地址、目的端的MAC地址。

當一個分組的MAC地址為 "ff-ff-ff-ff-ff-ff" 時,說明這個分組以廣播形式在該區域網上傳送,即傳送給該網段的每個主機。如果某個主機是分組中目的IP地址,那麼將對應主機的MAC地址填充進去,並返回一個ARP應答分組。

ARP請求分組中的目的MAC地址就是"ff-ff-ff-ff-ff-ff",目的主機收到後會將自己的MAC地址填充進去。


6、ARP如何實現IP到MAC地址的對映?

主機A想要向主機B傳送資料前要知道主機B的MAC地址。首先A在自己的ARP緩衝表查詢,看有沒有主機B的IP--->MAC的對映,如果有則直接取出使用。

如果沒有,要通過ARP請求/應答報文的形式獲取目的主機的MAC地址。在獲取目的主機B的MAC地址時,我們要分兩種情況分析:case1、源主機A與目的主機B在同一個網段(子網掩碼相同)

                    源主機以廣播形式傳送ARP請求報文給該網段的每一個主機,其中請求報文的目標MAC為'ff:ff:ff:ff:ff:ff'表明為廣播地址。每個主機收到這個ARP請求報文後,首先將源IP---->源MAC新增到自己的ARP緩衝中,然後將請求報文中的目的IP與自己匹配,如果一樣則將自己的MAC地址填充到ARP分組中,以單播形式向源主機返回一個ARP應答報文。如果與自己的IP不一樣,就丟棄該ARP分組。(如果你是這個IP的擁有者,請你回答你的MAC地址)

源主機收到ARP應答後,將目的IP----->目的MAC的對映新增到自己的ARP緩衝中。

                     case2、源主機A和目的主機B不在同一個網段(中間隔離若干臺路由器)

這時是通過ARP分組廣播形式獲取該網段的某個路由器的MAC地址,將分組傳送給這個路由器。但是路由器收到資料後發現資料的目的主機不是我,那麼路由器還需要繼續往下轉發,同樣以廣播形式傳送ARP獲取下一個路由器的MAC地址,將資料傳送給下一個路由器,......,直到將資料傳送到目的主機。


7、總結

ARP請求分組都是以廣播形式傳送給本網路的所有主機,然後會以單播形式迴應。

如果資料傳送方是主機,接收方是本網路上得另一個主機:直接使用ARP獲取目的主機的MAC地址;

如果資料傳送方是主機,接收方是另一個網路上的主機:使用ARP獲取本網路上的路由器的MAC地址,將資料傳送到這個路由器上,剩下的工作交給這個路由器;

如果資料傳送方是路由器,接收方是路由器所在網路上的主機:使用ARP獲取目的主機的MAC地址;

如果資料傳送方是路由器,接收方是另一個網路上的主機:使用ARP獲取下一個路由器的MAC地址,將資料傳送給下一個路由器,剩下的工作交給下一個路由器;


簡單一句話說,ARP在每一個網段中都是以廣播形式傳送,以單薄形式返回。


8、例子


如上圖,主機A、B通過路由器連線,屬於兩個不同的網段子網掩碼24(255.255.255.0),這兩個主機之間ARP傳送過程為:

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的回覆。

9、Question

Q1、有了IP地址,為什麼還需要MAC地址?

注意沒經過一個路由器,分組的目的MAC地址會發生改變,但是目的IP地址不會發生改變。報文的目的MAC地址為嚇一跳的路由器的MAC地址,IP地址仍然為目的主機的IP地址(目的主機在另外一個網路上)。


Q2、為什麼不能廣播到目的主機所在網路?

因為路由器是一個廣播域,路由器會隔離廣播的報文。廣播報文無法穿過路由器,每個網段形成一個廣播域。


相關文章