日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计网 - IPv4 协议:路由和寻址的区别是什么?

發(fā)布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计网 - IPv4 协议:路由和寻址的区别是什么? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • Pre
  • 什么是 IP 協(xié)議?
  • IP 協(xié)議的工作原理
    • 分片(Fragmentation)
    • 增加協(xié)議頭(IP Header)
  • “魚和熊掌”不能兼得——延遲、吞吐量、丟包率
    • 延遲(latency)
    • 吞吐量(Throughput)
    • 丟包率(Packet loss)
  • 尋址(Addressing)
    • IPv4 地址
    • 尋址過程
      • 步驟 1:找到頂層網(wǎng)絡(luò)
      • 步驟 2:找到下一層網(wǎng)絡(luò)
      • 步驟 3:找到再下一級網(wǎng)絡(luò)
      • 步驟 4:定位設(shè)備
  • 路由(Routing)
  • 總結(jié)
  • QA
    • 路由和尋址的區(qū)別是什么?
    • 127.0.0.1, localhost, 0.0.0.0 有什么不同


Pre

如果說傳輸層協(xié)議,除了 TCP/UDP,我們還可以有其他選擇,比如 Google 開發(fā)的 QUIC 協(xié)議,幫助在傳輸層支持 HTTP 3.0 傳輸。

但是在網(wǎng)絡(luò)層,IP 協(xié)議幾乎一統(tǒng)天下。IP 協(xié)議目前主要有兩個版本 IPv4 和 IPv6。這一講我們先介紹 IPv4 協(xié)議。

IPv4使用范圍很大,平時工作中很容易遇到,比如開發(fā)場景、網(wǎng)絡(luò)優(yōu)化場景、解決線上問題場景等。相信你經(jīng)常會碰到一些和 IP 協(xié)議相關(guān)的名詞,比如一道常見的面試題目:路由和尋址的區(qū)別是什么?

因此,學(xué)習(xí) IPv4 還是非常有意義的。接下來,就帶著對上面的問題,開啟今天的學(xué)習(xí)。


什么是 IP 協(xié)議?

IP 協(xié)議(Internet Protocol)是一個處于壟斷地位的網(wǎng)絡(luò)層協(xié)議。 IPv4 就是 IP 協(xié)議的第 4 個版本,是目前互聯(lián)網(wǎng)的主要網(wǎng)絡(luò)層協(xié)議。IPv4 為傳輸層提供 Host-To-Host 的能力,IPv4 需要底層數(shù)據(jù)鏈路層的支持


IP 協(xié)議并不負(fù)責(zé)數(shù)據(jù)的可靠性。傳輸數(shù)據(jù)時,數(shù)據(jù)被切分成一個個數(shù)據(jù)封包。IP 協(xié)議上層的傳輸層協(xié)議會對數(shù)據(jù)進(jìn)行一次拆分,IP 協(xié)議還會進(jìn)一步進(jìn)行拆分。進(jìn)行兩次拆分是為了適配底層的設(shè)備。

數(shù)據(jù)在網(wǎng)絡(luò)中交換(封包交換算法),并不需要預(yù)先建立一個連接,而是任由數(shù)據(jù)在網(wǎng)絡(luò)中傳輸,每個節(jié)點通過路由算法幫助數(shù)據(jù)封包選擇下一個目的地。

可靠性保證數(shù)據(jù)無損地到達(dá)目的地。可靠性是 IP 協(xié)議上方的 Host-To-Host 協(xié)議保證的,比如 TCP 協(xié)議通過應(yīng)答機(jī)制、窗口等保證數(shù)據(jù)的可靠性。 IP 協(xié)議自身不能保證可靠性。比如 IP 協(xié)議可能會遇到下面這幾個問題:

  • 封包損壞(數(shù)據(jù)傳輸過程中被損壞);

  • 丟包(數(shù)據(jù)發(fā)送過程中丟失);

  • 重發(fā)(數(shù)據(jù)被重發(fā),比如中間設(shè)備通過 2 個路徑傳遞數(shù)據(jù));

  • 亂序(到達(dá)目的地時數(shù)據(jù)和發(fā)送數(shù)據(jù)不一致)。

但是 IP 協(xié)議并不會去處理這些問題,因為網(wǎng)絡(luò)層只專注解決網(wǎng)絡(luò)層的問題, 而且不同特性的應(yīng)用在不同場景下需要解決的問題不一樣。對于網(wǎng)絡(luò)層來說,這里主要有 3 個問題要解決:

  • 延遲

  • 吞吐量

  • 丟包率

