
系列文章目錄
文章目錄
- 系列文章目錄
- 前言
- 一、 資料鏈路層的以太網協議
- 二、認識MAC地址
- 三、對比理解MAC地址和IP地址
- 四、ARP協議的作用
- 五、ARP資料報格式
- 五、ARP協議作業流程
- 六、ARP快取表
- 七、DNS(Domain Name System)
- 八、NAT協議
- 九、NAPT協議(動態NAT多載)
- 十、ICMP協議
- 十一、ping命令
- 總結
前言
資料鏈路層用于兩個設備(同一種資料鏈路節點)之間進行傳遞!

一、 資料鏈路層的以太網協議
資料鏈路層的以太網協議本質上其實就是相鄰設備之間的資料轉發,
以太網協議格式:
- 源地址和目的地址是指網卡的硬體地址(也叫MAC地址), 長度是48位,是在網卡出廠時固化的,
- 幀協議型別欄位有三種值,分別對應IP、ARP、RARP,
- 幀末尾是CRC校驗碼,
二、認識MAC地址
MAC地址:每一個網卡設備在出廠的時候都會擁有一個全球獨一無二的MAC地址,MAC地址也被稱為硬體的地址,
- MAC地址用來識別資料鏈路層中相連的節點,
- 長度為48位, 及6個位元組. 一般用16進制數字加上冒號的形式來表示(例如: 08:00:27:03:fb:19),
- 在網卡出廠時就確定了, 不能修改. mac地址通常是唯一的(虛擬機中的mac地址不是真實的mac地址, 可能會沖突; 也有些網卡支持用戶配置mac地址),
以太網格式中的型別(2位):
表示的是上層使用了什么協議 (ip / ARP協議),
有效載荷:[46 ~ 1500]位元組:
如果網路層遞交給資料鏈路層的資料不夠46位元組,則會對資料進行相應補0的操作,1500位元組剛好是MTU(最大傳輸單元)的上限,
CRC::
校驗幀尾,檢驗資料在傳輸程序中是否失真,
三、對比理解MAC地址和IP地址
- IP地址描述的是路途總體的 起點 和 終點,
- MAC地址描述的是路途上的每一個區間的起點和終點,
四、ARP協議的作用
上面其實我們也談到了以太網協議格式,我們可以看到格式中的目的地址和源地址指的是目的MAC地址和源MAC地址,換句話說,資料在資料鏈路層進行發生的時候,需要知道目標主機MAC地址,但是網路層的協議遞交給資料鏈路層的資料僅僅包含目標主機的ip地址,我們無法獲知其對應的MAC地址,那么,我們該如何獲取目標主機的MAC地址呢?
- 在網路通訊時,源主機的應用程式知道目的主機的IP地址和埠號,卻不知道目的主機的硬體地址,
- 資料包首先是被網卡接收到再去處理上層協議的,如果接收到的資料包的硬體地址與本機不符,則直接丟棄,
- 因此在通訊前必須獲得目的主機的硬體地址,
ARP協議就是用來解決此類問題的,他可以通過ip地址獲取對應的MAC地址,
注意:這里的ip地址本質上是通過路由項計算出來的接下來該條資料該去往的ip地址,而不是自己本身該去的ip地址,
因此,可以說ARP協議是介于網路層和資料鏈路層之間的協議,話句話來說就是ARP協議建立了主機 IP地址 和 MAC地址 的映射關系,
五、ARP資料報格式

首先我們來看一下以太網首部的格式:
- 以太網目的地址:在ARP請求中,目的MAC地址填充為:0xFFFFFFFF,表示當前這條資料給子網當中的每一潭訓器都進行轉發,
- 以太網源地址:就是源MAC地址,就是當前主機的MAC地址,
- 幀型別:上級協議(ARP協議)
28位元組ARP請求/應答:
- 硬體型別:當前的網路型別:以太網、令牌環網,
- 協議型別:要轉換的地址型別,ip轉換為MAC,
- 硬體地址長度:表示MAC地址長度,
- 協議地址長度:表示ip地址長度,
- op:標識是請求還是應答
1:請求
2:應答
五、ARP協議作業流程
是一種解決地址問題的協議,以目標IP地址為線索,用來定位下一個應該接收資料分包的網路設備對應的MAC地址,通俗來講就是獲取相鄰設備的MAC地址,
如果目標主機不在同一個鏈路上時,可以通過ARP查找下一跳路由器的MAC地址,不過ARP只適用于IPv4,不能用于IPv6

那么ARP又是如何知道MAC地址的呢?簡單地說,ARP是借助ARP請求與ARP回應兩種型別的包確定MAC地址的,
假定主機A向同一鏈路上的主機B發送IP包,主機A的IP地址為172.20.1.1,主機B的IP地址為172.20.1.2,它們互不知道對方的MAC地址,

