中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

合肥做網(wǎng)站的價(jià)格網(wǎng)絡(luò)推廣是什么意思

合肥做網(wǎng)站的價(jià)格,網(wǎng)絡(luò)推廣是什么意思,b2b 網(wǎng)站特點(diǎn),公司官網(wǎng)如何更新網(wǎng)站本篇博客整理了 TCP/IP 分層模型中網(wǎng)絡(luò)層的 IP 協(xié)議,旨在讓讀者更加深入理解網(wǎng)絡(luò)協(xié)議棧的設(shè)計(jì)和網(wǎng)絡(luò)編程。 目錄 一、網(wǎng)絡(luò)層 二、IP 報(bào)頭 1)報(bào)頭與有效載荷的分離 2)有效載荷的上交 3)源 IP 與目的 IP 4)生存時間…

????????本篇博客整理了 TCP/IP 分層模型中網(wǎng)絡(luò)層的 IP 協(xié)議,旨在讓讀者更加深入理解網(wǎng)絡(luò)協(xié)議棧的設(shè)計(jì)和網(wǎng)絡(luò)編程。

目錄

一、網(wǎng)絡(luò)層

二、IP 報(bào)頭

1)報(bào)頭與有效載荷的分離

2)有效載荷的上交

3)源 IP 與目的 IP

4)生存時間

三、分片與組裝

1)MTU 與分片、組裝

2)分片的具體過程?

3)組裝的具體過程

4)分片的丟包情況

補(bǔ))相關(guān)面試題

四、 IP 地址與網(wǎng)段劃分

1)IP 地址的構(gòu)成

2)IP 地址的分配和具體作用

?3)網(wǎng)段劃分

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

5)特殊的 IP 地址

?6)私網(wǎng) IP 和公網(wǎng) IP

五、路由

1)數(shù)據(jù)路由

2)路由表查詢的具體過程


一、網(wǎng)絡(luò)層

? ? ? ? 數(shù)據(jù)的傳輸離不開網(wǎng)絡(luò)協(xié)議棧,而網(wǎng)絡(luò)協(xié)議棧是分層的。

? ? ? ? 在 TCP/IP 分層模型中主要包含了應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層。

????????進(jìn)行網(wǎng)絡(luò)通信時,通信雙方發(fā)送的數(shù)據(jù)并不是直接從一方的應(yīng)用層,直接發(fā)送到了另一方的應(yīng)用層,而是需要應(yīng)用層將數(shù)據(jù)繼續(xù)向下交付。

? ? ? ? 待發(fā)送的通信數(shù)據(jù),會先從主機(jī)的應(yīng)用層拷貝至傳輸層,再繼續(xù)向下貫穿,在網(wǎng)絡(luò)層和鏈路層經(jīng)過數(shù)據(jù)封裝后,通過網(wǎng)絡(luò)發(fā)送到對方主機(jī);而對端主機(jī)在收到數(shù)據(jù)后,也同樣需要在鏈路層和網(wǎng)絡(luò)層進(jìn)行數(shù)據(jù)解包,并上交給傳輸層,再繼續(xù)上交至對端的應(yīng)用層。

? ? ? ? 其中,網(wǎng)絡(luò)層主要負(fù)責(zé)的問題是,將數(shù)據(jù)從一臺主機(jī)送到另一臺主機(jī),即數(shù)據(jù)的路由。網(wǎng)絡(luò)層有能力將數(shù)據(jù)送到對方主機(jī),雖然不能保證每次都能將數(shù)據(jù)成功送達(dá),但因傳輸層的 TCP 協(xié)議的可靠性策略的存在,網(wǎng)絡(luò)層最終一定能將數(shù)據(jù)可靠地發(fā)達(dá)。

【ps】一端主機(jī)的傳輸層,從應(yīng)用層中的某個進(jìn)程那里拿到數(shù)據(jù)后,該數(shù)據(jù)會貫穿網(wǎng)絡(luò)協(xié)議棧進(jìn)行封裝和解包,最終到達(dá)對方傳輸層,對端的傳輸層也會將數(shù)據(jù)上交給對端應(yīng)用層中的某個進(jìn)程,因此,傳輸層負(fù)責(zé)的是,數(shù)據(jù)從一個進(jìn)程到另一個進(jìn)程的過程。

? ? ? ? 通信數(shù)據(jù)經(jīng)歷的網(wǎng)絡(luò)傳輸,一般是跨局域網(wǎng)的,多個網(wǎng)絡(luò)之間由路由器這個硬件設(shè)備連接起來,也就是說,? 通信數(shù)據(jù)在網(wǎng)絡(luò)中一定會經(jīng)過多個路由器。

? ? ? ? 既然如此,如何選擇從源到目的的傳輸路徑就十分重要了,而這就是數(shù)據(jù)路由的過程。?

????????數(shù)據(jù)路由的目的是,在確定目標(biāo)主機(jī)后,尋找最短的到達(dá)路徑。

? ? ? ? 確定目標(biāo)主機(jī)是非常重要的,這直接決定了數(shù)據(jù)路由時的路徑選擇,也是數(shù)據(jù)能跨網(wǎng)絡(luò)送達(dá)的根本。只有數(shù)據(jù)經(jīng)過了較為正確的路徑選擇,才可能慢慢趨近于目標(biāo)網(wǎng)絡(luò)或目標(biāo)主機(jī)。

????????確定目標(biāo)主機(jī)后,數(shù)據(jù)就可以在網(wǎng)絡(luò)中進(jìn)行路由了。數(shù)據(jù)自身無法進(jìn)行路徑選擇,是不認(rèn)路的,但好在網(wǎng)絡(luò)中的一臺臺路由器可以進(jìn)行路徑選擇,是認(rèn)路的,于是數(shù)據(jù)在路由過程中,就可以不斷地去找網(wǎng)絡(luò)中的一臺臺路由器問路。

????????路由器會將自己做好的路徑選擇都記錄到路由表中,只要查詢路由表,就可以找到去特定點(diǎn)的最短路徑。而數(shù)據(jù)在路由時,也會通過路由器來不斷進(jìn)行路徑選擇,以逐步靠近目標(biāo)網(wǎng)絡(luò)或目標(biāo)主機(jī)。


【Tips】數(shù)據(jù)路由的有關(guān)概念

  • 主機(jī):是配有IP地址、但不進(jìn)行路由控制的設(shè)備(不過,隨著技術(shù)的發(fā)展,現(xiàn)在幾乎不存在不進(jìn)行路由控制的設(shè)備了)。
  • 路由器:是既配有IP地址、又能進(jìn)行路由控制的設(shè)備(其實(shí),現(xiàn)在主流的路由器也不僅僅有路由的功能,甚至還具備某些應(yīng)用層的功能)。
  • 節(jié)點(diǎn):是主機(jī)和路由器的統(tǒng)稱。

二、IP 報(bào)頭

