【Linux】MAC幀

目錄

一、MAC幀

(一)IP地址和MAC地址

(二)MAC幀格式

(三)MTU對IP協議的影響、

(四)MTU對UDP協議的影響

(五)MTU對TCP協議的影響

二、以太網協議

(一)以太網MAC幀如何進行解包和分用

(二)局域網中轉發原理

三、ARP協議

(一)ARP協議的作用

(二)ARP數據報的格式

(三)ARP協議的工作流程

(四)RARP協議

四、相關的技術與協議

(一)DNS協議

(二)ICMP協議

(三)代理服務器


一、MAC幀

(一)IP地址和MAC地址

????????通過上節我們了解一臺入網的主機的IP地址是有可能發生變化的,例如該主機處于不同的網絡或重新入網時路由器分配了新的IP地址,因此僅靠IP地址是無法完成網絡中數據通信的,因此引入了MAC地址。

????????MAC地址用來區別數據鏈路層中相連的節點,MAC地址是網絡接口卡的硬件標識符,全球唯一,主要作用于數據鏈路層,描述的是數據傳輸中每個區間的起點和終點。

? ? ? ? MAC地址一共48位,全球任意一張網卡都有唯一的MAC地址。使用 ifconfig 命令可查看本機的MAC地址:

(二)MAC幀格式

目的地址:目的主機的MAC地址;

源地址:發送主機的MAC地址;

類型:MAC幀類型;

CRC:MAC幀校驗碼。

? ? ? ? 數據鏈路層的MAC數據幀協議規定了單幀有效載荷最大為1500字節,有效載荷的最大值稱MTU最大傳送單元。

? ? ? ? 在網絡通信中,真正決定數據發送的是傳輸層,因此數據包的大小實際由傳輸層決定。若傳輸層向下交付的數據包過大,則需要IP層將數據進行分片以及重組,而數據鏈路層對此并不關心只負責數據包的發送

? ? ? ? 在網絡傳輸中,不僅僅只有主機采用MTU最大傳輸單元,對于中間節點的路由器同樣也存在MTU最大傳輸單元,若報文大小超過了路由器的MTU最大傳輸單元且該數據報中的df = 0,那么路由器的IP層會再次對報文進行IP分片后發送報文,若df = 1 也就是禁止分片的話,路由器會將報文丟棄并通知發送端(ICMP報文)。

(三)MTU對IP協議的影響、

? ? ? ? 由于數據鏈路層MTU的限制,對于較大的IP數據包要進行分片:

????????當傳輸層交付的數據過大需要進行分片時,IP層首先將數據進行分割并填寫相應的報頭信息,其中被原始的數據報分配唯一的標識位,所有分片繼承該標識,除了最后一個分片外,其他分片的標志位中的MF = 1,最后的標識位置0。置1表示后續還有分片,而置0表示后續沒有分片即該數據報為最后一個分片。在分片的同時也需要填寫片偏移大小,該字段用于表示該數據報的數據原處分配前數據的起始位置,其中除了最后一個分片以外,其他的分片的偏移量必須是8的整數倍。

????????當收到一個報文時,查看標志位的MF是否為1,若為1則說明該報文進行過分片操作并不是完整報文,若為0則需要查看該報文的偏移量,若偏移量不為0則說明該報文是被分片后的最后一個IP報文,若為0則說明該報文本身是個完整的報文;通過以上步驟即可驗證該報文是否被分片,若沒有進行分片該報文本身就是一個完整報文,若該報文進行過分片,需等到最后一個報文的到達。偏移量為數據處原始數據的起始地址。因此當收到最后一個報文后,只需要將各個報文按偏移量大小進行排序,驗證各個相鄰報文之間的是否連續即可判斷收到的所有分片報文是否完整。若完整則重新組裝后交付給上層。

? ? ? ? 在傳輸過程中,數據包進行分片后的小數據包中任意一個小包丟失,接受端的重組就會失敗,若需要重新發送數據包,是需要將整個數據包重新進行分片后再此全部發給發送端的,IP層不服職責重新傳輸數據,由上層決定。因此在實際傳輸中,傳輸層會避免向下交付的數據包過大而導致IP分片的,IP分片不僅僅增加了網絡層的負擔,也增加了整個數據包重傳的風險。

