數據鏈路層和網絡層的對比
? ? ? ? 如果說網絡層實現的是路由的功能,那么數據鏈路層就是實打實的實現具體的傳輸。
? ? ? ? 就像導航,網絡層告訴我們下一步該去哪個主機,而數據鏈路層則是實現去下一個主機的方法。
? ? ? ? 網絡層的IP地址告訴我們目的地在哪里,而數據鏈路層則告訴我們下一步去哪里。
? ? ? ? 而想了解數據鏈路層是如何做到的,就必須了解數據鏈路的以太網協議。
以太網
? ? ? ? 以太網是一種技術標準,涵蓋了數據鏈路層的內容,也包括物理層的內容。
? ? ? ? 但是數據鏈路層并非只有以太網,還有令牌環網和無線LAN等,不過這里就了解以太網。
以太網協議格式
????????
- 以太網中的目的地址實際上是指目的主機的MAC地址
- MAC地址:用來識別數據鏈路層中相連的節點,長度為 48 位,及6個字節,一般用 16 進制數字加冒號的形式,一般在網卡出廠的時候就確定了,具有唯一性
- 類型分為 IP,ARP,RARP三種
- 幀末尾是CRC校驗碼
碰撞
? ? ? ? 一般來說,一個局域網內在同一時間只能有一個主機在局域網內部發數據,不能同時出現多臺主機發消息,因為數據之間會發生碰撞。
? ? ? ? 我們可以將局域網看成是一個臨界資源,同一時間只能有一臺主機訪問。
? ? ? ? 正是因為有碰撞的風險,因此局域網不可太大,同時主機也不能過多,會增加碰撞概率。
? ? ? ? 局域網同時有多個節點相連,其中這些節點的集合就是碰撞域和廣播域。
? ? ? ? 一個局域網之間的節點發消息會有碰撞的風險,而為了避免碰撞,大佬們提出了各種各樣的方法,比如交換機,在一個局域網內控制碰撞的數據不傳播給局域網內的其他節點。
碰撞域:連接在同一導線上的所有工作站的集合,或者說是同一物理網段上所有節點的集合或以太網上競爭同一帶寬的節點集合。
廣播域:接收同樣廣播消息的節點的集合。? ? ? ?
? ? ? ? 而為了防止碰撞的發送,以太網協議也有自己的辦法,那就是MTU。?
認識MTU
? ? ? ? MTU是針對不同數據鏈路層對應的物理層而提出的限制。
- 以太網中的數據長度規定最小46字節,最大1500字節,不夠46字節的要填充,超過1500字節的則分片
- 最大值為1500稱為以太網的最大傳輸單元,不同網絡類型有不同的MTU
- 一個數據包從以太網到撥號鏈路上,長度大于撥號鏈路的MTU則需要分片
- 不同的數據鏈路層的標準MTU不同
? ? ? ? 至于分片和組裝的過程則由網絡層自己分片組裝。
MSS
? ? ? ? MSS是TCP協議的概念,標識TCP能夠承載的最大的應用數據段長度,一般為 MTU-20字節TCP報頭-20字節IP報頭,以太網下為1460字節。
MTU對UDP的影響
? ? ? ? UDP報頭時間8字節,IP報頭是20字節,那么由于MTU的原因,UDP能攜帶的數據不能超過1472字節,否則就需要分片。
? ? ? ? 而UDP又是不可靠的協議,若是一個數據報分片了,那么它在網絡中丟包的概率就更大了。
MTU對TCP的影響
? ? ? ? 一個TCP的數據報的長度也不是無限大的,限制于MTU,其中TCP協議單個數據報的最大長度稱為MTU。
? ? ? ? TCP是面向連接的,在連接過程中,雙方會進行MSS協商。
? ? ? ? 最好情況下,MSS的值是正好在IP協議都不會被分片的大小,不過任然受制于數據鏈路層的MTU。
? ? ? ? 當雙方進行連接確認時,會在發送SYN的同時發送自己的MSS值,然后取小值作為最終的MSS值。
? ? ? ? 這個MSS值就藏在TCP首部的40字節變長選項中(kind = 2)。
? ? ? ? 這個MTU我們可以通過ifconfig命令來查看,IP地址和MAC地址也可以通過這個命令查看。
ARP協議
? ? ? ? 在數據鏈路層通過以太網協議發送數據之前,有一個問題需要解決。
? ? ? ? 那就是一般我們通過IP地址找到了對應的局域網,但是我們卻不知道該主機的硬件地址,也就是MAC地址。
? ? ? ? 因為IP地址和MAC地址并非一對一的,IP地址是能夠改變的,因此我們想要兩臺主機進行通信,僅知道一個IP地址是無法成功通信的,還必須知道對應的MAC地址。
? ? ? ? 而ARP協議就是用來解決這個問題的。
????????
- ?當一個局域網內有一臺主機需要跟局域網內的另一臺主機通信時,它會先發送一個ARP請求包,并廣播到局域網內的所有主機上。
- 當對應主機收到后檢查IP地址,發現這個請求是給自己的,它就通過請求上的地址返回一個ARP響應包,并告訴對方自己的MAC地址。
- 發送端收到響應后,就會將對方的IP地址和MAC地址維護在一個ARP緩存表中,形成一對一的映射關系,這個表的生命周期是20分鐘,若20分鐘內沒使用某一項,該項目就會失效,需要重新請求。
- 正是由于主機的IP地址是會變化的,所以這個ARP緩存表有生命周期,而非永久存在。
- ARP緩存表可以通過 arp -a 命令查看。
ARP協議格式
- 這里的目的地址和源地址在首尾各出現了一次,在以太網協議里來說是多余的,但是其他協議需要
- 硬件類型是固定的字段,硬件類型為1
- 協議類型一般也是固定字段,表明需要通過IP協議來獲得MAC地址,此處填 0x0800。
- 硬件地址長度填6字節。
- 協議地址長度對于IP為4字節
- op為 1 表示請求, 2 表示應答。
ARP廣播過程
? ? ? ??當一個ARP請求廣播在局域網內時,它會將目的地址全部填 0x FFFFFF 的字段,并且op填1,其它選項正常填寫。
? ? ? ? 當局域網內其它主機接收到廣播后,先看以太網首部報頭,發現目的地址是 0xFFFFFF,就知道這是一個廣播,然后根據ARP請求的op,發現是請求后,再看目的 IP 地址,若是自己,則自己返回應答,否則丟棄。
? ? ? ? 當對應主機收到請求后,就返回一個ARP應答,填好 目的地址和其他選項,然后再 填 op 為2 ,表示是響應。
? ? ? ? 之后廣播到局域網內,其他主機收到廣播后會發現目的地址不是自己,就會丟棄報文,而對應的主機則會收到報文,并且發現這是一個ARP應答,就會將 IP 地址 和 MAC 地址維護在自己的ARP緩存表。
DNS
? ? ? ? DNS 是一整套從域名映射到IP的系統。
????????雖然IP對于機器來說,很好用,但是對應人來說,復雜而難記,因此出現了DNS系統。
? ? ? ? 最開始的時候,人們通過hosts文件來描述主機名和IP地址的關系,由互聯網信息中心來管理這個hosts文件,但是這個十分麻煩。
? ? ? ? 每次計算機要接入網絡或者計算機IP變更,都需要去信息中心申請變更hosts文件,而其他主機也要定期下載更新新版本的hosts文件才能正確上網。
? ? ? ? 于是就產生了DNS系統。
- DNS系統是一個組織的系統管理機構,維護系統內每一個主機的IP和主機名的對應關系
- 若新的計算機接入網絡,會將這個信息接入到數據庫中
- 用戶輸入域名時會自動查詢DNS服務器,來檢索對應域名,找到對應的IP地址
? ? ? ? 我們可以通過 cat /etc/hosts 命令來查看hosts文件,域名解析的時候會優先查找hosts的內容。
域名的格式
? ? ? ? 我們以百度的域名來理解域名格式。
????????????????????????????????????????????????www.baidu.com
- com:一級域名,表示這是一個企業域名,同級的還有 "net"(網絡提供商),"org"(非盈利組織),"edu"(教育機構)等。
- baidu:二級域名,公司的名稱
- www:一種習慣用法。
? ? ? ? 我們可以下載 dig 工具,來查看域名解析過程。
? ? ? ? 先使用 "yum install bind-utils"命令來安裝工具。?
? ? ? ? 就能夠查看了。
- 開頭是dig指令的版本號
- 第二部分表示服務器返回的詳情,status:NOERROR 表示查詢成功
- QUESTION SECTION 表明查詢的是什么域名
- ANSWER SECTION 表示查詢的結果,這里先將 www.baidu.com 表示成 www.a.shifen.com,然后再查詢了兩個ip地址
- 最下面是一個結果統計,包含查詢時間和DNS服務器的地址等?
ICMP協議
? ? ? ? 這是一個網絡層的協議,用來測試網絡是否通暢,若丟包了還會通知傳輸層丟包原因。
? ? ? ? ICMP主要功能包括
- 確認IP包是否成功發送給對方
- 通知發送過程中,IP包被丟棄的原因
- ICMP基于IP協議工作,但是它是網絡層的協議
- ICMP搭配?IPv4 工作,ICMPv6 搭配 IPv6工作
ICMP報文
????????
- ICMP報文分為通知出錯原因和用于診斷查詢兩類
其中,ICMP類型分為這么幾類。
?ping命令
? ? ? ? 可以用來驗證網絡的連通性,還會統計響應時間和IP包的 TTL(生存周期)。
? ? ? ? ping命令就是通過發送 ICMP Echo Request 給對端,然后接收對方的 ICMP Echo Reply來工作的。
? ? ? ? 不過有一點需要注意的是,ping的是域名而非url。
? ? ? ? 而且ping命令是基于ICMP,是在網絡層的,沒有端口。????????
traceroute命令
? ? ? ? 該命令基于ICMP協議實現,可以打印出去到目標主機之前要經歷的路由器。?
總結
? ? ? ? 本篇博客講述了以太網如何實現同一個局域網內的主機互相通信的原理,并且了解了為什么IP層需要進行分片。
? ? ? ? 然后還知道主機之間通信必須要先通過ARP協議來保存IP地址對應MAC地址的映射關系。
? ? ? ? 還了解了DNS和ICMP兩個小玩意。