【Tips】IP 協(xié)議格式

  • 4 位版本號(version):指定 IP 協(xié)議的版本(IPv4 / IPv6),對于 IPv4 來說,就是4。
  • 4 位首部長度(header length):表示 IP 報(bào)頭的長度,以 4 字節(jié)為單位。
  • 8 位服務(wù)類型(Type Of Service):3 位優(yōu)先權(quán)字段(已棄用)、4 位 TOS 字段、?1 位保留字段(必須置為 0)。其中,4 位 TOS 分別表示:最小延時、最大吞吐量、最高可靠性、最小成本;這四者相互沖突,只能選擇一個,比如對于 ssh/telnet 這樣的應(yīng)用程序,最小延時比較重要,而對于 ftp 這樣的程序,最大吞吐量比較重要。
  • 16 位總長度(total length):IP 報(bào)文(IP 報(bào)頭+有效載荷)的總長度,用于將各個 IP 報(bào)文進(jìn)行分離。
  • 16 位標(biāo)識(id):唯一的標(biāo)識主機(jī)發(fā)送的報(bào)文,如果數(shù)據(jù)在 IP 層進(jìn)行了分片,那么每一個分片對應(yīng)的 id 都是相同的。
  • 3?位標(biāo)志字段:第一位保留,表示暫時沒有規(guī)定該字段的意義。第二位表示禁止分片,表示如果報(bào)文長度超過 MTU,IP 模塊就會丟棄該報(bào)文。第三位表示“更多分片”,如果報(bào)文沒有進(jìn)行分片,則該字段設(shè)置為 0,如果報(bào)文進(jìn)行了分片,則除了最后一個分片報(bào)文設(shè)置為 0 以外,其余分片報(bào)文均設(shè)置為 1。
  • 13 位片偏移(framegament offset):分片相對于原始數(shù)據(jù)開始處的偏移,表示當(dāng)前分片在原數(shù)據(jù)中的偏移位置,實(shí)際偏移的字節(jié)數(shù)是這個值 × 8 得到的。因此除了最后一個報(bào)文之外,其他報(bào)文的長度必須是 8 的整數(shù)倍,否則報(bào)文就不連續(xù)了。
  • 8 位生存時間(TTL,Time To Live):數(shù)據(jù)報(bào)到達(dá)目的地的最大報(bào)文跳數(shù),一般是 64,每經(jīng)過一個路由,TTL 就自減 1,一直減到 0 還沒到達(dá),就丟棄了,這個字段主要是用來防止出現(xiàn)路由循環(huán)。
  • 8 位協(xié)議:表示上層協(xié)議的類型。
  • 16 位首部檢驗(yàn)和:使用 CRC 進(jìn)行校驗(yàn),來鑒別數(shù)據(jù)報(bào)的首部是否損壞,但不檢驗(yàn)數(shù)據(jù)部分。
  • 32 位源IP地址和 32 位目的 IP 地址:表示發(fā)送端和接收端所對應(yīng)的IP地址。
  • 選項(xiàng)字段:不定長,最多 40 字節(jié)。

1)報(bào)頭與有效載荷的分離

? ? ? ? IP 是通過這種“定長報(bào)頭 + 自描述字段”的方式分離報(bào)頭與有效載荷的。

???????? IP 報(bào)頭由基本報(bào)頭和選項(xiàng)字段組成,要分離報(bào)頭與有效載荷,就要先從頭讀取完報(bào)文中的基本報(bào)頭和選項(xiàng)字段。IP 報(bào)文的前 20 個字節(jié)是 IP 的基本報(bào)頭,其中包含?4 位的首部長度,指明了 IP 報(bào)頭的具體長度。從下層獲取到一個報(bào)文后,IP 可以根據(jù)這 4 位的首部長度來報(bào)頭與有效載荷。

  1. IP 從下層獲取到一個報(bào)文后,首先讀取報(bào)文的前 20 個字節(jié),并從中提取出 4 位的首部長度,此時獲得?IP 報(bào)頭的大小 size(最大為?60 字節(jié),最小為 20 字節(jié))。
  2. 如果 size 大于 20 字節(jié),則繼續(xù)從報(bào)文中讀取 size ? 20 字節(jié)的數(shù)據(jù),即 IP 報(bào)頭中的選項(xiàng)字段(最大為 40 字節(jié),最小為 0 字節(jié))。
  3. 讀取完 IP 的基本報(bào)頭和選項(xiàng)字段后,剩下的就是有效載荷了。

2)有效載荷的上交

????????基于 IP 協(xié)議的傳輸層協(xié)議不止一種,因此 IP 從下層獲取到一個報(bào)文并將其解包后,需要知道應(yīng)將分離后的有效載荷上交給哪一個協(xié)議,這會通過?IP 報(bào)頭中的 8 位協(xié)議字段來完成。

? ? ? ? ??IP 報(bào)頭中的 8 位協(xié)議字段,表示的是上層協(xié)議的類型,根據(jù)該字段就可以判定出應(yīng)上交的協(xié)議。

????????該字段是發(fā)送端的 IP 層從傳輸層獲取到數(shù)據(jù)后所填充的,假設(shè)一份數(shù)據(jù)是由上層 TCP 交給 IP 的,那么其報(bào)文中的 8 位協(xié)議字段填充的就是 TCP 協(xié)議的編號。

3)源 IP 與目的 IP

????????IP報(bào)頭中的 32 位源 IP 地址和 32 位目的 IP 地址,分別表示的是報(bào)文的發(fā)送端?IP 地址、接收端 IP 地址。

????????數(shù)據(jù)在網(wǎng)絡(luò)傳輸中會經(jīng)過一個個的路由器,來進(jìn)行路由轉(zhuǎn)發(fā),以慢慢趨近于目標(biāo)主機(jī)。路由器在幫助數(shù)據(jù)進(jìn)行路由轉(zhuǎn)發(fā)時,會提取出該數(shù)據(jù) IP 報(bào)頭中的目的 IP 地址,作為路由轉(zhuǎn)發(fā)的重要依據(jù)。

?????????當(dāng)接收端收到了發(fā)送端發(fā)來的數(shù)據(jù)后,也可能要給發(fā)送端發(fā)送數(shù)據(jù),因此,發(fā)送端在發(fā)送數(shù)據(jù)時不僅需要指明該數(shù)據(jù)的目的 IP 地址,也需要指明該數(shù)據(jù)的源 IP 地址,以便接收端后續(xù)作出應(yīng)答或發(fā)送其他重要的數(shù)據(jù)。

? ? ? ? 特別地,在進(jìn)行網(wǎng)絡(luò)編程時,想要一端能發(fā)送數(shù)據(jù)給另一端,必須要指明對端的 IP 地址和端口號,也就是發(fā)送數(shù)據(jù)的目的 IP 地址和目的端口號。這個需指明的目的 IP 地址,其實(shí)就是傳給網(wǎng)絡(luò)層的 IP 協(xié)議,用于數(shù)據(jù)在網(wǎng)絡(luò)中進(jìn)行路由轉(zhuǎn)發(fā)的,而這個需指明的端口號,是給傳輸層的 TCP協(xié)議或 UDP 協(xié)議,用于指明該數(shù)據(jù)應(yīng)交給應(yīng)用層的哪一個進(jìn)程。而由于傳輸層和網(wǎng)絡(luò)層都是在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)的,因此在實(shí)際發(fā)送數(shù)據(jù)時,就無須指明發(fā)送數(shù)據(jù)的源 IP 地址和源端口號,數(shù)據(jù)在貫穿網(wǎng)絡(luò)協(xié)議棧經(jīng)歷封裝時,會被操作系統(tǒng)填充對應(yīng)的源 IP 地址和源端口號。

4)生存時間

????????報(bào)文在網(wǎng)絡(luò)傳輸時,可能會由某些原因而送達(dá)目標(biāo)主機(jī),如果報(bào)文在路由時出現(xiàn)了環(huán)路路由的情況,或目標(biāo)主機(jī)已經(jīng)異常離線了,那么這個報(bào)文就成了一個廢棄的游離報(bào)文。

????????為了避免網(wǎng)絡(luò)中出現(xiàn)大量的游離報(bào)文,IP報(bào)頭中特別封裝了一個字段,叫做 8 位生存時間,以表示報(bào)文到達(dá)目的地的最大報(bào)文跳數(shù)。每當(dāng)報(bào)文經(jīng)過一次路由,其生存時間就會自減 1,當(dāng)生存時間減為 0 時,該報(bào)文就會被自動丟棄,然后在網(wǎng)絡(luò)中消散。

