tags: 計算機網絡, title: 計算機網絡第五篇【網絡層之二】算法
IP數據包的首部格式
一個 IP 數據報由首部和數據兩部分組成安全
- 首部的前一部分是固定長度,共 20 字節,是全部 IP 數據報必須具備的
- 版本——佔 4 位,指 IP 協議的版本。目前的 IP 協議版本號爲 4 (即 IPv4)
- 首部長度——佔 4 位,可表示的最大數值是 15 個單位(一個單位爲 4 字節),所以 IP 的首部長度的最大值是 60 字節
- 總長度——佔 16 位,指首部和數據之和的長度,單位爲字節,所以數據報的最大長度爲 65535 字節。總長度必須不超過最大傳送單元 MTU。
- 標誌(flag) ——佔 3 位,目前只有前兩位有意義。標誌字段的最低位是 MF (More Fragment)。MF 1 表示後面「還有分片」。MF 0 表示最後一個分片。標誌字段中間的一位是 DF (Don't Fragment) 。只有當 DF 0 時才容許分片。
- 片偏移—— 佔13 位,指出:較長的分組在分片後某片在原分組中的相對位置。片偏移以 8 個字節爲偏移單位。
- 生存時間——佔8 位,記爲 TTL (Time To Live),指示數據報在網絡中可經過的路由器數的最大值。
- 協議——佔8 位,指出此數據報攜帶的數據使用何種協議,以便目的主機的 IP 層將數據部分上交給那個處理過程
- 首部檢驗和——佔16 位,只檢驗數據報的首部,不檢驗數據部分。這裏不採用 CRC 檢驗碼而採用簡單的計算方法。
- 源地址和目的地址都各佔 4 字節
IP 數據報首部的可變部分,從 1 個字節到 40 個字節不等,取決於所選擇的項目。有了可變部分能夠增長 IP 數據報的功能,可是每每不經常使用網絡
IP數據包是可支持多種協議的:IP 數據報能夠封裝多種協議 PDU。性能
IP數據報分組轉發流程
- IP 數據報的首部中沒有地方能夠用來指明「下一跳路由器的 IP 地址」。
- 當路由器收到待轉發的數據報,不是將下一跳路由器的 IP 地址填入 IP 數據報,而是送交下層的網絡接口軟件。
- 網絡接口軟件使用 ARP 負責將下一跳路由器的 IP 地址轉換成硬件地址,並將此硬件地址放在鏈路層的 MAC 幀的首部,而後根據這個硬件地址找到下一跳路由器
**在路由表中,對每一條路由,最主要的是(目的網絡地址,下一跳地址) **測試
- IP 數據報最終必定能夠找到目的主機所在目的網絡上的路由器(可能要經過屢次的間接交付)。
- 只有到達最後一個路由器時,才試圖向目的主機進行直接交付。
雖然互聯網全部的分組轉發都是基於目的主機所在的網絡,但在大多數狀況下都容許有這樣的特例,即爲特定的目的主機指明一個路由。 採用特定主機路由可以使網絡管理人員能更方便地控制網絡和測試網絡,同時也可在須要考慮某種安全問題時採用這種特定主機路由。spa
默認路由:計算機網絡
路由器分組轉發算法:code
(1) 從數據報的首部提取目的主機的 IP 地址 D, 得出目的網絡地址爲 N。 (2) 若網絡 N 與此路由器直接相連,則把數據報直接交付目的主機 D;不然是間接交付,執行(3)。 (3) 若路由表中有目的地址爲 D 的特定主機路由,則把數據報傳送給路由表中所指明的下一跳路由器;不然,執行(4)。 (4) 若路由表中有到達網絡 N 的路由,則把數據報傳送給路由表指明的下一跳路由器;不然,執行(5)。 (5) 若路由表中有一個默認路由,則把數據報傳送給路由表中所指明的默認路由器;不然,執行(6)。 (6) 報告轉發分組出錯。blog
IP數據報片
過程:接口
- 一數據報的總長度爲 3820 字節,其數據部分的長度爲 3800 字節(使用固定首部),須要分片爲長度不超過 1420 字節的數據報片。
- 因固定首部長度爲 20 字節,所以每一個數據報片的數據部分長度不能超過 1400 字節。
- 因而分爲 3 個數據報片,其數據部分的長度分別爲 1400、1400 和 1000 字節。
- 原始數據報首部被複製爲各數據報片的首部,但必須修改有關字段的值。(片偏移字段)
片偏移是以8個字節爲單位來進行偏移的,所以要除以8
子網掩碼與子網劃分
子網劃分
子網劃分:從兩級IP變成三級IP
從 1985 年起在 IP 地址中又增長了一個「子網號字段」,**使兩級的 IP 地址變成爲三級的 IP 地址。這種作法叫做劃分子網 (subnetting) **。劃分子網已成爲互聯網的正式標準協議。
劃分子網純屬一個單位內部的事情。單位對外仍然表現爲沒有劃分子網的網絡(是對內的,外界並不知道)
從主機號借用若干個位做爲子網號 subnet-id,而主機號 host-id 也就相應減小了若干個位。
- 當沒有劃分子網時,IP 地址是兩級結構。
- 劃分子網後 IP 地址就變成了三級結構。
- 劃分子網只是把 IP 地址的主機號 host-id 這部分進行再劃分,而不改變 IP 地址原來的網絡號 net-id。
那麼自從使用了子網劃分之後,咱們的分組轉發就會變得簡單一些:經過目的子網號能過濾出很多的主機
- 凡是從其餘網絡發送給本單位某個主機的 IP 數據報,仍然是根據 IP 數據報的目的網絡號 net-id,先找到鏈接在本單位網絡上的路由器。
- 而後此路由器在收到 IP 數據報後,再按目的網絡號 net-id 和子網號 subnet-id 找到目的子網。
- 最後就將 IP 數據報直接交付目的主機。
下面根據兩張圖來進行對比:
未劃分子網:
已劃分子網:
可是要清楚的是一點:劃分爲子網後對外還是一個網絡(外界對咱們劃分子網是不知道的)
子網劃分的優勢
- 減小了 IP 地址的浪費
- 使網絡的組織更加靈活
- 更便於維護和管理
缺點:
原本B類地址的最多可鏈接數爲65534臺,可是在子網劃分了之後,咱們能夠明顯看到並無那麼多臺了。
子網掩碼
子網掩碼其實就是子網劃分以後纔有的,從一個 IP 數據報的首部並沒有法判斷源主機或目的主機所鏈接的網絡是否進行了子網劃分。
那麼要分辨該IP是否進行了子網劃分,就能夠經過子網掩碼來進行分辨了。
規則:
- 子網掩碼長度=32位
- 某位=1:IP地址中的對應位爲網絡號和子網號
- 某位=0:IP地址中的對應位爲主機號
(IP 地址) AND (子網掩碼) =網絡地址
使用子網劃分了之後,分組轉發
- 但在劃分子網的狀況下,從 IP 地址卻不能惟一地得出網絡地址來,這是由於網絡地址取決於那個網絡所採用的子網掩碼,但數據報的首部並無提供子網掩碼的信息。
- 所以分組轉發的算法也必須作相應的改動。
同一個IP地址,由不一樣的子網掩碼能夠得出相同的網絡地址,可是效果是不同的。(由於子網掩碼的不一樣,就表明了子網劃分的地址不一樣)
過程:
- (1) 從收到的分組的首部提取目的 IP 地址 D。
- (2) 先用各網絡的子網掩碼和 D 逐位相「與」,看是否和相應的網
- (3) 若路由表中有目的地址爲 D 的特定主機路由,則將分組傳送給
- (4) 對路由表中的每一行,將子網掩碼和 D 逐位相「與」。若結果與該行的目的網絡地址匹配,則將分組傳送給該行指明的下一跳路由器;不然,執行 (5)。
- (5) 若路由表中有一個默認路由,則將分組傳送給路由表中所指明
- (6) 報告轉發分組出錯。
無分類編址CIDR
無分類CIDR提出的背景:
劃分子網在必定程度上緩解了互聯網在發展中遇到的困難。然而在 1992 年互聯網仍然面臨三個必須儘早解決的問題:
- (1) B 類地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月所有分配完畢!
- (2) 互聯網主幹網上的路由表中的項目數急劇增加(從幾千個增加到幾萬個)。
- (3) 整個 IPv4 的地址空間最終將所有耗盡
CIDR幹了什麼:
- CIDR** 消除了傳統的 A 類、B 類和 C 類地址以及劃分子網的概念,於是能夠更加有效地分配 IPv4 的地址空間。**
- CIDR使用各類長度的「網絡前綴」(network-prefix)來代替分類地址中的網絡號和子網號。
- **IP 地址從三級編址(使用子網掩碼)又回到了兩級編址。 **
CIDR 使用「斜線記法」(slash notation),它又稱爲 CIDR 記法,即在 IP 地址面加上一個斜線「/」,而後寫上網絡前綴所佔的位數(這個數值對應於三級編址中子網掩碼中 1 的個數)。例如: 220.78.168.0/24
- CIDR 雖然不使用子網了,但仍然使用「掩碼」這一名詞(但不叫子網掩碼)。
- 對於 /20 地址塊,它的掩碼是 20 個連續的 1。 斜線記法中的數字就是掩碼中1的個數。
128.14.32.0/20 表示的地址塊共有 212 個地址**(由於斜線後面的 20 是網絡前綴的位數,因此這個地址的主機號是 12 位)。**
- 在不須要指出地址塊的起始地址時,也可將這樣的地址塊簡稱爲「/20 地址塊」。
- 128.14.32.0/20 地址塊的最小地址:128.14.32.0
- 128.14.32.0/20 地址塊的最大地址:128.14.47.255
- 全 0 和全 1 的主機號地址通常不使用。
路由聚合
- 一個 CIDR 地址塊能夠表示不少地址,這種地址的聚合常稱爲路由聚合,它使得路由表中的一個項目能夠表示不少個(例如上千個)原來傳統分類地址的路由。
- 路由聚合有利於減小路由器之間的路由選擇信息的交換,從而提升了整個互聯網的性能。
- 前綴長度不超過 23 位的 CIDR 地址塊都包含了多個 C 類地址。
- 這些 C 類地址合起來就構成了超網
- CIDR 的一個好處是:能夠更加有效地分配 IPv4 的地址空間,可根據客戶的須要分配適當大小的 CIDR 地址塊。
經過一個網絡號就能夠查找ISP了,很是方便。
CIDR 記法的其餘形式
- 點十進制中的0能夠省略
- 掩碼能夠根據CIDR的網絡前綴推斷出來
- 星號前面表示的是網絡前綴,星號後面表示的是主機號。主機號的0和1是任意的。
最長匹配
- 使用 CIDR 時,路由表中的每一個項目由「網絡前綴」和「下一跳地址」組成。在查找路由表時可能會獲得不止一個匹配結果
- 應當從匹配結果中選擇具備最長網絡前綴的路由:最長前綴匹配 (longest-prefix matching)。
- 網絡前綴越長,其地址塊就越小,於是路由就越具體 (more specific) 。
舉例子:
路由表中的兩個項目都匹配出目的地址:
可是咱們選擇最具體的那個:
若是您以爲這篇文章幫助到了您,能夠給做者一點鼓勵