数据链路层之以太网协议
在 IP 數(shù)據(jù)包交付的過程中,在數(shù)據(jù)鏈路層會(huì)對(duì)數(shù)據(jù)包進(jìn)行添加報(bào)頭信息。以太網(wǎng)協(xié)議就是數(shù)據(jù)鏈路層的一個(gè)重要協(xié)議。這樣說其實(shí)不太準(zhǔn)確,因?yàn)橐蕴W(wǎng)協(xié)議是一個(gè)規(guī)定數(shù)據(jù)鏈路層及物理層的協(xié)議,不能說它是數(shù)據(jù)鏈路層的一個(gè)協(xié)議。
以太網(wǎng)幀
以太網(wǎng)幀就是將網(wǎng)絡(luò)層交付的數(shù)據(jù)添加報(bào)頭信息后,此時(shí)的數(shù)據(jù)以幀的形式傳遞。以太網(wǎng)幀的格式如下:
在這里,目的地址與源地址這里都指的是 MAC 地址。每一個(gè)主機(jī)對(duì)應(yīng)唯一的一個(gè) MAC 地址,是由網(wǎng)卡決定的,長(zhǎng)度是 48 位,所以這里的目的地址與源地址都是 6 個(gè)字節(jié),也就是 48 個(gè)比特位。
在以太網(wǎng)幀的最后,還有一個(gè) CRC 校驗(yàn)碼,來校驗(yàn)數(shù)據(jù)是否異常。
在中間,有一個(gè)兩個(gè)字節(jié)的類型標(biāo)識(shí)。這個(gè)類型字段有三種值,分別是 : IP、ARP、RARP。
IP
如果類型碼為 0800 那么在數(shù)據(jù)鏈路層解包完畢后,將該數(shù)據(jù)交付給網(wǎng)絡(luò)層的 IP 協(xié)議來處理該報(bào)文。
ARP
如果類型碼是 0806 , 那么在向上層交付的時(shí)候就交付給 ARP 協(xié)議,這里要說的是 ARP 協(xié)議是處于數(shù)據(jù)鏈路層與網(wǎng)絡(luò)層之間的一種協(xié)議,也叫作地址解析協(xié)議。它將 IP 地址轉(zhuǎn)換為 MAC 地址。
RARP
RARP 協(xié)議,就是 Reverse ARP,與 ARP 協(xié)議相同,是將 MAC 地址轉(zhuǎn)換為 IP 地址的協(xié)議。
一般來說,數(shù)據(jù)第一次發(fā)送給目的主機(jī)時(shí),在這之前應(yīng)該發(fā)送 ARP 協(xié)議,根據(jù)目的主機(jī)的 IP 地址來確定目的主機(jī)的 MAC 地址,從而為后面的數(shù)據(jù)發(fā)送與接收提供便利。
MAC地址與IP地址
在數(shù)據(jù)發(fā)送傳輸?shù)倪^程中,目的 IP 地址與源 IP 地址是永遠(yuǎn)不會(huì)變的,這是這個(gè)數(shù)據(jù)的起始與終點(diǎn),而 MAC 地址是一直在變化的,由于數(shù)據(jù)在傳輸?shù)倪^程中會(huì)經(jīng)歷很多的主機(jī)等,所以在這個(gè)過程中 MAC 地址一直在變。類似于我們坐車,要坐車從 A 出發(fā),目的地是 D。這個(gè)過程中我們會(huì)經(jīng)過 B C,在到達(dá) B 的時(shí)候,此時(shí)的 MAC 地址相當(dāng)于我們上一站是 A , 下一站是 C。而目的 IP 地址與 源 IP 地址 分別是 D 與 A,這樣說的話就很好理解了。
MAC 地址與 IP 地址,一個(gè)代表的目的與終點(diǎn),一個(gè)代表著途中的經(jīng)過。所以在到達(dá)目的局域網(wǎng)后,數(shù)據(jù)包并不知道要傳輸給哪臺(tái)主機(jī),因?yàn)?MAC 地址的變化,但是目的 IP 地址一直沒有變化,所以此時(shí)就需要 ARP 協(xié)議來確定目的主機(jī)的 MAC 地址。
MTU
在談 IP 協(xié)議的時(shí)候說到, IP數(shù)據(jù)報(bào)的長(zhǎng)度受數(shù)據(jù)鏈路層的 MTU 影響。數(shù)據(jù)鏈路層要求在網(wǎng)絡(luò)層傳輸過來的數(shù)據(jù)包必須在 MTU 范圍內(nèi),以太網(wǎng)幀中的數(shù)據(jù)長(zhǎng)度必須在 46字節(jié)到1500字節(jié)當(dāng)中去。也就是說在 IP 層在添加報(bào)頭信息之前,要判斷此時(shí)由傳輸層傳輸過來的數(shù)據(jù)段是否超過了 1480 個(gè)字節(jié)(以太網(wǎng)幀中的數(shù)據(jù)包括 IP 協(xié)議的報(bào)頭信息,IP 協(xié)議的報(bào)頭信息為 20 字節(jié)),如果超過了,那么則對(duì)該數(shù)據(jù)段進(jìn)行分片,所有被分片的數(shù)據(jù)的 IP 報(bào)頭信息當(dāng)中,它們的 16 位標(biāo)識(shí)都是相同的,并且報(bào)頭信息中的標(biāo)志字段中第二位為 0 ,第三位如果為 1 ,代表著報(bào)文的結(jié)束。
接收端在接收到這里分片數(shù)據(jù)后,根據(jù) IP 報(bào)頭信息的 16 為標(biāo)識(shí)信息、三位標(biāo)志位、13位偏移量信息進(jìn)行組裝。
如果分片后的數(shù)據(jù)在接收端丟失某一片,那么就組裝失敗。即使組裝失敗, IP 層也不負(fù)責(zé)重新傳輸?shù)墓δ堋_@是傳輸層所該做的事情。
我們發(fā)現(xiàn) ARP 協(xié)議與 RARP 協(xié)議它們的實(shí)際數(shù)據(jù)只有 28 個(gè)字節(jié),于是在它的報(bào)文后進(jìn)行補(bǔ)位,其中 PAD 就是用來填充的,使 ARP / RARP 協(xié)議的長(zhǎng)度達(dá)到 MTU 的最小字節(jié)數(shù)。
對(duì) TCP 傳輸?shù)挠绊?/h5>
TCP 協(xié)議在傳輸時(shí)也收到 MTU 的影響。一個(gè) TCP 數(shù)據(jù)報(bào)的最大長(zhǎng)度為 MSS 。MSS 處于 TCP 報(bào)頭信息選項(xiàng)中。在 TCP 進(jìn)行鏈接的時(shí)候,雙方在發(fā)送 SYN 與 SYN + ACK 時(shí)就會(huì)在選項(xiàng)內(nèi)對(duì) MSS 進(jìn)行設(shè)置。在雙方都得到對(duì)方的 MSS 時(shí),選擇較小的 MSS 的值作為最終的 MSS 。
再說明白點(diǎn),MSS 的大小其實(shí)就是應(yīng)用層給傳輸層的交付的數(shù)據(jù)的大小。不包括傳輸層的報(bào)頭信息。所以在計(jì)算 MSS 的時(shí)候,用 MTU 減去網(wǎng)絡(luò)層報(bào)頭長(zhǎng)度以及傳輸層報(bào)頭長(zhǎng)度即可。
歡迎大家共同討論,如有錯(cuò)誤及時(shí)聯(lián)系作者指出,并改正。謝謝大家!
總結(jié)
以上是生活随笔為你收集整理的数据链路层之以太网协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot starter自定
- 下一篇: 有向图的强联通分量之:【求最长链】【求最