三、分片與組裝

????????IP 能夠?qū)?shù)據(jù)跨網(wǎng)絡(luò)地從一臺主機(jī)送到另一臺主機(jī),網(wǎng)絡(luò)傳輸期間,數(shù)據(jù)需要經(jīng)過一個個的路由器并進(jìn)行路由轉(zhuǎn)發(fā),最終才能到達(dá)目標(biāo)主機(jī)。

????????IP 進(jìn)行數(shù)據(jù)跨網(wǎng)絡(luò)傳送的前提是,需要先將數(shù)據(jù)從一個節(jié)點(diǎn)傳送到和自己相連的下一個節(jié)點(diǎn),而這實(shí)際是由網(wǎng)絡(luò)層下數(shù)據(jù)鏈路層負(fù)責(zé)的。兩個節(jié)點(diǎn)直接相連,也就意味著這兩個節(jié)點(diǎn)在同一個局域網(wǎng)中,因此要探討兩個相鄰節(jié)點(diǎn)的數(shù)據(jù)傳送,實(shí)際探討的就是局域網(wǎng)通信的問題。
?

1)MTU 與分片、組裝

????????MAC 幀是數(shù)據(jù)鏈路層中最典型的協(xié)議,它能將 IP 傳下來的數(shù)據(jù)封裝成數(shù)據(jù)幀,然后發(fā)送到網(wǎng)絡(luò)中。

????????但 MAC 幀攜帶的有效載荷,其最大長度是有限制的,也就是說,IP 交給 MAC 幀的報(bào)文不能超過某個值,而這個值就是最大傳輸單元 MTU(Maximum Transmission Unit),一般為 1500 字節(jié)。

????????如果 IP 向下傳輸?shù)膱?bào)文超過了 1500 字節(jié),那么就會在 IP 層經(jīng)歷分片,再交給下層的 MAC 幀進(jìn)行發(fā)送;如果數(shù)據(jù)在發(fā)送時,在發(fā)送端的 IP 層進(jìn)行了分片,那么送達(dá)對端后,數(shù)據(jù)也需要在對端的 IP 層進(jìn)行組裝,再向上交付給傳輸層。

? ? ? ? 不過,在網(wǎng)絡(luò)通信中,數(shù)據(jù)的分片并不是經(jīng)常要做的,不分片其實(shí)才是常態(tài)。分片本身會帶來一些潛在的問題,例如可能會增加丟包的概率等。此外,?在分片的數(shù)據(jù)中,每一個分片在 IP 層都會被添加上對應(yīng)的 IP 報(bào)頭,而傳輸層添加的報(bào)頭只會出現(xiàn)在第一個分片中,因此網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包可能沒有傳輸層的報(bào)頭。

【ps】數(shù)據(jù)的分片和組裝都由 IP 層完成

????????數(shù)據(jù)的分片和組裝都是在 IP 層完成的,上層的傳輸層和下層的鏈路層其實(shí)并不關(guān)心。

? ? ? ? 假設(shè)傳輸層的協(xié)議為 TCP 。TCP 將待發(fā)送的數(shù)據(jù)交給 IP 后,并不關(guān)心該數(shù)據(jù)是否會在 IP 層進(jìn)行分片,換句話說,TCP 并不關(guān)心數(shù)據(jù)具體的發(fā)送過程;而當(dāng) TCP 從 IP 獲取到數(shù)據(jù)后,也不關(guān)心該數(shù)據(jù)是否在 IP 層經(jīng)過了組裝。
????????假設(shè)鏈路層的協(xié)議為 MAC 幀。 MAC 幀只負(fù)責(zé),將數(shù)據(jù)從一個節(jié)點(diǎn)傳送到和自己相連的下一個節(jié)點(diǎn)。當(dāng) IP 將待發(fā)送的數(shù)據(jù)交給 MAC 幀后,MAC 幀并不知道該數(shù)據(jù)是 IP 經(jīng)過分片后的某個分片數(shù)據(jù)、還是一個沒有經(jīng)過分片的數(shù)據(jù),它只知道自己一次最多只能發(fā)送 MTU 大小的數(shù)據(jù),如果 IP 交給自己的數(shù)據(jù)大于 MTU 字節(jié) ,那自己就無法進(jìn)行發(fā)送。而當(dāng) MAC 幀從網(wǎng)絡(luò)中獲取到數(shù)據(jù)后,也不關(guān)心這個數(shù)據(jù)是否需要進(jìn)行組裝,只需要將該數(shù)據(jù)的MAC幀報(bào)頭去掉后,直接上交給上層 IP 。

? ? ? ? 總得來說,數(shù)據(jù)的總量和可發(fā)送量并不由 IP 層決定的,總量是由 TCP 層決定的,可發(fā)送量是由 MAC 層決定的,IP 夾在 TCP 和 MAC 之間,當(dāng) TCP 的數(shù)據(jù)總量超過 MAC 的可發(fā)送量,就需要自行決定是否進(jìn)行數(shù)據(jù)分片。而 TCP 層和 MAC 層完全不關(guān)心 IP 層進(jìn)行了分片,這就實(shí)現(xiàn)了高度解耦。


【ps】不僅源端主機(jī)可能會對數(shù)據(jù)進(jìn)行分片,網(wǎng)絡(luò)中的路由器也可能對數(shù)據(jù)進(jìn)行分片。這是因?yàn)?#xff0c;不同局域網(wǎng)中的 MTU 是不一樣的,如果傳輸路徑上,某個網(wǎng)絡(luò)的 MTU 比源端網(wǎng)絡(luò)的小,那么該網(wǎng)絡(luò)中的路由器就可能對 IP 數(shù)據(jù)報(bào)再次進(jìn)行分片。

2)分片的具體過程?

????????假設(shè),IP 層要發(fā)送 4500 字節(jié)的數(shù)據(jù)。由于該數(shù)據(jù)超過了 MAC 幀規(guī)定的 MTU,即 1500 字節(jié),因此 IP 需要先將該數(shù)據(jù)進(jìn)行分片,然后再將一個個的分片交給 MAC 幀進(jìn)行發(fā)送。4500 字節(jié)的數(shù)據(jù),至少需要分為四個分片報(bào)文進(jìn)行發(fā)送。

????????另假設(shè),IP 層添加的 IP 報(bào)頭不攜帶選項(xiàng)字段,其長度為 20 字節(jié),且 IP 層將數(shù)據(jù)分片以下四個分片報(bào)文:

????????在對數(shù)據(jù)進(jìn)行分片時,需要記錄分片的信息,以便分片報(bào)文到達(dá)對端的 IP 層后被組裝起來。

????????IP報(bào)頭中的 16 位標(biāo)識、3 位標(biāo)志和 13 位片偏移,就記錄了數(shù)據(jù)分片的有關(guān)信息。

  • 16 位標(biāo)識:唯一標(biāo)識主機(jī)發(fā)送的報(bào)文,如果數(shù)據(jù)在 IP 層進(jìn)行了分片,那么每一個分片報(bào)文的 16 位標(biāo)識是相同的。
  • 3 位標(biāo)志:第一位保留,表示暫時沒有規(guī)定該字段的意義。第二位表示禁止分片,表示如果報(bào)文長度超過 MTU,IP 模塊就會丟棄該報(bào)文。第三位表示“更多分片”,如果報(bào)文沒有進(jìn)行分片,則該字段設(shè)置為 0,如果報(bào)文進(jìn)行了分片,則除了最后一個分片報(bào)文設(shè)置為 0 以外,其余分片報(bào)文均設(shè)置為 1 。
  • 13 位片偏移:分片相對于原始數(shù)據(jù)開始處的偏移,表示當(dāng)前分片在原數(shù)據(jù)中的偏移位置,實(shí)際偏移的字節(jié)數(shù)是這個值 × 8 得到的。因此除了最后一個報(bào)文之外,其他報(bào)文的長度必須是 8 的整數(shù)倍,否則報(bào)文就不連續(xù)了。