(四)MTU對UDP協議的影響

  • 一旦UDP攜帶的數據超過1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就會在網絡層分成多個IP數據報。
  • 這多個IP數據報有任意一個丟失, 都會引起接收端網絡層重組失敗. 那么這就意味著, 如果UDP數據報在網絡層被分片, 整個數據被丟失的概率就大大增加了。

(五)MTU對TCP協議的影響

  • TCP的數據不能過大,IP協議受制于MTU,同樣的TCP協議也受制于MTU,TCP協議蛋哥數據報的最大消息長度稱為MSS(Max Segment Size)
  • TCP在建立連接時,通信雙方會協商MSS大小:雙方在發送SYN時會把自己能支持的最大MSS值寫入TCP首部,一般取雙方較小的作為最終MSS;
  • 最理想的情況下,MSS的值正好是在IP不會被分片處理的最大長度;
  • MSS的值就在TCP首部的40字節變長選項中。

二、以太網協議

(一)以太網MAC幀如何進行解包和分用

? ? ? ? MAC幀采用定長的策略,對于一個MAC幀而言,首部為 6+6+2 = 14字節以及有效載荷后的4字節CRC校驗位,解包時去掉以上部分即為有效載荷。

? ? ? ? 在MAC幀首部由類型字段,根據該類型字段即可了解將有效載荷交付給上層的哪種協議,例如0800代表是IP數據報,0806為ARP協議。

(二)局域網中轉發原理

? ? ? ? 當局域網內的一臺主機發送了一個MAC幀后,局域網內的所有主機都可以收到該MAC幀,而只有其目的地址為本主機的MAC地址時,該主機數據鏈路層才會把該數據向上交付,而其他主機會直接將該MAC幀丟棄。在局域網中,網卡有一種“混雜模式”,該模式下不會放棄任何數據幀,物理MAC幀內的目的地址是否為主機的MAC地址,都會將MAC幀解包后向上交付,這也是局域網內抓包工具的原理。

? ? ? ? 因此在一個局域網內如果多個主機同時發送數據,那么總線上的信號會相互干擾產生碰撞沖突。所以在同一時刻只有一臺主機能夠發送數據。因此需要約定一些協議保證數據的正常發送:

令牌環:令牌環網絡中有一個令牌(Token)在環路上循環傳遞。只有持有令牌的節點才能發送數據,其他節點則監聽該鏈路以接收數據。當節點需要發送數據時,它會將數據附加到令牌上,并將令牌繼續傳遞下去。每個節點在接收到令牌時檢查是否有附加的數據,如果有,節點就將數據提取出來并處理。

以太網:以太網使用一種稱為CSMA/CD(帶沖突檢測的載波偵聽多路訪問)的協議來管理和調度數據傳輸。在CSMA/CD中,每個節點都監聽網絡上的信道來檢測是否有其他節點正在發送數據;如果檢測到信道空閑,則節點可以開始發送數據;否則,節點會等待一段隨機時間后再次嘗試發送;當多個主機同時發送該數據導致沖突時,所有主機停止發送并發送阻塞清號,隨后二進制指數退避算法重新嘗試發送。

? ? ? ? 當局域網上的主機越多時,越容易發生數據碰撞沖突,因此可以在局域網中使用交換機。

? ? ? ? 交換機可以隔絕沖突域。正常情況下,交換機并不影響局域網內的通信,例如當主機A向主機E發送數據時,交換機會正常將數據進行轉發;當主機A和主機B同時向主機D發送數據時發生沖突,當交換機左側(如圖)發生沖突時并不會將發生沖突的數據轉發給右側,而右側也就是主機C和主機E之間仍然可以繼續進行正常的通信不受左側沖突的影響。

????????對于每條MAC的數據長度,數據越長,越有可能發生碰撞,這也是MAC幀協議限制有效載荷最大是1500字節的原因。

