国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理

這篇具有很好參考價值的文章主要介紹了【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

文章目錄

  • 前言
  • 一、IP協(xié)議
  • 二、MAC幀協(xié)議
    • 1.以太網(wǎng)
    • 2.以太網(wǎng)幀(MAC幀)格式報頭
    • 3.基于協(xié)議講解局域網(wǎng)轉(zhuǎn)發(fā)的原理
  • 總結(jié)

前言

為什么經(jīng)常將TCP/IP放在一起呢?這是因為IP層的核心工作就是通過IP地址來定位主機的,具有將一個數(shù)據(jù)報從A主機跨網(wǎng)絡(luò)發(fā)送到B主機的能力,而TCP所提供的策略使IP層可靠的將一個數(shù)據(jù)報從A主機跨網(wǎng)絡(luò)發(fā)送到B主機。

網(wǎng)絡(luò)層作用:

在復(fù)雜的網(wǎng)絡(luò)環(huán)境中確定一個合適的路徑。

網(wǎng)絡(luò)層主要負責(zé)地址管理和路由選擇,例如在IP協(xié)議中,通過IP地址來標(biāo)識一臺主機,并通過路由表的方式規(guī)劃出兩臺主機之間的數(shù)據(jù)傳輸?shù)木€路(路由),路由器工作在網(wǎng)絡(luò)層。


一、IP協(xié)議

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?1.路徑選擇中,目的IP非常重要,決定了我們的路徑該如何走。

?2.?ip =?目標(biāo)網(wǎng)絡(luò) +?目標(biāo)主機 (先有一個概念:ip地址被劃分為目標(biāo)網(wǎng)絡(luò)和目標(biāo)主機,ip地址是支撐我們在路上路由的。)

主機:配有ip地址? ? 路由器:配有ip地址并且可以進行路由控制? ? 節(jié)點:主機和路由器的統(tǒng)稱

1.IP的協(xié)議報頭

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?我們之前說過,要學(xué)習(xí)協(xié)議首先要弄明白兩個問題:

1.如何將報頭和有效載荷分離?

2.如何交付?

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?如上圖,除了數(shù)據(jù)(數(shù)據(jù)就是我們經(jīng)常說的有效載荷)都是報頭,而選項一般不關(guān)心,所以IP的標(biāo)準長度報頭是20字節(jié)。

4位首部長度:4位首部長度的基本單位是4字節(jié),表示IP報頭的總長度問題。4位首部長度在TCP的報頭中也有。既然是4位首部長度那么在0000 ~ 1111也就是【0,15】然后乘4->【0,60】

又因為標(biāo)準長度報頭是20字節(jié),所以IP數(shù)據(jù)包的報頭長度是【20,60】最小20字節(jié),最大60字節(jié),其中的40字節(jié)供IP選項使用。設(shè)4位首部長度為x,x*4 = 20,得到四位首部長度是5,二進制表示也就是0101.

16位總長度:代表了IP報文的總長度(也就是包頭和數(shù)據(jù)包),由于占用其16個比特位所以IP數(shù)據(jù)包的最大值為65536,用16位總長度減去報頭長度就是有效載荷的長度,這樣我們就將報頭和有效載荷分離了。

當(dāng)我們做到將有效載荷和報頭分離后,就該思考如何向上交付了。

8位協(xié)議:向上交付的時候如何知道自己交付的到底是TCP協(xié)議還是UDP協(xié)議呢?就是通過8位協(xié)議來控制的,所以這個字段表示IP下一步應(yīng)當(dāng)把這個數(shù)據(jù)包發(fā)往更高層的協(xié)議,如TCP為6,UDP為17.

16位首部校驗和:對整個IP報頭進行校驗,如果校驗不通過會直接將這個數(shù)據(jù)包丟棄。

8位生存空間:數(shù)據(jù)包到達目的地的最大報文跳數(shù),這個字段主要是用來防止出現(xiàn)路由循環(huán)。因為數(shù)據(jù)包會在網(wǎng)絡(luò)環(huán)境中從一個節(jié)點跳到另一個節(jié)點,每次跳都會減小生存時間,當(dāng)時間減為0還沒到目標(biāo)主機這個報文就會被丟棄。

32位源IP地址:當(dāng)報文從主機跳到路由器時,路由器怎么知道你從哪來呢?所以32位源IP地址表示發(fā)送端。

32位目的IP地址:源IP會在路由中多次改變,而目的IP只有一個,就像西游記中唐僧的最終目標(biāo)是西天,代表目的IP。在從黑風(fēng)嶺到女兒國時,源IP就變成了黑風(fēng)嶺,但是目的IP還是西天。

4位版本:一般是IPV4。

8位服務(wù)類型:一般用于實現(xiàn)QoS的要求,我們現(xiàn)在一般捕獲到的數(shù)據(jù)包中此值為一缺省值。

2.網(wǎng)段劃分

網(wǎng)段劃分是什么?為什么要網(wǎng)段劃分?怎么做網(wǎng)段劃分?

網(wǎng)段劃分就是將IP地址分為兩個部分,網(wǎng)絡(luò)號和主機號。

