警察叔叔順着網線是怎麼找到你的?計算機網絡(四)之網絡層未完待續

大家好,我是後來,我會分享我在學習和工作中遇到的點滴,希望有機會我的某篇文章能夠對你有所幫助,所有的文章都會在公衆號首發,歡迎大家關注我的公衆號" 後來X大數據 ",感謝你的支持與認可。

自律真的是太重要了,我才堅持了不到半個月就犯起了懶,一邊抱怨賬號不好運營,但反過來想自己也沒付出太多的努力。接下來開始繼續寫。

之前我們講了物理層和數據鏈路層,今天就到了網絡層。再來串一下這幾層的關係。
我們之前講的物理層和數據鏈路層,其實再TCP/IP協議的體系結構中屬於一層,網絡接口層,我們爲了更容易理解把它拆分開了。在這裏插入圖片描述
那麼今天我們開始講網絡層,在開始講之前,還是先引出一個問題:
我們有一句玩笑話,警察叔叔,這不是之前有同學在宿舍喫火鍋還得瑟發微博,還沒喫完消防員就出現了。
那麼問題來了,警察叔叔順着網線是怎麼找到你的?

其實這個問題我想把它轉換爲:通過一個IP地址怎麼找到具體的主機?
在這裏插入圖片描述
帶着疑問來看看我們今天的重要內容,哈哈。

  1. 虛擬互連網絡的概念。
  2. IP地址與物理地址的關係。
  3. 傳統的分類的IP地址(包括子網掩碼)和無分類域間路由選擇CIDR。
  4. 路由選擇協議的工作原理。(這個下一篇文章繼續講,這篇文章太長了)

網絡層是幹啥的?

我在學習每個知識點之前都會問自己這個問題,專業術語是這樣的

  1. 網絡層負責爲分組交換網上的不同主機提供通信服務。
  2. 網絡層要選擇合適的路由,使源主機運輸層所傳下來的分組,能夠通過網絡中的路由器找到目的主機

這裏面都提到一個重要的關鍵詞,分組,那麼什麼是分組?
在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組或包進行傳送。在TCP/IP體系中,由於網絡層使用IP協議,因此分組也叫做IP數據報,或簡稱爲數據報。所以我們也把“分組”和“數據報”作爲同義詞使用。

網絡層是可靠的麼?

我們之前在數據鏈路層的時候,就有個問題,說我發送的0和1有丟失怎麼辦?
當時我們通過CRC校驗,只解決了發送數據的完整性,但對於亂序以及重複問題並沒有解決。那麼數據到網絡層的時候已經是一個一個的分組了,它怎麼傳輸呢?要不要保證可靠性?

關於這個問題,其實曾經引起了長期的爭論,他們爭論的實質是:在計算機通信中,可靠交付應當由誰來負責?是網絡還是端系統?

這個問題到最後採用了後者

網絡層向上只提供簡單靈活的、無連接的、盡最大努力交付的數據報服務。

這也就意味着,**網絡在發送分組時不需要先建立連接。**每一個分組(也就是IP數據報)獨立發送,與其前後的分組無關(不進行編號)。**網絡層不提供服務質量的承諾。**也就是說,所傳送的分組可能出錯、丟失、重複和失序(即不按序到達終點),當然也不保證分組交付的時限。由於傳輸網絡不提供端到端的可靠傳輸服務,這就使網絡中的路由器比較簡單,且價格低廉(與電信網的交換機相比較)。

如果主機(即端系統)中的進程之間的通信需要是可靠的:那麼就由網絡的主機中的運輸層負責(包括差錯處理、流量控制等)

採用這種設計思路的好處是:網絡造價大大降低,運行方式靈活,能夠適應多種應用。互聯網能夠發展到今日的規模,充分證明了當初採用這種設計思路的正確性。

好了,上面這個問題只是告訴你爲啥網絡層提供的是不可靠的服務,其實知道結論就可以了。

網際協議IP

網際協議IP是TCP/IP體系中兩個最主要的協議之一,也是最重要的互聯網標準協議之一。
與P協議配套使用的還有三個協議:
地址解析協議ARP
網際控制報文協議ICMP(下篇文章再講)
網際組管理協議IGMP(下篇文章再講)