這三個是魚和熊掌不能兼得,我們后續(xù)會討論。

另外,IP 協(xié)議目前主要有兩種架構(gòu),一種是 IPv4,是目前應(yīng)用最廣泛的互聯(lián)網(wǎng)協(xié)議;另一種是 IPv6,目前世界各地正在積極地部署 IPv6。


IP 協(xié)議的工作原理

  • IP 協(xié)議接收 IP 協(xié)議上方的 Host-To-Host 協(xié)議傳來的數(shù)據(jù),然后進(jìn)行拆分,這個能力叫作分片(Fragmentation)
  • 然后 IP 協(xié)議為每個片段(Fragment)增加一個 IP 頭(Header),組成一個IP 封包(Datagram)
  • 之后,IP 協(xié)議調(diào)用底層的局域網(wǎng)(數(shù)據(jù)鏈路層)傳送數(shù)據(jù)。最后 IP 協(xié)議通過尋址和路由能力最終把封包送達(dá)目的地

接下來具體看下完整的過程。

分片(Fragmentation)

分片就是把數(shù)據(jù)切分成片。 IP 協(xié)議通過它下層的局域網(wǎng)(鏈路層)協(xié)議傳輸數(shù)據(jù),因此需要適配底層傳輸網(wǎng)絡(luò)的傳輸能力。數(shù)據(jù)太大通常就不適合底層網(wǎng)絡(luò)傳輸,這就需要把大的數(shù)據(jù)切片。 當(dāng)然也可能選擇不切片,IP 協(xié)議提供了一個能力就是把封包標(biāo)記為不切片,當(dāng)?shù)讓泳W(wǎng)絡(luò)看到不切片的封包,又沒有能力傳輸?shù)臅r候,就會丟棄這個封包。你要注意,在網(wǎng)絡(luò)環(huán)境中往往存在多條路徑,一條路徑斷了,說不定其他路徑可以連通。


增加協(xié)議頭(IP Header)

切片完成之后,IP 協(xié)議會為每個切片(數(shù)據(jù)封包 Datagram)增加一個協(xié)議頭。一個 IPv4 的協(xié)議頭看上去就是如下圖所示的樣子:


其中分成 4 個部分。

  • 最重要的是原地址和目標(biāo)地址。IPv4 的地址是 4 組 8 位的數(shù)字,總共是 32 位。

  • Type Of Service 服務(wù)的類型,是為了響應(yīng)不同的用戶訴求,用來選擇延遲、吞吐量和丟包率之間的關(guān)系。

  • IHL(Internet Header Length)用來描述 IP 協(xié)議頭的大小。所以 IP 協(xié)議頭的大小是可變的。IHL 只有 4 位,最大值 1111 = 15。最大是 15 個雙字0.0(15*4 字節(jié) = 60 字節(jié))。

  • Total Length 定義報文(封包 Datagram)的長度。

  • Identification(報文的 ID),發(fā)送方分配,代表順序。

  • Fragment offset 描述要不要分包(拆分),以及如何拆分。

  • Time To Live 描述封包存活的時間。因此每個 IP 封包發(fā)送出去后,就開始銷毀倒計時。如果倒計時為 0,就會銷毀。比如中間的路由器看到一個 TTL 為 0 的封包,就直接丟棄。

  • Protocol 是描述上層的協(xié)議,比如 TCP = 6,UDP = 17。

  • Options 代表可選項。

  • Checksum 用來檢驗封包的正確性,如果 Checksum 對不上,就需要選擇丟棄這個封包。


“魚和熊掌”不能兼得——延遲、吞吐量、丟包率

上面我們看到 IPv4 協(xié)議中提供了一個叫作 Type of Service(服務(wù)類型)的字段。這個字段是為了在延遲、吞吐量和丟包率三者間選擇。

延遲(latency)

延遲指的是 1 bit 的數(shù)據(jù)從網(wǎng)絡(luò)的一個終端傳送到另一個終端需要的時間。這個時間包括在發(fā)送端準(zhǔn)備發(fā)送的時間、排隊發(fā)送的時間、發(fā)送數(shù)據(jù)的時間、數(shù)據(jù)傳輸?shù)臅r間等。


吞吐量(Throughput)

吞吐量指單位時間內(nèi)可以傳輸?shù)钠骄鶖?shù)據(jù)量。比如用 bit/s 作為單位,就是 bps。吞吐量和延遲沒有聯(lián)系,比如延遲很高的網(wǎng)絡(luò),有可能吞吐量很高。可以類比成水管很大流速很慢,對比水管很細(xì)流速很快,這兩種情況,最終流量可以是相等的。


