Linux網絡編程——詳解網絡層IP協議、網段劃分、路由

目錄

一、前言

二、IP協議的認識

1、什么是IP協議?

2、IP協議報頭

?三、網段劃分

1、初步認識IP與路由

2、IP地址

I、DHCP動態主機配置協議

3、IP地址的劃分

I、CIDR設計

II、子網數目的計算

III、子網掩碼的確定?

四、特殊的IP地址

五、IP地址的數量限制

六、私有IP地址與公網IP地址

1、私有IP地址

2、公網IP地址

七、路由器

八、路由

1、路由表?

八、總結


一、前言

在之前的文章中,出去物理層,我們已經針對TCP/IP五層模型中的應用層、傳輸層的要點做了介紹。

  • 其中應用層 HTTP/HTTPS 協議主要是針對數據請求的一個超文本傳輸協議,目的是為了保證服務端和客戶端之間的數據傳輸安全可靠且高效。
  • 傳輸層的 UDP協議就是應用于像我們平時看直播刷視頻一樣,它并不保證數據的可靠傳輸,而是能容忍一定的數據丟失的傳輸層協議TCP協議則是通過一系列的機制來保證數據傳輸的可靠性和完整性。

學習完了應用層和傳輸層,接下來就是網絡層的協議和數據鏈路層了。

  • 網絡層主要負責的是路徑規劃,為數據的傳輸規劃好最優的路徑。
  • 數據鏈路層則是負責真正意義上的傳輸數據,例如以太網、網卡、交換機等都是屬于該層。

這篇文章我們主要探討網絡層的IP協議。

二、IP協議的認識

在我們之前學習的時候已經簡單了解過了IP,知道了源IP和目的IP,才能將數據包發送到指定的地址。

1、什么是IP協議?

IP(Internet Protocol)是一種網絡通信協議,是互聯網的核心協議之一,負責在計算機網絡中路由數據包,使得數據包能夠在不同的設備之間進行有效傳輸。IP協議的主要作用包括尋址、分組、路由和轉發數據包

從一臺主機A向主機B發送消息時,需要經歷很多的跳轉,所以在路徑選擇中,IP是非常重要的,它決定了路徑如何走。

2、IP協議報頭

????????我們知道在網絡協議棧中,各層獨立是互相不受影響的,數據包從一個主機發到另一個主機的時候,需要先從自己的網絡協議棧自頂向下在每一層進行封裝,然后到對方主機時,再自底向上進行解包。我們已經看到過了應用層和傳輸層的協議格式,同樣數據包在走到網絡層時,也需要對其封裝上IP的協議報頭協議格式如下:

  • 4位版本號(Version)標識IP協議版本,4表示IPV4,6表示IPV6.
  • 4位首部長度(Header Length):?IP報頭總長度,與TCP一樣,這里4位16個數據的單位并不是1字節,而是4字節,所以說它的最小值為5(20個字節),最大值為15(60個字節)。
  • 8位服務類型(Differentiated Services):3位優先權字段(已經棄用),4位TOS字段,,和1位保留字段(必須置為0)。4位TOS分別表示:最小延時、最大吞吐量、最高可靠性、最小成本。這四者相互沖突,只能選擇一個。對于 ssh/telnet 這樣的應用程序,最小延時比較重要;對于ftp這樣的程序,最大吞吐量比較重要。
  • 16位總長度(Total Length):表示IP數據報整體占多少個字節,包括首部和數據部分。這個是報文,不是字節流,所以這個能有效保證有效載荷分離。
  • 16位標識(Identification)用于唯一地標識一個IP數據段,常用于分片和重組。如果IP報文因為數據鏈路層被分片了,那么每一片里面的這個id都是相同的。
  • 3位標志(Flags):用于指示數據報的處理狀態,包括是否可以分片和是否是最后一片。第一位保留(保留的意思是現在不用,但是還沒想好說不定以后要用到)。 第二位置為1表示禁止分片,這時候如果報文長度超過MTU,IP模塊就會丟棄報文(也就是過濾大的報文)。第三位表示"更多分片",如果分片了的話,最后一個分片置為0,其他是1。類似于一個結束標記。
  • 13位片偏移(Fragment Offset):是分片相對于原始IP報文開始處的偏移。其實就是在表示當前分片在原報文中處在哪個位置。實際偏移的字節數是這個值*8得到的,因此,除了最后一個報文之外,其他報文的長度必須是8的整數倍(否則報文就不連續了)。
  • 8位生存時間(Time to Live,TTL)表示數據報到達目的地的最大報文跳數,防止數據報在網絡中無限循環,一般是64,每經過一個路由器,該值減1,直到為0,數據報將被丟棄。
  • 8位協議(Protocol)指示封裝在IP數據報中的上層協議,如TCP、UDP等,因為需要向上層傳輸。
  • 16位首部校驗和(Header Checksum):使用CRC進行校驗,用于檢驗IP首部中是否發生錯誤,如果出現問題直接丟掉就行,后面會有重傳等一系列措施。
  • 32位源地址和32位目標地址:表示發送端和接收端。這兩個是IP協議頭中最關鍵的信息。采用點分十進制的形式來表示,分為四組,一組8位。例如1.2.3.4。
  • 可選項(Options):可選字段,包括記錄路由路徑、時間戳、安全和加密等信息。最多40字節。
  • 數據:數據部分是IP協議傳輸的實際數據,可以是TCP、UDP等上層協議封裝的數據,包含著來自上層的TCP或者UDP的報頭段。