爲什麼說互聯網是虛擬的?

在計算機網絡發展初期,許多廠家都生產出具有自己獨特體系結構的計算機網絡。這些計算機網絡就像一個個孤島一樣,它們是不能互相通信的。那麼這些網絡怎麼通信就成了問題。

但IP協議成功地解決了這個難題。不管你使用的具體網絡採用什麼樣的硬件結構,但只要你的網絡使用IP協議,並給連接在網絡上的主機分配了合法的IP地址,那麼連接到這種虛擬的IP互連網上的任何一對計算機都可以很方便地進行通信。

虛擬的IP地址

這裏提到一個重要的概念,就是虛擬互聯網,爲什麼是虛擬的呢?,IP地址爲什麼也被稱爲“虛擬地址”?

這是因爲IP地址是靠軟件來維持的而不是靠硬件地址
雖然許多大小不同的物理網絡是相互連接起來了,但這些網絡都有各自不同的物理層。例如,有的是無線網絡,有的是光纖網絡,並且數據的傳送速率也可能相差很大。這些網絡的數據鏈路層協議也是不相同的。如果我們從網絡層來看這個龐大的異構網絡,那麼就好像是構成了一個很大的、統一的IP網絡。但是虛擬網絡的地址也是虛擬的,因此IP地址又稱爲“虛擬地址”。實在的地址就是各網絡和各主機的物理地址

可以打一個比方。基本上全世界每個國家的居民都有自己的唯一證件,但是格式肯定每個國家不一樣,那麼要讓大家能夠互相聯繫,只需要全世界的人都使用微信就可以了,每個人都有一個微信號(假設不需要實名認證)。但是這個微信號能被你使用的同時,別人也可以使用。

那麼在微信後臺系統能看到,這70多億個微信號就構成了一個虛擬的網絡。真正存在的是每個人的唯一證件(中國是身份證)

在這個例子中,唯一證件=硬件地址,微信號=IP虛擬地址

硬件地址

通過上面的例子,我們也知道了硬件地址是真實存在,代表主機的地址,那就是MAC地址,硬件地址已經固化在了網卡的ROM中,現在在適配器中。全球唯一
在這裏插入圖片描述

  1. 在網絡層傳輸時只能看到IP地址,看不到MAC地址。
  2. 在鏈路層,只能看到MAC幀
  3. 路由器只根據目的站的IP地址的網絡號進行路由選擇
    也就是說IP層抽象的互聯網直接屏蔽了下面比較複雜的細節,就比如我們日常使用的windows電腦,我們都是用鼠標點點點,但其實計算機是要執行很多條指令的。

看到這裏,還有2個問題?

  1. 主機或路由器怎樣知道應當在MAC幀的首部填入什麼樣的硬件地址?
  2. 路由器中的路由表是怎樣得出的?

這兩個問題,我們稍後講。

拋開這2個問題,理解了IP地址與硬件地址的區別後,我們就需要考慮在這樣的虛擬網路上怎麼尋址?

IP地址的發展與分類

我們上面說了IP地址是虛擬的,那麼IP地址的格式是啥樣?

IP地址的A、B、C類劃分

早在1981年的時候,關於IP地址怎麼編址就決定了,那就是
IP地址 = {<網絡號>,<主機號>}

那個時候的人還沒預料到互聯網發展會這麼快,所以當時用了32位的標識符,來給全世界所有聯網的主機分配地址。

32位一共纔有多少個可能?
2的32次方,因此地址空間中只有4,294,967,296(2的32次方)個地址。 不過,一些地址是爲特殊用途所保留的,如專用網絡(約1800萬個地址)和多播地址(約2.7億個地址)。所以還剩下40億多個,聽起來是不少,但早在2011年2月,IPv4的地址就已經耗盡了

我們先來說當時的IP地址的分類吧;
在這裏插入圖片描述
大家也注意到了在圖4-5種,網絡號字段有幾位是固定的,這其實是類別位,A、B、C類分別位1,2,3位,固定爲0,10,110