? ? ? ? 由于四個分片報(bào)文是在同一臺主機(jī)的 IP 層被分片的,因此它們的16位標(biāo)識應(yīng)是一樣的。假設(shè)四個分片報(bào)文的 16 位標(biāo)識都是 123,則這四個報(bào)文對應(yīng)的 16 位標(biāo)識、3 位標(biāo)志中的“更多分片”和13 位片偏移分別如下:?

3)組裝的具體過程

????????MAC 幀會將從網(wǎng)絡(luò)中獲取的數(shù)據(jù)上交給 IP 層。但這些數(shù)據(jù)可能來自世界各地,可能是經(jīng)過分片后發(fā)送的,也可能是沒有經(jīng)過分片直接發(fā)送的,因此,IP 必須要通過某種方式來區(qū)分收到的各個數(shù)據(jù)。

????????通過?IP 報(bào)頭中,記錄了發(fā)送端的 IP 地址的?32 位源 IP 地址,可以區(qū)分?jǐn)?shù)據(jù)來自哪一臺主句。
? ? ? ? 而通過?IP 報(bào)頭中的?16 位標(biāo)識,可以判斷哪些報(bào)文是沒有經(jīng)過分片的獨(dú)立報(bào)文,哪些報(bào)文是經(jīng)過分片后的分片報(bào)文。具體來說,未分片數(shù)據(jù)的 16 位標(biāo)識都是不同的,而由同一個數(shù)據(jù)分片得到的各個分片報(bào)文,其所對應(yīng)的 16 位標(biāo)識都是相同的。
????????由此,通過 IP 報(bào)頭中的 32 位源 IP 地址和 16 位標(biāo)識,就可以將經(jīng)過分片的數(shù)據(jù)各自聚合在一起進(jìn)行組裝。

????????由同一個數(shù)據(jù)分片得到的各個分片報(bào)文,有以下相通的特點(diǎn):

  • 第一個分片報(bào)文中,13 位片偏移的值一定為 0。
  • 最后一個分片報(bào)文中,“更多分片”標(biāo)志位一定為 0。
  • 對于每一個分片報(bào)文來說,( 當(dāng)前報(bào)文的 13 位片偏移 + 當(dāng)前報(bào)文的數(shù)據(jù)字節(jié)數(shù) ) ÷ 8? = 下一個分片報(bào)文的 13 位片偏移。

????????根據(jù)分片報(bào)文的這三個相通的特點(diǎn),就能夠?qū)⒎制瑘?bào)文合理的組裝起來——先找到分片報(bào)文中 13 位片偏移為 0 的分片報(bào)文,提取出其 IP 報(bào)頭中的 16 位總長度字段,并通過計(jì)算得出下一個分片報(bào)文的 13 位片偏移,然后重復(fù)此方式,依次將各個分片報(bào)文按順序拼接起來,直到拼接到一個“更多分片”標(biāo)志位為 0 的分片報(bào)文為止。

4)分片的丟包情況

????????分片后的報(bào)文在網(wǎng)絡(luò)傳輸時,也可能出現(xiàn)丟包問題,不過,接收端有能力判斷是否收到了全部的分片報(bào)文。

? ? ? ? 現(xiàn)假設(shè)某組分片報(bào)文對應(yīng)的 16 位標(biāo)識值為 x,分片報(bào)文丟包的情況可以大致分為以下三種:

  • 若第一個分片報(bào)文丟包了,則在接收端收到的分片報(bào)文中,就找不到對應(yīng)16位標(biāo)識為 x、13 位片偏移為 0 的分片報(bào)文。
  • 若最后一個分片報(bào)文丟包了,則在接收端收到的分片報(bào)文中,就找不到對應(yīng)16為標(biāo)識為 x、“更多分片”標(biāo)志位為 0 的分片報(bào)文。
  • 若其它分片報(bào)文丟包了,則接收端在進(jìn)行組裝時,就會找不到那些 13 位片偏移為特定值的分片報(bào)文。

【ps】接收端能夠通過 13 位片偏移,辨別未分片報(bào)文和最后一個分片報(bào)文

? ? ? ?雖然未分片報(bào)文的“更多分片”標(biāo)志位為 0,最后一個分片報(bào)文的“更多分片”標(biāo)志位也為0,但接收端能夠通過 13 位片偏移,識別出它是最后一個分片報(bào)文——未分片報(bào)文的 13 位片偏移為 0,而最后一個分片報(bào)文 的13位片偏移不為 0。?


【補(bǔ)】可以分片,但不建議

????????雖然傳輸層并不關(guān)心 IP 層如何分片,但并不是說分片對傳輸層就沒有影響了,具體與傳輸層中保證傳輸可靠性的 TCP 協(xié)議有關(guān)。

????????如果一個數(shù)據(jù)在網(wǎng)絡(luò)傳輸時,沒有經(jīng)過分片,那么只要接收端收到了這一個報(bào)文,就可以認(rèn)為該數(shù)據(jù)被可靠地收到了。而如果一個數(shù)據(jù)進(jìn)行了分片,那么只有接收端收到了全部的分片報(bào)文,并將其成功組裝,才可以認(rèn)為該數(shù)據(jù)被可靠地收到了。

? ? ? ? 然而眾多的分片報(bào)文中,難免會有一個報(bào)文出現(xiàn)丟包,此時接收端無法將報(bào)文成功組裝起來,進(jìn)而導(dǎo)致接收端會將收到的分片報(bào)文全部丟棄,使得發(fā)送端的 TCP 因收不到對端的應(yīng)答而要求超時重傳,且需要將數(shù)據(jù)整體進(jìn)行重傳。
????????假設(shè)在網(wǎng)絡(luò)傳輸時,丟包的概率是萬分之一,那么將數(shù)據(jù)拆分為一百份進(jìn)行發(fā)送,就會使丟包的概率上升到百分之一,進(jìn)而增加傳輸層重傳數(shù)據(jù)的概率。
????????因此,為了保證數(shù)據(jù)傳輸?shù)男?#xff0c;并不建議數(shù)據(jù)在發(fā)送時進(jìn)行分片。


【補(bǔ)】TCP 少量多次地發(fā)送,可降低數(shù)據(jù)分片的概率

????????數(shù)據(jù)分片的根本原因其實(shí)在于,傳輸層一次性向下交付的數(shù)據(jù)太多了,導(dǎo)致 IP 無法直接將數(shù)據(jù)向下交給 MAC 幀。如果傳輸層控制好一次性向下交付的數(shù)據(jù)量,那么 IP 自然也就不需要對數(shù)據(jù)進(jìn)行分片。

????????傳輸層中的 TCP 協(xié)議,之所以被稱為傳輸控制協(xié)議,是因?yàn)樗梢钥刂埔淮蜗蛳陆桓稊?shù)據(jù)不超過某一閾值,即 MSS(Maximum Segment Size,最大報(bào)文段長度)。
????????通信雙方在建立 TCP 連接時,除了需要協(xié)商自身窗口大小等概念之外,還會協(xié)商在后續(xù)通信時,每一個報(bào)文段所能承載的最大報(bào)文段長度 MSS。
????????MAC 幀的有效載荷最大為 MTU,TCP 的有效載荷最大為MSS,由于 TCP 和 IP 在一般情況下的報(bào)頭長度都是 20 字節(jié),因此一般情況下 MSS = MTU - 40,也就是說,MSS 的值一般為 1460 字節(jié)。