?三、網段劃分

1、初步認識IP與路由

首先我們需要知道的是網段劃分是什么?為什么需要網段劃分?網段劃分是怎么樣劃分的?

我們先通過一個例子引入這個話題:

????????在我們學校中每一個人都有自己的學號,學號總是一長串的數字,它被分為好多段,每一段數字都代表著不同的含義,比如前四個數字表示入學年份,接著兩個數字表示所在的院系,接著兩個數字表示所在專業,接著后面的數字才表示你是該專業幾號。同時,我們每個院系每個專業的負責人都有著自己的小群以便交流。

假設我們現在知道一個人的學號要找這個人,有什么方法呢?第一種就是見人就問學號,看看能否對應上,但是這個方法太粗暴了,效率也低。還有一種方法就是通過該學號找到對應的院系負責人,由院系負責人在自己的小群里一問,找到對應的專業的負責人,再由專業的負責人也在小群里一問,于是就找到了那個人。????????

? ? ? ? 可以看到第二種方法的效率很高,這是因為我們可以根據學號一步一步能排除掉大部分不相關的人。所以IP也是同理。


我們都知道通過IP就能找到對應的主機,但是世界上有著那么多的主機,存在著海量的IP地址,我們主機是怎么通過網絡找到的呢?

網絡地址的劃分實際上是按照人口、接入的網絡設備等因素劃分的,但是為了便于理解,我們就用國家劃分。

我們將整個世界類比成一個很大的學校,而學校中的院系就是各個國家,院系中的不同專業就代表了各個國家的不同的地區。而各個負責人的小群就是路由器,通過學號找人的過程也就是通過IP找主機的過程。

所以網段劃分就是將IP合理分配的技術,比如所有屬于中國的IP的第一位都是1,格式就是1.x.x.x ,屬于河北的IP 第二位都是2 ,格式為 1.2.x.x ,所有屬于美國的IP的第一位都是2,格式為2.x.x.x? 等等,以此類推。當然這些各個國家的IP地址都存在國際路由器中。

通過這樣的技術我們就可以很快定位想要尋找的主機。

2、IP地址

我們一般提到的網絡地址其實不等于IP地址,網絡地址是指IP地址中的網絡號的,

 IP地址 ::= {<目標網絡號>, <目標主機號>}
  • 目標網絡號:就是用來劃分不同的網段,即劃分不同的地區,且保證相連的兩個網段具有不同的標識。
  • 目標主機號:標識同一網段內的不同主機。同一網段內的不同主機具有相同的網絡號,所以必須存在不同的主機號來區分它們。

所以IP地址就是給每個連接在Internet上的主機分配的一個32bit地址。按照TCP/IP協議規定,IP地址用二進制來表示,每個IP地址長32bit,比特換算成字節,就是4個字節。包括主機地址和網絡地址兩部分。如11000000 10101000 00000001 00000110(192.168.1.6)

如上圖所示,圖中上半部分的兩個主機處于同一網段內, 他們的網段號都是 192.168.128,后面的 10 11 表示的就是主機號/24 表示的是子網掩碼(后面講)的前24位是網絡標識,剩下的8位都是主機標識。

需要注意的是上圖中的路由器也是主機,他是連接兩個子網的節點主要負責在不同的子網之間轉發數據包,同時屬于兩個子網,所以它也有著兩個IP,路由器每個接口都會配置一個IP地址,這個IP地址屬于該接口所連接的子網。因此,圖中的路由器連接了兩個子網,所以它擁兩個接口,每個接口配置有一個在這個子網內的唯一IP地址。

通過上面的圖示我們不難發現:

  1. 子網是從一個大的IP網絡中劃分出來的較小的網絡部分。
  2. 不同的子網其實就是將網絡號相同的主機放在一起
  3. 如果我們想要在該子網中增添一臺新的主機,則該主機的網絡號必須和子網的網絡的號一致,且該主機的主機號必須不同于子網內其他主機。?

I、DHCP動態主機配置協議

通過合理地設置主機號和網絡號,我們就可以保證在互相連接的網絡中,每臺主機的IP地址都不相同,但實際上,手動管理子網內IP是一種很麻煩的事情。

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一種網絡管理協議,用于自動化地分配IP地址和其他網絡配置參數給子網內新增的節點,如計算機、智能手機等,使其能夠與網絡中的其他設備進行通信,避免了我們的手動管理。我們要知道在手機或者計算機聯網之前它是沒有IP的,聯網的過程其實就是向子網申請IP的過程。

一般的路由器都帶有DHCP功能,因此路由器也可以看作是一個DHCP服務器。

3、IP地址的劃分

上面我們已經知道了什么是網段劃分和為什么需要網段劃分,下來我們就要著重探討IP地址是如何進行劃分的。

過去提出的一種IP地址的劃分方案是:將IP地址通常分為五個主要類別,即A、B、C、D、E類,如下

