工做原理:緩存
在網絡 通信時,源主機的應用程序知道目的主機的IP地址和端口號,殊不知道目的主機的硬件地址,而數據包首先是被網卡接收到再去處理上層協議的,若是接收到的數 據包的硬件地址與本機不符,則直接丟棄。所以在通信前必須得到目的主機的硬件地址。ARP協議就起到這個做用。源主機發出ARP請求,詢問「IP地址是192.168.0.1的主機的硬件地址是多少」,並將這個請求廣播到本地網段(以太網幀首部的硬件地址填 FF:FF:FF:FF:FF:FF表示廣播),目的主機接收到廣播的ARP請求,發現其中的IP地址與本機相符,則發送一個ARP應答數據包給源主機, 將本身的硬件地址填寫在應答包中。網絡
每臺主機都維護一個ARP緩存表,能夠用arp -a命令查看。緩存表中的表項有過時時間(通常爲20分鐘),若是20分鐘內沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來得到目的主機的硬件地址。試想一下若是沒有緩存,咱們每發一個IP包都要發個廣播查詢地址,豈不是又浪費帶寬又浪費資源?並且咱們的網絡設備是沒法識別ARP包的真僞的,若是咱們按照ARP的格式來發送數據包,只要信息有效計算機就會根據包中的內容作相應的反應.
ide
ARP數據報格式spa
注意到 源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對於鏈路層爲以太網的狀況是多餘的,但若是鏈路層是其它類型的網絡則有多是必要 的。硬件類型指鏈路層網絡類型,1爲以太網,協議類型指要轉換的地址類型,0x0800爲IP地址,後面兩個地址長度對於以太網地址和IP地址分別爲6和 4(字節),op字段爲1表示ARP請求,op字段爲2表示ARP應答。.net
以太網首部:orm
字段 長度(Byte) 默認值 備註
接收方MAC 6 廣播時,爲 ff-ff-ff-ff-ff-ff
發送方MAC 6
Ethertype 2 0x0806 0x0806是ARP幀的類型值blog
ARP包:圖片
字段 長度(Byte) 默認值 備註
硬件類型 2 0x1 以太網類型值
上層協議類型 2 0x0800 上層協議爲IP協議
MAC地址長度 1 0x6 以太網MAC地址長度爲 6
IP地址長度 1 0x4 IP地址長度爲 4
操做碼 2 0x1表示ARP請求包,0x2表示應答包
發送方MAC 6
發送方IP 4
接收方MAC 6
接收方IP 4
填充數據 18 由於物理幀最小長度爲64字節,前面的42字節再加上4個CRC校驗字節,還差18個字節資源
本機IP:192.168.0.1 (c0 a8 00 01)
本機MAC:00-50-56-c0-00-01
目標IP:192.168.0.2 (c0 a8 00 02)
目標MAC:00-0c-29-0b-42-7e
1、 Ping 目標主機192.168.0.2時,本機發送的ARP數據包爲
00000000 : ff ff ff ff ff ff 00 50 56 c0 00 01 08 06 00 01
00000010 : 08 00 06 04 00 01 00 50 56 c0 00 01 c0 a8 00 01
00000020 : 00 00 00 00 00 00 c0 a8 00 02
以太網數據包發送目的地:ff ff ff ff ff ff(全網)
以太網數據包發送源:00 50 56 c0 00 01(本機)
以太網數據包數據包內容類型:08 06(ARP數據包)
ARP數據包類型:00 01(Request)
數據內容:告訴IP爲c0 a8 00 02的目標主機,本機的IP爲c0 a8 00 01,MAC爲
00 50 56 c0 00 01,請更新,並將你的MAC發送給我。
目標主機迴應本機的ARP數據包爲
00000000 : 00 50 56 c0 00 01 00 0c 29 0b 42 7e 08 06 00 01
00000010 : 08 00 06 04 00 02 00 0c 29 0b 42 7e c0 a8 00 02
00000020 : 00 50 56 c0 00 01 c0 a8 00 01
以太網數據包發送目的地:00 50 56 c0 00 01
以太網數據包發送源: 00 0c 29 0b 42 7e
以太網數據包數據包內容類型:08 06(ARP數據包)
ARP數據包類型:00 02(Reply)
數據內容:告訴MAC爲 00 50 56 c0 00 01 的主機,你的IP和MAC我已經收到,個人MAC和IP爲00 0c 29 0b 42 7e 和c0 a8 00 02,請保存更新。
2、 修改系統IP時(未發生IP衝突的狀況下),發送的ARP數據包爲
00000000 : ff ff ff ff ff ff 00 0c 29 0b 42 7e 08 06 00 01
00000010 : 08 00 06 04 00 01 00 0c 29 0b 42 7e c0 a8 00 03
00000020 : 00 00 00 00 00 00 c0 a8 00 03
以太網數據包發送目的地:ff ff ff ff ff ff(全網)
以太網數據包發送源:00 0c 29 0b 42 7e(本機)
以太網數據包數據包內容類型:08 06(ARP數據包)
ARP數據包類型:00 01(Request)
數據內容:告訴IP爲c0 a8 00 03的主機,本機的MAC和IP爲00 0c 29 0b 42 7e 和c0 a8 00 03。因爲網絡內沒有c0 a8 00 03 主機,因此此數據包將不會有迴應,此時,局域網交換機將會刷新緩存,使你的IP和MAC對應起來。
3、 修改系統IP時(發生IP衝突的狀況下),發送的ARP數據包爲
00000000 : ff ff ff ff ff ff 00 0c 29 0b 42 7e 08 06 00 01
00000010 : 08 00 06 04 00 01 00 0c 29 0b 42 7e c0 a8 00 01
00000020 : 00 00 00 00 00 00 c0 a8 00 01
以太網數據包發送目的地:ff ff ff ff ff ff(全網)
以太網數據包發送源:00 0c 29 0b 42 7e
以太網數據包數據包內容類型:08 06(ARP數據包)
ARP數據包類型:00 01(Request)
數據內容:告訴IP爲c0 a8 00 01的主機,本機的MAC和IP爲00 0c 29 0b 42 7e 和c0 a8 00 01。因爲網絡內已經有c0 a8 00 01 主機,將會發生衝突。這時將收到ARP Reply數據包。
接收的ARP數據包爲
00000000 : 00 0c 29 0b 42 7e 00 50 56 c0 00 01 08 06 00 01
00000010 : 08 00 06 04 00 02 00 50 56 c0 00 01 c0 a8 00 01
00000020 : 00 0c 29 0b 42 7e c0 a8 00 01
以太網數據包發送目的地:00 0c 29 0b 42 7e
以太網數據包發送源:00 50 56 c0 00 01
以太網數據包數據包內容類型:08 06(ARP數據包)
ARP數據包類型:00 02(Reply)
數據內容:告訴MAC爲00 0c 29 0b 42 7e的主機,本機的MAC和IP爲00 50 56 c0 00 01和 c0 a8 00 01。這時MAC 爲42 7e c0 a8 00 01的主機收到這個包後,並知道他的IP與其它主機衝突了。
4、 僞造ARP數據包
向目標MAC發送僞造的ARP Reply,告知一個假的信息,達到欺騙的目的。
本機真實IP爲:192.168.0.1(c0 a8 00 01)
本機真實MAC爲:00-50-56-c0-00-01
僞造的MAC爲:11-11-11-11-11-11
欺騙目標:
IP爲:192.168.0.2(c0 a8 00 02)
MAC:00-0c-29-0b-42-7e
僞造的數據包以下:
Packet length: 60
00000000 : 00 0c 29 0b 42 7e 11 11 11 11 11 11 08 06 00 01
00000010 : 08 00 06 04 00 02 11 11 11 11 11 11 c0 a8 00 01
00000020 : 00 0c 29 0b 42 7e c0 a8 00 02(剩餘部分用0填補)get