三、ARP協議

? ? ? ? ARP協議是介于數據鏈路層和網絡層之間的協議,用于使用IP地址來獲取MAC地址。

? ? ? ? 在網絡傳輸過程總,IP地址就相當于最終目的地,而MAC地址相當于中間途徑的地址。數據報封裝為MAC幀時需要目的MAC地址。當主機向服務器發送數據時,主機如何知道所處網段的公網路由器的MAC地址是多少?當報文到達目的網絡時,路由器又怎么知道該數據包的目的地址的MAC地址是多少?這些實際都需要MAC地址。

(一)ARP協議的作用

? ? ? ? ARP協議建立了主機IP地址和MAC地址的映射關系

  • 在網絡通信中,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址;
  • 數據包首先是唄網絡接收到再去交給上層協議的,如果收到的數據包的目的硬件地址與本主機不符,則會直接丟棄數據包;
  • 因此在通信前必須獲得目的主機的硬件地址

(二)ARP數據報的格式

  • 注意源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對于鏈路層為以太網的情況是多余的,但如果鏈路層為其他類型的網絡則是有必要的;
  • 硬件類型指的是鏈路層網絡類型,以太網為1;
  • 協議類型指要轉換的地址類型,0x0800為IP地址;
  • 硬件地址長度對于以太網地址為6字節;
  • 協議地址長度對于IP地址為4字節;
  • op字段為1表示ARP請求,op表示為2表示ARP應答;

(三)ARP協議的工作流程

? ? ? ? 當主機A需要向主機E發送數據時,由于主機A只知道主機E的IP地址,因此需要通過ARP協議獲取主機E的MAC地址。

????????首先主機A發送ARP請求報文,其中ARP報文中的以太網目的地址為全F,也就是為廣播地址。局域網內的所有主機都會收到該請求報文,由于報文中的以太網目的地址為廣播地址,對MAC幀首部進行解包后查看幀類型字段并將其交給ARP協議處理。首先讀取ARP請求報文的op字段,若op字段為1即確認該報文為ARP請求報文,再查看目的IP地址是否為本主機的IP地址(目的以太網地址為全F),若不為本主機的IP地址則將該報文丟棄。

? ? ? ? 當主機E收到該ARP請求報文后,經過處理后向主機A回送ARP響應報文,其中MAC幀首部的目的地址為主機A的MAC地址,也就是單播地址。當其他主機收到該報文后查看MAC目的地址并不是本機的MAC地址后會將該報文進行丟棄。當主機A收到該ARP響應報文后對其進行解包,查看op字段,若op字段為2即該報文為ARP響應報文,再查看發送端以太網地址字段獲取主機E的MAC地址。

? ? ? ? ? ? ?除此之外,局域網內的設備實際還會維護一張ARP緩存表,用于映射IP地址和MAC地址的關系,每次封裝MAC幀時首先會進行查表,若表中不存在目標條目的話才會進行ARP協議請求。

(四)RARP協議

? ? ? ? RARP協議與ARP協議過程類似,不過其作用為MAC地址映射IP地址,也就是知道目的主機的MAC地址,但不知道其IP地址,因此需要通過RARP協議來獲取目的主機的IP地址。

四、相關的技術與協議

(一)DNS協議

? ? ? ? 當我們通過網絡訪問服務器時,我們輸入的往往是域名,例如我們訪問百度時只需要搜索百度的域名而不是其IP地址,這是因為IP對人的記憶及使用不友好,域名網址就比較直觀了,而由域名到IP地址的映射實際是由DNS來完成的。

? ? ? ? DNS域名系統是互聯網的核心基礎設施之一,承擔著將人類可讀的域名轉換為機器可識別的IP地址的關鍵任務。

百度的域名:www.baidu.com

com: 一級域名. 表示這是一個企業域名. 同級的還有 "net"(網絡提供商), "org"(非盈利組織) 等。

baidu: 二級域名, 公司名。