這些類別都是按照IP地址的第一個字節(8位) 來劃分的,其中不同類別具有不同的網絡號和主機號分配方式。

  1. A類地址1.0.0.0 ~126.255.255.255,最大主機數約 16,777,214(2^24 - 2,減去兩個保留地址:全0和全1),該地址通常分配給大型組織或者大型的服務提供商,它們允許大量主機。
  2. B類地址128.0.0.0 ~191.255.255.255, 最大主機數約 65,534(2^16 - 2),該地址通常分配給中等規模的組織或者網絡。
  3. C類地址:?192.0.0.0 ~?223.255.255.255,最大主機數:約 254(2^8 - 2),該地址通常分配給小型的組織或私人網絡。
  4. D類地址:?224.0.0.0 ~?239.255.255.255,該地址用于多播,不分配給單獨的主機或者網絡,用于一次向多個目標發送數據包,例如視頻流或音頻流。
  5. E類地址:?240.0.0.0 ~255.255.255.255,該類地址是實驗性地址,不常用,保留用于特定用途,用于實驗、研究或未來網絡發展。

但是上面的地址分配存在著許多的弊端,如

  1. IP地址浪費:A、B、C類地址的劃分方式導致了地址的浪費,特別是在A類地址中,每個網絡中都有著大約?16,777,214 個主機地址,而大多數網絡遠遠不需要這么多地址。這導致了 IPv4 地址枯竭的問題。
  2. 不靈活:由于固定的地址類型,會導致一些網絡可能會浪費大量的IP地址,而其他網絡的IP地址不夠用。
  3. 無法滿足中小型網絡需求:B類地址太大,而C類地址又太小,這使得中小型網絡在選擇合適的地址類別時很難找到平衡點。
  4. 不適合特定應用:D 類地址是多播地址,而 E 類地址是實驗性地址,它們在常規網絡中的使用非常有限。這也導致了資源浪費。

????????隨著互聯網的快速發展,IPv4 地址越來越不夠用了。這并不是直接與地址類別劃分相關的弊端。但是?IPv4 地址空間有限,而且已經耗盡了大部分可用地址。這迫使網絡行業采用了更高效的地址分配策略,如網絡地址轉換(NAT)?IPv6 的廣泛采用

????????為了解決這些問題,現代網絡提出了新的地址分配策略,例如?CIDR(無類別域間路由)采用 IPv6 地址空間,以更好地滿足不同規模和類型的網絡需求,減少資源浪費,提供更多的靈活性,并支持現代網絡功能。

I、CIDR設計

針對上面的網絡劃分出現的種種弊端,CIDR(Classless Inter-Domain Routing,無類別域間路由)被提出,它允許將IP地址按需分配給網絡,而不受固定類別的限制

  • 他引入了一個額外的子網掩碼(subnet mask)來區分網絡號和主機號
  • 子網掩碼也是一個32位的正整數,與IP地址編址格式相同,網絡部分和子網絡部分對應的位全為“1”主機部分對應的位全為“0”
  • 將IP地址和子網掩碼進行 ‘按位與’ 操作,得到的就是網絡號(包括子網絡號)
  • 網絡號和主機號的劃分與這個IP地址是A類、B類還是什么類無關
  • CIDR使用前綴表示法來表示IP地址范圍。這個前綴表示法包括IP地址,后面跟著一個斜線和一個數字,表示子網掩碼的長度。所以它是由兩部分組成 : 網絡前綴 + 子網掩碼,例如,192.168.1.0/24,其中IP地址表示為192.168.1.024就表示子網掩碼,表示32位中 高24位是1,其他位是0.它的二進制形式是 11111111.11111111.11111111.00000000,轉換為十進制就是255.255.255.0
  • CIDR允許多個連續的IP地址范圍被聚合成一個更大的范圍。這有助于減小路由表的大小,提高路由效率。

子網掩碼的格式為前24個比特位全為1,后8個比特位全為0,將來進行子網劃分的時候,我們只需要調整子網掩碼中從左側開始的 1 的個數就可以很方便地對IP地址進行比特位級別地子網劃分。

下面舉個例子:

  • 首先給定一個CIDR地址:172.31.128.255 /18
  • 表示IP地址是172.31.128.255,二進制為10101100.00011111.10000000.11111111
  • 子網掩碼地高18位是1,二進制表示為 11111111.11111111.11000000.00000000,所以表示將來得到的網絡地址的高18位表示網絡部分,剩下的14位表示主機部分。
  • 將上面的IP地址和子網掩碼的二進制進行‘按位與’運算(全1為1,其余為0)得到網絡地址: 10101100.00011111.10000000.00000000,按點分十進制表示為 172.31.128.0
    ip:        10101100.00011111.10000000.11111111  子網掩碼:  11111111.11111111.11000000.00000000
    ----------------------------------------------------
    網絡號:     10101100.00011111.10000000.00000000   & 
    網絡號點分法表示: 172.31.128.0   
    
  • 所以得到的該網絡地址的子網地址范圍是網絡地址二進制中低14位(主機部分)從全0 到全 1所表示的范圍.即10101100.00011111.10000000.00000000~10101100.00011111.10111111.11111111,點分十進制表示為172.31.128.0~172.31.191.255,而我們通常對于全0和全1這兩個是不使用的,因為網絡號一般用全0表示即172.31.128.0,廣播地址用全1表示,即172.31.191.255,所以子網中可用的IP地址的范圍就是172.31.128.1-172.31.191.254,這也就是該網絡號可以容納的主機所在的范圍。

