4 網路層----IP協議
4.1 概述
因為網路層是整個網際網路的核心,因此應當讓網路層儘可能簡單。網路層向上只提供簡單靈活的、無連線的、盡最大努力互動的資料報服務。
使用 IP 協議,可以把異構的物理網路連線起來,使得在網路層看起來好像是一個統一的網路。
與 IP 協議配套使用的還有三個協議:
- 地址解析協議 ARP(Address Resolution Protocol)
- 網際控制報文協議 ICMP(Internet Control Message Protocol)
- 網際組管理協議 IGMP(Internet Group Management Protocol)
IP(IPv4、IPv6)相當於OSI參考模型的第三層----網路層。
網路層的主要作用是“實現終端節點之間的通訊”。這種終端結點之間的通訊也叫“點對點通訊”。
而其下一層資料鏈路層的作用是在網際網路同一種資料鏈路的結點之間進行包傳遞。而一旦跨越多種資料鏈路,就需要藉助網路層,網路層可以跨越不同的資料鏈路,即使在不同的鏈路上也能實現兩端結點之間的資料包傳輸。
網路層與資料鏈路層的關係:
資料鏈路層只負責某一個區間之間的通訊傳輸,而IP負責將資料包傳送給最終的目標地址。以火車票和行程表為例,資料鏈路層相當於車票,你要到達某個區域,可能需要乘坐很多交通工具,也就需要很多車票,到達一地後使用下一張車票進行換乘,也即是說這一張車票只能夠在某一限定區域內有效,此處的“區域內”就如同通訊網路上的資料鏈路。而這整個行程表就相當於是網路層,它告訴你該坐什麼車,該到哪裡換乘。
4.2 IPv4首部格式
-
版本 : 由4個位元構成,有 4(IPv4)和 6(IPv6)兩個值,這裡肯定就是4了;
-
首部長度 : 佔 4 位,因此最大值為 15。值為 1 表示的是 1 個 32 位字的長度,也就是 4 位元組。因為首部固定長度為 20 位元組,因此該值最小為 5。如果可選欄位的長度不是 4 位元組的整數倍,就用尾部的填充部分來填充。
-
區分服務 : 用表明服務質量,一般情況下不使用。
-
總長度 : 包括首部長度和資料部分長度。該欄位長16位元。因此IP包的最大長度是65535(=216
- 標識 : 由16位元組成,屬於分片重組。同一個分片的標識值相同,不同分片的標識值不同。在資料報長度過長從而發生分片的情況下,相同資料報的不同分片具有相同的識別符號。
- 標誌:由3位元構成,表示包被分片的相關資訊。
-
片偏移 : 由13位元構成,和識別符號一起,用於發生分片的情況,標識被分片的每一個分段相對於原始資料的位置。由於一共有佔據13位,因此一共可以表示8192(=213)個相對位置。片偏移的單位為 8 位元組。因此最大可表示原始資料8X8192=65536位元組的位置。
-
生存時間 :TTL(Time To Live),由8位元構成,它的存在是為了防止無法交付的資料報在網際網路中不斷兜圈子。以路由器跳數為單位,每經過一個路由器,TTL就會減少1,直到變成0則丟棄該包當 TTL 為 0 時就丟棄資料報。
-
協議 :由8位元構成,指出攜帶的資料應該上交給哪個協議進行處理,例如 ICMP、TCP、UDP 等。
-
首部檢驗和 :由16位元構成,也叫IP首部校驗和。該欄位只校驗資料報的首部,不校驗資料部分,因為資料報每經過一個路由器,都要重新計算檢驗和,因此檢驗和不包含資料部分可以減少計算的工作量。它主要用來確保IP資料包不被破壞。
- 源地址:由32位元構成,表示傳送端IP地址。
- 目標地址:由32位元構成,表示接收端IP地址。
- 可選項:長度可變,通常只在進行實驗或診斷時使用。該欄位主要包含的資訊有:安全級別,源路徑,路徑記錄和時間戳。
- 填充:也稱作填補物。在有可選項的情況下,首部長度可能不是32位元的整數倍。為此,通過向欄位填充0,調整為32位元的整數倍。
- 資料:存入資料。將IP上層的首部也作為資料進行處理。
IPv6為了減輕路由器的負擔,省略了首部校驗和欄位。因此路由器不再需要計算校驗和,從而也提高了包的轉發效率。
- 通訊量類:相當於IPv4的TOS(區分服務)欄位,也由8位元構成。
- 流標號:由20位元構成,準備用於服務質量(QoS:Quality Of Service)控制。
- 有效載荷長度:有效載荷是指包的資料部分,不包括首部。
- 下一個首部:相當於IPv4中的協議欄位。由8位元構成。通常表示IP的上一層協議是TCP或UDP。
- 跳數限制:由8位元構成。與IPv4的TTL意思相同。資料每經過一次路由就減1,減到0則丟棄資料。
4.4 IP地址
IP 地址的編址方式經歷了三個歷史階段:
- 分類
- 子網劃分
- 無分類
4.4.1 分類地址
由兩部分組成,網路號和主機號,其中不同分類具有不同的網路號長度,並且是固定的。網路號在資料鏈路的每個段配置不同的值。必須保證相互連線的每一段的地址不相重複,而相同段內相連的主機必須有相同的網路地址。
IP 地址 ::= {< 網路號 >, < 主機號 >}
IP包轉發到途中某個路由器時,只要一見網路號就能判斷出是否為該網段內的主機。
- A類地址:A類IP地址是首位以“0”開頭的地址。從第1位到底7位是它的網路標識,用十進位制標識,即0.0.0.0~127.0.0.0 是A類的網路地址。A類地址的後24位相當於主機標識。因此一個網段內可容納的主機地址上限是16777214(224 - 2)個。
- B類地址:B類IP地址的前兩位為“10”的地址。從第1位到第15位是它的網路標識。即128.0.0.0~191.255.0.0 是B類的網路地址。B類地址的後16位相當於主機標識。因此一個網段內可容納的的主機地址上限為65534(216 - 2)個。
- C類地址:B類IP地址的前兩位為“110”的地址。從第1位到第23位是它的網路標識。即192.0.0.0~223.255.255.0 是C類的網路地址。C類地址的後8位相當於主機標識。因此一個網段內可容納的的主機地址上限為254(28 - 2)個。
- D類地址:D類IP地址的前兩位為“1110”的地址。從第1位到第31位是它的網路標識。即224.0.0.0~139.255.255.255 是D類的網路地址。D類地址沒有主機標識。常被用於多播。
廣播地址:
廣播地址用於在同一個鏈路中相互連線的主機之間傳送資料包。將IP地址中的主機地址部分全部設成1,就成為了廣播地址。
廣播分為本地廣播和直接廣播兩種:
在本網路內的廣播叫做本地廣播。例如網路地址為192.168.0.0/24 的情況下,廣播地址是192.168.0.255 。因為這個廣播地址的IP包會被路由器遮蔽,所以不會到達192.168.0.0/24 以外的其他鏈路上。
在不同網路之間的廣播叫做直接廣播。例如網路地址是192.168.0.0/24的主機箱192.168.1.255/24 的目標地址傳送IP包。收到再這個包的路由器,將資料轉發給192.168.1.0/24 ,從而使得所有192.168.1.1~192.168.1.254 的主機都能收到這個包。
IP多播:
多播用於將包傳送給特定組內的所有主機。由於其直接使用IP協議,因此不存在可靠傳輸。
多播使用D類地址。因此如果前四位是“1110”,就可以認為是多播地址。而剩下的28位可以成為多播的組編號。即從224.0.0.0 到 239.255.255.255都是多播地址的可用範圍。
4.4.2 子網劃分
子網掩碼:一個IP地址的網路標識不再受限於該地址的類別,而是由子網掩碼細分出比類別地址更小粒度的網路。它對應IP地址網路標識部分的位全部為“1”,對應IP地址主機標識的部分則全部為“0”。
子網劃分就是通過在主機號欄位中拿一部分作為子網號,把兩級 IP 地址劃分為三級 IP 地址。
IP 地址 ::= {< 網路號 >, < 子網號 >, < 主機號 >}
要使用子網,必須配置子網掩碼。一個 B 類地址的預設子網掩碼為 255.255.0.0,如果 B 類地址的子網佔兩個位元,那麼子網掩碼為 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
注意,外部網路看不到子網的存在。
4.4.3 無分類
無分類編址 CIDR 消除了傳統 A 類、B 類和 C 類地址以及劃分子網的概念,使用網路字首和主機號來對 IP 地址進行編碼,網路字首的長度可以根據需要變化。
IP 地址 ::= {< 網路字首號 >, < 主機號 >}
CIDR 的記法上採用在 IP 地址後面加上網路字首長度的方法,例如 128.14.35.7/20 表示前 20 位為網路字首。
CIDR 的地址掩碼可以繼續稱為子網掩碼,子網掩碼首 1 長度為網路字首的長度。
一個 CIDR 地址塊中有很多地址,一個 CIDR 表示的網路就可以表示原來的很多個網路,並且在路由表中只需要一個路由就可以代替原來的多個路由,減少了路由表項的數量。把這種通過使用網路字首來減少路由表項的方式稱為路由聚合,也稱為 構成超網 。
在路由表中的專案由“網路字首”和“下一跳地址”組成,在查詢時可能會得到不止一個匹配結果,應當採用最長字首匹配來確定應該匹配哪一個。
4.5 路由控制
4.5.1 路由器的結構
路由器從功能上可以劃分為:路由選擇和分組轉發。
分組轉發結構由三個部分組成:交換結構、一組輸入埠和一組輸出埠。
4.5.2 IP地址與路由控制
IP地址的網路地址部分進行路由控制。路由控制表中記錄著網路地址與下一步應該傳送的路由器地址。在傳送IP包時,首先要確定IP包首部中的目標地址,再從路由控制表中找出與該地址具有相同網路地址的記錄,根據該記錄將IP包轉發給相應的下一個路由器。如果路由表中存在多條相同網路地址的記錄,那就選擇一個相同位數最多的網路地址。
預設路由:
如果一張路由表包含所有的網路及其子網資訊,將會造成無端的浪費。可以考慮使用預設路由,指路由表中的任何一個地址都能與之匹配的記錄。預設路由一般標記為0.0.0.0/0或default。
主機路由:
“IP地址/32”也被稱為主機路由。例如,192.168.153.15/32 就是一種主機路由。是指將整個IP地址的所有位都參與路由,而不是該地址的網路地址部分。
環回地址:
環回地址是在同一臺計算機上的程式之間進行網路通訊時使用的一個預設地址。計算機使用一個特殊的IP地址127.0.0.1 作為迴環地址,與該地址具有相同意義的是一個叫做localhost的主機名。使用這個IP或者主機名時,資料包不會流向網路。