當時想的是IP地址劃分成A、B、C 3類,可以滿足不同用戶的要求,因爲可能有的大公司,需要的IP地址多,就申請到網絡號,實際上是獲得了具有網絡號的一塊地址,具體的主機號是單位自己分配的,只要做到在自己單位沒有重複的主機號就可以了。
在這裏插入圖片描述
這麼說的話,一共也沒多少個網絡號啊,再說A類地址,網絡號只佔了8位,主機號24位,可以分配2的24次方-2(16777214)個IP,哪個公司能用的了這麼多,純屬浪費。

具體爲什麼有的減2,有的減1呢?

A類

在IP地址中,比如A類的網絡號一共8位,類別位佔了1位,爲0

  1. 而IP地址中的全0表示“本網絡”,是一個保留地址。
  2. 127是一個環回測試時用的地址。

所以網絡號裏,0和127不能分配,那麼可分配的網絡號爲2的7次方-2,就是126。而主機號也是2的24次方-2,是因爲

  1. 全0的主機號字段表示該IP地址是“本主機”所連接到的單個網絡地址(例如,一主機的IP地址爲5.6.7.8,則該主機所在的網絡地址就是5.0.0.0)
  2. 全1的主機號字段表示該網絡上的所有主機

IP地址一共有2的32次,整個A類地址空間就有2的31個地址,佔了整個IP地址空間的50%。

B類

A類的網絡號一共16位,類別位佔了2位,爲(10)已經固定了,只剩下14位可以進行分配。

因爲網絡號字段後面的14位無論怎樣取值也不可能出現使整個2字節的網絡號字段成爲全0或全1,因此這裏不存在網絡總數減2的問題。

B類網絡地址128.0.0.0是不指派的,而可以指派的B類最小網絡地址是128.1.0.0。因此B類
地址可指派的網絡數爲2的14次-1,即16383。

B類地址的每一個網絡上的最大主機數是2的16次方-2,即65534。這裏需要減2是因爲要扣除全0和全1的主機號

整個B類地址空間共約有個地址,佔整個IP地址空間的25%。

C類

C類的網絡號一共24位,類別位佔了3位,爲(110)已經固定了,只剩下21位可以進行分配。

C類網絡地址1920.0.0也是不指派的,可以指派的C類最小網絡地址是192.0.1.0,因此C類地址可指派的網絡總數是2的21次-1,即2097151。

每一個C類地址的最大主機數是2的8次-2,要扣除全0和全1的主機號。即254。

整個C類地址空間共約有2的29次個地址,佔整個IP地址的12.5%。

知道了A、B、C類地址的劃分規則,那其實按照這個邏輯,就有以下結論:

  1. IP地址管理機構當時只需要分配網絡號就可以了,主機號單位自己分
  2. 路由器只需要根據目的主機所連接的網絡號來轉發分組,減小了路由表所佔的存儲空間以及查找路由表的時間
  3. 一個網絡指的是相同網絡號的主機的集合。所以用轉發器或網橋連接起來的若干個局域網仍爲一個網絡。而不同網絡號的局域網必須使用路由器進行互聯

地址解析協議ARP

我們上面拋了2個問題

  1. 主機或路由器怎樣知道應當在MAC幀的首部填入什麼樣的硬件地址?
  2. 路由器中的路由表是怎樣得出的?

我們這裏的ARP協議就是解決這個問題的。
在這裏插入圖片描述
由於是IP協議使用了ARP協議,因此通常就把ARP協議劃歸網絡層。但ARP協議的用途是爲了從網絡層使用的IP地址,解析出在數據鏈路層使用的硬件地址。
它怎麼做到的呢?
我們知道IP地址32位,而MAC地址48位(上篇數據鏈路層文章講過),而且主機的IP地址可能會變,同時主機換適配器,MAC地址也會變,所以這個映射關係比較複雜。