下面是兩個例子可以自行計算

II、子網數目的計算

首先將/18換成為我們習慣的表示法:
11111111.11111111.11000000.000000轉為十進制就是255.255.192.0,可以看到這個掩碼的左邊兩節和B類默認掩碼是一致的,所以這個掩碼是在B類默認掩碼的范圍內,意味著我們將對B類大網進行子網劃分。B類掩碼默類是用16位(16個0)來表示可分配的IP 地址,這里的掩碼在B類默認掩碼的基礎上多出了兩個表示網絡號的1,也就是向主機位借了兩個1這就是說是將B類大網劃分為2的2次方個子網(2^n,n表示所借1的個數),所以最終的子網數目是4

III、子網劃分的計算

?已知IP 192.168.1.133 ,子網掩碼為255.255.255.192;求劃分的子網的個數和范圍

首先將子網掩碼寫為二進制的形式方便觀察將其轉換成二進制后和255.255.255.0對比可發現,前掩碼的前24位沒有變化,只是在原來表示主機號的部分頭兩位變成了1

192.168.1.113:	    11000000.10101000.00000001.10000101   (1)255.255.255.192:   11111111.11111111.11111111.11000000    (2)
----------------------------------------------------
255.255.255.0:      11111111.11111111.11111111.00000000    (3)

我們把IP地址中的前24位(192.168.1)先不關注,因為前24位對應掩碼沒有變化它們始終表示網絡號。

原本255.255.255.192在192為0,及255.255.255.0的情況下屬于C類地址的默認子網掩碼
按照子網掩碼的定義,子網掩碼1所對應的位為網絡號位,而0所對應的位為主機號位
主機號中被借走了兩位用來表示網絡號了,這就是子網號。二進制一位用0或1表示,那么占用了兩位就有2*2=4種表示,這里占用了2位,也就是說我們將原有的192.168.1.0這個網絡分成了四份,即4個子網)這四段的網絡號分別是00000000、01000000、10000000、11000000,現在我們將它們轉換成10進制就分別是0、64、128、192,現在把前24位加進來。

192.168.1.0  192.168.1.64  192.168.1.128 192.168.1.192 

至于后面的網絡號和廣播地址和之前的計算方法是一樣的。可用IP為

192.168.1.1  ------> 192.168.1.62192.168.1.65-------> 192.168.1.126  192.168.1.129------> 192.168.1.190192.168.1.193------> 192.168.1.254

IV、子網掩碼的確定?

學校新建5個機房,每個房間有30臺機器,如果給定一C類網絡地址:192.168.1.0,問如何將其劃分為5個子網,子網掩碼該如何設置?

子網劃分建議按以下步驟和實例計算子網掩碼:

  1. 將要劃分的子網數目轉換為2的m次方。如要分8個子網,8=23。
  2. 取上述要劃分子網數的2m的冪m。如2^3,即m=3。
  3. 將上一步確定的冪m按高序占用主機地址m位后轉換為十進制。
  4. 如m為3 則是11100000,轉換為十進制為224,即為最終確定的子網掩碼。
  5. 如果是C類網,則子網掩碼為255.255.255.224;如果是B類網,則子網掩碼為255.255.224.0;如果是A類網,則子網掩碼為255.224.0.0

2^3 =8(大于5的最小的2的整冪次數),向主機號中借走三位作為網絡號,而剩下的5位主機號,每個網段內可容納的主機數是25即32,可用主機需要再減2即為30,滿足每個房間30臺機器的題目要求。取23的冪,即3,即占用了主機號中的高3位即為11100000,轉換為十進制為224,所以該地址為C類地址的子網掩碼應該設置為255.255.255.224。各機房IP和子網掩碼配置如下(已經去掉廣播地址和主機地址):

機房號        子網掩碼                 IP地址范圍
機房1     255.255.255.224     192.168.1.1~192.168.1.30機房2     255.255.255.224     192.168.1.33~192.168.1.62機房3     255.255.255.224     192.168.1.65~192.168.1.94機房4     255.255.255.224     192.168.1.97~192.168.1.126機房5     255.255.255.224     192.168.1.129~192.168.1.158

一般在一個子網中,管理子網中IP的設備通常是路由器,目標網絡和子網掩碼及子網中的主機都會被路由器管理,目標網絡和子網掩碼都是在路由器中配置的。?

四、特殊的IP地址

現實中存在著一些特殊的IP地址,這些IP地址通常不用于一般的主機通信,而是用于特定的網絡任務和服務。以下是一些常見的特殊IP地址類型及其詳細解釋:

  • 私有IP地址(下文會講解):私有IP地址是在內部網絡中使用的IP地址,不可從公共Internet訪問。它們用于在局域網(LAN)內部進行通信。私有IP地址范圍通常包括以下三個區段:? ? ? ? ? ? 1.??10.0.0.010.255.255.255
    ? ? ? ? 2.? 172.16.0.0172.31.255.255
    ? ? ? ? 3.? 192.168.0.0 到 192.168.255.255
  • 回環IP地址:回環IP地址是127.0.0.1,通常表示本地主機或設備上的回環測試。當一個計算機發送數據到回環地址,數據會被發送到自己,用于測試和診斷網絡連接和服務。
  • 廣播地址:將IP地址中的主機地址全部設為1,就成為了廣播地址。廣播地址用于向同一網絡中的所有設備發送數據包。在IPv4中,廣播地址通常是特定網絡的最大地址
  • 將IP地址中的主機地址全部設為0,就成為了網絡號,代表這個局域網。