網(wǎng)絡(luò)號:保證相互連接的兩個網(wǎng)段具有不同的標(biāo)識。

主機號:在同一個網(wǎng)段內(nèi),主機之間具有相同的網(wǎng)絡(luò)號,但是必須有不同的主機號。

網(wǎng)段劃分可以大大提高數(shù)據(jù)包的查找和轉(zhuǎn)發(fā)效率,比如中國有23個省,如果沒有網(wǎng)段劃分那么從北京發(fā)往西安的數(shù)據(jù)包就會依次將23個省遍歷看哪個是西安,如果進行了網(wǎng)段劃分那么直接查到這個數(shù)據(jù)包是發(fā)往西安的,直接轉(zhuǎn)到西安即可。這就像大學(xué)中丟了學(xué)生證可以按照學(xué)號分辨你是哪個學(xué)院哪個專業(yè)哪個班級的。

所以互聯(lián)網(wǎng)中的每一臺主機都隸屬于某一個子網(wǎng),這是為了方便定位這個主機。這也就是為什么要有子網(wǎng)劃分。

首先IP地址有32位,我們用前8位來標(biāo)識各個國家,每個國家都有國際路由器所以每個國家內(nèi)部都有自己的一套表示方式,比如再拿8個比特位表示中國的每一個省,所以IP地址就像我們的身份證一樣。

不同的子網(wǎng)其實就是把網(wǎng)絡(luò)號相同的主機放到一起.
如果在子網(wǎng)中新增一臺主機, 則這臺主機的網(wǎng)絡(luò)號和這個子網(wǎng)的網(wǎng)絡(luò)號一致, 但是主機號必須不能和子網(wǎng)中的其他主機重復(fù).
通過合理設(shè)置主機號和網(wǎng)絡(luò)號 , 就可以保證在相互連接的網(wǎng)絡(luò)中 , 每臺主機的 IP 地址都不相同 .
那么問題來了 , 手動管理子網(wǎng)內(nèi)的 IP, 是一個相當(dāng)麻煩的事情 .
有一種技術(shù)叫做DHCP, 能夠自動的給子網(wǎng)內(nèi)新增主機節(jié)點分配IP地址, 避免了手動管理IP的不便.
一般的路由器都帶有DHCP功能. 因此路由器也可以看做一個DHCP服務(wù)器.

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?如上圖所示我們可以看到路由器這種設(shè)備必須至少橋接兩個子網(wǎng),所以路由器就必須既屬于網(wǎng)段1,又屬于網(wǎng)段2,而路由器也是一臺主機,既然要屬于兩個網(wǎng)段,那么就必須在每個網(wǎng)段都有一個ip地址,一般路由器的ip都是網(wǎng)段標(biāo)識.1。上圖中我們可以把一個路由器構(gòu)成的網(wǎng)絡(luò)叫子網(wǎng),當(dāng)有很多這樣的路由器并且我們把很多這樣的路由器連接起來的時候可以叫公網(wǎng)。

劃分方案CIDR

引入一個額外的子網(wǎng)掩碼(subnet mask)來區(qū)分網(wǎng)絡(luò)號和主機號;
子網(wǎng)掩碼也是一個32位的正整數(shù). 通常用一串 "0" 來結(jié)尾;
將IP地址和子網(wǎng)掩碼進行 "按位與" 操作, 得到的結(jié)果就是網(wǎng)絡(luò)號;

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?一般在一個子網(wǎng)中,管理子網(wǎng)中IP的設(shè)備通常是路由器。目標(biāo)網(wǎng)絡(luò)和子網(wǎng)掩碼,子網(wǎng)中的主機,都會被路由器管理。目標(biāo)網(wǎng)絡(luò)和子網(wǎng)掩碼其實是在路由器內(nèi)配置的。從上圖中可以看到,網(wǎng)絡(luò)號一般IP地址與子網(wǎng)掩碼按位與后的結(jié)果,一般全0(.0)是網(wǎng)絡(luò)號,全1(.255)是廣播號.

例子一眼就能看出來,下面我們把例子2算一下:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?為什么子網(wǎng)掩碼前面24個比特位是全1呢?因為前24個比特位是網(wǎng)絡(luò)號,如果將網(wǎng)絡(luò)號都修改了那么還怎么找呢從.65~.78就是所有能使用的主機號。

特殊的IP地址

將IP地址中的主機地址全部設(shè)為0, 就成為了網(wǎng)絡(luò)號, 代表這個局域網(wǎng);
將IP地址中的主機地址全部設(shè)為1, 就成為了廣播地址, 用于給同一個鏈路中相互連接的所有主機發(fā)送數(shù)據(jù)包;
127.*的IP地址用于本機環(huán)回(loop back)測試,通常是127.0.0.1

也就是說2的32次方個IP不是都是在公網(wǎng)使用的,還有一些特殊的IP地址,比如127.0.0.1就是本地環(huán)回。

IP地址的數(shù)量限制

