Linux之數據鏈路層
- 一.以太網
- 1.1以太網幀格式
- 1.2MAC地址
- 1.3MTU
- 二.ARP協議
- 2.1ARP協議工作流程
- 2.2ARP協議格式
- 三.NAT技術
- 四.代理服務
- 4.1正向代理
- 4.2反向代理
- 五.四大層的學習總結
一.以太網
在我們學習完了網絡層后我們接下來就要進入數據鏈路層的學習了,在學習完網絡層后我們知道網絡層的作用是進行路徑選擇以及完成路由,但是無論是應用層,傳輸層還是網絡層都沒有完成我們數據傳輸中最重要的一環那就是傳輸數據,上三層分別提供了數據處理,可靠性保證,路徑選擇和完成路由而真正的數據傳輸環節就需要我們現在學的數據鏈路層來完成了。數據鏈路層不同于上三層可以由具體的某項協議完成而是由一系列的協議標準來實現的。例如我們今天會仔細說的以太網。我們要了解以太網不是一種具體的網絡而是一種技術標準,以太網的內容結合了數據鏈路層和物理層。以太網是如今應用最廣泛的互聯網技術與其并列的有令牌環和無線LAN等。
1.1以太網幀格式
首先我們先來了解什么叫做以太網幀:把在數據報首部添加報頭尾部添加檢驗和的新的報文整體叫做以太網幀。所以以太網幀中分為三部分:報頭,正文和校驗和。
- 目的地址和源地址
其中的地址代表的是網卡的硬件地址也就是MAC地址,占據了六個字節也就是48位。 - 類型
這里的類型指的是應用于幀數據字段的協議。類型占據了兩個字節即8位 - 校驗和
這里的校驗和就和TCP協議IP協議中的校驗和相同即利用CRC算法來檢查數據報是否損壞。
對于數據鏈路層來說傳輸靠的就不是IP地址了而是MAC地址因為數據報是通過一個一個的子網傳輸到目的主機的而在一個子網中傳輸靠的就是MAC地址。
1.2MAC地址
對于MAC地址我們應該不陌生了在講述協議的時候我們就提到過MAC地址的概念以及它和IP地址的區別,這里我們就來再次認識一下MAC地址。
MAC地址是來識別數據鏈路層中相連的節點也就是不同的主機或者路由器,MAC地址的長度是48位即6個字節,一般是用16進制以及符號:來進行分割例如:08:00:27:03:fb:19。對于MAC地址來說這是在我們電腦出廠之后就存儲在網卡中的并且是唯一的。
對于MAC地址和IP地址的區別我們能理解,我們可以將IP地址當作出去旅游時的起始處和目的地例如我們要從北京到上海去,那么源IP地址就是北京目的IP地址就是上海。而MAC地址則是我們在路上具體是從哪個地方到哪個地方例如從北京到上海,最開始源MAC地址就是北京目的MAC地址是河北,到了河北后源MAC地址就是河北目的MAC地址是河南以此類推直到目的MAC地址是上海。所以IP地址是不變的,MAC地址是一直在發生變化的。
那么在了解了MAC地址后我們要知道MAC的作用就是完成局域網中的通信也就是完成一個子網中的通信,在局域網中一個主機想要發送數據給另外一個主機就必須通過MAC地址而不是IP地址。那么在這個通信的過程也會產生一些問題,我用圖來給大家解釋。
所以在進行局域網通信的時候局域網就相當于是一個"臨界資源"因為局域網會被很多的主機來訪問,那么我們就需要對這個臨界資源進行保護也就是對局域網進行保護以免出現錯誤,例如如果局域網中同時有兩臺及以上的主機同時發送數據報那么這些數據報可能就會在碰撞域中發生碰撞從而造成數據報的損壞。
所以對于碰撞域也就是局域網來說任何時刻只允許一臺主機向局域網中發送數據報否則就有可能產生碰撞問題。想要解決碰撞問題我們可以采用碰撞檢測和碰撞避免以及劃分碰撞域的方法。
1.3MTU
在講述IP協議的分包時我們就提到過MTU即網絡的最大傳輸單元也就相當于我們發快遞時的包裹大小限制,MTU的數值是不同的數據鏈路層對應的物理層產生的。所以這個值是不固定的對于以太網幀來說它規定數據長度的最小值是47個字節最大值是1500個字節如果數據報的長度不夠就需要往后面補充字節。MTU不僅會對IP協議產生影響也會對UDP,TCP協議產生影響。
對于UDP協議,我們需要讓傳輸層的數據報的有效載荷不能超過1472因為UDP協議報頭是8個字節,IP協議報頭是20個字節這樣最后剛好達到MTU。如果超過了有效載荷超過了1472那么這個數據報就會在網絡層被分片。
對于TCP協議也是相同的,只是我們在講述TCP協議時提到過TCP的數據報大小不能超過MSS也就是Max((Max Segment Size)所以這個MSS也受制于MTU的大小最好的情況就是MSS剛好是在網絡層不會被分片的大小。同時我們知道TCP是有三次握手這個行為的在三次握手中雙方會把自己的MSS大小寫入到TCP協議的頭部中從而進行協商MSS大小,在雙方得到兩方的MSS大小后會將較小的MSS值當作最終的MSS值。而這個協商的過程MSS大小就是存儲在TCP協議那40個字節的選項中的。
如果我們想要查看自己機器的MTU大小我們可以使用ifconfig這個命令。
二.ARP協議
在知道了MAC地址是用于局域網之間通信的之后我們要思考一個問題了,在我們發送數據報時我們是用IP地址來定位目的主機的也就是說我們并不知道目的主機的MAC地址以至于我們無法完成局域網之間的通信,所以為了解決這個問題我們就要利用ARP協議。
ARP協議是一個存在于網絡層和數據鏈路層之間的一個協議它的作用就是完成IP地址和MAC地址的映射關系從而可以讓我們根據目的IP地址轉換為目的MAC地址來實現局域網之間的通信。
2.1ARP協議工作流程
對于ARP協議是如何完成IP地址和MAC地址的映射的我們也需要來說道說道我們一樣用圖來解釋
圖中的這些詢問以及回答MAC地址的數據報就是ARP請求和ARP響應,所以在進行局域網之間的通信時通信兩方會利用ARP請求以及響應來得到雙方的MAC地址從而構建出IP地址和MAC地址的映射關系。同時我們也可以從圖出看出來一些細節:對于一個局域網中的主機來說它既可以接收ARP請求也可以接收ARP響應并且主機在接收到ARP結果后會將其暫時緩存起來直到超過規定的時間,在超過規定的時間后還想和ARP結果內存儲的目的主機進行通信的話就需要再次發送ARP請求。
2.2ARP協議格式
ARP協議和其他協議一樣也具有自己的格式,我們現在就來看看它的格式是什么樣的。
對于這個數據報的格式其中很多的字段我們都是見過或者很容易就能理解的,所以我們就大致介紹并且解析其中的一些問題。
- 我們發現在以太網的頭部以及ARP協議中都存在目的MAC地址和源MAC地址,這是因為以太網不是數據鏈路層唯一的一種方法,如果數據鏈路層是以太網的那么這樣就是多余的但是如果數據鏈路層不是以太網的那么這種方法就是必須的了。
- 硬件類型是指數據鏈路層的網絡類型,1為以太網
- 協議類型是指要轉換的地址類型,0x0800為IP地址
- 硬件地址長度是數據鏈路層網絡類型的地址長度,對于以太網來說是6字節
- 協議地址長度是轉換的地址類型的地址長度,對于IP地址來說是4字節
- op字段則是標明是ARP請求還是響應,1是請求,2為響應。
三.NAT技術
在之前我們學習網絡層的時候我們就提到過NAT技術,NAT技術產生的緣由就是為了解決IPv4數量不足的而NAT技術本身我們可以將其理解成一種互相轉換私有IP和公有IP的方法。實現方法簡單來說就是在NAT路由器有兩個地址一個是私有地址也就是局域網內的IP地址一個是公有地址也就是公網內的IP地址,當局域網里有主機想要訪問外網時路由器就會將其數據報中的源IP地址轉換為公有IP地址,當外網服務器想要傳輸數據報到局域網內的主機時就會將數據報里的目的IP地址轉換為對應的主機的私有地址。所有在NAT路由器中有著一張表其中存儲著局域網內主機的私有IP地址和公有IP地址的映射關系來方便轉換,并且這個表也是又路由器自己維護的。
這個處理邏輯只是最基礎的NAT技術我們可以思考一個問題局域網內有多個主機它們的私有IP地址都不同但是路由器只有一個公有IP地址那么在外網的服務器傳輸數據報回來時路由器怎么知道是傳輸給哪個主機呢?這就要用到NAPT了也就是使用IP地址+端口號的方式,具體一點就是在路由器的地址轉換表中不僅存儲了局域網主機的IP地址也存儲了對應的端口號。
NAT技術實實在在的緩解了IPv4地址數量不足的問題但是它也有其限制和弊端:
- 無法從NAT外部向內部服務器建立連接
- 地址轉換表的創建和銷毀都需要額外資源
- 通信過程中一旦NAT路由器設備出現問題那么所有的TCP連接都會出錯
四.代理服務
在國內如果想要訪問外網的資源我們需要進行翻墻也就是通過代理來訪問外網資源。那么代理服務到底是如何實現的呢?
對于代理服務我們分為正向代理和反向代理,這兩種代理方式運用場景以及原理都不同我們需要來一個一個說。
4.1正向代理
正向代理(Forward Proxy)是一種常見的網絡代理方式,它位于客戶端和目標
服務器之間,代表客戶端向目標服務器發送請求。正向代理服務器接收客戶端的請
求,然后將請求轉發給目標服務器,最后將目標服務器的響應返回給客戶端。通過這
種方式,正向代理可以實現多種功能,如提高訪問速度、隱藏客戶端身份、實施訪問
控制等。
簡單來說正向代理就是在客戶端和網絡之間插入了一個新的代理服務器,客戶端會先把請求發送到代理服務器上再由代理服務器將其轉發給目的服務器,響應也是先發送到代理服務器上再轉發到客戶端上。
正向代理的功能特點:
- 緩存功能:正向代理服務器可以緩存經常訪問的資源,當客戶端再次請求這些資
源時,可以直接從緩存中獲取,提高訪問速度。 - 內容過濾:正向代理可以根據預設的規則對請求或響應進行過濾,如屏蔽廣告、
阻止惡意網站等。 - 訪問控制:通過正向代理,可以實現對特定網站的訪問控制,如限制員工在工作
時間訪問娛樂網站。 - 隱藏客戶端身份:正向代理可以隱藏客戶端的真實 IP 地址,保護客戶端的隱私。
- 負載均衡:在多個目標服務器之間分配客戶端請求,提高系統的可擴展性和可靠
性。
應用場景:
- 企業網絡管理:企業可以通過正向代理實現對員工網絡訪問的管理和控制,確保員工
在工作時間內專注于工作,避免訪問不良網站或泄露公司機密。 - 公共網絡環境:在公共場所如圖書館、學校等提供的網絡環境中,通過正向代理可以
實現對網絡資源的合理分配和管理,確保網絡使用的公平性和安全性。 - 內容過濾與保護:家長可以通過設置正向代理來過濾不良內容,保護孩子免受網絡上
的不良信息影響。 - 提高訪問速度:對于經常訪問的網站或資源,正向代理可以通過緩存機制提高訪問速
度,減少網絡延遲。 - 跨境電商與海外訪問:對于跨境電商或需要訪問海外資源的企業和個人,正向代理可
以幫助他們突破網絡限制,順暢地訪問海外網站和資源。
4.2反向代理
反向代理服務器是一種網絡架構模式,其作為 Web 服務器的前置服務器,接收
來自客戶端的請求,并將這些請求轉發給后端服務器,然后將后端服務器的響應返回
給客戶端。這種架構模式可以提升網站性能、安全性和可維護性等。
同樣簡單來說反向代理是在目的服務器和網絡之間插入了一個新的服務器,當我們使用客戶端向目的服務器傳輸數據時我們無法直接訪問目的服務器而是要將數據先發送到反向代理服務器中再由它將數據轉發到目的服務器中,響應也是先由目的服務器傳輸到反向代理服務器上再傳輸給客戶端。聽著好像和正向代理服務相似都是插入一個中間服務器但是其中的功效則完全不同,正向服務是為了保護客戶端而反向服務則是為了保護服務器。
功能特點:
- 負載均衡:反向代理服務器可以根據配置的負載均衡策略,將客戶端的請求分發
到多個后端服務器上,以實現負載均衡。這有助于提升網站的整體性能和響應速度,
特別是在高并發場景下。 - 安全保護:反向代理服務器可以隱藏后端 Web 服務器的真實 IP 地址,降低其被
直接攻擊的風險。同時,它還可以配置防火墻、訪問控制列表(ACL)等安全策略,
對客戶端的請求進行過濾和限制,以保護后端服務器的安全。
-緩存加速:反向代理服務器可以緩存后端 Web 服務器的響應內容,對于重復的
請求,它可以直接從緩存中返回響應,而無需再次向后端服務器發起請求。這可以大
大減少后端服務器的負載,提升網站的響應速度。 - 內容過濾和重寫:反向代理服務器可以根據配置的規則對客戶端的請求進行過濾
和重寫,例如添加或刪除請求頭、修改請求路徑等。這有助于實現一些特定的業務需
求,如 URL 重寫、用戶認證等。 - 動靜分離:在大型網站中,通常需要將靜態資源和動態資源分開處理。通過將靜
態資源部署在反向代理服務器上,可以直接從反向代理服務器返回靜態資源的響應,
而無需再次向后端服務器發起請求。這可以大大提升靜態資源的訪問速度。
應用場景: - CDN(Content Delivery Network,內容分發網絡)就是采用了反向代理的原理
五.四大層的學習總結
- 應用層
- 應用層的作用: 滿足我們日常需求的網絡程序, 都是在應用層
- 能夠根據自己的需求, 設計應用層協議
- 了解 HTTP 協議
- 理解 DNS 的原理和工作流程
- 傳輸層
- 傳輸層的作用: 負責數據能夠從發送端傳輸接收端.
- 理解端口號的概念.
- 認識 UDP 協議, 了解 UDP 協議的特點.
- 認識 TCP 協議, 理解 TCP 協議的可靠性. 理解 TCP 協議的狀態轉化.
- 掌握 TCP 的連接管理, 確認應答, 超時重傳, 滑動窗口, 流量控制, 擁塞控制, 延
遲應答, 捎帶應答特性. - 理解 TCP 面向字節流, 理解粘包問題和解決方案.
- 能夠基于 UDP 實現可靠傳輸.
- 理解 MTU 對 UDP/TCP 的影響
- 網絡層
- 網絡層的作用: 在復雜的網絡環境中確定一個合適的路徑.
- 理解 IP 地址, 理解 IP 地址和 MAC 地址的區別.
- 理解 IP 協議格式.
- 了解網段劃分方法
- 理解如何解決 IP 數目不足的問題, 掌握網段劃分的兩種方案. 理解私有 IP 和公
網 IP - 理解網絡層的 IP 地址路由過程. 理解一個數據包如何跨越網段到達最終目的地.
- 理解 IP 數據包分包的原因. ? 了解 ICMP 協議. ? 了解 NAT 設備的工作原理.
- 數據鏈路層
- 數據鏈路層的作用: 兩個設備(同一種數據鏈路節點)之間進行傳遞數據
- 以太網是一種技術標準; 既包含了數據鏈路層的內容, 也包含了一些物理層的內
容. 例如: 規定了網絡拓撲結構, 訪問控制方式, 傳輸速率等; - 以太網幀格式
- 理解 mac 地址
- 理解 arp 協議
- 理解 MTU