五、IP地址的數量限制

我們知道,IP地址(IPv4)是一個4字節32位的正整。那么一共只有?2的32次方 個IP地址,大概是43億左右。而TCP/IP協議規定,每個主機都需要有一個IP地址。現這意味著,一共只有43億臺主機能接入網絡么?

????????實際上,由于一些特殊的IP地址的存在,數量遠不足43億;另外IP地址并非是按照主機臺數來配置的,而是每一個網卡都需要配置一個或多個IP地址。那么一個家庭就會用掉很多IP地址。CIDR在一定程度上緩解了IP地址不夠用的問題(提高了利用率,減少了浪費,但是IP地址的絕對上限并沒有增加),仍然不是很夠用。這時候有三種方式來解決:

  1. 動態分配IP地址:只給接入網絡的設備分配IP地址。因此同一個MAC地址的設備,每次接入互聯網中,得到的IP地址不一定是相同的。在入網時分配地址,退網時回收地址。
  2. NAT技術:通常用于將私有網絡內部的多個設備共享單個公共IP地址的情況(下篇文章會講解)。
  3. IPv6: IPv6并不是IPv4的簡單升級版。這是互不相干的兩個協議,彼此并不兼容。IPv6用16字節128位來表 示一個IP地址,但是目前IPv6還沒有普及。??

六、私有IP地址與公網IP地址

1、私有IP地址

如果在一個組織內部組件局域網,IP地址只能用于局域網通信,而不是直接連接到Internet上,理論上使用任意的IP地址都是可以的,但是RFC 1918規定了用于組建局域網的私有IP地址如下:

  • 92.168.0.0 192.168.255.255
  • 172.16.0.0172.31.255.255
  • 10.0.0.0 10.255.255.255

它們可以在內部網絡中自由使用,但不能直接在互聯網上路由。這些地址主要用于家庭、企業或其他組織內部的局域網(LAN)或廣域網(WAN)。私有IP地址的主要優點是可以重復使用,從而緩解了IPv4地址空間有限的問題。

2、公網IP地址

公網IP地址是全球唯一的IP地址,可以直接在互聯網上路由。每個連接到互聯網的設備或服務都需要一個唯一的公網IP地址來進行數據傳輸。

公網IP地址由互聯網名稱與數字地址分配機構(ICANN)或地區性的互聯網注冊機構(RIR)管理和分配給各個ISP(互聯網服務提供商),再由ISP分配給其用戶。

  • 公網IP地址可以確保任何兩個設備之間能夠在互聯網上直接相互尋址。
  • 它們對于服務器來說特別重要,因為服務器需要擁有一個固定的公網IP地址以便客戶端能夠隨時訪問。

當我們需要使用Xshell連接到遠端服務器時,如下圖所示這個IP就是公網IP,這個IP標示了全網的、具有唯一性質的一臺服務器

當我們登錄我們自己的用戶賬號時,使用ifconfig命令查看,也會有一個IP地址,它就是一個私有IP,如下圖?

?當有多個用戶時,就會多個不同的私有IP。該私有IP地址只在該局域網內部有效,不能在互聯網上直接訪問。那私有IP怎么訪問公網呢?通常在局域網中使用網絡地址轉換(NAT)技術,將多個內部設備共享一個公網IP地址,以便它們可以訪問互聯網

七、路由器

路由器是一種用于連接多個網絡或網段的網絡設備,它能夠將數據從一個網絡轉發到另一個網絡。路由器在互聯網和許多私有網絡中扮演著至關重要的角色,主要負責尋址、最佳路徑選擇以及數據包的轉發。這是通過查找路由表來實現的,路由表中包含了不同網絡之間的關系,以確定最佳路徑。而且路由器本身天然的就會構建局域網(子網)。路由器的主要功能有:

  • 轉發數據
  • DHCP分配
  • 組建局域網(配置無線網絡)
  • NAT等

通過上面我們也知道了路由器也是一個主機,所以它也要有自己的IP地址,由于它承擔著數據包轉發的工作,所以它必然存在著多個接口,而路由器在其物理結構上是有著兩種主要類型的網絡接口: LAN口(局域網口)、WAN口(廣域網口), 它們在網絡連接和數據傳輸中扮演著不同的角色:

  • LAN口(局域網口)
    • 局域網接口:LAN口通常用于連接本地網絡內的設備,如計算機、手機、智能家居設備等。這些設備通常位于同一個物理位置,例如您的家庭或辦公室內,這是路由器對內的表現,即面對的是自己構建的子網。
    • 本地數據交換:LAN口用于在局域網內傳輸數據包,使本地設備能夠相互通信,共享文件、打印機、互聯網連接等。
  • WAN口(廣域網口):
    • 廣域網接口:WAN口通常用于連接到廣域網,如互聯網服務提供商(ISP)的網絡。這是您的局域網與外部互聯網之間的關鍵接口,這是對外的表現,即自己本身也是被人構建的一個子網內的一個主機。
    • 外部數據傳輸:WAN口負責將數據包從局域網傳輸到外部網絡(互聯網),并將來自外部網絡的數據包傳送回局域網。這是實現互聯網連接的關鍵。