我們知道 , IP 地址 (IPv4) 是一個 4 字節(jié) 32 位的正整數(shù) . 那么一共只有 2 32 次方個 IP 地址 , 大概是 43 億左右 . TCP/IP協(xié)議規(guī)定, 每個主機都需要有一個 IP 地址 .
這意味著 , 一共只有 43 億臺主機能接入網(wǎng)絡(luò)么 ?
實際上 , 由于一些特殊的 IP 地址的存在 , 數(shù)量遠不足 43 ; 另外 IP 地址并非是按照主機臺數(shù)來配置的 , 而是每一個網(wǎng)卡都需要配置一個或多個IP 地址 .
CIDR 在一定程度上緩解了 IP 地址不夠用的問題 ( 提高了利用率 , 減少了浪費 , 但是 IP 地址的絕對上限并沒有增加 ), 仍然不是很夠用. 這時候有三種方式來解決:
動態(tài)分配IP地址: 只給接入網(wǎng)絡(luò)的設(shè)備分配IP地址. 因此同一個MAC地址的設(shè)備, 每次接入互聯(lián)網(wǎng)中, 得到 的IP地址不一定是相同的;
NAT技術(shù)(后面會重點介紹);
IPv6: IPv6并不是IPv4的簡單升級版. 這是互不相干的兩個協(xié)議, 彼此并不兼容; IPv6用16字節(jié)128位來表 示一個IP地址; 但是目前IPv6還沒有普及;

私有IP地址和公網(wǎng)IP地址

如果一個組織內(nèi)部組建局域網(wǎng) ,IP 地址只用于局域網(wǎng)內(nèi)的通信 , 而不直接連到 Internet , 理論上使用任意的 IP 地址都可以, 但是 RFC1918 規(guī)定了用于組建局域網(wǎng)的私有 IP 地址如下:
10.*, 前8位是網(wǎng)絡(luò)號,共16,777,216個地址。
172.16.到172.31.,前12位是網(wǎng)絡(luò)號,共1,048,576個地址。
192.168.*,前16位是網(wǎng)絡(luò)號,共65,536個地址。
包含在這個范圍中的, 都成為私有IP, 其余的則稱為全局IP(或公網(wǎng)IP)。
【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器
一個路由器可以配置兩個IP地址, 一個是WAN口IP, 一個是LAN口IP(子網(wǎng)IP).
路由器LAN口連接的主機, 都從屬于當(dāng)前這個路由器的子網(wǎng)中.
不同的路由器, 子網(wǎng)IP其實都是一樣的(通常都是192.168.1.1). 子網(wǎng)內(nèi)的主機IP地址不能重復(fù). 但是子網(wǎng)之間的IP地址就可以重復(fù)了.
每一個家用路由器, 其實又作為運營商路由器的子網(wǎng)中的一個節(jié)點. 這樣的運營商路由器可能會有很多級,最外層的運營商路由器, WAN口IP就是一個公網(wǎng)IP了.
子網(wǎng)內(nèi)的主機需要和外網(wǎng)進行通信時, 路由器將IP首部中的IP地址進行替換(替換成WAN口IP), 這樣逐級替換, 最終數(shù)據(jù)包中的IP地址成為一個公網(wǎng)IP. 這種技術(shù)稱為NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換).
如果希望我們自己實現(xiàn)的服務(wù)器程序, 能夠在公網(wǎng)上被訪問到, 就需要把程序部署在一臺具有外網(wǎng)IP的服務(wù)器上. 這樣的服務(wù)器可以在阿里云/騰訊云上進行購買.

路由

在復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)中,找出一條通往終點的路線。
【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器
IP 數(shù)據(jù)包的傳輸過程也和問路一樣 .
當(dāng) IP 數(shù)據(jù)包 , 到達路由器時 , 路由器會先查看目的 IP;
路由器決定這個數(shù)據(jù)包是能直接發(fā)送給目標(biāo)主機 , 還是需要發(fā)送給下一個路由器 ;
依次反復(fù) , 一直到達目標(biāo) IP 地址 ;

路由的過程就是通過目標(biāo)ip獲取目標(biāo)主機所在的子網(wǎng),所以在查找的時候一定會有一張路由表供我們查找,如下圖:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

路由表可以使用route命令查看

如果目的IP命中了路由表, 就直接轉(zhuǎn)發(fā)即可;

路由表中的最后一行 , 主要由下一跳地址和發(fā)送接口兩部分組成 , 當(dāng)目的地址與路由表中其它地址都不匹配時, 就按缺省路由條目規(guī)定的接口發(fā)送到下一跳地址。

?下面我們查看一下路由表:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?首先destination表示目標(biāo)網(wǎng)絡(luò),GateWay表示下一跳路由器,Genmask表示子網(wǎng)掩碼(前面說過,每一個子網(wǎng)都必須有目標(biāo)網(wǎng)絡(luò)號和匹配的子網(wǎng)掩碼),F(xiàn)lags就是標(biāo)志,U后面的G表示默認網(wǎng)關(guān)也叫缺省路由,當(dāng)目的ip在路由表查不到是就會進入缺省路由,Iface表示服務(wù)器和路由器的哪個接口連接。