丟包率(Packet loss)

丟表率指發(fā)送出去的封包沒有到達(dá)目的地的比例。 在最大流速確定的網(wǎng)絡(luò)中,丟表率會直接影響吞吐量。

我們的網(wǎng)絡(luò)有時候需要低延遲,比如玩一款 RTS 游戲或者 Moba 游戲,這種時候延遲非常重要。另外如果把延遲看作一個平均指標(biāo),丟包也會影響延遲——一個包丟了,需要重發(fā)。而有的應(yīng)用需要高吞吐量,延遲不是很重要,比如說網(wǎng)盤下載文件。大部分應(yīng)用期望丟包不能太嚴(yán)重,比如語音電話,少量丟包還能聽清,大量丟包就麻煩了,根本聽不清對方說什么。嚴(yán)格希望不丟包的應(yīng)用比較少,只有極特殊的網(wǎng)絡(luò)控制管理場景,才需要在互聯(lián)網(wǎng)層要求不丟包。

當(dāng)然這三個條件,通常不能同時滿足。如果同時追求延遲、吞吐量、丟包率,那么對網(wǎng)絡(luò)設(shè)備的要求就會非常高,說白了就會非常貴

因此 IP 協(xié)議頭中的 Type of Service 字段里,有以下 4 種主要的類型可以選擇:

  • 低延遲

  • 高吞吐量

  • 低丟包率

  • 低成本


尋址(Addressing)

地址想要表達(dá)的是一個東西在哪里。尋址要做的就是:給一個地址,然后找到這個東西。IPv4 協(xié)議的尋址過程是逐級尋址。

IPv4 地址

IPv4 地址是 4 個 8 位(Octet)排列而成,總共可以編址 43 億個地址。

比如 103.16.3.1 就是一個合法的 Ipv4 地址。4 組數(shù)字用.分開,是為了讓人可讀,實際上在內(nèi)存和傳輸過程中,就是直接用 32 位。

可以觀察一下103.16.3.1的二進(jìn)制,如下圖所示:


尋址過程

尋址就是如何根據(jù) IP 地址找到設(shè)備。因為 IPv4 的世界中,網(wǎng)絡(luò)是一個樹狀模型。頂層有多個平行的網(wǎng)絡(luò),每個網(wǎng)絡(luò)有自己的網(wǎng)絡(luò)號。然后頂層網(wǎng)絡(luò)下方又有多個子網(wǎng),子網(wǎng)下方還有子網(wǎng),最后才是設(shè)備。

IP 協(xié)議的尋址過程需要逐級找到網(wǎng)絡(luò),最后定位設(shè)備。下面我們具體分析下這個過程。

步驟 1:找到頂層網(wǎng)絡(luò)

比如103.16.3.1最頂層的網(wǎng)絡(luò)號可以和255.0.0.0(子網(wǎng)掩碼)做位與運算得到,如下所示:

復(fù)制代碼

103.16.3.1 & 255.0.0.0 = 103.0.0.0

因此103.0.0.0就是103.16.3.1所在的頂層網(wǎng)絡(luò)。255.0.0.0.稱作子網(wǎng)掩碼。子網(wǎng)掩碼的作用就是幫助根據(jù) IP 地址找到對應(yīng)子網(wǎng)。子網(wǎng)掩碼是很多個1接著很多個0,和 IP 地址一起使用。


步驟 2:找到下一層網(wǎng)絡(luò)

接下來要找到下一級網(wǎng)絡(luò),就需要用 IP 地址和下一級的子網(wǎng)掩碼做位與運算。 比如:

103.16.3.1 & 255.255.0.0 = 103.16.0.0

其中103.16.0.0就是下一級的網(wǎng)絡(luò)號。


步驟 3:找到再下一級網(wǎng)絡(luò)

接下來使用255.255.255.0子網(wǎng)掩碼找到下一級網(wǎng)絡(luò)是103.16.3.0。


步驟 4:定位設(shè)備

設(shè)備就在子網(wǎng)103.16.3.0中,最終找到的設(shè)備號是1。

當(dāng)然子網(wǎng)掩碼也不一定都是255,比如這個子網(wǎng)掩碼255.240.0.0也是可以的。但通常我們把 IPv4 的網(wǎng)絡(luò)分成這樣 4 層。


路由(Routing)