WAN口,也可理解為自己所在的上級子網所分配的IP。說是廣域網口也不是很準確

所以說:

  • 一個路由器可以配置兩個IP地址,一個是WAN口IP,一個是LAN口IP(子網IP)
  • 路由器LAN口連接的主機都從屬于當前這個路由器的子網中
  • 不同的路由器,子網IP其實都是一樣的(通常都是192.168.1.1)。子網內的主機IP(私有IP)地址不能重復,但是子網之間的IP地址就可以重復了。
  • 每一個家用路由器,其實又作為運營商路由器的子網中的一個節點。這樣的運營商路由器可能會有很多級,最外層的運營商路由器,WAN口IP就是一個公網IP了。
  • 子網內的主機需要和外網進行通信時,路由器將IP首部中的IP地址進行替換(替換成WAN口IP),這樣逐級替換,最終數據包中的IP地址成為一個公網IP。這種技術稱為NAT(Network Address Translation,網絡地址轉換)。
  • 如果希望我們自己實現的服務器程序,能夠在公網上被訪問到,就需要把程序部署在一臺具有外網IP的服務器上。這樣的服務器可以在阿里云/騰訊云上進行購買。

因為有了私有IP,每個局域網內的私有IP是可以重復的,這樣就大大緩解了IP地址不足窘迫。通常在局域網中使用網絡地址轉換(NAT)技術(本質上就是不斷的將私有IP向上替換成公網IP進行通信),將多個內部設備共享一個公網IP地址,以便它們可以訪問互聯網。

八、路由

在網絡中將數據從一臺主機發往另一臺主機的過程,本質上就是數據在網絡中不斷路由(找路)的過程。數據路由是指將數據從源地址傳輸到目標地址的過程。在路由的過程成,我們最主要的就是解決下一跳(從這個路由器跳到下一個路由器)問題。

數據包的路由過程其實就是在問路的過程,就像唐僧西天取經一樣,有了源IP(長安城)和目的IP(西天大雷音寺),唐僧(數據包)每到一處找妖怪問路,就如同數據包每到一個路由器,如五指山妖怪、流沙河妖怪、火焰山妖怪等,這些路由器都有著自己的路由表,這些路由表中記錄了去往目的IP所要經過的下一站的地址

  • 例如:
    • 五指山妖怪說:"去西天?往西走火焰山,或者繞道車遲國。"
    • 火焰山妖怪說:"去西天?過牛魔王的地盤,或者借鐵扇公主的扇子。"

如果這個路由表中沒有記錄對應的目的IP(即該路由器也不知道路要怎么走),它會將數據包轉發給自己的默認網關,也就是默認的下一站地址,然后從這個默認的路由器再開始上述的查找,就像唐僧在火焰山問牛魔王去西天的路,牛魔王說不知道,但是牛魔王說你去哪哪哪找一個老頭,每次有人問我不知道的路的時候,我都會讓它們去找老頭。這個老頭就是牛魔王路由器的默認路由器。

有了上面的形象的例子,我們現在詳細解釋一下路由的過程:

假設我們有一個簡單的局域網(LAN)網絡,其中包含3臺計算機A、B和C,它們分別連接到一個路由器R。現在,計算機A想要向計算機C發送一些數據。

在網絡中路由(找路)。數據路由是指將數據從源地址傳輸到目標地址的過程。在路由的過程成,我們最主要的就是解決下一跳(從這個路由器跳到下一個路由器)問題。在計算機網絡中,數據通常以數據包的形式進行傳輸。下面我將舉例詳細解釋數據的路由過程。

? 假設我們有一個簡單的局域網(LAN)網絡,其中包含3臺計算機A、B和C,它們分別連接到一個路由器R。現在,計算機A想要向計算機C發送一些數據。

  1. 數據封裝:發送端的計算機A首先將要發送的數據封裝成一個數據包。數據包通常包含源IP地址(計算機A的IP地址)、目標IP地址(計算機C的IP地址)以及實際的數據內容。
  2. 路由表查找:計算機A將數據包發送到路由器R。在路由器R上有一個路由表,它包含了關于如何將數據包從一個網絡發送到另一個網絡的信息。路由器R使用目標IP地址來查找路由表,確定下一跳的地址。
  3. 下一跳選擇:路由器R根據路由表查找結果選擇下一跳的地址。如果目標IP地址與路由表中的某個目標網絡匹配,路由器R將選擇將數據包發送到該目標網絡所連接的下一個路由器或目標主機。如果沒有匹配,則進行默認的下一跳,即默認路由。
  4. 數據轉發:路由器R將數據包轉發到下一個目標。這個過程涉及到查找最佳路徑,根據網絡拓撲、鏈路狀態和其他因素來選擇下一跳。
  5. 路由器之間的傳遞:數據包通過一系列的路由器從源地址傳輸到目標地址。每個路由器都會重復執行上述步驟,查找最佳路徑并將數據包轉發到下一個目標。
  6. 數據到達:最終,數據包到達目標計算機C。目標計算機C接收數據包,并解析其中的數據內容。