這個目的地址例子不夠多,我們用一個多的例子來演示:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

這臺主機有兩個網(wǎng)絡(luò)接口,一個網(wǎng)絡(luò)接口連到192.168.10.0/24網(wǎng)絡(luò),另一個網(wǎng)絡(luò)接口連到
192.168.56.0/24網(wǎng)絡(luò);
路由表的Destination是目的網(wǎng)絡(luò)地址,Genmask是子網(wǎng)掩碼,Gateway是下一跳地址,Iface是發(fā)送接
口,Flags中的U標(biāo)志表示此條目有效(可以禁用某些 條目),G標(biāo)志表示此條目的下一跳地址是某個路由器的地址,沒有G標(biāo)志的條目表示目的網(wǎng)絡(luò)地址是與本機接口直接相連的網(wǎng)絡(luò),不必經(jīng)路由器轉(zhuǎn)發(fā);
轉(zhuǎn)發(fā)過程例1: 如果要發(fā)送的數(shù)據(jù)包的目的地址是192.168.56.3
跟第一行的子網(wǎng)掩碼做與運算得 到192.168.56.0,與第一行的目的網(wǎng)絡(luò)地址不符
再跟第二行的子網(wǎng)掩碼做與運算得 到192.168.56.0,正是第二行的目的網(wǎng)絡(luò)地址,因此從eth1接口發(fā)送出去;
由于192.168.56.0/24正是與eth1接口直接相連的網(wǎng)絡(luò),因此可以直接發(fā)到目的主機,不需要經(jīng)路由器轉(zhuǎn)發(fā);
轉(zhuǎn)發(fā)過程例2: 如果要發(fā)送的數(shù)據(jù)包的目的地址是202.10.1.2
依次和路由表前幾項進行對比, 發(fā)現(xiàn)都不匹配;
按缺省路由條目, 從eth0接口發(fā)出去, 發(fā)往192.168.10.1路由器;
由192.168.10.1路由器根據(jù)它的路由表決定下一跳地址

當(dāng)有一個數(shù)據(jù)包進入路由器后,首先拿數(shù)據(jù)包中的目的地址和路由表的第一個網(wǎng)絡(luò)號的子網(wǎng)掩碼按位與,按位與后就能確定該報文要去的目標(biāo)網(wǎng)絡(luò),假如第二個192.168.56.0就是目標(biāo)網(wǎng)絡(luò),當(dāng)我們將按位與的結(jié)果和Destination做匹配時發(fā)現(xiàn)第二個就是我們要找的目標(biāo)網(wǎng)絡(luò),這個時候直接通過eth1接口將數(shù)據(jù)包轉(zhuǎn)發(fā)到192.168.56.0這個網(wǎng)絡(luò)號的路由器,這就是我們上圖中路由中一跳的實際過程。

假如現(xiàn)在進入路由器的數(shù)據(jù)包是202.10.1.2,遍歷路由表和每個網(wǎng)絡(luò)號的子網(wǎng)掩碼按位與后發(fā)現(xiàn)都沒有匹配的網(wǎng)絡(luò)號,這個時候就會將數(shù)據(jù)包轉(zhuǎn)到default也就是默認網(wǎng)關(guān)192.168.10.1,通過eth0接口發(fā)送。

下面我們講解IP報頭中剩下的三個部分:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

要了解這三個標(biāo)識,就要了解數(shù)據(jù)鏈路層,我們在路由器之間傳遞的確實是IP報文,但是在網(wǎng)線中跑的確是數(shù)據(jù)鏈路層的MAC幀,而在MAC幀協(xié)議中規(guī)定,自己的有效載荷不能超過1500字節(jié)(MTU最大傳送單元,可以修改)。而把數(shù)據(jù)包給數(shù)據(jù)鏈路層的就是IP層,也就是說IP層必須將發(fā)送給MAC幀的數(shù)據(jù)大小控制在1500字節(jié)以內(nèi),這1500字節(jié)包括IP的報頭,那么如何控制呢?實際上就是分片與組裝,將原來超過1500字節(jié)的報文經(jīng)過分片不就將每個報文控制在1500字節(jié)以內(nèi)了嗎,所以上圖中這三個部分就是支持IP的分片與組裝的,下面我們演示一下這個過程:

首先分片與組裝是由IP層協(xié)議完成的,所以TCP協(xié)議,MAC幀協(xié)議都不會關(guān)心原來的報文是否被分片,這就是IP層協(xié)議自己的行為。注意:分片與組裝不是主流!!!

下面我們根據(jù)組裝與分片的四個問題來講解上圖中三個部分的作用:

1.如何知道一個報文被分片?

2.如何識別同一個報文的分片?

3.哪個分片是第一個,哪個分片是最后一個?有沒有收全或者丟失?

4.哪個在前?哪個在后?如何正確的進行組裝?

5.怎么保證合起來的報文是正確的?

16位標(biāo)識:主機發(fā)送報文的唯一標(biāo)識,如果IP報文在向數(shù)據(jù)鏈路層發(fā)送的時候被分片了,那么每一個片的16位標(biāo)識ID都是相同的。

