主機與目的主機進行以太網通信,需要知道目的主機的MAC地址(物理地址),以太網ARP通信協議就是用來獲取目的主機MAC地址的。
ARP協議
ARP(Address Resolution Protocol),即地址解析協議,是根據IP地址(邏輯地址)獲取MAC地址的一種TCP/IP協議。
MAC地址在網絡中表示網卡的ID,每個網卡都需要并有且僅有一個MAC地址。源主機知道目的主機的IP地址,卻不知道目的主機的MAC地址。而目的主機的MAC地址直接被網卡接收和解析,當解析到目的MAC地址非本地MAC地址時,則直接丟棄該包數據,因此在通信前需要先獲得目的的MAC地址。
ARP協議的基本功能就是通過目的設備的IP地址,查詢目的設備的MAC地址,以保證通信的順利進行。
在獲取到目的MAC地址之后,將目的MAC地址更新至ARP緩存表中,下次通信時,可以直接從ARP緩存表中獲取,而不用重新獲取。但ARP緩存表會有過期時間,過期后需要重新通過ARP協議進行獲取。
協議格式
ARP協議屬于TCP/IP協議簇的一種,位于以太網MAC幀格式的數據段,ARP數據包格式如下圖所示。
硬件類型 (Hardware type):硬件地址的類型,1表示以太網;
協議類型 (Protocol type):要映射的協議地址類型,ARP協議的上層協議為IP協議,因此該協議類型為IP協議,其值為0x0800;
硬件地址長度 (Hardware size):硬件地址(MAC地址)的長度,以字節為單位。對于以太網上IP地址的ARP請求或者應答來說,該值為6;
協議地址長度 (Protocol size):IP地址的長度,以字節為單位。對于以太網上IP地址的ARP請求或者應答來說,該值為4;
OP (Opcode):操作碼,用于表示該數據包為ARP請求或者ARP應答。1表示ARP請求,2表示ARP應答;
源MAC地址 :發送端的硬件地址;
源IP地址 :發送端的協議(IP)地址;
目的MAC地址 :接收端的硬件地址,在ARP請求時由于不知道接收端MAC地址,因此該字段為廣播地址,即48’hff_ff_ff_ff_ff_ff;
目的IP地址 :接收端的協議(IP)地址。
ARP協議分為ARP請求和ARP應答,源主機發起查詢目的MAC地址的報文稱為ARP請求,目的主機響應源主機并發送包含本地MAC地址的報文稱為ARP應答。
ARP請求
當源主機A需要獲取目的主機B物理地址時,可以發送一個ARP請求報文,這個報文包含了主機A的MAC地址和IP地址以及主機B的IP地址。
因為主機A不知道主機B的物理地址,所以這個查詢分組會在網絡層中進行廣播,即ARP請求時發送的接收方物理地址為廣播地址,用48hff_ff_ff_ff_ff_ff表示。
主機A發起ARP請求,由于發送的目的MAC地址為廣播地址,所以此時局域網中的所有主機都會進行接收并處理這個ARP請求報文,然后進行驗證,查看接收方的IP地址是不是自己的地址。是則返回ARP應答報文,不是則不響應。
只有驗證成功的主機B才會返回一個ARP應答報文,這個應答報文包含主機B的IP地址和物理地址。
ARP應答
主機B利用收到的ARP請求報文中的請求方物理地址,以單播的方式直接發送給主機A,主機A將收到的ARP應答報文中的目的MAC地址解析出來,將目的MAC地址和目的IP地址更新至ARP緩存表中。
當再次和主機A通信時,可以直接從ARP緩存表中獲取,而不用重新發起ARP請求報文。
但是ARP緩存表中的表項有過期時間(一般為20分鐘),過期之后,需要重新發起ARP請求以獲取目的MAC地址。
以太網協議
ARP協議通過以太網進行傳輸,因此需要滿足以太網通信協議所規定的格式。如下圖所示,以太網的數據包就是通過對協議的封裝來實現數據的傳輸,即ARP數據位于以太網幀格式的數據段。
28字節的ARP數據位于以太網幀格式的數據段。由于以太網數據段最少為46個字節,而ARP數據包總長度為28個字節,因此在ARP數據段后面需要填充18個字節的數據,以滿足以太網傳輸格式的要求。這個填充的過程稱為Padding,填充的數據可以為任意值,但一般為0。
以太網協議具體內容如上圖所示,其中:
前導碼 (Preamble):為了實現底層數據的正確闡述,物理層使用7個字節同步碼(0和1交替(55-55-55-55-55-55-55))實現數據的同步;
幀起始界定符 (SFD,Start Frame Delimiter):使用1個字節的SFD(固定值為0xd5)來表示一幀的開始,即后面緊跟著傳輸的就是以太網的幀頭;
目的MAC地址 :即接收端物理MAC地址,占用6個字節;
源MAC地址 :即發送端物理MAC地址,占用6個字節;
長度/類型 :上圖中的長度/類型具有兩個意義,當這兩個字節的值小于1536(十六進制為 0x0600)時,代表該以太網中數據段的長度;如果這兩個字節的值大于1536,則表示該以太網中的數據屬于哪個上層協議;
數據 :以太網中的數據段長度最小46個字節,最大1500個字節;
幀檢驗序列 (FCS,Frame Check Sequence):為了確保數據的正確傳輸,在數據的尾部加入了4個字節的循環冗余校驗碼(CRC校驗)來檢測數據是否傳輸錯誤。
-
FPGA
+關注
關注
1626文章
21665瀏覽量
601809 -
以太網
+關注
關注
40文章
5374瀏覽量
171097 -
通信協議
+關注
關注
28文章
857瀏覽量
40255 -
Mac
+關注
關注
0文章
1099瀏覽量
51368 -
ARP
+關注
關注
0文章
50瀏覽量
14735
發布評論請先 登錄
相關推薦
評論