主機A為了獲得主機B的MAC地址,起初要通過廣播發送一個ARP請求包,這個包中包含了想要了解其MAC地址的主機IP地址,也就是說,ARP請求包中已經包含了主機B的IP地址172.20.1.2,由于廣播的包可以被同一個鏈路上所有的主機或路由器接收,因此ARP的請求包也就會被這同一個鏈路上所有的主機和路由器進行決議,如果ARP請求包中的目標IP地址與自己的IP地址一致,那么這個節點就將自己的MAC地址塞入ARP回應包回傳給主機A,
總之,從一個IP地址發送ARP請求包以了解其MAC地址(ARP請求包還有一個作用,那就是將自己的MAC地址告訴給對方),目標地址將自己的MAC地址填入其中的ARP回應包回傳到IP地址,由此,可以通過ARP從IP地址獲得MAC地址,實作鏈路內的IP通信,
- 源主機發出ARP請求,詢問“IP地址是192.168.0.1的主機的硬體地址是多少”, 并將這個請求廣播到本地網段(以太網幀首部的硬體地址填FF:FF:FF:FF:FF:FF表示廣播),
- 目的主機接收到廣播的ARP請求,發現其中的IP地址與本機相符,則發送一個ARP應答資料包給源主機,將自己的硬體地址填寫在應答包中,
- 每臺主機都維護一個ARP快取表,可以用arp -a命令查看,快取表中的表項有過期時間(一般為20分鐘),如果20分鐘內沒有再次使用某個表項,則該表項失效,下次還要發ARP請求來獲得目的主機的硬體地址,
使用抓包工具進行分析:


六、ARP快取表
使用arp -a查看arp緩沖表:
如果每發送一個IP資料報都要進行一次ARP請求以此確定MAC地址,那將會造成不必要的網路流量,因此,通常的做法是把獲取到的MAC地址快取(是指預見到同樣的資訊可能會再次使用,從而在記憶體中開辟一塊區域記憶這些資訊) 一段時間,即把第一次通過ARP獲取到的MAC地址作為IP對MAC的映射關系記憶(記錄IP地址與MAC地址對應關系的資料庫叫做ARP表) 到一個ARP快取表中,下一次再向這個IP地址發送資料報時不需再重新發送ARP請求,而是直接使用這個快取表當中的MAC地址進行資料報的發送,每執行一次ARP,其對應的快取內容都會被清除,不過在清除之前都可以不需要執行ARP就可以獲取想要的MAC地址,這樣,在一定程度上也防止了ARP包在網路上被大量廣播的可能性,
當然ARP是有老化時間的,老化時間為20min,會進行相應的更新,
arp協議只能在子網內部使用,只能給子網內部的機器進行廣播arp請求,換句話說,只能獲取子網內部機器的MAC地址,
那么問題來了,IP地址和MAC地址缺一不可嗎?
① 資料鏈路上只要知道接收端的MAC地址不就知道資料是準備發送給主機B的嗎,那還需要知道它的IP地址嗎?
② 只要知道了IP地址,即使不做ARP,只要在資料鏈路上做一個廣播不就能發給主機B了嗎?”那么,為什么既需要IP地址又需要MAC地址呢?
主機A想要發送IP資料報給主機B時必須得經過路由器C,即使知道了主機B的MAC地址,由于路由器C會隔斷兩個網路,還是無法實作直接從主機A發送資料報給主機B,此時,主機A必須得先將資料報發送給路由器C的MAC地址C1,
如此看來,IP地址和MAC地址兩者缺一不可,于是就有將這兩個地址相關聯的ARP協議(為了避免這兩個階段的通信帶來過多的網路流量,ARP具有對IP地址和MAC地址的映射進行快取的功能,有了這個快取功能,發送IP包時就不必每次都發送ARP請求,從而防止性能下降),
七、DNS(Domain Name System)
TCP/IP中使用IP地址和埠號來確定網路上的一臺主機的一個程式. 但是IP地址不方便記憶,于是人們發明了一種叫主機名的東西, 是一個字串, 并且使用hosts檔案來描述主機名和IP地址的關系,
cat /etc/hosts 查看hosts檔案內容

DNS是一整套從域名映射到IP的系統,DNS協議本身是應用層的協議,并且在傳輸層使用的UDP協議,也叫域名決議協議,他的作用就是將域名決議為ip地址,

- 域名:
- 一級域名:.com、.cn、.gov、.us,
- 二級域名:baidu.com、jd.com、taobao.com,
- 三級域名:baike.baidu.com,
- 域名服務器:
- 根域名服務器:給其他域名服務器做授權使用,
- 一級域名服務器:管理一級域名,
- 二級域名服務器:管理二級域名,
- 三級域名服務器:管理三級域名,
至今, 我們的計算機上仍然保留了hosts檔案,在域名決議的程序中仍然會優先查找hosts檔案的內容,
域名決議的流程:
遞回域名決議:
迭代法域名決議:
八、NAT協議