也就是說1個報文如果被分為3片,那么這3片報文中的16位標(biāo)識都是相同的。這就解決了第二個如何識別一個報文的分片問題。

3位標(biāo)志字段:第一位保留(保留的意思是現(xiàn)在還用不到第一位)。第二位為1表示禁止分片,這個時候如果報文長度超過MTU,則IP模塊會直接將此報文丟棄。第三位表示更多分片,比如一個報文被分了3片,第一片的第三個標(biāo)志位為1,其他標(biāo)志位為0,第二片的第三個標(biāo)志位為1其他為0,第三片的第三個標(biāo)志位為0,其他標(biāo)志位為1,第三片類似于一個結(jié)束標(biāo)記,也就是說可以知道被分片的報文的結(jié)束。也就是說第三個標(biāo)志位的意思是:如當(dāng)前報文后面還有分片,那么第三個標(biāo)志位為1,如果當(dāng)前報文就是最后一個分片,那么第三個標(biāo)志位為0作為一個結(jié)束位置。注意:被分片的每個報文前面都會加上IP報頭。

由3位標(biāo)志字段中的第三個字段可以得知一個報文是否被分片(如果第三個字段為1說明被分片),第三個字段可以得知哪個報文是分片的最后一個。

13位片偏移:分片相對于IP原始報文開始處的偏移,也可以理解為當(dāng)前分片在原IP報文中的位置,實際偏移的字節(jié)數(shù)是這個值*8得到的,因此除了最后一個報文之外,其他報文的長度必須是8的整數(shù)倍(否則報文就不連續(xù)了)。

確定分片第一個很簡單,只需要看3位標(biāo)志字段中的第三位是否為1,并且13位片偏移量為0,如果滿足第三位為1并且偏移量為0則是第一個分片。

要確定最后一個分片,只需要看3位標(biāo)志字段的第三位是否為0,并且13位片偏移量大于0.

而我們組裝這個報文也很簡單,只需要按照片偏移進行升序排序,就可以將分片的報文組裝起來。

對于第三個問題中的如何知道分片的報文收全或者丟失,實際上我們保證不了,但是組裝之后我們可以進行簡單的判斷,只需要遍歷每個報文看當(dāng)前的起始位置+自身長度是否等于下一個報文中填充的偏移量大小。

如何保證合起來的報文是正確的呢?還記得我們IP報頭中的16首部校驗和和TCP報頭中的16位首部校驗和嗎?16位首部校驗和是使用CRC校驗來鑒別頭部是否損壞的。校驗后如果發(fā)現(xiàn)報文頭部損壞則直接丟棄。

分片是不好的,因為將一個報文拆成了多個,任意一個報文丟失就會造成拼接組裝失敗。一旦組裝失敗就會重發(fā)整個報文(對于TCP來講是不知道IP如何分片的,所以重發(fā)的時候只能整個報文重新發(fā)送)。

下面我們自己分一下片:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?首先傳輸層TCP發(fā)了3000字節(jié)的報文給IP層,IP層對數(shù)據(jù)添加報頭變成3020字節(jié),然后我們以1500字節(jié)為一片進行分片,每一片都添加IP層的報頭:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?如上圖,第一次直接1500字節(jié)分片因為本身就有報頭,第二次只能拿1480字節(jié)的數(shù)據(jù),因為還有20字節(jié)作為IP報頭,第三次拿最后40字節(jié)的數(shù)據(jù),加上20字節(jié)的IP報頭是60字節(jié),最后組裝的時候去掉報頭就是1480 + 1480 +40剛好是TCP發(fā)送的3000字節(jié)的報文。

二、MAC幀協(xié)議

前面我們說過,因為IP是在網(wǎng)絡(luò)層,IP報文是在路由器中跑的,當(dāng)我們要拿目的IP去路由器中查找網(wǎng)絡(luò)號的時候就是用的IP報文,而在網(wǎng)線中傳輸是在數(shù)據(jù)鏈路層,跑的實際上是MAC幀。我們之前說過IP提供了一種從A主機跨網(wǎng)絡(luò)傳輸?shù)紹主機的能力,這個能力是通過目的IP +?子網(wǎng)劃分 +?路由來完成的,但是要把數(shù)據(jù)跨網(wǎng)絡(luò)傳輸?shù)街鳈CB,就得先將數(shù)據(jù)交給與主機A相連的下一跳主機(也叫節(jié)點),如下圖:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?主機A要想給主機B發(fā)消息,首先要將數(shù)據(jù)發(fā)送給與主機A相連的下一跳節(jié)點(路由器A),而主機A要想發(fā)送數(shù)據(jù)給路由器A的前提一定是主機A和路由器A在同一個網(wǎng)段,所以我們所看到的跨網(wǎng)絡(luò)傳輸?shù)谋举|(zhì)就是由無數(shù)個局域網(wǎng)(子網(wǎng))轉(zhuǎn)發(fā)的結(jié)果。

所以我們想要徹底理解跨網(wǎng)絡(luò)轉(zhuǎn)發(fā)就首先要理解局域網(wǎng)中報文的轉(zhuǎn)發(fā)原理,而局域網(wǎng)中兩個主機的通信就必須認識數(shù)據(jù)鏈路層的以太網(wǎng)協(xié)議。

