写给非网工的CCNA教程(2)第一个协议--ARP协议
? ? 在上文中,我們提到了IP地址和MAC地址都是用來唯一標識網絡中的設備的。在以太網中,通信的每臺設備都得有一個IP地址和一個MAC地址。IP地址屬于OSI七層模型中的第3層網絡層的概念,MAC地址則是第2層數(shù)據(jù)鏈路層的概念。
? ? MAC地址是設備出廠時候就自帶,而IP地址是需要我們手動去配置的。當然也可以是從服務器動態(tài)獲取,這涉及到DHCP的知識,本系列中所有的IP地址都是手動配置的。
? ? 如下圖所示,是Windows下一塊網卡的配置信息。
? ??
1 TCP/IP協(xié)議族與OSI模型
? ? 本文是講述TCP/IP協(xié)議族中的第一個協(xié)議--ARP協(xié)議,那么什么是TCP/IP協(xié)議族呢?其實TCP/IP協(xié)議族,可不止是TCP協(xié)議和IP協(xié)議這兩種,而是一組協(xié)議。
? ? 并且這些協(xié)議是分層的,如下圖:物理層、網絡層、傳輸層、應用層。每層完成不同的功能,且與其他層是獨立的。
? ? 通常我們會把TCP/IP協(xié)議族與OSI七層模型作比較,如下圖所示。可以看到TCP/IP協(xié)議族分為四層,而OSI模型為七層,兩者之間的映射關系如下圖。
? ? ?在下圖中,我們還舉例不同層級的一些常用協(xié)議,可以看到本文討論的ARP協(xié)議位于網絡層,OSI模型的第三層。? ?
?
2 初識ARP
? ? 在網絡(沒有特殊說明,我們都以以太網代表網絡)通信中,我們往往只知道對方的IP地址,并不知道對方的MAC地址。這樣在通過真正的底層網絡(以太網)發(fā)送數(shù)據(jù)時,根本沒法封裝二層的報頭。
? ? 而我們的底層網絡(以太網)它可不認識IP地址,在它眼里只有二層報頭,只認MAC地址,IP地址什么的,對它而言都是透明的。
? ? 為了解決這個問題,就引入了ARP協(xié)議,該協(xié)議的設計初衷,就是通過它,可以找到以太網中某臺設備IP地址對應的MAC地址。當然了,如果不是以太網,也有類似的協(xié)議,去解決這個問題,比如ATM網絡對應的協(xié)議就是ATM-ARP。
?
3 ARP數(shù)據(jù)包
(1)ARP與OSI模型
? ? ARP的數(shù)據(jù)包是被直接封裝在以太網幀頭上的,以太網用0x0806來表示ARP協(xié)議,如下圖所示。
? ? 如上圖,Frame 1: 這是wireshark抓包軟件自己加上去的,在網絡傳輸中沒有這個,傳輸?shù)氖恰綞thernet II + ARP】這部分。?
(2)關于Ethernet II
? ? 任何底層的傳輸技術都會有自己的數(shù)據(jù)格式,比如USB、比如Wi-Fi、比如本文的Ethernet(以太網)。對于以太網而言,它的數(shù)據(jù)格式就是上圖所看到的Ethernet II。
? ? Ethernet II分為兩部分:Ethernet II Header + Payload,上圖中的Payload就是我們的ARP協(xié)議。
? ? Header是由三個部分組成,Destination(目的MAC地址)+ Source(源MAC地址)+ Type(載荷的類型,本文載荷類型為ARP,用0x0806表示)。
(3)ARP數(shù)據(jù)包
? ? ARP的數(shù)據(jù)包主要是兩種類型:Request和Reply,如下圖所示。
?
4 ARP如何解決IP地址到MAC地址的映射關系
? ? 舉個例子,我有臺電腦A【IP:10.74.97.116/24,MAC:54:ee:75:ce:dd:6e】,需要去訪問另一臺電腦B【IP:10.74.97.125/24】,但是我并不知道它的MAC地址,只知道它與我在同一個網段(不同網段的情形,后面有文章會寫道)。
(1)ARP請求
? ? 因此A會發(fā)送ARP請求到整個網絡內所有設備,即廣播,封包如下圖所示。
? ? Ethernet II中,源MAC為A的MAC【54:ee:75:ce:dd:6e】,目的MAC為廣播地址【FF:FF:FF:FF:FF:FF】。
? ? ARP中,Sender IP為A的IP【10.74.97.116】,Target IP為B的IP【10.74.97.125】,Sender MAC為A的MAC【54:ee:75:ce:dd:6e】;Target MAC是本次請求目的,目前不知,用【00:00:00:00:00:00】代替。
(2)ARP響應
? ? 在網絡中的所有設備都會收到,但是只有B的IP是10.4.97.126,因此只有B才會回復才廣播ARP請求,封包如下圖所示。
? ? Ethernet II中,源MAC為B的MAC【00:50:56:89:0a:1b】,目的MAC為A的MAC【54:ee:75:ce:dd:6e】。
? ? ARP中,Sender IP為B的IP【10.74.97.125】,Target IP為A的IP【10.74.97.116】,Sender MAC為為B的MAC【00:50:56:89:0a:1b】;Target MAC為A的MAC【54:ee:75:ce:dd:6e】。
(3)ARP表
? ? ?當A收到B的回復后,就把B的IP地址和MAC地址映射關系寫到一個表中記錄下來,這個表就是ARP表,在Windwos下可以通過命令arp -a查看(Linux下通過arp -n查看),如下圖所示。
[C:\~]$ arp -aInterface: 10.74.97.116 --- 0x5Internet Address Physical Address Type10.74.97.125 00-50-56-89-0a-1b dynamic 10.74.97.127 ff-ff-ff-ff-ff-ff static 224.0.0.2 01-00-5e-00-00-02 static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 239.255.255.250 01-00-5e-7f-ff-fa static? ? 當后續(xù)A還要與B通信時,我們就不用再發(fā)ARP請求包了,直接查找ARP表。不過這些記錄不是永遠存在ARP表中的,都有一個時間,默認時5分鐘,時間到了以后,該條ARP表項就會被刪除。下次再訪問,由于ARP表里沒有,因此又得從ARP廣播請求開始。
(4)ARP各個字段解釋?
| 字段 | 解釋 | 舉例 |
| Hardware Type | 表示底層網絡的類型 | 例如以太網 |
| Protocol Type | 表示網絡層協(xié)議 | 可以是IPv4或IPv6 |
| Hardware size | 表示底層網絡地址的長度 | 比如以太網MAC地址長度為6個字節(jié) |
| Protocol | 表示網絡層協(xié)議地址的長度 | 比如IPv4協(xié)議地址長度為4個字節(jié) |
| Opcode | 表示ARP包的類型 | 比如Request、Reply |
| Sender MAC Address | 發(fā)送方的MAC地址 | ? |
| Sender IP address | 發(fā)送方IP地址 | ? |
| Target MAC address | 要查詢的MAC地址 | ? |
| Target IP address | 目標方的IP地址 | ? |
?
5 gratuitousARP
? ? 免費ARP是一張?zhí)厥獾腁RP Reply報文,作用是用來做地址重復檢測(DAD)的,數(shù)據(jù)包格式如下圖所示。
? ? 從上圖,可知gratutious ARP包的Sender MAC和Target MAC相同、Sender IP和Target IP相同。其中相同IP就是我們需要作DAD的IP。
? ? 做DAD檢測的一方,會把需要DAD檢測的IP放到Sender IP和Target IP字段里面,然后廣播出去,如果網絡中此IP被人使用,那么它會響應此gratutious ARP包,并且是廣播回復的。從下圖可以看到回復的報文格式。
? ? 如果在指定的時間內,DAD檢測方沒有收到任何回復,那么就認為此IP沒有被人使用,自己就可以用了。
總結
以上是生活随笔為你收集整理的写给非网工的CCNA教程(2)第一个协议--ARP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1059):ES6中的类和对象
- 下一篇: 前端学习(576):margin无效情形