www: 只是一種習慣用法. 之前人們在使用域名時, 往往命名成類似于ftp.xxx.xxx/www.xxx.xxx這樣的格式, 來表示主機支持的協議。在瀏覽器輸入域名時可以省略。

? ? ? ? 域名服務器一共有三類,根服務器、權威服務器和遞歸服務器。

根服務器:全球共13組。存儲頂級域服務器地址;

權威服務器:管理特定域名的解析記錄;

遞歸服務器:接收用戶查詢并完成全鏈路解析。

? ? ? ? 下面簡單介紹下DNS解析的一般流程:

  1. 當用戶訪問www.baidu.com時,先檢查本地緩存(瀏覽器/操作系統緩存),命中則直接返回IP;
  2. 未命中則向遞歸服務器發送請求,遞歸服務器依次查詢根服務器、.com服務器、baidu.com權威服務器,最終獲取IP并返回;
  3. 遞歸服務器緩存結果,其生存時間決定緩存有效期。

????????目前計算機上仍然保留了hosts文件,在域名解析的過程中仍然會優先查找hosts文件的內容。

(二)ICMP協議

? ? ? ? IP協議并不是可靠的協議,如果在傳輸過程中丟包了,IP協議是無法得知是否出現了丟包。因此引入了ICMP協議。

????????ICMP互聯網控制報文協議,TCP/IP協議族中的核心網絡層協議,主要用于在IP主機和路由器之間傳遞控制消息,輔助網絡通信的可靠性和診斷。

? ? ? ? ICMP協議提供了以下功能:

差錯報文:

  1. 目標不可達;
  2. 超時報文:TTL耗盡或分片重組超時;
  3. 重定向:通知發送端更有路由路徑。

查詢報文:

  1. Echo請求/應答:用于Ping等工具;
  2. 時間戳請求或應答:同步網絡設備時間。

? ? ? ? ICMP協議是基于IP協議的,但是它并不是傳輸層的功能,因此將其歸于網絡層協議,ICMP協議只能搭配IPv4協議使用,若是IPv6則需要ICMPv6.

? ? ? ? PING命令實際就是基ICMP協議實現的。

? ? ? ? Ping命令通過發送ICMP Echo請求并等待Echo應答,測試兩臺主機的連通性。

1、此處 ping 的是域名, 而不是url! 一個域名可以通過DNS解析成IP地址;

2、ping命令不光能驗證網絡的連通性, 同時也會統計響應時間和TTL(IP包中的Time To Live, 生存周期);

3、ping命令會先發送一個 ICMP Echo Request給對端;

4、對端接收到之后, 會返回一個ICMP Echo Reply;

ping命令是不關注端口的,因為ping命令是基于ICMP, 是在網絡層;而端口號, 是傳輸層的內容。在ICMP中根本就不關注端口號這樣的信息。

(三)代理服務器

????????

????????正向代理:正向代理是客戶端與目標服務器之間的中介,?代理對象是客戶端。客戶端通過代理服務器間接訪問目標服務器,隱藏自身真實信息。

????????反向代理:客反向代理是服務器端的中介,?代理對象是服務器。客戶端直接訪問反向代理,由代理將請求分發到后端服務器。

? ? ? ? 采用反向代理可以實現負載均衡策略:客戶端可能會發送大量的數據,反向代理服務器需要合理的將數據分配給服務器集群。

????????作為反向代理的服務器,需要配置較高,充當軟件服務的可以是Nginx(Web服務器,不做業務處理,只做轉發處理),當反向代理服務器中的服務器集群將請求處理完,可以通過代理服務器將結果發回給客戶端,也可以直接發回給客戶端。

????????NAT和代理服務器的區別:

1、從應用層面上講, NAT設備是網絡基礎設備之一, 解決的是IP不足的問題。代理服務器則是更貼近具體應用, 比 如通過代理服務器進行翻墻;

2、從底層實現上講, NAT是工作在網絡層, 直接對IP地址進行替換,代理服務器往往工作在應用層;

3、從使用范圍上講, NAT一般在局域網的出口部署, 代理服務器可以在局域網做, 也可以在廣域網做, 也可以跨網。