1.以太網(wǎng)

"以太網(wǎng)" 不是一種具體的網(wǎng)絡(luò), 而是一種技術(shù)標(biāo)準; 既包含了數(shù)據(jù)鏈路層的內(nèi)容, 也包含了一些物理層的內(nèi)容. 例如: 規(guī)定了網(wǎng)絡(luò)拓撲結(jié)構(gòu), 訪問控制方式, 傳輸速率等;
例如以太網(wǎng)中的網(wǎng)線必須使用雙絞線; 傳輸速率有10M, 100M, 1000M等;
以太網(wǎng)是當(dāng)前應(yīng)用最廣泛的局域網(wǎng)技術(shù); 和以太網(wǎng)并列的還有令牌環(huán)網(wǎng), 無線LAN等

之前我們將局域網(wǎng)的時候說過,在同一個局域網(wǎng)的主機是可以直接進行通信的,并且在同一個局域網(wǎng)的每個主機必須有自己唯一的標(biāo)識符。

2.以太網(wǎng)幀(MAC幀)格式報頭

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

首先MAC幀協(xié)議的報頭是用藍色圈出來的地方,分別是6位目的地址,6位源地址,2位類型,4位CRC校驗校驗碼。

前面我們說過,學(xué)習(xí)協(xié)議首先理解兩點:

1.MAC幀協(xié)議如何將報頭和有效載荷分離?

MAC幀協(xié)議采用定長策略,前14位后4位都是固定的,所以可以直接將報頭和有效載荷分離。

2.如何向上交付?

?還記得IP報頭中的8位協(xié)議嗎?8位協(xié)議可以知道上層交付的是TCP還是UDP,而我們的MAC幀協(xié)議也是這樣解決的,在報頭的2位幀協(xié)議類型中,可以確定上層交付的是什么類型。比如0800代表上層是IP數(shù)據(jù)報,其次還有ARP,RARP數(shù)據(jù)報。

還記得我們剛剛說局域網(wǎng)中的主機必須有唯一標(biāo)識嗎?我們的每個主機都有網(wǎng)卡,每張網(wǎng)卡都有唯一的一個sn碼,這個sn碼就是這個網(wǎng)卡的MAC地址,這個MAC地址在全球范圍內(nèi)具有唯一性。

那么我們?nèi)绾尾樵冏约旱膍ac地址呢?通過ifconfig命令:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器?ether的翻譯就有以太的意思,后面就是MAC地址。

3.基于協(xié)議講解局域網(wǎng)轉(zhuǎn)發(fā)的原理

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

首先m1這個主機給m8發(fā)送了一個數(shù)據(jù),這個數(shù)據(jù)是從應(yīng)用層添加報頭再到傳輸層添加報頭在到網(wǎng)絡(luò)層IP添加報頭最后在數(shù)據(jù)鏈路層添加MAC幀報頭,然后在MAC幀的報頭中的目的地址是主機m8的MAC地址,因為從m1主機發(fā)出所以源地址是m1主機的mac地址,交付的時候上層協(xié)議為IP,所以類型是0800,這條消息發(fā)出后整個局域網(wǎng)的所有主機都會受到這條消息,但是每個主機都會對這條消息進行報頭和有效載荷的分離,拿到報頭后拿自己的MAC地址和報頭的MAC地址對比,如果是發(fā)給自己的就將有效載荷向上交付,如果不是自己的則直接會被丟棄,而上層是不知道主機收到了這條消息并且將消息丟棄的。

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器?當(dāng)m8主機收到m1主機發(fā)來的消息后,然后給m1主機響應(yīng),期間也是從應(yīng)用層到數(shù)據(jù)鏈路層封裝最后變成一個MAC幀,只不過MAC幀中的目的地址變成了m1,源地址變成了m8(因為是從m8主機發(fā)出),消息發(fā)出后同樣局域網(wǎng)內(nèi)的每個主機都會收到m8主機發(fā)送給m1主機的響應(yīng),但是最后只有m1主機保留這條消息。

?明白了上面的原理我們應(yīng)該可以認識到局域網(wǎng)本質(zhì)實際上就是臨界資源,?這個資源是被所有局域網(wǎng)內(nèi)的主機共享的,而在局域網(wǎng)中,任何時刻只允許一個主機發(fā)送消息,如果多個消息被同時發(fā)送,就會導(dǎo)致局域網(wǎng)內(nèi)的數(shù)據(jù)發(fā)生碰撞。所以一個局域網(wǎng)就是一個碰撞域。那么如何讓任何時刻只允許一個主機發(fā)送消息呢?這就要看網(wǎng)絡(luò)策略的實現(xiàn)了,比如令牌環(huán)網(wǎng)中在一個局域網(wǎng)內(nèi)只有獲得令牌的主機才能發(fā)送消息,這就像鎖一樣。而以太網(wǎng)是依靠主機的碰撞檢測和碰撞避免算法來實現(xiàn)的,并且由于光電傳播非??焖砸粋€時刻產(chǎn)生碰撞的概率并不高,除非一個局域網(wǎng)內(nèi)的主機非常多,但是我們學(xué)局域網(wǎng)都知道一個局域網(wǎng)內(nèi)的主機并不會很多,這就像家里的WiFi,如果很多人連接使用就會很卡,只有兩三個人用就不擔(dān)心卡頓問題。