可以看著下圖理解

1、路由表?

上述的路由過程重點是路由表的查詢。?每個路由器都有維護的自己一張路由表。在Linux下使用 route 命令可以查詢系統的路由表信息

  • Destination(目標地址):表示目標網絡/主機的IP地址。
  • Gateway(網關):表示下一跳的網關地址,即將數據包發送到目標網絡的下一跳路由器的IP地址。
  • Genmask(網絡掩碼):表示與目標地址相對應的網絡掩碼,用于確定網絡范圍。
  • 標志(Flags):表示該路由的狀態和特殊標志。
    ? ? ?U(Up):表示路由處于活動狀態,正在使用。此條目有效,可以用來禁用某些條目
    ? ? ?H(Host):表示目標為主機而非網絡。
    ? ? ?G(Gateway):表示此條目的下一跳地址是某個路由器的地址,沒有該標志的條目表示目的網絡地址是與本機接口直接相連的網絡,不必經過路由器轉發。
    ? ? ?D(Dynamic):表示路由是由動態路由協議學習得到的。
    ? ? ?M(Modified):表示路由已被手動修改。

  • Metric(優先級):表示路由的優先級,用于確定數據包選擇哪條路由發送。
  • RefCnt(參考數):表示對該路由的引用計數,記錄有多少個路由條目引用該項。
  • Use(使用數):表示該路由的使用計數,記錄自系統啟動以來有多少數據包通過該路由發送。
  • Iface(接口):表示將數據包發送到目標網絡所使用的網絡接口,如eth0、wlan0等,即數據包從該路由器哪一個接口發送出去。
  • 圖中default表示默認路由

八、總結

網絡層的IP協議主要負責從一臺主機到另一臺主機的數據傳輸提供決策。在網絡山轉發的是IP報文,但是實際上在網線上跑的是MAC幀,這就是屬于數據鏈路層的內容了。下篇文章就會對該部分進行詳解了。

感謝閱讀!

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

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

相關文章

ansible+docker+docker-compose快速部署4節點高可用minio集群

目錄 github項目地址 示例服務器列表 安裝前 修改變量文件group_vars/all.yml 修改ansible主機清單 修改setup.sh安裝腳本 用法演示 安裝后驗證 github項目地址 https://github.com/sulibao/ansible_minio_cluster.git 示例服務器列表 安裝前 修改變量文件group_var…

MySql主從相關概念

想象一下&#xff0c;你的業務飛速增長&#xff0c;用戶請求如潮水般涌來&#xff0c;突然數據庫主庫宕機&#xff0c;數據丟失&#xff0c;服務癱瘓——這簡直是開發者的噩夢&#xff01;MySQL主從復制就像一張安全網&#xff0c;通過主庫寫、從庫讀的協作模式&#xff0c;不僅…

機械臂只有位置信息是否可以進行手眼標定?

平常我在做手眼標定時&#xff0c;一般都是通過OpenCV的cv::calibrateHandEye函數進行求解&#xff0c;需要輸入多組不同的機械臂位姿。今天遇到了一款舵機機器人&#xff0c;只能獲取位置&#xff0c;得不到姿態信息&#xff0c;想著那就把姿態都設為0&#xff0c;結果求不出來…

華為數字芯片機考2025合集2已校正

單選 1. 題目內容 關于亞穩態的描述錯誤的是&#xff08; &#xff09;。 1. 解題步驟 1.1 理解亞穩態&#xff08;Metastability&#xff09;的核心特性 亞穩態是指觸發器無法在指定時間內穩定輸出有效邏輯電平&#xff08;0或1&#xff09;的狀態&#xff0c;其關鍵特點…

T-Box車載系統介紹及其應用

定義 T-Box汽車系統&#xff0c;全稱為Telematics - BOX&#xff0c;也常簡稱為車載T - BOX&#xff0c;是汽車智能系統及車聯網系統中的核心組成部分&#xff0c;是安裝在車輛上的一種高科技遠程信息處理器。 工作原理 T-Box的核心功能主要通過MPU和MCU實現。MPU負責應用程序功…

[redis進階一]redis的持久化(1)RDB篇章

目錄 一 認識持久化 (1)先看總結圖 (2)什么是持久化? (3)redis是怎么進行持久化的呢 (4)簡單分析一下RDB持久化和AOF持久化的不同 二 RDB持久化 (1)RDB的觸發機制 (2)RDB的bgsave執行流程 (3)RDB文件的處理 (4)RDB的優缺點 (5)RDB效果演示板書 三 溫習Linux文件…

uniapp日常總結--uniapp頁面跳轉方式

uniapp日常總結--uniapp頁面跳轉方式_uniapp 跳轉-CSDN博客

《汽車電器與電子技術》實驗報告