?????????TCP 一般會將發(fā)送的數(shù)據(jù)控制在 1460 字節(jié)以內(nèi),以降低數(shù)據(jù)分片的可能性,也只能說是“降低”。這是因?yàn)?#xff0c;不同局域網(wǎng)的鏈路層,MTU 可能不同,如果數(shù)據(jù)在傳輸過程中,進(jìn)入到了一個 MTU 較小的網(wǎng)絡(luò),那么該數(shù)據(jù)仍可能被該網(wǎng)絡(luò)中的路由器進(jìn)行分片。

補(bǔ))相關(guān)面試題

Q:對端IP層收到數(shù)據(jù)報(bào)后怎么知道這是一個被分片了的數(shù)據(jù)報(bào)?

????????數(shù)據(jù)鏈路層不關(guān)心 IP 層是否分片了,它只管發(fā),所以對端的 IP 層收到數(shù)據(jù)報(bào)后,需要知道這是一個被分片了的報(bào)文。

????????如果更多分片標(biāo)志位(第三個標(biāo)志位)是 1,則說明該數(shù)據(jù)報(bào)被分片了;如果更多分片是 0,但 13 位片偏移值大于 0,也說明該數(shù)據(jù)報(bào)被分片了。


Q:對于同一個報(bào)文的所有分片,對端是如何識別出來的?

????????由于16位標(biāo)識符的存在,對端收到的數(shù)據(jù)報(bào)中,標(biāo)識符相同的數(shù)據(jù)報(bào)組合起來就是一個完整的數(shù)據(jù)報(bào)。


Q:怎么判斷哪一個數(shù)據(jù)報(bào)是第一個分片,哪一個是最后一個分片?

????????更多分片標(biāo)志位是 1,片偏移量是0,說明這是第一個分片;更多分片標(biāo)志位是0,片偏移量大于0,說明這是最后一個分片。


Q:怎么分辨哪個分片在前,哪個分片在后?

將所有分片的片偏移量按照升序排序,就可以知道哪個分片在前,哪個分片在后。


Q:怎么判斷分片有沒有收全或丟失?

????????當(dāng)前分片的起始位置+自身數(shù)據(jù)長度,如果等于下一個分片中的片偏移量,說明這兩個分片是挨著的,如次反復(fù)判斷,便能判斷出是否收全了,只要有一次判斷結(jié)果不相等,那么就說明有數(shù)據(jù)片丟了。


Q:怎么保證對端組裝起來的報(bào)文是正確的?

????????IP協(xié)議有16位首部校驗(yàn)和,校驗(yàn)通過會分發(fā)給上層TCP協(xié)議。

????????TCP協(xié)議也有校驗(yàn)和,可以判斷出數(shù)據(jù)是否是正確的。

四、 IP 地址與網(wǎng)段劃分

1)IP 地址的構(gòu)成

????????IP地址由網(wǎng)絡(luò)號和主機(jī)號兩部分構(gòu)成:

  • 網(wǎng)絡(luò)號:用于區(qū)分網(wǎng)絡(luò)。保證相互連接的兩個網(wǎng)段具有不同的標(biāo)識。
  • 主機(jī)號:用于區(qū)分主機(jī)。同一網(wǎng)段內(nèi),主機(jī)之間具有相同的網(wǎng)絡(luò)號,但必須有不同的主機(jī)號。

????????例如以下一臺路由器連接了兩個網(wǎng)段。對于網(wǎng)絡(luò)標(biāo)識來講,同一網(wǎng)段內(nèi)主機(jī)的網(wǎng)絡(luò)標(biāo)識是相同的,不同網(wǎng)段內(nèi)主機(jī)的網(wǎng)絡(luò)標(biāo)識是不同的;對于主機(jī)標(biāo)識來講,同一網(wǎng)段內(nèi)主機(jī)的主機(jī)標(biāo)識是不同的,不同網(wǎng)段內(nèi)主機(jī)的主機(jī)標(biāo)識是可以相同的。

????????網(wǎng)絡(luò)號相同的主機(jī)放到一起就組成了一個子網(wǎng),網(wǎng)絡(luò)號不同的主機(jī)之間就組成了多個不同的子網(wǎng)。

????????如果在子網(wǎng)中新增一臺主機(jī),則這臺主機(jī)的主機(jī)號在子網(wǎng)中是唯一的,而網(wǎng)絡(luò)號和這個子網(wǎng)的網(wǎng)絡(luò)號一致。

2)IP 地址的分配和具體作用

????????當(dāng)子網(wǎng)中每新增一臺主機(jī)時,都需要為其分配一個 IP 地址,而當(dāng)子網(wǎng)中每有一臺主機(jī)斷開網(wǎng)絡(luò)時,又需要將它的 IP 地址回收,便于分配給新增的主機(jī)使用。這使得手動管理 IP 地址非常麻煩,而事實(shí)上對于 IP 地址的分配和回收一般不會手動進(jìn)行,而是采用 DHCP(Dynamic Host Configuration Protocol,動態(tài)主機(jī)配置協(xié)議)技術(shù)。

????????DHCP 是一個基于 UDP 的應(yīng)用層協(xié)議,通常被應(yīng)用在大型的局域網(wǎng)環(huán)境中,其主要作用就是集中地址管理、分配 IP 地址,不僅能使網(wǎng)絡(luò)環(huán)境中的主機(jī)動態(tài)地獲得 IP 地址、Gateway 地址、DNS 服務(wù)器地址等信息,還能提升地址的使用率。

????????此外,一般的路由器也都帶有 DHCP 功能,因此路由器其實(shí)也可以看作是一個 DHCP 服務(wù)器。例如連接 WiFi 時,,路由器需要驗(yàn)證賬號和密碼,驗(yàn)證通過后,路由器就會動態(tài)分配一個IP地址,通過這個 IP 地址就可以進(jìn)行各種上網(wǎng)活動。

【Tips】IP 地址的分配和回收一般依賴于應(yīng)用層的 DHCP 協(xié)議。

? ? ? ? IP 地址作為信標(biāo),在數(shù)據(jù)跨網(wǎng)絡(luò)傳輸中起著至關(guān)重要的作用。但其實(shí),IP 協(xié)議將數(shù)據(jù)跨網(wǎng)絡(luò)地從一臺主機(jī)發(fā)送到另一臺主機(jī),并不是直接將數(shù)據(jù)送達(dá)目標(biāo)主機(jī)的,而是先將數(shù)據(jù)送達(dá)目標(biāo)主機(jī)所在的網(wǎng)絡(luò),再送達(dá)目標(biāo)主機(jī)的。

????????也就是說,數(shù)據(jù)在路由時的第一目的,并不是找到目標(biāo)主機(jī),而是找到目標(biāo)網(wǎng)絡(luò)所在的網(wǎng)絡(luò),然后再在目標(biāo)網(wǎng)絡(luò)中找到目標(biāo)主機(jī)。

????????數(shù)據(jù)在路由時之所以不一開始就以找目標(biāo)主機(jī)為目的,是因?yàn)檫@樣效率太低了。找目標(biāo)主機(jī)的過程本質(zhì)是排除的過程,如果一開始就以找目標(biāo)主機(jī)為目的,那么在查找的過程中,一次只能排除一個主機(jī),而如果一開始先以找目標(biāo)網(wǎng)絡(luò)為目的,那么就能一次排除大量和目標(biāo)主機(jī)不在同一網(wǎng)段的主機(jī),這樣就可以大大提高檢索的效率。

【Tips】數(shù)據(jù)在路由時,會先找目標(biāo)網(wǎng)絡(luò),再找目標(biāo)主機(jī)。