每一臺主機都設有一個ARP高速緩存( ARP cache),裏面有本局域網上的各主機和路由器的IP地址到硬件地址的映射表,這些都是該主機目前知道的一些地址。
那麼主機怎樣知道這些地址呢?

  1. 主機A廣播發送ARP請求分組
  2. 本局域網上的所有主機上運行的ARP進程都會收到這個ARP請求分組
  3. 主機B的IP地址與目前ARP請求分組中查詢的IP地址一致,就會手下這個ARP請求分組,並向主機A發送ARP響應分組,同時在這個ARP響應分組中寫入自己的硬件地址
  4. 其他主機不會關心這個響應分組,因爲響應分組是單播,請求分組是廣播。於是主機A收到了主機B的ARP響應分組,就在它的ARP高速緩存中寫入主機B的IP地址到硬件地址的映射。

ARP只解決了在同一個局域網上的主機或路由器的IP地址和硬件地址的映射問題,那麼假如他們不在同一個局域網怎麼辦呢?
在這裏插入圖片描述
我們剛剛分析的ARP協議只解決了H1——H2的映射,假如H1——H3怎麼辦?
路由器因爲連接2個網絡,所以它有2個硬件地址。

  1. H1先在網1發送ARP請求分組,找到網1的路由器R1的硬件地址
  2. R1在網2發送ARP請求分組,找到了目的主機H3的硬件地址。

所以無非就是多次使用ARP協議就能實現,路由器起了很大的作用,詳細如下圖。
在這裏插入圖片描述

IP層路由器怎麼轉發分組的?

我們一直在說,路由器把不同的網絡連接在了一起,比如上圖的H1——H3

既然H1要發消息給H3,那麼H1主機肯定知道H3主機的IP地址,於是到路由器後,通過匹配,是直接交付還是繼續找下一個路由器。

結合上面的ARP來說一下具體的流程

  1. 路由器收到一個待轉發的數據報,從數據報的首部提取目的主機的IP地址D,得出目的網絡地址爲N。
  2. 若N就是與此路由器直接相連的某個網絡地址,則進行直接交付,不需要再經過其他的路由器,直接把數據報交付目的主機(這裏包括把目的主機地址D轉換爲具體的硬件地址,把數據報封裝爲MAC幀,再發送此幀);否則就是間接交付,執行(3)。
  3. 若路由表中有目的地址爲D的特定主機路由,送交數據鏈路層的網絡接口軟件。網絡接口軟件負責把下跳路由器的IP地址轉換成硬件地址(必須使用ARP),並將此硬件地址放在鏈路層的MAC幀的首部,然後根據這個硬件地址找到下一跳路由器。否則,執行4。
  4. 若路由表中有到達網絡N的路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行5。
  5. 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行6。
  6. 報告轉發分組出錯。
    在這裏插入圖片描述

IP數據報格式

大家看到這個詞是不是感覺又熟悉又陌生。
我們之前也看到過這張圖
在這裏插入圖片描述
也就是數據鏈路層向網絡層傳輸的時候,網絡層這塊就把MAC幀包裝成了IP數據報。那麼它的格式是什麼樣的?不想了解的大家可以直接跳過。
在這裏插入圖片描述
這張圖上面那些都是首部的數據,一共有14種。
我大概簡單介紹一下:

  1. 版本:IPv4還是IPv6
  2. 首部長度:最大是15,但它的單位是4字節,也就是最大60字節,最常用的首部長度是20字節,(首部長度位0101)
  3. 區分服務:一般情況不使用這個字段
  4. 總長度:首部和數據之和的長度,單位字節,最大長度爲2的16次-1=65535字節,實際上以太網規定最大1500字節,否則分片
  5. 標識:切片後,相同標識字段的值使分片後的各個數據報片最後能重裝起來
  6. 標誌:雖然佔3位,但只有後2位有意義,中間位DF,當DF=0允許分片,最低位MF,MF=1,表示後面還有分片的數據報,MF=0表示這個最後一片。
  7. 片偏移:分片後,表示該片在原分組中的相對位置。
  8. 生存時間:TTL,單位跳數,指明數據報在互聯網最多可以經過多少個路由器。初始值爲1,意味着只能在該局域網中傳輸。
  9. 協議:指出此數據報攜帶的數據使用的使什麼協議,方便網絡層交接在這裏插入圖片描述
  10. 首部檢驗和:只檢驗數據報的首部,不包括數據部分。
  11. 源地址
  12. 目的地址
  13. 可選字段:用來支持排錯、測量以及安全等措施,很少使用
  14. 填充:可選字段中有的選項需要多個字節,最後選項拼接後中間不能有分隔符,所以使用全0的填充字段補齊爲4字節的整數倍。