之前我們討論了,IPv4協議中, IP地址數量不充足的問題,NAT技術當前解決IP地址不夠用的主要手段, 是路由器的一個重要功能,NAT也叫地址轉換協議,
- 作用:
- 私網對公網請求的時候:將網路資料當中的私網的源ip地址轉化成為公網的ip地址,
- 公網對私網的應答:將網路資料當中的公網的目的ip地址轉化成為私網的ip地址,
- 靜態NAT:NAT協議,將一個私網和一個公網唯一進行映射管理,
- 動態NAT:NAT管理的不止是一個公網ip,當私網資料到來的時候,選擇一個空閑的ip進行映射,
NAT的作業機制:
如上圖,以10.0.0.10的源主機與163.221.120.9的目的主機進行通信為例,利用NAT,途中的NAT路由器將發送源地址從10.0.0.10轉換為全域的IP地址(202.244.174.37)再發送資料,反之,當包從地址163.221.120.9發過來時,目標地址(202.244.174.37)先被轉換成私有IP地址10.0.0.10以后再被轉發(在TCP或UDP中,由于IP首部中的IP地址還要用于校驗和的計算,因此當IP地址發生變化時,也需要相應地將TCP、UDP的首部進行轉換)
總結一下就是:不管是靜態NAT還是動態NAT,都沒有緩解ipv4枯竭的問題,本質上還是一個私網IP一定要對應一個公網ip,才能訪問互聯網,
九、NAPT協議(動態NAT多載)

在進行私網ip轉化為公網ip的時候,不僅僅將ip地址轉換掉了,并且還將傳輸層的埠也轉換掉了,
主機163.221.120.9的埠號是80,LAN中有兩個客戶端10.0.0.10和10.0.0.11同時進行通信,并且這兩個客戶端的本地埠都是1025,此時,僅僅轉換IP地址為某個全域地址202.244.174.37,會令轉換后的所有數字完全一致,為此,只要將10.0.0.11的埠號轉換為1026就可以解決問題,如圖所示,生成一個NAPT路由器的轉換表,就可以正確地轉換地址跟埠的組合,令客戶端A、B能同時與服務器之間進行通信,這種轉換表在NAT路由器上自動生成,例如,在TCP的情況下,建立TCP連接首次握手時的SYN包一經發出,就會生成這個表,而后又隨著收到關閉連接時發出FIN包的確認應答從表中被洗掉(UDP中兩端應用進行通信時起止時間不一定保持一致,因此在這種情況下生成轉換表相對較難) ,
注:在使用TCP或UDP的通信當中,只有目標地址、源地址、目標埠、源埠以及協議型別(TCP還是UDP)五項內容都一致時才被認為是同一個通信連接,此時所使用的正是NAPT,
NAPT的場景下,一個公網ip,理論上最大可以轉換多少個私網ip?
216 = 65536個,即 0 ~ 65535,
對NAT協議的總結:
- NAT網關對于私網主機和公網主機而言,是透明的,雙方在通信程序中是無感知的,
- NAT網關會保存轉換之后的映射關系,防止應答回來之后再次進行轉換,
- 私網 =》公網:是將網路資料當中的源ip地址修改為公網ip地址,
- 公網 =》私網:是將網路資料當中的目的ip地址修改成為私網ip地址,
- NAPT增加了埠的轉換,就可以讓一個公網ip服務多個私網主機,緩解了ip地址枯竭的問題資料只能先從私網到公網,不能從公網到私網,
十、ICMP協議
ICMP協議是一個 網路層協議一個新搭建好的網路, 往往需要先進行一個簡單的測驗, 來驗證網路是否暢通; 但是IP協議并不提供可靠傳輸. 如果丟包了, IP協議并不能通知傳輸層是否丟包以及丟包的原因,
- ICMP功能:
- 確認IP包是否成功到達目標IP地址,
- 通知在發送程序中IP包被丟棄的原因,
- ICMP也是基于IP協議作業的. 但是它并不是傳輸層的功能, 因此人們仍然把它歸結為網路層協議,
- ICMP只能搭配IPv4使用. 如果是IPv6的情況下, 需要是用ICMPv6,
十一、ping命令

- 注意, 此處 ping 的是域名, 而不是url! 一個域名可以通過DNS決議成IP地址,
- ping命令不光能驗證網路的連通性, 同時也會統計回應時間和TTL(IP包中的Time To Live, 生存周期),
- ping命令會先發送一個 ICMP Echo Request給對端,
- 對端接收到之后, 會回傳一個ICMP Echo Reply,
一個值得注意的坑:
- 有些面試官可能會問: telnet是23埠, ssh是22埠, 那么ping是什么埠?千萬注意!!! 這是面試官的圈套!
ping命令基于ICMP, 是在網路層. 而埠號, 是傳輸層的內容. 在ICMP中根本就不關注埠號這樣的資訊,
總結
以上就是今天要講的內容,本文詳細介紹了資料鏈路層以太網協議等協議,網路提供了大量的方法供我們使用,非常的便捷,我們務必掌握!到這里網路這部分就結束了哦,后面還會有新的只是更新,希望大家多多支持!另外如果上述有任何問題,請懂哥指教,不過沒關系,主要是自己能堅持,更希望有一起學習的同學可以幫我指正,但是如果可以請溫柔一點跟我講,愛與和平是永遠的主題,愛各位了,加油啊!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293958.html
標籤:其他

