? ? ? ? 而為了提高數(shù)據(jù)路由的效率,前人對網(wǎng)絡(luò)進(jìn)行了網(wǎng)段劃分。

?3)網(wǎng)段劃分

????????過去曾經(jīng)提出一種劃分網(wǎng)絡(luò)號和主機(jī)號的方案,將所有 IP 地址按取值范圍給分為五類。

  • A 類:0.0.0.0 到 127.255.255.255。
  • B 類:128.0.0.0 到 191.255.255.255。
  • C 類:192.0.0.0 到 223.255.255.255。
  • D 類:224.0.0.0 到 239.255.255.255。
  • E 類:240.0.0.0 到 247.255.255.255。

????????依此方案,要判斷一個 IP 地址屬于哪一類,只需要遍歷 IP 地址的前 5 個比特位,其中第幾個比特位最先出現(xiàn) 0 值,那么這個 IP 地址就對應(yīng)地屬于哪一類地址。

????????但隨著網(wǎng)絡(luò)的飛速發(fā)展,這種劃分方案很快就顯現(xiàn)了局限性。

? ? ? ? 由于 A 類地址的網(wǎng)絡(luò)號只占 7個比特位,因此 A 類地址可申請的網(wǎng)絡(luò)只有? 2 ^ 7?個,這使得大多數(shù)組織,例如一些學(xué)校、公司、實(shí)驗(yàn)室等,只好選擇申請 B 類地址。而 B 類地址的主機(jī)號占 16 個比特位,于是理論上一個 B 類網(wǎng)絡(luò)中允許有 65536 臺主機(jī)。但在實(shí)際網(wǎng)絡(luò)架設(shè)中,一般一個局域網(wǎng)中不會存在這么多主機(jī),如果存在,也就意味著,大量的 IP 地址會被浪費(fèi)掉。

????????為了避免大量?IP 地址被浪費(fèi),后來又提出了新的劃分方案,被稱為 CIDR(Classless Interdomain Routing,無類域間路由)。

???????? CIDR 并沒有完全拋棄原先的方案,而是基于原有的五類網(wǎng)絡(luò)的,繼續(xù)進(jìn)行子網(wǎng)劃分,這也就意味著,需要借用主機(jī)號中的若干位來充當(dāng)網(wǎng)絡(luò)號,而為了區(qū)分 IP 地址中的網(wǎng)絡(luò)號和主機(jī)號,又引入了子網(wǎng)掩碼(subnet mask)的概念。
????????子網(wǎng)掩碼是一個 32 位的正整數(shù),通常用一串 “0” 來結(jié)尾。每一個子網(wǎng)都有自己的子網(wǎng)掩碼,將 IP 地址與當(dāng)前網(wǎng)絡(luò)的子網(wǎng)掩碼進(jìn)行“按位與”操作,就能夠得到當(dāng)前網(wǎng)絡(luò)的網(wǎng)絡(luò)號。

? ? ? ? 隨著一個網(wǎng)絡(luò)被更細(xì)粒度地劃分成一個個更小的子網(wǎng),子網(wǎng)中 IP 地址對應(yīng)的主機(jī)號也越來越短,使得子網(wǎng)中可用 IP 地址的個數(shù)也就越來越少,由此就避免了大量 IP 地址被浪費(fèi)的情況。

????????假設(shè)在某一子網(wǎng)中,將IP地址的前 24 位作為網(wǎng)絡(luò)號,則該網(wǎng)絡(luò)對應(yīng)的子網(wǎng)掩碼的前 24 位就為都 1,剩下的 8 位都為 0,將其用點(diǎn)分十進(jìn)制表示就是 255.255.255.0。該子網(wǎng)中有一臺主機(jī),其?IP 地址是 192.168.128.10,將這個IP地址與該網(wǎng)絡(luò)的子網(wǎng)掩碼進(jìn)行“按位與”操作后,就得到了 192.168.128.0,即這個子網(wǎng)的網(wǎng)絡(luò)號。
????????在用子網(wǎng)掩碼與子網(wǎng)中主機(jī)的 IP 地址進(jìn)行“按位與”操作時,本質(zhì)就是保留了主機(jī) IP 地址中前24 位的原貌,將剩下的 8 位的值清 0 了而已,換句話說,是將主機(jī)號清 0 了,于是“按位與”的結(jié)果就是該網(wǎng)絡(luò)的網(wǎng)絡(luò)號。

【Tips】CIDR 下, IP 地址與 ^ 子網(wǎng)掩碼 =?網(wǎng)絡(luò)號

? ? ? ? 另外,子網(wǎng)劃分是能進(jìn)行多次的,劃分出來的子網(wǎng)還可以繼續(xù)進(jìn)行子網(wǎng)劃分。因此,一個數(shù)據(jù)在路由時,隨著數(shù)據(jù)不斷路由進(jìn)入更小的子網(wǎng),其網(wǎng)絡(luò)號的位數(shù)也是在不斷變化的,更準(zhǔn)確地說,其網(wǎng)絡(luò)號的位數(shù)是不斷在增加的。這也就意味著,IP 地址中的主機(jī)號,其位數(shù)在不斷減少。于是,當(dāng)數(shù)據(jù)路由到達(dá)目標(biāo)主機(jī)所在的網(wǎng)絡(luò)時,就可以在該網(wǎng)絡(luò)中找到對應(yīng)的目標(biāo)主機(jī),并順利將數(shù)據(jù)交給該主機(jī)。

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

? ? ? ? 由于 IP 地址(以 IPv4 為例)是一個 4 字節(jié)、32 位的正整數(shù),因此共有 2 ^ 32 個 IP 地址,也就是將近 43 億個IP地址。

????????TCP/IP 協(xié)議規(guī)定,每個主機(jī)都需要有一個 IP 地址。

? ? ? ? ?但現(xiàn)在不僅電腦需要 IP 地址,還有其他設(shè)備也需要 IP 地址。例如也可以上網(wǎng)的智能手機(jī),現(xiàn)在全世界人口已經(jīng)有 70 多億了,就算只有一半人擁有智能手機(jī),算下來也有 30 多億了,而它們都需要一個唯一的 IP 地址。隨著科技的發(fā)展,還有智能手表、智能冰箱、智能洗衣機(jī)等設(shè)備,它們?nèi)绻刖W(wǎng),就也需要 IP 地址。另外,一個主機(jī)可能還需要多個 IP 地址,更別談還有很多組網(wǎng)的路由設(shè)備,也需要IP地址。
????????所以,43 億個 IP 地址其實(shí)早就不夠用了,因此才提出了 CIDR。

????????CIDR 對已經(jīng)劃分好的五類網(wǎng)絡(luò)繼續(xù)進(jìn)行子網(wǎng)劃分,其目的既是為了減少 IP 地址的浪費(fèi),也是解決 IP 地址不夠用的問題。雖然這的確在一定程度上緩解了 IP 地址不夠用的問題,但 IP 地址的絕對上限并沒有增加。

【補(bǔ)】解決 IP 地址不足的其他方案

  • 動態(tài)分配 IP 地址:只給接入網(wǎng)絡(luò)的設(shè)備分配 IP 地址。由此,同一個 MAC 地址的設(shè)備,每次接入互聯(lián)網(wǎng)中,得到的IP地址不一定是相同的,這就避免了 IP 地址強(qiáng)綁定于某一臺設(shè)備。
  • NAT 技術(shù):讓不同局域網(wǎng)中同時存在兩個相同的IP地址。NAT 技術(shù)不僅能解決 IP 地址不足的問題,而且還能夠有效地避免來自網(wǎng)絡(luò)外部的攻擊,隱藏并保護(hù)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)。
  • IPv6:IPv6 用 16 字節(jié) 128 位來表示一個 IP 地址,能夠大大緩解 IP 地址不足的問題。不過,IPv6 并不是 IPv4 的簡單升級版,它們其實(shí)是互不相干的兩個協(xié)議,彼此并不兼容,而目前 IPv6 尚未普及。