SRS系統結構原理與故障檢測診斷 車輛上為什么要配安全氣囊&#xff1f;——解析汽車被動安全的關鍵防線 一、安全氣囊的核心作用&#xff1a;應對高速碰撞的“救命緩沖墊” 車輛在高速碰撞時&#xff08;如正面碰撞、側面碰撞&#xff09;&#xff0c;人體會因慣性以極高速度…

ffmpeg編解碼器相關函數

文章目錄 &#x1f3af; 你需要理解的核心結構體&#xff1a;&#x1f4e6; 常用函數及使用順序&#xff08;以解碼為例&#xff09;1?? avcodec_find_decoder() / avcodec_find_encoder()2?? avcodec_alloc_context3()3?? avcodec_parameters_to_context()4?? avcodec…

尚硅谷2019版Java網絡編程筆記

第14章 網絡編程 網絡編程概述 什么是網絡編程&#xff1f; 網絡編程是通過網絡協議實現計算機之間的數據交換。Java提供了強大的網絡編程支持&#xff0c;隱藏了底層細節&#xff0c;開發者可以輕松實現網絡通信。 網絡編程的核心問題 如何定位網絡上的主機&#xff1a;通…

解決【遠程主機可能不符合 glibc 和 libstdc++ Vs code 服務器的先決條件】

可能是因為vscode不支持遠程操作系統的版本&#xff0c;要么升級操作系統要么回退vscode版本 vscode回退1.97版本下載地址&#xff1a; 1.97版本VSCODE

forms+windows添加激活水印

formswindows添加激活水印 多語言水印文本&#xff0c;根據系統語言自動切換。水印顯示在每個屏幕的右下角&#xff0c;位置動態調整。半透明灰色文字&#xff0c;微軟雅黑字體。窗口無邊框、置頂、透明背景&#xff0c;不干擾用戶操作。支持多顯示器。高DPI適配。 效果圖&am…

LeetCode --- 444 周賽

題目列表 3507. 移除最小數對使數組有序 I 3508. 設計路由器 3509. 最大化交錯和為 K 的子序列乘積 3510. 移除最小數對使數組有序 II 一、移除最小數對使數組有序 I & II 由于數組是給定的&#xff0c;所以本題的操作步驟是固定的&#xff0c;我們只要能快速模擬操作的過…

限流、降級、熔斷、隔離?

在微服務架構中&#xff0c;服務限流、降級、熔斷和隔離是保障系統高可用性的核心手段&#xff0c;但它們解決的問題和應用場景不同。以下是它們的區別、解決方案和實際案例的詳細說明&#xff1a; 一、服務限流&#xff08;Rate Limiting&#xff09; 定義&#xff1a;通過限…

Day22 -php開發01--留言板+知識點(超全局變量 文件包含 數據庫操作 第三方插件)

環境要求&#xff1a;php7.0.9 小皮 navicat phpstorm24.1 知識點&#xff1a;會寫&#xff08;留言板 留言板后臺&#xff09; 超全局變量 三方插件的使用 文件包含 1、開啟小皮并利用navicat新建一個數據庫 注意&#xff1a;本地的服務mysql關閉后 才可打開小皮。屬…

制造一只電子喵 (qwen2.5:0.5b 微調 LoRA 使用 llama-factory)

AI (神經網絡模型) 可以認為是計算機的一種新的 “編程” 方式. 為了充分利用計算機, 只學習傳統的編程 (編程語言/代碼) 是不夠的, 我們還要掌握 AI. 本文以 qwen2.5 和 llama-factory 舉栗, 介紹語言模型 (LLM) 的微調 (LoRA SFT). 為了方便上手, 此處選擇使用小模型 (qwen2…

LeetCode 解題思路 37(Hot 100)

解題思路&#xff1a; 初始化&#xff1a; 初始化最大舉行 max 和棧 stack。左右補零&#xff1a; 考慮柱子遞增的邊界情況&#xff0c; 初始化填充柱狀圖 newHeights。遍歷處理&#xff1a; 對于每一根遍歷到的柱子 newHeights[i]&#xff0c;若柱子高度小于棧口索引&#xf…

HTML — 過渡與動畫

HTML過渡與動畫是提升網頁交互體驗的核心技術&#xff0c;主要通過CSS實現動態效果。 過渡 CSS過渡&#xff08;Transition&#xff09;介紹 適用于元素屬性變化時的平滑漸變效果&#xff0c;如懸停變色、尺寸調整。通過定義transition-property&#xff08;過渡屬性&#xf…

跨站請求是什么?

介紹 跨站請求&#xff08;Cross-Site Request&#xff09;通常是指瀏覽器在訪問一個網站時&#xff0c;向另一個域名的網站發送請求的行為。這個概念在 Web 安全中非常重要&#xff0c;尤其是在涉及到“跨站請求偽造&#xff08;CSRF&#xff09;”和“跨域資源共享&#xff…

Web攻防—SSRF服務端請求偽造Gopher偽協議無回顯利用

前言 重學Top10的第二篇&#xff0c;希望各位大佬不要見笑。 SSRF原理 SSRF又叫服務端請求偽造&#xff0c;是一種由服務端發起的惡意請求&#xff0c;SSRF發生在應用程序允許攻擊者誘使服務器向任意域或資源發送未經授權的請求時。服務器充當代理&#xff0c;執行攻擊者構造…