4、從部署位置上看, NAT一般集成在防火墻, 路由器等硬件設備上, 代理服務器則是一個軟件程序, 需要部署在服務器上。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899190.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899190.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899190.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL - 數據庫基礎操作

SQL語句 結構化查詢語言(Structured Query Language),在關系型數據庫上執行數據操作、數據檢索以及數據維護的標準語言。 分類 DDL 數據定義語言(Data Definition Language),定義對數據庫對象(庫、表、列、索引)的操作。 DML 數據操作語言(Data Manip…

GraalVM原生鏡像支持:Spring Cloud應用啟動速度提升90%

引言:當Spring Cloud遇見GraalVM,啟動時間進入秒級時代 傳統Spring Cloud應用因動態類加載、反射等機制導致啟動緩慢(通常超過30秒),在Serverless和Kubernetes滾動更新場景下成為性能瓶頸。Spring Cloud 2023.x通過**G…

【Unity3D】攝像機適配場景以及Canvas適配

目錄 寬度不變策略 高度不變策略 寬度不變策略 開發分辨率 750*1334 (寬高比:0.56) 真機分辨率 1170*2532 (寬高比:0.46) 真機寬高比<開發寬高比&#xff0c;采用寬度不變策略 理由&#xff1a;小于代表真機高度比開發高度更大&#xff0c;因此不需要擔心高度上…

HarmonyOS:基于axios實現文件的下載以及下載進度的監聽

#前言&#xff1a;項目開發中&#xff0c;避免不了實現文件下載功能&#xff0c;其他平臺的下載都很成熟&#xff0c;網上的例子也比較多&#xff0c;我就自己項目中實現的下載功能做個總結&#xff0c;你可以參考我的寫法實現功能。 下載封裝基于axios實現的下載功能。 1.下載…

簡單一周日期展示及選擇切換

醫院掛號&#xff0c;可能需要切換日期&#xff0c;選擇一周內的某一天。 提供一周內的日期段&#xff0c;通過點擊&#xff0c;切換到不同天。 簡單的js&#xff0c;html實例。切換玩調用后臺接口&#xff0c;實現后續邏輯。 使用Vue,插值語法&#xff0c;更簡單。 一周日歷…

二叉樹的前,中,后序遍歷

我們來了解一下二叉樹的遍歷&#xff0c;話不多說 二叉樹的遍歷的概念&#xff1a; 二叉樹有四種遍歷方式&#xff0c;分別為前序遍歷&#xff0c;中序遍歷&#xff0c;后序遍歷和層序遍歷&#xff0c;但我們今天談談前三種&#xff0c;并實現它 前序遍歷&#xff1a; 按照根…

golang Error的一些坑

golang Error的一些坑 golang error的設計可能是被人吐槽最多的golang設計了。 最經典的err!nil只影響代碼風格設計&#xff0c;而有一些坑會導致我們的程序發生一些與我們預期不符的問題&#xff0c;開發過程中需要注意。 ?? errors.Is?判斷error是否Wrap不符合預期 ?…

逼用戶升級Win11,微軟開始給Win10限速

隨著Windows10的支持時間越來越短&#xff0c;微軟也加大了對Win10用戶的驅趕力度。 最近&#xff0c;微軟官宣了將要在今年6月份降低OneNote for Windows 10的同步速度。軟件也將和Windows10在今年的10月14日一同停止支持和維護。 這將影響實時協作和多設備訪問。 對OneNote…

SpringMVC_day02

一、SSM 整合 核心步驟 依賴管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 數據源、Jackson 等依賴。注意點&#xff1a;確保版本兼容性&#xff08;如 Spring 5.x 與 MyBatis 3.5.x&#xff09;。 配置類 SpringConfig&#xff1a;掃描 Service 層、啟用事務管理、導入…

Android14 原生PackageInstaller安裝某些apk報錯問題

最近遇到Android14安裝客戶一個大型app的時候&#xff0c;執行到開始安裝的時候就直接閃退了&#xff0c;查看log發現下面報錯&#xff1a; 03-25 18:01:29.531 3085 3085 E AndroidRuntime: java.lang.RuntimeException: Could not copy bitmap to parcel blob. 03-25 18:01:2…

SQLAlchemy關鍵詞搜索技術深度解析:從基礎過濾到全文檢索

在數據驅動的應用開發中&#xff0c;基于關鍵詞的模糊查詢是常見的業務需求。SQLAlchemy作為Python生態中最流行的ORM框架&#xff0c;提供了多種實現關鍵詞搜索的技術方案。本文將從性能、適用場景和技術復雜度三個維度&#xff0c;系統對比分析SQLAlchemy中關鍵詞搜索的最佳實…

基于 ffmpeg 實現合并視頻

ffmpeg是一個強大的多媒體處理工具&#xff0c;支持視頻文件的合并。 列出目錄下所有MP4文件 import os import glob# 當前目錄 directory os.getcwd() directory "/directory/to/mp4/*"# 列出目錄下所有MP4文件 files glob.glob(directory)# 排序 files.sort(…

算法每日一練 (20)

&#x1f4a2;歡迎來到張翊塵的技術站 &#x1f4a5;技術如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 算法每日一練 (20)不同路徑 II題目描述解題思路解題代…

【銀河麒麟系統常識】命令:uname -m(查看系統架構)

命令&#xff1a; uname -m 功能 常用的 Linux/Unix 終端命令&#xff0c;用于顯示當前系統的硬件架構&#xff1b; 返回 返回系統的CPU架構類型&#xff0c;用于判斷軟件兼容性&#xff1b; 輸出結果架構說明常見設備x86_64Intel/AMD 64位 CPU主流 PC、服務器aarch64ARM 64位 …

sql結尾加刷題

找了一下mysql對extractvalue()、updatexml()函數的官方介紹https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html#function_extractvalue ExtractValue(xml_frag, xpath_expr) 知識點 解釋一下這兩個參數xml_frag&#xff0c;是xml標記片段&#xff0c;第二個參數…

JVM類加載過程詳解

文章目錄 前言1.加載2.鏈接驗證文件格式驗證元數據驗證字節碼驗證符號引用驗證 準備解析 3.初始化4.類卸載 前言 類從被加載到虛擬機內存中開始到卸載出內存為止&#xff0c;它的整個生命周期可以簡單概括為 7 個階段&#xff1a;加載&#xff08;Loading&#xff09;、驗證&a…

el-select 可搜索下拉框 在ios、ipad 無法喚出鍵盤,造成無法輸入

下一篇&#xff1a;el-select 可搜索下拉框&#xff0c;選中選項后&#xff0c;希望立即失去焦點&#xff0c;收起鍵盤&#xff0c;執行其他邏輯 【效果圖】&#xff1a;分組展示選項 >【去界面操作體驗】 首先&#xff0c;通過 夸克瀏覽器的搜索: el-select 在 ipad 輸入框…

前端框架的定制化:滿足項目獨特需求

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型浪潮中&#xff0c;前端技術體系已成為企業構建數字競爭力的核心戰場。當標準化前端框架…

Flutter網絡請求封裝:高效、靈活、易用的Dio工具類

在Flutter開發中&#xff0c;網絡請求是必不可少的功能。為了簡化代碼、提高開發效率&#xff0c;我們通常會封裝一個網絡請求工具類。本文基于Dio庫&#xff0c;詳細介紹如何封裝一個高效、靈活、易用的網絡請求工具類&#xff0c;支持以下功能&#xff1a; 單例模式&#xf…

MyBatis-Plus(SpringBoot版)學習第一講:簡介入門案例

目錄 1. MyBatis-Plus簡介 1.1 簡介 1.2 特性 1.3 支持的數據庫 1.4 框架結構 1.5 代碼及文檔地址 2. 入門案例 2.1 開發環境 2.2 創建數據庫及表 1. 創建表 2. 添加數據 2.3 創建SpringBoot工程 1. 初始化工程 2. 引入依賴 3. IDEA中安裝lombok插件 ?編輯 2.4 編…