在尋址過程中,數(shù)據(jù)總是存于某個局域網(wǎng)中。如果目的地在局域網(wǎng)中,就可以直接定位到設(shè)備了。如果目的地不在局域網(wǎng)中,這個時候,就需再去往其他網(wǎng)絡(luò)。

由于網(wǎng)絡(luò)和網(wǎng)絡(luò)間是網(wǎng)關(guān)在連接,因此如果目的地 IP 不在局域網(wǎng)中,就需要為 IP 封包選擇通往下一個網(wǎng)絡(luò)的路徑,其實就是選擇其中一個網(wǎng)關(guān)。你可能會問:網(wǎng)關(guān)有多個嗎?如果一個網(wǎng)絡(luò)和多個網(wǎng)絡(luò)接壤,那自然需要多個網(wǎng)關(guān)了。下圖中,路由器在選擇 IP 封包下一個應(yīng)該是去往哪個 Gateway?


假如,我們要為 IP 地址 14.215.177.38 尋址,當(dāng)前路由器所在的網(wǎng)絡(luò)的編號是16.0.0.0。那么我們就需要知道去往 14.0.0.0 網(wǎng)絡(luò)的 Gateway IP 地址。

如果你在當(dāng)前網(wǎng)絡(luò)中用route查看路由表,可能可以看到一條下面這樣的記錄。

Destination14.0.0.0Gateway16.12.1.100Mask255.0.0.0Iface16.12.1.1

這條記錄就說明如果你要去往 14.0.0.0 網(wǎng)絡(luò),IP 地址 14.215.177.38 先要和 255.0.0.0 進(jìn)行位運算,然后再查表,看到 14.0.0.0,得知去往 Gateway 的網(wǎng)卡(IFace)是 16.12.1.1。

當(dāng)封包去向下一個節(jié)點后,會進(jìn)入新的路由節(jié)點,然后會繼續(xù)上述路由過程,直到最終定位到設(shè)備。


總結(jié)

這里我們梳理學(xué)習(xí)了 IP 協(xié)議和 IP 協(xié)議的工作原理。

  • 首先 IP 協(xié)議會進(jìn)行分片,將上游數(shù)據(jù)拆成一個個的封包(Datagram),
  • 然后為封包增加 IP 頭部。封包發(fā)送出去后,就開始了尋址過程。尋址就是找到 IP 地址對應(yīng)的設(shè)備。在局域網(wǎng)內(nèi),如果找不到設(shè)備,就需要路由。
  • 路由就是找到數(shù)據(jù)應(yīng)該往哪里發(fā)送。最后通過層層路由定位到具體的設(shè)備。

QA

路由和尋址的區(qū)別是什么?

尋址(Addressing)就是通過地址找設(shè)備。和現(xiàn)實生活中的尋址是一樣的,比如根據(jù)地址找到一個公寓。在 IPv4 協(xié)議中,尋址找到的是一個設(shè)備所在的位置。

路由(Routing)本質(zhì)是路徑的選擇。就好像知道地址,但是到了每個十字路口,還需要選擇具體的路徑。

所以,要做路由,就必須能夠理解地址,也就是需要借助尋址的能力。要通過尋址找到最終的設(shè)備,又要借助路由在每個節(jié)點選擇數(shù)據(jù)傳輸?shù)木€路。因此,路由和尋址,是相輔相成的關(guān)系。


127.0.0.1, localhost, 0.0.0.0 有什么不同

  • 127.0.0.1是本地回環(huán)地址(loopback),發(fā)送到 loopback 的數(shù)據(jù)會被轉(zhuǎn)發(fā)到本地應(yīng)用。

  • localhost 指代的是本地計算機(jī),用于訪問綁定在 loopback 上的服務(wù)。localhost 是一個主機(jī)名,不僅僅可以指向 IPv4 的本地回環(huán)地址,也可以指向 IPv6 的本地回環(huán)地址 [::1]。

  • 0.0.0.0是一個特殊目的 IP 地址,稱作不可路由 IP 地址,它的用途會被特殊規(guī)定。通常情況下,當(dāng)我們把一個服務(wù)綁定到0.0.0.0,相當(dāng)于把服務(wù)綁定到任意的 IP 地址。比如一臺服務(wù)器上有多個網(wǎng)卡,不同網(wǎng)卡連接不同的網(wǎng)絡(luò),如果服務(wù)綁定到 0.0.0.0 就可以保證服務(wù)在多個 IP 地址上都可以用。

總結(jié)

以上是生活随笔為你收集整理的计网 - IPv4 协议:路由和寻址的区别是什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。