5)特殊的 IP 地址

? ? ? ? 其實(shí),并非所有的 IP 地址都能夠作為主機(jī)的 IP 地址,有些?IP 地址本身是具有特殊用途的。

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

????????主機(jī)號為全 0 代表的是當(dāng)前局域網(wǎng)的網(wǎng)絡(luò)號,主機(jī)號為全 1 代表的是廣播地址,這兩個 IP 地址都不能作為主機(jī)的 IP 地址。也就是說,在某個局域網(wǎng)中,最多能存在的主機(jī)個數(shù)其實(shí)是 2 ^ 主機(jī)號位數(shù) - 2 。

【補(bǔ)】本機(jī)環(huán)回

????????本機(jī)環(huán)回時,數(shù)據(jù)不會被入網(wǎng)卡,也就不會發(fā)送到網(wǎng)絡(luò)中。

????????本機(jī)環(huán)回的目的是,將數(shù)據(jù)自頂向下貫穿協(xié)議棧,經(jīng)歷一輪數(shù)據(jù)封裝的過程,然后再自底向上貫穿協(xié)議棧,進(jìn)行一輪數(shù)據(jù)的解包和分用,以測試本地的網(wǎng)絡(luò)功能是否正常。

????????當(dāng)數(shù)據(jù)到達(dá) IP 層需要繼續(xù)向下交付時,如果是環(huán)回程序,那么 IP 輸出函數(shù)會將該數(shù)據(jù)放入到 IP 輸入隊(duì)列當(dāng)中,然后再由IP輸入函數(shù)讀取上去。而 IP 輸入函數(shù)讀取的本應(yīng)該是鏈路層交付上來的數(shù)據(jù),因此,該數(shù)據(jù)后續(xù)就會被當(dāng)作從網(wǎng)絡(luò)中讀取的一樣看待,各層協(xié)議都會對該數(shù)據(jù)依次進(jìn)行解包和分用。
????????如果不是環(huán)回程序的話,就會判斷該數(shù)據(jù)的目的 IP 地址是否為廣播或多播地址,或者是否與本主機(jī)的 IP 地址相同。是,則也會將該數(shù)據(jù)放入到 IP 輸入隊(duì)列中,等待 IP 輸入函數(shù)將其讀走。只有程序不是環(huán)回程序,且也不是廣播或多播、或發(fā)給本主機(jī)的數(shù)據(jù),才會用ARP 獲取該數(shù)據(jù)目的主機(jī)的以太網(wǎng)地址,并進(jìn)行數(shù)據(jù)發(fā)送的操作。

?6)私網(wǎng) IP 和公網(wǎng) IP

????????如果一個組織內(nèi)部組建局域網(wǎng),IP 地址只用于局域網(wǎng)內(nèi)的通信,而不直接連入廣域網(wǎng)中,則稱這個 IP 地址是私有的。

【Tips】私有 IP?和公網(wǎng) IP

? ? ? ?RFC 1918 規(guī)定了用于組建局域網(wǎng)的私有 IP 地址,對于以下在地址首部的點(diǎn)分十進(jìn)制表示:

  • 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 個地址。

? ? ? ? 在以上這些范圍中的,都稱為私網(wǎng) IP,其余的則稱為公網(wǎng) IP,或全局 IP。

【補(bǔ)】NAT 技術(shù)將數(shù)據(jù)送達(dá)服務(wù)器

? ? ? ? 在連接兩個或多個網(wǎng)絡(luò)的路由器上,有兩種網(wǎng)絡(luò)接口:

  • LAN 口(Local Area Network):表示連接本地網(wǎng)絡(luò)的端口,主要與家庭網(wǎng)絡(luò)中的交換機(jī)、集線器或 PC 相連。
  • WAN 口(Wide Area Network):表示連接廣域網(wǎng)的端口(一般指互聯(lián)網(wǎng))。

? ? ? ? 其中,LAN 口的 IP 地址叫做 LAN 口 IP,或子網(wǎng) IP,而 WAN 口的 IP 地址叫做 WAN 口IP,或外網(wǎng) IP。

? ? ? ? 自用的電腦、家用路由器、運(yùn)營商路由器、廣域網(wǎng)以及我們要訪問的服務(wù)器之間具有如下關(guān)系:

  • 不同的路由器的子網(wǎng) IP ,其實(shí)都是一樣的(通常是 192.168.1.1),子網(wǎng)內(nèi)的主機(jī)的 IP 地址不能重復(fù),但子網(wǎng)之間的 IP 地址可以重復(fù)。
  • 每一個家用路由器,也是運(yùn)營商路由器的子網(wǎng)中的一個節(jié)點(diǎn),這樣的運(yùn)營商路由器可能會有很多級,最外層的運(yùn)營商路由器的 WAN 口 IP 就是一個公網(wǎng) IP 了。
  • 如果希望自己實(shí)現(xiàn)的服務(wù)器程序,能夠在公網(wǎng)上被訪問到,就需要把程序部署在一臺具有外網(wǎng) IP 的服務(wù)器上。

? ? ? ? ?私網(wǎng) IP 不能出現(xiàn)在公網(wǎng)中。這是因?yàn)?#xff0c;不同的局域網(wǎng)中主機(jī)的 IP 地址可能是相同的,私網(wǎng) IP 在廣域網(wǎng)中無法唯一標(biāo)識一臺主機(jī),也就不能讓私網(wǎng) IP 出現(xiàn)在公網(wǎng)上;且 IP 地址天然不足,也就不能讓主機(jī)直接使用公網(wǎng) IP,而得讓主機(jī)使用可重復(fù)的私網(wǎng) IP,在不同的局域網(wǎng)中使用相同的 IP 地址,以緩解 IP 地址的不足;運(yùn)營商要收取網(wǎng)費(fèi),數(shù)據(jù)包必須要經(jīng)過運(yùn)營商的路由器才能發(fā)送到公網(wǎng),而不能直接發(fā)送到公網(wǎng)。

????????不同局域網(wǎng)中的主機(jī)要進(jìn)行通信,必須跨公網(wǎng)。這是因?yàn)?#xff0c;一個主機(jī)要將數(shù)據(jù)發(fā)送給另一臺主機(jī),前提是得先知道另一臺主機(jī)的 IP 地址,但即便知道了,也有可能兩臺主機(jī)的 IP 地址是一樣的,且都是私網(wǎng) IP 地址,如果一臺主機(jī)發(fā)送數(shù)據(jù)時,將目的 IP 地址填成和自己相同的IP地址,系統(tǒng)就會認(rèn)為這個數(shù)據(jù)就是要發(fā)給自己的,就不會向外進(jìn)行發(fā)送了。也就是說,數(shù)據(jù)要從一個局域網(wǎng)到另一個局域網(wǎng),不可能不經(jīng)過公網(wǎng)。

? ? ? ? 于是,子網(wǎng)內(nèi)的主機(jī)在和外網(wǎng)進(jìn)行通信時,路由器會不斷將數(shù)據(jù)包的 IP 報(bào)頭中的源IP地址,替換成路由器的 WAN 口 IP,如此逐級替換,最終數(shù)據(jù)包中的源IP 地址會變成一個公網(wǎng) IP,這種技術(shù)就稱為 NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)。

????????但實(shí)際上也存在一些技術(shù),能夠使數(shù)據(jù)包在發(fā)送過程中不進(jìn)行公網(wǎng) IP 的替換,而將數(shù)據(jù)正確地送到目標(biāo)主機(jī)。這種技術(shù)叫做內(nèi)網(wǎng)穿透,或 NAT 穿透。

