1.概述
網(wǎng)絡(luò)層向上只提供簡(jiǎn)單靈活的、無(wú)連接的、盡最大努力交互的數(shù)據(jù)報(bào)服務(wù)。網(wǎng)絡(luò)層的作用:將分組(數(shù)據(jù)分割成小塊)從一臺(tái)主機(jī)移動(dòng)到另一臺(tái)主機(jī),從而提供了主機(jī)到主機(jī)的通信服務(wù)、各種形式的進(jìn)程到進(jìn)程之間的通信。通過(guò)IP 協(xié)議,可以把異構(gòu)的物理網(wǎng)絡(luò)連接起來(lái),使得在網(wǎng)絡(luò)層看起來(lái)好像是一個(gè)統(tǒng)一的網(wǎng)絡(luò)。
?IP 協(xié)議配套使用的有三個(gè)協(xié)議:
(1)地址解析協(xié)議 ARP(Address Resolution Protocol)
(2)網(wǎng)際控制報(bào)文協(xié)議 ICMP(Internet Control Message Protocol)
(3)網(wǎng)際組管理協(xié)議 IGMP(Internet Group Management Protocol)
2. IP 數(shù)據(jù)報(bào)格式
(1)版本
?有 4(IPv4)和 6(IPv6)兩個(gè)值。
(2)首部長(zhǎng)度
占 4 位,因此最大值為 15,最小值為5(固定部分長(zhǎng)度為 20 字節(jié))。值為 1 表示的是 1 個(gè) 32 位字即 4 字節(jié),所以首部長(zhǎng)度的取值是5*4個(gè)字節(jié)~15*4個(gè)字節(jié)。如果可選字段的長(zhǎng)度不是 4 字節(jié)的整數(shù)倍,就用尾部的填充部分來(lái)填充。
(3)區(qū)分服務(wù)
用來(lái)獲得更好的服務(wù),一般情況下不使用。
(4)總長(zhǎng)度
包括首部長(zhǎng)度和數(shù)據(jù)部分長(zhǎng)度。
(5)標(biāo)識(shí)
在數(shù)據(jù)報(bào)長(zhǎng)度過(guò)長(zhǎng)從而發(fā)生分片的情況下,相同數(shù)據(jù)報(bào)的不同分片具有相同的標(biāo)識(shí)符。
(6)片偏移
和標(biāo)識(shí)符一起,用于發(fā)生分片的情況。片偏移的單位為 8 字節(jié)
(7)生存時(shí)間
TTL,它的存在是為了防止無(wú)法交付的數(shù)據(jù)報(bào)在互聯(lián)網(wǎng)中不斷兜圈子。以路由器跳數(shù)為單位,當(dāng) TTL 為 0 時(shí)就丟棄數(shù)據(jù)報(bào)。
(8)協(xié)議
指出攜帶的數(shù)據(jù)應(yīng)該上交給哪個(gè)協(xié)議進(jìn)行處理,例如 ICMP、TCP、UDP 等。
(9)首部檢驗(yàn)和
因?yàn)閿?shù)據(jù)報(bào)每經(jīng)過(guò)一個(gè)路由器,都要重新計(jì)算檢驗(yàn)和,因此檢驗(yàn)和不包含數(shù)據(jù)部分可以減少計(jì)算的工作量。
3. IP 地址編址方式
3.1 分類(lèi)
IP地址是有兩部分組成:網(wǎng)絡(luò)號(hào)和主機(jī)號(hào),其中不同分類(lèi)具有不同的網(wǎng)絡(luò)號(hào)長(zhǎng)度,并且是固定的。
IP 地址 ::= {< 網(wǎng)絡(luò)號(hào) >, < 主機(jī)號(hào) >}
下面以IPv4為例:
3.1.1 IP地址的格式
常見(jiàn)的類(lèi)似192.168.1.2這種格式的就是IPv4。IPv4的IP地址由4段組成,段之間用點(diǎn)隔開(kāi),每段由8位二進(jìn)制數(shù)組成,所以其范圍用二進(jìn)制表示就是00000000-11111111,用十進(jìn)制表示就是0-255之間。所以IP地址由4段共32位組成,其二進(jìn)制范圍是00000000.00000000.00000000.00000000—11111111.11111111.11111111.11111111,十進(jìn)制表示就是0.0.0.0–255.255.255.255,一共是(4294967296,近43億)個(gè)IP地址。
3.1.2 IP地址分類(lèi)
(1)A類(lèi)IP地址