劃分子網

後來發現那會兒的IP地址的設計確實不合理。

比如說某公司分到了一個B類網絡,它一共有65534個IP,先不說這個公司能不能用完,這麼多主機處在同一個廣播域進行通信,這個網絡效率能高麼?

那麼就需要對網絡進行劃分,所以,1985年起在IP地址種又增加了一個“子網號字段”,使兩級IP地址變爲三級IP地址,這種做法叫做劃分子網。
IP地址={<網絡號>,<子網號>,<主機號>}

這個思路就是:

  1. 把一個比較大的網絡劃分爲若干個子網。但對外仍然是一個網絡
  2. 從主機號借用若干位作爲子網號,這樣的話主機號也就相應的少了幾位。
  3. 外網發給某主機的IP數據報,還是先根據網絡號找到連接在本公司網絡上的路由器,然後再按照目的網絡的網絡號和子網號找到目的子網,再把IP數據報交付目的主機。

相當於中間多了一層。舉例:
本來一個大學2萬人是一起管理的,學號也從00001——20000,每次找人都再廣播喊一下,但現在分了班,以班級爲單位,現在其他學校的學生來找人,門衛先看一下要找的這個學號是不是咱們學校的,然後通過班級號找到這個班主任,班主任再通過喊話的方式找到人。這樣很明顯提高了效率。但是對外,所有的學生還是一個學校的。

但是從IP數據報的首部是沒辦法看出源主機或者目的主機所連接的網絡是否進行了子網劃分,所以就有了子網掩碼,來方便的找到子網。

在B類網中,主機號是16位,而子網號是要佔用主機號的位數,所以就有了多種劃分子網的方法。
在這裏插入圖片描述在這裏插入圖片描述
能發現子網號的位數沒有,0,1,15,16這4種情況,是因爲這沒有意義。
而且能發現子網號佔用的位數越少,每一個子網上可以連接的主機數就越多,反之亦然。所以劃分子網增加了靈活性,但卻減少了能夠連接在網絡上的主機總數。上面表中任意一行的最後兩項的乘積一定小於65534。

下面舉例子來說明怎麼求子網地址:
在這裏插入圖片描述
那麼如果不劃分子網,還要使用子網掩碼麼?

那當然了,這樣更便於查找路由表。互聯網的標準規定,所有的網絡都必須使用子網掩碼,同時在路由器的路由表中也必須有子網掩碼這一欄。
如果一個網絡不劃分子網,那麼該網絡的子網就使用默認子網掩碼。
A類地址的默認子網掩碼:255.0.0.0
B類地址的默認子網掩碼:255.255.0.0
C類地址的默認子網掩碼:255.255.255.0

使用子網時分組轉發

我們在之前提到的分組轉發時基於A、B、C3類的,直接根據網絡號就可以了,那現在還需要考慮子網號。

  1. 從收到的數據報的首部提取目的IP地址D
  2. 先判斷是否爲直接交付。對路由器直接相連的網絡逐個進行檢查:用各網絡的子網掩碼和D逐位相“與”(AND操作),看結果是否和相應的網絡地址匹配。若匹配,則把分組進行直接交付(當然還需要把D轉換成物理地址,把數據報封裝成幀發送出去),轉發任務結束。否則就是間接交付,執行(3)。
  3. 若路由表中有目的地址爲D的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器;否則,執行(4)
  4. 對路由表中的每一行(目的網絡地址,子網掩碼,下一跳地址),用其中的子網掩碼和D逐位相“與”(AND操作),其結果爲N。若N與該行的目的網絡地址匹配,則把數據報傳送給該行指明的下一跳路由器;否則,執行(5)。
  5. 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;否則,執行(6)。
  6. 報告轉發分組出錯。