當(dāng)然解決碰撞問題還有一個有效的辦法就是交換機:

【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理,linux,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),mac,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,路由器

?交換機的作用就是,當(dāng)m1給m6發(fā)送消息的時候m2給m1發(fā)送消息造成碰撞,這個時候交換機檢測到左邊發(fā)生碰撞那么這個時候就不會將左側(cè)的消息轉(zhuǎn)發(fā)到右側(cè)直接將消息丟棄(如果將左側(cè)碰撞的消息發(fā)送到右側(cè)就會影響右側(cè)的主機,右側(cè)的主機都會觸發(fā)碰撞檢測和碰撞避免算法)。如果左側(cè)沒有發(fā)生碰撞并且m1要向m8發(fā)送消息,這個時候消息到交換機這里交換機就會將消息轉(zhuǎn)發(fā)到右側(cè)。文章來源地址http://www.zghlxwxcb.cn/news/detail-648007.html

到了這里,關(guān)于【網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層】深入理解IP協(xié)議和MAC幀協(xié)議的基本原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【網(wǎng)絡(luò)原理進階篇】ip協(xié)議,ip地址組成,ip地址分類網(wǎng)關(guān),路由選擇,數(shù)據(jù)鏈路層,應(yīng)用層,ip與mac地址等

    【網(wǎng)絡(luò)原理進階篇】ip協(xié)議,ip地址組成,ip地址分類網(wǎng)關(guān),路由選擇,數(shù)據(jù)鏈路層,應(yīng)用層,ip與mac地址等

    前言: 大家好,我是 良辰丫 ,我們已經(jīng)學(xué)習(xí)了網(wǎng)絡(luò)原理基礎(chǔ)版,初步認識了網(wǎng)絡(luò),還學(xué)習(xí)了網(wǎng)絡(luò)編程,了解了網(wǎng)絡(luò)通信的各種程序,接下來我們更深入的了解網(wǎng)絡(luò)是如何工作的.這篇文章我們主要介紹協(xié)議,UDP和TCP的一些原理.???? ??個人主頁:良辰針不戳 ??所屬專欄:javaEE初階 ??

    2024年02月06日
    瀏覽(30)
  • 「網(wǎng)絡(luò)編程」網(wǎng)絡(luò)層協(xié)議_ IP協(xié)議學(xué)習(xí)_及深入理解

    「網(wǎng)絡(luò)編程」網(wǎng)絡(luò)層協(xié)議_ IP協(xié)議學(xué)習(xí)_及深入理解

    「前言」文章內(nèi)容是網(wǎng)絡(luò)層的IP協(xié)議講解。 「歸屬專欄」網(wǎng)絡(luò)編程 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) IP指網(wǎng)際互連協(xié)議, Internet Protocol 的縮寫,是TCP/IP體系中的網(wǎng)絡(luò)層協(xié)議。 IP協(xié)議位于網(wǎng)絡(luò)層 網(wǎng)絡(luò)層解決的問題 傳輸層 : 負責(zé)兩臺主機之間的數(shù)據(jù)傳輸。代表協(xié)議:

    2024年02月08日
    瀏覽(36)
  • 【網(wǎng)絡(luò)】數(shù)據(jù)鏈路層——MAC幀協(xié)議 | ARP協(xié)議

    【網(wǎng)絡(luò)】數(shù)據(jù)鏈路層——MAC幀協(xié)議 | ARP協(xié)議

    ??作者:一只大喵咪1201 ??專欄:《網(wǎng)絡(luò)》 ??格言: 你只管努力,剩下的交給時間! 來到數(shù)據(jù)鏈路層后,完整的數(shù)據(jù)被叫做 數(shù)據(jù)幀 ,習(xí)慣上稱之為MAC幀。 網(wǎng)絡(luò)層的IP協(xié)議并不是將數(shù)據(jù)報直接發(fā)到了網(wǎng)絡(luò)中,而是將數(shù)據(jù)報繼續(xù)向下交付,給到了數(shù)據(jù)鏈路層。 如上圖所示,

    2024年02月11日
    瀏覽(15)
  • 深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01

    深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01

    計算機網(wǎng)絡(luò)是什么? 隨著計算機技術(shù)發(fā)展,計算機的體積和價格都在下降,之前計算機多用于研究機構(gòu),現(xiàn) 階段逐步進入一般的公司用于辦公。原來計算機之間傳輸數(shù)據(jù)需要通過軟盤等第三方存儲介 質(zhì)進行轉(zhuǎn)存,人們需要將數(shù)據(jù)直接通過通信線路傳輸,來縮短傳輸時間,于

    2024年02月16日
    瀏覽(26)
  • 深入理解TCP/IP協(xié)議:網(wǎng)絡(luò)通信的基石

    深入理解TCP/IP協(xié)議:網(wǎng)絡(luò)通信的基石

    提示:本系列文章重點學(xué)習(xí)TCP/IP協(xié)議 提示:在這里先對TCP/IP協(xié)議做一個概述,以便大家能更好的理解: TCP/IP協(xié)議是當(dāng)今互聯(lián)網(wǎng)世界中最為重要的網(wǎng)絡(luò)通信協(xié)議之一,它承載了全球范圍內(nèi)數(shù)以億計的設(shè)備之間的通信。無論是在個人日常使用的智能手機,還是在企業(yè)級的網(wǎng)絡(luò)架

    2024年04月16日
    瀏覽(24)
  • 【數(shù)據(jù)鏈路層】網(wǎng)絡(luò)基礎(chǔ) -- MAC幀協(xié)議與ARP協(xié)議

    【數(shù)據(jù)鏈路層】網(wǎng)絡(luò)基礎(chǔ) -- MAC幀協(xié)議與ARP協(xié)議

    用于兩個設(shè)備(同一種數(shù)據(jù)鏈路節(jié)點)之間進行傳遞 在同一個局域網(wǎng)的主機,能不能直接通信?可以的,比如: 假如你正在上課,你的老師在課堂上問小明你昨天的作業(yè)怎么沒做?這時候小明回答說他做了只不過交過去比較晚老師可能沒看到。老師和小明交流的過程班級里面的

    2024年02月08日
    瀏覽(48)
  • 【計算機網(wǎng)絡(luò)-數(shù)據(jù)鏈路層】介質(zhì)訪問控制協(xié)議(MAC協(xié)議)

    【計算機網(wǎng)絡(luò)-數(shù)據(jù)鏈路層】介質(zhì)訪問控制協(xié)議(MAC協(xié)議)

    介質(zhì)訪問控制(MAC) :采取一定的措施,使得兩對節(jié)點之間的通信不會發(fā)生相互干擾的情況。 信道劃分 MAC :將使用介質(zhì)的每個設(shè)備與來自同一信道上的其他設(shè)備的 通信隔離開 ,將時域和頻域資源合理地分配給網(wǎng)絡(luò)上的設(shè)備。 特點 :按集中控制的方式解決發(fā)送信息的次序

    2023年04月16日
    瀏覽(28)
  • Linux網(wǎng)絡(luò)-數(shù)據(jù)鏈路層,MAC幀解析,ARP協(xié)議

    Linux網(wǎng)絡(luò)-數(shù)據(jù)鏈路層,MAC幀解析,ARP協(xié)議

    目錄 數(shù)據(jù)鏈路層VS網(wǎng)絡(luò)層? 以太網(wǎng)概念 以太網(wǎng)的幀格式(報文格式)(也可以稱之為MAC幀) MAC地址的概念 MAC幀格式 局域網(wǎng)通信原理 MTU MTU說明 MTU對IP協(xié)議的影響 MTU對UDP協(xié)議的影響 MTU對TCP協(xié)議的影響 ARP協(xié)議 ARP協(xié)議的作用 ARP數(shù)據(jù)報格式 ARP請求+ARP應(yīng)答的過程 ARP欺騙 IP:在復(fù)

    2024年02月11日
    瀏覽(15)
  • 【網(wǎng)絡(luò)編程·數(shù)據(jù)鏈路層】MAC幀/以太網(wǎng)協(xié)議/ARP協(xié)議/RARP協(xié)議

    【網(wǎng)絡(luò)編程·數(shù)據(jù)鏈路層】MAC幀/以太網(wǎng)協(xié)議/ARP協(xié)議/RARP協(xié)議

    ?需要云服務(wù)器等云產(chǎn)品來學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 目錄 一、MAC幀 1、IP地址和MAC地址的區(qū)別 2、MAC幀協(xié)議 3、MTU對IP協(xié)議的影響 4、MTU對UDP協(xié)議的影響 5、MTU對TCP協(xié)議的影響 二、

    2024年02月07日
    瀏覽(22)
  • 網(wǎng)絡(luò)編程——深入理解TCP/IP協(xié)議——OSI模型和TCP/IP模型:構(gòu)建網(wǎng)絡(luò)通信的基石

    網(wǎng)絡(luò)編程——深入理解TCP/IP協(xié)議——OSI模型和TCP/IP模型:構(gòu)建網(wǎng)絡(luò)通信的基石

    TCP/IP協(xié)議,即 傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議 ,是一組用于在計算機網(wǎng)絡(luò)中實現(xiàn)通信的協(xié)議。它由兩個主要的協(xié)議組成:TCP(傳輸控制協(xié)議)和IP(互聯(lián)網(wǎng)協(xié)議)。TCP負責(zé)確保數(shù)據(jù)的可靠傳輸,而IP則負責(zé)路由數(shù)據(jù)包以在網(wǎng)絡(luò)中傳遞。TCP/IP協(xié)議簇還包含其他輔助協(xié)議,如UDP(用戶數(shù)

    2024年02月14日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包