(2)B類(lèi)IP地址
B類(lèi)IP地址的前16位是網(wǎng)絡(luò)地址,網(wǎng)絡(luò)地址的前兩位必須是10,所以B類(lèi)網(wǎng)絡(luò)地址共有2^14=16384個(gè)。后16位是主機(jī)地址,但全0和全1的主機(jī)地址被保留,所以每個(gè)B類(lèi)網(wǎng)絡(luò)可以容納2^16-2=65534臺(tái)主機(jī)。B類(lèi)IP地址的范圍是128.0.0.1-191.255.255.254(二進(jìn)制為10000000.00000000.00000000.00000001 - 10111111.11111111.11111111.11111110)。B類(lèi)IP地址一般用于中型網(wǎng)絡(luò)。

(3)C類(lèi)IP地址
C類(lèi)IP地址的前24位是網(wǎng)絡(luò)地址,網(wǎng)絡(luò)地址的前兩位必須是110,所以C類(lèi)網(wǎng)絡(luò)地址共有2^21=2097152個(gè)。后8位是主機(jī)地址,但全0和全1的主機(jī)地址被保留,所以每個(gè)C類(lèi)網(wǎng)絡(luò)可以容納2^8-2= 254臺(tái)主機(jī)。C類(lèi)IP地址的范圍是192.0.0.1-233.255.255.254(二進(jìn)制為11000000.00000000.00000000.00000001 - 11011111.11111111.11111111.11111110)。C類(lèi)IP地址一般用于小型網(wǎng)絡(luò)。