?

五、路由

1)數(shù)據(jù)路由

????????數(shù)據(jù)在網(wǎng)絡(luò)傳輸中,會經(jīng)歷路由,也就是路徑選擇,從而到達(dá)目的主機(jī)。

????????數(shù)據(jù)路由的過程,其實(shí)就是一跳一跳(Hop by Hop)“問路”的過程。所謂“一跳”,就是數(shù)據(jù)鏈路層中的一個區(qū)間,具體在以太網(wǎng)中指,從源 MAC 地址到目的 MAC 地址之間的幀傳輸區(qū)間。

????????數(shù)據(jù)在網(wǎng)絡(luò)傳輸中,會遇到很多路由器,這些路由器會幫助數(shù)據(jù)進(jìn)行路由轉(zhuǎn)發(fā)。每收到一個數(shù)據(jù)包,路由器都會查詢路由表,找到該數(shù)據(jù)的目的 IP 地址,并告知該數(shù)據(jù)下一跳應(yīng)該往哪跳。

【Tips】路由器查詢路由表的可能結(jié)果

  • 得知該數(shù)據(jù)下一跳應(yīng)該跳到哪一個子網(wǎng)。
  • 沒有發(fā)現(xiàn)匹配的子網(wǎng),此時路由器會將該數(shù)據(jù)轉(zhuǎn)發(fā)給默認(rèn)路由。
  • 得知該數(shù)據(jù)的目標(biāo)網(wǎng)絡(luò)就是當(dāng)前所在的網(wǎng)絡(luò),此時路由器就會將該數(shù)據(jù)轉(zhuǎn)給當(dāng)前網(wǎng)絡(luò)中對應(yīng)的主機(jī)。

?

2)路由表查詢的具體過程

????????每個路由器內(nèi)部會維護(hù)一張路由表。

????????指令 route 可以查看云服務(wù)器上對應(yīng)的路由表。

? ? ? ? 其中表項(xiàng)的含義為:

  • Destination:代表的是目的網(wǎng)絡(luò)地址。
  • Gateway:代表的是下一跳地址。
  • Genmask:代表的是子網(wǎng)掩碼。
  • Flags:U 標(biāo)志表示此條目有效(可以禁用某些條目),G 標(biāo)志表示此條目的下一跳地址是某個路由器的地址。沒有 G 標(biāo)志的條目,表示目的網(wǎng)絡(luò)地址是與本機(jī)接口直接相連的網(wǎng)絡(luò),不必經(jīng)路由器轉(zhuǎn)發(fā)。
  • Iface:代表的是發(fā)送接口。

????????當(dāng) IP 數(shù)據(jù)包到達(dá)路由器時,路由器就會用其中的目的IP地址,依次與路由表中的子網(wǎng)掩碼 Genmask 進(jìn)行“按位與”操作,然后將結(jié)果與子網(wǎng)掩碼所對應(yīng)的目的網(wǎng)絡(luò)地址 Destination 進(jìn)行比對,如果匹配,則說明該數(shù)據(jù)包下一跳就應(yīng)該跳去這個子網(wǎng),然后就會將該數(shù)據(jù)包,通過對應(yīng)的發(fā)送接口 Iface 發(fā)出;如果沒有找到匹配的目的網(wǎng)絡(luò)地址,路由器就會將這個數(shù)據(jù)包發(fā)送到默認(rèn)路由,也就是目標(biāo)網(wǎng)絡(luò)地址一項(xiàng)下的 default,可以看到,默認(rèn)路由對應(yīng)的 Flags 是 UG,實(shí)際就是將該數(shù)據(jù)轉(zhuǎn)給了另一臺路由器,讓該數(shù)據(jù)在另一臺路由器繼續(xù)進(jìn)行路由。

????????數(shù)據(jù)包根據(jù)自己持有的目的 IP 地址中的網(wǎng)絡(luò)號,不斷經(jīng)過路由器的路由后,最終會到達(dá)目標(biāo)主機(jī)所在的目標(biāo)網(wǎng)絡(luò),然后再根據(jù)目的 IP 地址中的主機(jī)號進(jìn)行路由,最終會到達(dá)目標(biāo)主機(jī)。

【補(bǔ)】路由表生成算法

????????路由可分為靜態(tài)路由和動態(tài)路由:

  • 靜態(tài)路由:是指由網(wǎng)絡(luò)管理員手工配置路由信息。
  • 動態(tài)路由:是指路由器能夠通過算法自動建立自己的路由表,且能根據(jù)實(shí)際情況進(jìn)行調(diào)整。

? ? ? ? 其中,相關(guān)生成算法有:距離向量算法、LS 算法、Dijkstra 算法等。

http://www.risenshineclean.com/news/4266.html

相關(guān)文章:

  • 地區(qū)網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷的種類有哪些
  • 市政府門戶網(wǎng)站seo網(wǎng)絡(luò)營銷
  • 怎么做自己的導(dǎo)航網(wǎng)站營銷qq下載
  • 高中生做網(wǎng)站怎么做網(wǎng)站推廣和宣傳
  • 廣州專業(yè)網(wǎng)站改版官網(wǎng)優(yōu)化哪家專業(yè)
  • 怎么做網(wǎng)站站內(nèi)優(yōu)化營銷課程培訓(xùn)都有哪些
  • 河北網(wǎng)站建設(shè)工程百度一下你就知道官網(wǎng)網(wǎng)頁
  • 建站公司費(fèi)用智能網(wǎng)站排名優(yōu)化
  • 網(wǎng)站建設(shè)與開發(fā)跨境電商網(wǎng)站
  • 簡潔的網(wǎng)站世界排名前十位
  • 電子商務(wù)網(wǎng)站建設(shè)完整案例教程成都百度seo推廣
  • 利用網(wǎng)站做淘寶客網(wǎng)絡(luò)營銷的流程和方法
  • 做外貿(mào)網(wǎng)站建設(shè)百度排名推廣
  • 政府網(wǎng)站運(yùn)營方案廈門百度廣告
  • 東莞網(wǎng)站建設(shè)招聘內(nèi)蒙古最新消息
  • 人工客服系統(tǒng)代做seo關(guān)鍵詞排名
  • 漂亮的手機(jī)網(wǎng)站模板下載最新的軍事新聞
  • 蘇州市城鄉(xiāng)建設(shè)檔案館網(wǎng)站如何看待百度競價(jià)排名
  • 什么是網(wǎng)站獨(dú)立訪問者數(shù)量seo如何優(yōu)化關(guān)鍵詞上首頁
  • 門戶網(wǎng)站開發(fā)需求分析網(wǎng)絡(luò)營銷未來有哪些發(fā)展趨勢
  • wordpress怎么靜態(tài)頁面東莞搜索優(yōu)化十年樂云seo
  • wordpress最新的編輯器南寧網(wǎng)站優(yōu)化
  • 可以轉(zhuǎn)app的網(wǎng)站怎么做資深seo顧問
  • 網(wǎng)站建設(shè)全套教程含前端和后端關(guān)鍵詞排名客服
  • ppt網(wǎng)站鏈接怎么做seo排名關(guān)鍵詞搜索結(jié)果
  • 成都市做網(wǎng)站的公司百度推廣app怎么收費(fèi)
  • 網(wǎng)站后綴百度影響力排名順序
  • 怎么創(chuàng)建私人網(wǎng)站微信推廣多少錢一次
  • 國外推廣網(wǎng)站國內(nèi)營銷推廣渠道
  • 做蛋白go分析網(wǎng)站高端企業(yè)網(wǎng)站定制公司