構造超網

其實到目前爲止,子網只解決了內部網絡通信的暢通,減輕了路由器的壓力,但是IPv4地址逐漸枯竭還是沒解決。

所以在1987年的時候,就研究出了無分類域間路由選擇CIDR。

  1. 消除了傳統的A類、B類、C類地址以及劃分子網的概念,所以能更加有效的分配IP地址。
    IP地址={<網絡前綴>,<主機號>}
    也稱爲“斜線記法”,在IP地址後面加斜線,寫網絡前綴所佔的位數
  2. 把網絡前綴相同的連續IP地址組成一個“CIDR地址塊”

這個具體怎麼玩:

比如某個服務商擁有地址塊206.0.64.0/18,這相當於有16個C類網絡,具體咋算的,你想一想,這個IP32位,前18位不能動,後面的14位都可以分配,相當於2的14次方個IP地址,C類地址只有最後8位可以分配,相當於2的8次,所以這個地址塊=64個C類網絡。

假如某大學要800個IP地址,那麼這個服務商就可以給它分配一個地址塊206.0.68.0/22,這包括了2的10次方個地址,也就是1024個地址。

而且分給學校後,學校還可以繼續劃分給各個系,各個系還可以繼續劃分給各個專業。非常靈活。
在這裏插入圖片描述
每一個CIDR地址塊中衆多的地址就構成了超網。網絡前綴越短,它包含的地址塊就越多。

CIDR使用的地址掩碼也繼續稱爲子網掩碼,比如:/20地址塊的地址掩碼是:11111111 11111111 11110000 00000000(20個連續的1)

但是使用超網那怎麼轉發分組呢?

對所有可能的前綴進行循環查找,假如給定一個目的地址D,對每一個可能的網絡前綴長度M,路由器從D中提取前M個位當爲網絡前綴,然後去路由表中查找網絡前綴,所找到的最長匹配就對應於要查找的路由。

這不就是二叉線索麼
在這裏插入圖片描述
在路由表中,每個IP地址都有一個唯一前綴,這樣的話當搜索到一個葉節點時,把尋找匹配的目的地址和該葉節點的子網掩碼進行 與 運算,看看結果是否與對應的網絡前綴想匹配,如果匹配就按照下一條的接口轉發該分組。否則就丟棄該分組。

最後回到文章開頭的問題,警察叔叔順着網線怎麼找到你的?

首先我們上網的主機都有一個虛擬的IP地址,那麼我們知道所有的IP地址都是ISP賣給你的,那麼在ISP那塊的資料裏是不是就有你的詳細地址呢?
所以網警完全可以通過找具體的服務商定位到具體的地址啊。

但我們個人就幾乎做不到從IP定位到詳細地址,只能定位到一個大致的區域,這個可以把自己的IP放到百度試試看。

所以我們把這個問題轉換爲,怎麼通過IP地址找到具體的主機進行通信的?
我們在上面學習了IP爲什麼是虛擬的,通過地址解析協議ARP來做到一個IP地址與硬件地址的映射,如果是跨網絡的,那就需要通過路由器進行轉發分組,也多次使用ARP協議。(具體的請返回文中學習ARP協議)

每一種IP地址的劃分規則對應的分組規則不同,從最早簡單劃分的A、B、C類網,升級爲劃分子網,到現在在用的超網,但原理都是一樣的。

其實這段時間通過學習 計算機網絡,解決了心裏不少的疑問,我寫的文章中很多都直接引用了《計算機網絡(第7版)謝希仁》書中的內容,寫的文章比較長,但是儘可能的把重點加黑,希望能給大家瞭解計算機網絡一點幫助。

網絡層的知識還沒講完,下篇繼續。

關於計算機網絡的知識還是非常多的,我學到的也只是其中一點皮毛而已,還是那句話,”在技術領域,我們都要有一顆謙卑的心。“

掃碼關注”後來X大數據“,回覆【電子書】,領取【超多本pdf java及大數據 電子書】

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章