3.2 子網(wǎng)劃分
通過(guò)在主機(jī)號(hào)中拿一部分作為子網(wǎng)號(hào),把兩級(jí) IP 地址劃分為三級(jí) IP 地址。
IP 地址 ::= {< 網(wǎng)絡(luò)號(hào) >, < 子網(wǎng)號(hào) >, < 主機(jī)號(hào) >}
要使用子網(wǎng),必須配置子網(wǎng)掩碼。一個(gè) B 類(lèi)地址的默認(rèn)子網(wǎng)掩碼為 255.255.0.0,如果 B 類(lèi)地址的子網(wǎng)占兩個(gè)比特,那么子網(wǎng)掩碼為 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
注意:外部網(wǎng)絡(luò)看不到子網(wǎng)的存在。
3.2.1 子網(wǎng)掩碼的組成
子網(wǎng)掩碼和IP地址相同點(diǎn):分成4段,每段用點(diǎn)隔開(kāi),用二進(jìn)制表示每段都是8位。不同點(diǎn):子網(wǎng)掩碼的前面部分全部是1,后面部分全部是0。如下例子:
A類(lèi)IP地址的默認(rèn)子網(wǎng)掩碼是255.0.0.0,即11111111 00000000 00000000 00000000
B類(lèi)IP地址的默認(rèn)子網(wǎng)掩碼是255.255.0.0,即11111111 11111111 00000000 00000000
C類(lèi)IP地址的默認(rèn)子網(wǎng)掩碼是255.255.255.0,即11111111 11111111 11111111 00000000
3.2.2?子網(wǎng)掩碼的含義
子網(wǎng)掩碼是用于將一個(gè)IP地址劃分成網(wǎng)絡(luò)地址和主機(jī)地址2個(gè)部分,必須和IP地址一起使用。子網(wǎng)掩碼中1的個(gè)數(shù)表示IP地址的前面多少位表示網(wǎng)絡(luò)地址,0的格式表示IP地址后面多少位表示主機(jī)地址。
例子:一個(gè)規(guī)模100人的公司申請(qǐng)了一個(gè)C類(lèi)IP地址網(wǎng)段218.17.21.0,可以容納254臺(tái)主機(jī)。公司分行政、財(cái)務(wù)、市場(chǎng)、銷(xiāo)售、售后、研發(fā)六個(gè)部門(mén),每個(gè)部門(mén)有十幾臺(tái)主機(jī),現(xiàn)在需要按照部門(mén)來(lái)劃分子網(wǎng),使用子網(wǎng)掩碼怎么劃分呢?說(shuō)明:C類(lèi)IP地址網(wǎng)段218.17.21.0默認(rèn)前面3段(24位)表示網(wǎng)絡(luò)地址,最后面1段(8位)表示主機(jī)地址,即默認(rèn)子網(wǎng)掩碼是255.255.255.0。
步驟1:將IP地址的最后8位(00000001~11111110)再分成2部分,前面一部分表示子網(wǎng)地址,后面一部分表示主機(jī)地址。
步驟2:由于公司有6個(gè)部門(mén),使用前面3位表示子網(wǎng)地址,后面5位表示主機(jī)地址,這樣可以劃分成2^3=8個(gè)子網(wǎng),每個(gè)子網(wǎng)有2^5-2=30臺(tái)主機(jī)。因此,前面27位表示網(wǎng)絡(luò)地址,后面5位表示主機(jī)地址。
步驟3:行政部的子網(wǎng)地址是11111111 11111111 11111111 00100000,主機(jī)地址是11111111 11111111 11111111 00100001~11111111 11111111 11111111 00111110(實(shí)際IP地址范圍是218.17.21.1–218.17.21.30)。說(shuō)明:主機(jī)地址全0和全1是保留的。
步驟4:同理,市場(chǎng)部的子網(wǎng)地址是11111111 11111111 11111111 01000000,主機(jī)地址是11111111 11111111 11111111 01000001~11111111 11111111 11111111 01011110(實(shí)際IP地址范圍是218.17.21.33–218.17.21.62)。
3.3 無(wú)分類(lèi)
無(wú)分類(lèi)編址 CIDR 消除了傳統(tǒng) A 類(lèi)、B 類(lèi)和 C 類(lèi)地址以及劃分子網(wǎng)的概念,使用網(wǎng)絡(luò)前綴和主機(jī)號(hào)來(lái)對(duì) IP 地址進(jìn)行編碼,網(wǎng)絡(luò)前綴的長(zhǎng)度可以根據(jù)需要變化。
IP 地址 ::= {< 網(wǎng)絡(luò)前綴號(hào) >, < 主機(jī)號(hào) >}
CIDR 的記法上采用在 IP 地址后面加上網(wǎng)絡(luò)前綴長(zhǎng)度的方法,例如 128.14.35.7/20 表示前 20 位為網(wǎng)絡(luò)前綴。
CIDR 的地址掩碼可以繼續(xù)稱為子網(wǎng)掩碼,子網(wǎng)掩碼首 1 長(zhǎng)度為網(wǎng)絡(luò)前綴的長(zhǎng)度。
一個(gè) CIDR 地址塊中有很多地址,一個(gè) CIDR 表示的網(wǎng)絡(luò)就可以表示原來(lái)的很多個(gè)網(wǎng)絡(luò),并且在路由表中只需要一個(gè)路由就可以代替原來(lái)的多個(gè)路由,減少了路由表項(xiàng)的數(shù)量。把這種通過(guò)使用網(wǎng)絡(luò)前綴來(lái)減少路由表項(xiàng)的方式稱為路由聚合,也稱為?構(gòu)成超網(wǎng)?。
在路由表中的項(xiàng)目由“網(wǎng)絡(luò)前綴”和“下一跳地址”組成,在查找時(shí)可能會(huì)得到不止一個(gè)匹配結(jié)果,應(yīng)當(dāng)采用最長(zhǎng)前綴匹配來(lái)確定應(yīng)該匹配哪一個(gè)。
4. 地址解析協(xié)議 ARP
網(wǎng)絡(luò)層實(shí)現(xiàn)主機(jī)之間的通信,而鏈路層實(shí)現(xiàn)具體每段鏈路之間的通信。因此在通信過(guò)程中,IP 數(shù)據(jù)報(bào)的源地址和目的地址始終不變,而 MAC 地址隨著鏈路的改變而改變。
ARP 協(xié)議實(shí)現(xiàn)由 IP 地址得到 MAC 地址:
每個(gè)主機(jī)都有一個(gè) ARP 高速緩存,里面有本局域網(wǎng)上的各主機(jī)和路由器的 IP 地址到 MAC 地址的映射表。
如果主機(jī) A 知道主機(jī) B 的 IP 地址,但是 ARP 高速緩存中沒(méi)有該 IP 地址到 MAC 地址的映射,此時(shí)主機(jī) A 通過(guò)廣播的方式發(fā)送 ARP 請(qǐng)求分組,主機(jī) B 收到該請(qǐng)求后會(huì)發(fā)送 ARP 響應(yīng)分組給主機(jī) A 告知其 MAC 地址,隨后主機(jī) A 向其高速緩存中寫(xiě)入主機(jī) B 的 IP 地址到 MAC 地址的映射。
5. 網(wǎng)際控制報(bào)文協(xié)議 ICMP
ICMP 是為了更有效地轉(zhuǎn)發(fā) IP 數(shù)據(jù)報(bào)和提高交付成功的機(jī)會(huì),封裝在 IP 數(shù)據(jù)報(bào)中,不屬于高層協(xié)議。
ICMP 報(bào)文分為差錯(cuò)報(bào)告報(bào)文和詢問(wèn)報(bào)文,常見(jiàn) ICMP 報(bào)文類(lèi)型,如下所示:
(1)Ping
Ping 是 ICMP 的一個(gè)重要應(yīng)用,主要用來(lái)測(cè)試兩臺(tái)主機(jī)之間的連通性。
Ping 的原理是通過(guò)向目的主機(jī)發(fā)送 ICMP Echo 請(qǐng)求報(bào)文,目的主機(jī)收到之后會(huì)發(fā)送 Echo 回答報(bào)文。Ping 會(huì)根據(jù)時(shí)間和成功響應(yīng)的次數(shù)估算出數(shù)據(jù)包往返時(shí)間以及丟包率。
(2)Traceroute
Traceroute 是 ICMP 的另一個(gè)應(yīng)用,用來(lái)跟蹤一個(gè)分組從源點(diǎn)到終點(diǎn)的路徑。
Traceroute 發(fā)送的 IP 數(shù)據(jù)報(bào)封裝的是無(wú)法交付的 UDP 用戶數(shù)據(jù)報(bào),并由目的主機(jī)發(fā)送終點(diǎn)不可達(dá)差錯(cuò)報(bào)告報(bào)文,步驟如下。
①源主機(jī)向目的主機(jī)發(fā)送一連串的 IP 數(shù)據(jù)報(bào)。第一個(gè)數(shù)據(jù)報(bào) P1 的生存時(shí)間 TTL 設(shè)置為 1,當(dāng) P1 到達(dá)路徑上的第一個(gè)路由器 R1 時(shí),R1 收下它并把 TTL 減 1,此時(shí) TTL 等于 0,R1 就把 P1 丟棄,并向源主機(jī)發(fā)送一個(gè) ICMP 時(shí)間超過(guò)差錯(cuò)報(bào)告報(bào)文;
②源主機(jī)接著發(fā)送第二個(gè)數(shù)據(jù)報(bào) P2,并把 TTL 設(shè)置為 2。P2 先到達(dá) R1,R1 收下后把 TTL 減 1 再轉(zhuǎn)發(fā)給 R2,R2 收下后也把 TTL 減 1,由于此時(shí) TTL 等于 0,R2 就丟棄 P2,并向源主機(jī)發(fā)送一個(gè) ICMP 時(shí)間超過(guò)差錯(cuò)報(bào)文。
③不斷執(zhí)行這樣的步驟,直到最后一個(gè)數(shù)據(jù)報(bào)剛剛到達(dá)目的主機(jī),主機(jī)不轉(zhuǎn)發(fā)數(shù)據(jù)報(bào),也不把 TTL 值減 1。但是因?yàn)閿?shù)據(jù)報(bào)封裝的是無(wú)法交付的 UDP,因此目的主機(jī)要向源主機(jī)發(fā)送 ICMP 終點(diǎn)不可達(dá)差錯(cuò)報(bào)告報(bào)文。
④之后源主機(jī)知道了到達(dá)目的主機(jī)所經(jīng)過(guò)的路由器 IP 地址以及到達(dá)每個(gè)路由器的往返時(shí)間。