ARP相關知識點
在騰訊實習生面試時,一個有關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、QuestionQ1、有了IP地址,為什麼還需要MAC地址?
注意沒經過一個路由器,分組的目的MAC地址會發生改變,但是目的IP地址不會發生改變。報文的目的MAC地址為嚇一跳的路由器的MAC地址,IP地址仍然為目的主機的IP地址(目的主機在另外一個網路上)。
Q2、為什麼不能廣播到目的主機所在網路?
因為路由器是一個廣播域,路由器會隔離廣播的報文。廣播報文無法穿過路由器,每個網段形成一個廣播域。
相關文章
- Git相關知識點Git
- redis相關知識點Redis
- shell相關知識點
- Oracle 相關知識點Oracle
- 【Java】容器相關知識點Java
- ivar layout 相關知識點
- LR模型相關知識點模型
- React相關知識點:關於ReduxReactRedux
- Java容器相關知識點整理Java
- 總結 MySQL 相關知識點MySql
- JVM相關知識點總結JVM
- UIBarButtonItem的相關知識點UI
- library cache相關知識點
- Extjs相關知識點梳理JS
- tmpwatch相關的知識點
- 面試系列之View相關知識點面試View
- 資料庫相關知識點提要資料庫
- oracle檢查點的相關知識Oracle
- GreatSQL統計資訊相關知識點SQL
- Fragment 相關知識點都在這裡了Fragment
- PHP物件相關知識點的總結PHP物件
- rman配置及常用操作相關知識點
- 異常處理及其相關知識點
- Shell相關知識
- .net相關知識
- mobile相關知識
- rollback相關知識
- Java併發相關知識點梳理和研究Java
- 資料庫相關知識點(秋招整理)資料庫
- 遊戲伺服器開發相關知識點遊戲伺服器
- C++中類相關知識點總結C++
- 音訊相關知識音訊
- Elasticsearch——search相關知識Elasticsearch
- SSL相關知識科普
- Redis的相關知識Redis
- RPM相關知識
- 直播相關知識收集
- 證書相關知識