1 IP v4協(xié)議 1.IP地址(1) IP地址的格式與分類(2) IP地址的屏蔽碼A 無子網(wǎng)的表示法B 有子網(wǎng)的表示法 2. IP協(xié)議(1) IP數(shù)據(jù)報(bào)格式(2) 數(shù)據(jù)報(bào)的分段與重裝 A 數(shù)據(jù)報(bào)分段 B 數(shù)據(jù)報(bào)重裝3. 路由選擇(1) 數(shù)據(jù)報(bào)發(fā)送(2) 數(shù)據(jù)報(bào)接收4. IP數(shù)據(jù)報(bào)選項(xiàng)2 IP v6協(xié)議1.IP v6報(bào)文格式2.IP v6地址格式(1) 單播地址(2) 多播地址(3) 任播地址3.IP v6路由選擇4.IP v6安全機(jī)制5.IP v6移動(dòng)性6.IP v6 QoS支持機(jī)制3 ARP協(xié)議和RARP協(xié)議1. ARP協(xié)議2. RARP協(xié)議4 ICMP協(xié)議1. ICMP報(bào)文格式2. ICMP差錯(cuò)報(bào)文3. ICMP控制報(bào)文4. ICMP請(qǐng)求/應(yīng)答報(bào)文網(wǎng)際層的主要功能是實(shí)現(xiàn)互連網(wǎng)絡(luò)環(huán)境下的端到端數(shù)據(jù)分組傳輸,這種端到端數(shù)據(jù)分組傳輸采用無連接交換方式來完成。為此,網(wǎng)際層提供了基于無連接的數(shù)據(jù)傳輸、路由選擇、擁塞控制和地址映射等功能,這些功能主要由4個(gè)協(xié)議來實(shí)現(xiàn):IP、ARP、 RARP和ICMP,其中IP協(xié)議提供數(shù)據(jù)分組傳輸、路由選擇等功能,ARP和RARP提供邏輯地址與物理地址映射功能,ICMP協(xié)議提供網(wǎng)絡(luò)控制和差錯(cuò)處理功能。
1 IP v4協(xié)議
IP(Internet Protocol)協(xié)議是網(wǎng)際層的主要協(xié)議。目前,IP有兩個(gè)版本:IP v4和IP v6,IP v4是當(dāng)前使用的版本,也是IP網(wǎng)絡(luò)技術(shù)的基礎(chǔ)。因此,首先介紹IP v4協(xié)議。
1.IP地址
在互連網(wǎng)體系結(jié)構(gòu)中, 參與通信的各個(gè)節(jié)點(diǎn)(包括端節(jié)點(diǎn)和中間節(jié)點(diǎn))都要預(yù)先分配一個(gè)惟一的邏輯地址作為標(biāo)識(shí)符,并且使用該地址進(jìn)行一切通信活動(dòng), 該地址稱為IP地址。在IP v4 中,IP地址為32位,由網(wǎng)絡(luò)標(biāo)識(shí)(Net)和主機(jī)標(biāo)識(shí)(Host)兩部分組成, 可標(biāo)識(shí)一個(gè)互連網(wǎng)絡(luò)中任何一個(gè)網(wǎng)絡(luò)中的任何節(jié)點(diǎn)。從節(jié)點(diǎn)標(biāo)識(shí)的角度,IP協(xié)議將節(jié)點(diǎn)統(tǒng)稱為主機(jī)(Host)。
IP地址是一種在網(wǎng)際層用來標(biāo)識(shí)主機(jī)的邏輯地址。當(dāng)數(shù)據(jù)報(bào)在物理網(wǎng)絡(luò)傳輸時(shí), 還必須把IP地址轉(zhuǎn)換成物理地址, 由網(wǎng)際層的地址解析協(xié)議ARP提供這種地址映射服務(wù)。
(1) IP地址的格式與分類
IP地址有二進(jìn)制格式和十進(jìn)制格式兩種。十進(jìn)制格式是由二進(jìn)制翻譯過去的, 用十進(jìn)制表示是為了便于使用和掌握。
二進(jìn)制的IP地址共有32 位。例如: 10000011, 01101011, 00000011, 00011000。每八位組用一個(gè)十進(jìn)制數(shù)表示, 并用“.”進(jìn)行分隔, 上例就變?yōu)?31.107.3.24。IP地址分為A、B、C、D、E五類。其中A、B、C類地址的一般格式為:
其中,M為地址類別號(hào);NET為網(wǎng)絡(luò)號(hào);HOST為主機(jī)號(hào)。地址類別不同, 這三個(gè)參數(shù)在 32 位中所占的位數(shù)也不同。下圖為IP地址格式。
在IP地址中,有一些特殊的規(guī)定:
·當(dāng)32位的IP地址為全0 時(shí),表示該主機(jī),但只允許在主機(jī)啟動(dòng)時(shí)使用,以后不允許再使用。
·當(dāng)32位的IP地址為全1 時(shí),表示在該網(wǎng)的廣播地址,一般用于初始化。
·當(dāng)32位的IP地址為 127.0.0.0時(shí),表示是回送地址,目的地址為回送地址的數(shù)據(jù)報(bào)將被IP協(xié)議立即送回,主要用于網(wǎng)絡(luò)測(cè)試目的。
·當(dāng)主機(jī)地址為全0時(shí)表示該類網(wǎng)本身。
·當(dāng)主機(jī)地址為全1時(shí)表示該類網(wǎng)內(nèi)廣播地址。
在A類地址中,M字段占1 位,即第0位為0,表示是A類地址,第1~7位表示網(wǎng)絡(luò)地址, 第8~31位表示主機(jī)地址。它所能表示的地址范圍為0.0.0.0~127.255.255.255, 可以表示28-2=126個(gè)A類網(wǎng),每個(gè)A類網(wǎng)最多可以有224-2=16 387 062個(gè)主機(jī)地址。A類地址通常用于超大型網(wǎng)絡(luò)的場(chǎng)合。
在B類地址中, M字段占2位,即第0、1位為“1 0”,表示是B類地址,第2~15位表示網(wǎng)絡(luò)地址, 第16~31位表示主機(jī)地址。它所能表示的地址范圍為128.0.0.0~191.255.255.255, 可以表示214-1=16383個(gè)B類網(wǎng),每個(gè)B類網(wǎng)最多可以有224-2=16 64 574個(gè)主機(jī)地址。B類地址通常用于大型網(wǎng)絡(luò)的場(chǎng)合。
在C類地址中, M字段占3位,即第0、1、2位為“1 1 0”,表示是C類地址,第3~23位表示網(wǎng)絡(luò)地址, 第24~31位表示主機(jī)地址。它所表示的范圍為192.0.0.0~223.255.255.255, 可以表示221-1=2097151個(gè)C類網(wǎng),每個(gè)C類網(wǎng)最多可以有28-2=254個(gè)主機(jī)地址。C類地址通常用于校園網(wǎng)或企業(yè)網(wǎng)。
D類地址是多播地址,它所能表示的地址范圍為224.0.0.0~239.255.255.255。在 Internet中,允許有兩類廣播組:臨時(shí)地址廣播組和永久地址廣播組。臨時(shí)地址廣播組是臨時(shí)建立的廣播組,必須事先創(chuàng)建;永久地址廣播組則永久性存在,不需要事先創(chuàng)建,主要用于特殊目的,例如:
·224.0.0.1表示本網(wǎng)絡(luò)所有的主機(jī)和路由器。
·224.0.0.2表示本網(wǎng)絡(luò)所有的路由器。
·224.0.0.5表示本網(wǎng)絡(luò)所有的OSPF路由器。
·224.0.0.6表示本網(wǎng)絡(luò)指定的OSPF路由器。
·224.0.0.9表示本網(wǎng)絡(luò)所有的RIP路由器。
E類地址是實(shí)驗(yàn)地址,它所能表示的地址范圍為 240.0.0.0~247.255.255.255。
在Internet中,IP 地址不是任意分配的, 必須由國際組織統(tǒng)一分配,以保持IP地址惟一性,避免IP地址沖突。有關(guān)的國際組織機(jī)構(gòu)是:
①分配A類(最高一級(jí))IP 地址的國際組織是國際網(wǎng)絡(luò)信息中心NIC(Network Information Center)。它負(fù)責(zé)分配A類IP地址, 授權(quán)分配B類IP地址的組織—自治區(qū)系統(tǒng)。它有權(quán)重新刷新IP地址。
②分配B類IP地址的國際組織是InterNIC、APNIC和ENIC。這三個(gè)自治區(qū)系統(tǒng)組織的分工是:ENIC負(fù)責(zé)歐洲地址的分配工作;InterNIC負(fù)責(zé)北美地區(qū);而APNIC負(fù)責(zé)亞太地區(qū), 設(shè)在日本東京大學(xué)。我國屬于APNIC, 由它來分配B類地址。例如, APNIC給中國CERNET分配了10個(gè)B類地址。
③分配C類IP地址的組織是國家或地區(qū)網(wǎng)絡(luò)的NIC。例如, CERNET的NIC設(shè)在清華大學(xué), CERNET各地區(qū)的網(wǎng)管中心需向CERNET NIC申請(qǐng)分配C類地址。
RFC 1597規(guī)定下列地址可以用于Intranet內(nèi)部地址:
·A類地址:10.0.0.0~10.255.255.255
·B類地址:172.16.0.0~172.31.255.255
·C類地址:192.168.0.0~192.168.255.255
(2) IP地址的屏蔽碼
屏蔽碼是IP地址的特殊標(biāo)注碼,也是用32位表示,用于指明一個(gè)IP網(wǎng)絡(luò)中是否有子網(wǎng)。
A 無子網(wǎng)的表示法
如果一個(gè)IP網(wǎng)絡(luò)無子網(wǎng),則屏蔽碼中的網(wǎng)絡(luò)號(hào)字段各位全為1, 主機(jī)號(hào)字段各位全為0。例如:
IP地址: 202.114.80.5
屏蔽碼: 255.255.255.0
IP地址 202.114.80.5標(biāo)識(shí)了202.114.80號(hào)網(wǎng)絡(luò)中的5號(hào)主機(jī),并且202.114.80號(hào)網(wǎng)絡(luò)中沒有設(shè)置子網(wǎng)。在無子網(wǎng)的情況下可以省略屏蔽碼。
B 有子網(wǎng)的表示法
如果一個(gè)IP網(wǎng)絡(luò)有子網(wǎng),則子網(wǎng)號(hào)用主機(jī)號(hào)字段的前幾位來表示, 所占的位數(shù)與子網(wǎng)的數(shù)量相對(duì)應(yīng), 如1位可表示2個(gè)子網(wǎng);2位可表示4個(gè)子網(wǎng);3位可表示8個(gè)子網(wǎng)…。并且屏蔽碼和IP地址必須成對(duì)出現(xiàn),屏蔽碼中的網(wǎng)絡(luò)號(hào)字段各位全為1, 主機(jī)號(hào)字段中的子網(wǎng)號(hào)各位也全為1, 而主機(jī)號(hào)各位全為0。例如:
IP地址:202.114.80.5
屏蔽碼:255.255.255.224 (224為二進(jìn)制的“11100000”)
它表示在 202.114.80號(hào)網(wǎng)絡(luò)中最多有8個(gè)子網(wǎng), 每個(gè)子網(wǎng)可配置32臺(tái)主機(jī)。這個(gè)IP地址標(biāo)識(shí)的是該IP網(wǎng)絡(luò)0號(hào)子網(wǎng)中的第5號(hào)主機(jī)。
在有子網(wǎng)的IP網(wǎng)絡(luò)中,如果兩個(gè)主機(jī)屬于同一個(gè)子網(wǎng), 則它們之間可以直接進(jìn)行信息交換,而不需要路由器;如果兩個(gè)主機(jī)不在同一個(gè)子網(wǎng), 即子網(wǎng)號(hào)不同, 則它們之間就要通過路由進(jìn)行信息交換。例如:
屏蔽碼:255.255.255.224
IP地址:202.114.80.1主機(jī)號(hào)字段為00000001
202.114.80.16 主機(jī)號(hào)字段為00010000
這兩個(gè)IP地址的主機(jī)號(hào)字段前三位均為000, 說明它們屬于同一子網(wǎng), 可不通過路由器來直接交換信息。又如:
屏蔽碼:255.255.255.224
IP地址:202.114.80.1主機(jī)號(hào)字段為00000001
202.114.80.130主機(jī)號(hào)字段為01000010
這兩個(gè)IP地址的主機(jī)號(hào)字段前三位不同(000/010), 說明它們屬于不同子網(wǎng), 必須通過路由器來交換信息。它們?cè)诟髯宰泳W(wǎng)上的主機(jī)號(hào)分別為1和2。
屏蔽碼說明了是否有子網(wǎng),以及在有子網(wǎng)的情況下子網(wǎng)的最大數(shù)量,而不說明具體的子網(wǎng)號(hào)。屏蔽碼的作用就是屏蔽掉IP地址中的主機(jī)號(hào), 而保留其網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào),以便于路由器尋址。
2. IP協(xié)議
IP是TCP/IP協(xié)議集的核心協(xié)議之一, 它提供了無連接的數(shù)據(jù)報(bào)傳輸和互連網(wǎng)的路由服務(wù)。IP的基本任務(wù)是通過互連網(wǎng)傳輸數(shù)據(jù)報(bào), 各個(gè)IP數(shù)據(jù)報(bào)是獨(dú)立傳輸?shù)?。主機(jī)上的IP層基于數(shù)據(jù)鏈路層向傳輸層提供傳輸服務(wù), IP從源傳輸層實(shí)體獲取數(shù)據(jù), 再通過物理網(wǎng)絡(luò)傳送給目的主機(jī)的IP層。IP不保證傳送的可靠性, 在主機(jī)資源不足的情況下, 它可能丟棄某些數(shù)據(jù)報(bào), 同時(shí)IP也不檢查被數(shù)據(jù)鏈路層丟棄的報(bào)文。
在傳送時(shí), 高層協(xié)議將數(shù)據(jù)傳給IP, IP將數(shù)據(jù)封裝為IP數(shù)據(jù)報(bào)后通過網(wǎng)絡(luò)接口發(fā)送出去。如果目的主機(jī)直接連在本地網(wǎng)中, 則IP直接將數(shù)據(jù)報(bào)傳送給本地網(wǎng)中的目的主機(jī);如果目的主機(jī)是在遠(yuǎn)程網(wǎng)絡(luò)上, 則IP將數(shù)據(jù)報(bào)傳送給本地路由器, 由本地路由器將數(shù)據(jù)報(bào)傳送給下一個(gè)路由器或目的主機(jī)。這樣, 一個(gè)IP數(shù)據(jù)報(bào)通過一組互連網(wǎng)絡(luò)從一個(gè)IP實(shí)體傳送到另一個(gè)IP實(shí)體, 直至到達(dá)目的地。
(1) IP數(shù)據(jù)報(bào)格式
IP數(shù)據(jù)報(bào)由報(bào)頭和報(bào)文數(shù)據(jù)兩部分組成, 參見下圖。
版本IHL服務(wù)類型報(bào)文長度
標(biāo)識(shí)標(biāo)志分段偏移
生存期上層協(xié)議號(hào)報(bào)頭檢查和
IP數(shù)據(jù)報(bào)中各個(gè)字段的含義簡要說明如下:
·版本:4位, IP協(xié)議的版本號(hào),IP v4版本取值為 4;
·IP報(bào)頭長度 (IHL):4位,以 32 位為單位表示的報(bào)頭長度;
·服務(wù)類型(ToS):8 位,用于規(guī)定優(yōu)先級(jí)、傳送延遲、吞吐量和可靠性等參數(shù);
·報(bào)文長度:16位,以字節(jié)為單位表示的報(bào)文總長度(包括報(bào)頭和數(shù)據(jù)兩部分);
·標(biāo)識(shí)(ID):16位,數(shù)據(jù)報(bào)的惟一標(biāo)識(shí), 用于數(shù)據(jù)報(bào)的分段與重裝;
·標(biāo)志(Flag):3位,數(shù)據(jù)報(bào)是否分段的標(biāo)志;
·分段偏移:13位,以 64 位為單位表示的分段偏移;
·生存期(TTL):8位,允許數(shù)據(jù)報(bào)在網(wǎng)間傳輸?shù)拇婊顣r(shí)間;
·上層協(xié)議號(hào):8位,指出發(fā)送數(shù)據(jù)報(bào)的上層協(xié)議;
·報(bào)頭檢查和:16位,僅用于對(duì)報(bào)頭的正確性檢查;
·源IP地址:32位,發(fā)送數(shù)據(jù)報(bào)的源主機(jī)IP地址;
·目的IP地址:32位,接收數(shù)據(jù)報(bào)的目的主機(jī)IP地址;
·任選項(xiàng):可變長度,提供任選的服務(wù), 如時(shí)間戳、錯(cuò)誤報(bào)告及特殊路由等;
·填充:可變長度,保證IP 報(bào)頭以32 位為邊界對(duì)齊。
(2) 數(shù)據(jù)報(bào)的分段與重裝
A 數(shù)據(jù)報(bào)分段
在各種物理網(wǎng)絡(luò)中, 如Ethernet、Token Ring等都有最大幀長限制。為了使較大的數(shù)據(jù)報(bào)能以適當(dāng)?shù)拇笮≡谖锢砭W(wǎng)絡(luò)上傳輸, IP協(xié)議首先要根據(jù)物理網(wǎng)絡(luò)所允許的最大幀長對(duì)上層協(xié)議提交的數(shù)據(jù)報(bào)進(jìn)行長度檢查, 必要時(shí)把數(shù)據(jù)報(bào)分成若干個(gè)段發(fā)送。
在數(shù)據(jù)報(bào)分段時(shí),每個(gè)段都要加上IP報(bào)頭, 形成IP數(shù)據(jù)報(bào)。與數(shù)據(jù)報(bào)分段相關(guān)的字段有:
·標(biāo)識(shí)(ID): 數(shù)據(jù)報(bào)的唯一標(biāo)識(shí)。被分段傳送的IP數(shù)據(jù)報(bào)設(shè)有相同的標(biāo)識(shí)。
·報(bào)文長度: 對(duì)每一個(gè)被分段的IP數(shù)據(jù)報(bào)都要重新計(jì)算其報(bào)文長度。
·分段偏移: 每一個(gè)被分段的IP數(shù)據(jù)報(bào)要表明它在原始數(shù)據(jù)報(bào)中的位置, 用 64位的倍數(shù)來表示。
·標(biāo)志(Flag): 如果是無分段的IP數(shù)據(jù)報(bào), 該標(biāo)志為 0;如果是有分段的IP數(shù)據(jù)報(bào),除了最后一個(gè)分段IP數(shù)據(jù)報(bào)將該標(biāo)志置為0 外, 其它的都將該標(biāo)志置為1。
B 數(shù)據(jù)報(bào)重裝
在互連網(wǎng)絡(luò)中, 被分段的各個(gè)IP數(shù)據(jù)報(bào)進(jìn)行獨(dú)立的傳輸, 它們?cè)诮?jīng)過中間路由器轉(zhuǎn)發(fā)時(shí)可能選擇不同的路由。這樣, 到達(dá)目的主機(jī)的IP數(shù)據(jù)報(bào)順序與發(fā)送的順序可能不一致。因此, 目的主機(jī)上的IP協(xié)議必須根據(jù)IP數(shù)據(jù)報(bào)中相關(guān)字段(標(biāo)識(shí)、長度、偏移及標(biāo)志等)將分段的各個(gè)IP數(shù)據(jù)報(bào)重新組裝成完整的原始數(shù)據(jù)報(bào), 然后再提交上層協(xié)議。
在進(jìn)行數(shù)據(jù)報(bào)重裝時(shí), 各個(gè)IP數(shù)據(jù)報(bào)除應(yīng)具有相同的標(biāo)識(shí)外, 還應(yīng)具有相同的上層協(xié)議號(hào)、源IP地址和目的IP地址, 并且在一定的時(shí)間內(nèi)要全部到齊。 IP協(xié)議將滿足上述條件的IP數(shù)據(jù)報(bào)按分段偏移順序排隊(duì), 且只保留第1段IP數(shù)據(jù)報(bào)報(bào)頭, 而其它段的IP 報(bào)頭均刪除, 組裝成一個(gè)完整的原始IP數(shù)據(jù)報(bào), 并重新計(jì)算其報(bào)文長度, 填入IP報(bào)頭相應(yīng)的字段。最后將組裝好的原始IP數(shù)據(jù)報(bào)按上層協(xié)議號(hào)提交給上層協(xié)議。
3. 路由選擇
路由選擇是IP協(xié)議最重要的功能之一。在IP協(xié)議中,采用的是源路由選擇策略,由發(fā)送端指定發(fā)送路由。因此, 互連網(wǎng)絡(luò)中的每個(gè)主機(jī)和路由器(TCP/IP中稱它為網(wǎng)關(guān))都保持一個(gè)路由表, 給出互連網(wǎng)絡(luò)中各個(gè)網(wǎng)絡(luò)所對(duì)應(yīng)的路由器地址以及該路由器當(dāng)前的忙閑度。在路由表中, 網(wǎng)絡(luò)地址和路由器地址都是用IP地址表示的, 路由器地址指向IP數(shù)據(jù)報(bào)應(yīng)送往的下一個(gè)路由器。忙閑度是用這個(gè)路由器所發(fā)送的數(shù)據(jù)報(bào)數(shù)量來衡量的,當(dāng)一個(gè)網(wǎng)絡(luò)地址有多個(gè)路由時(shí), IP協(xié)議總是選擇忙閑度值最小的路由。為了提高路由查找速度, 路由表通常采用散列表(Hash)結(jié)構(gòu)。
(1) 數(shù)據(jù)報(bào)發(fā)送
當(dāng)發(fā)送節(jié)點(diǎn)IP協(xié)議收到上層協(xié)議要求發(fā)送的數(shù)據(jù)報(bào)時(shí), 如果上層協(xié)議已指定了發(fā)送路由,則按指定的路由發(fā)送數(shù)據(jù)報(bào);如果上層協(xié)議未指定發(fā)送路由, IP協(xié)議則以IP數(shù)據(jù)報(bào)中目的IP地址為關(guān)鍵字來搜索路由表中的路由。如果未找到任何路由, 則說明目的不可達(dá), 向上層協(xié)議報(bào)告錯(cuò)誤信息。對(duì)于已確定的發(fā)送路由, 無論是由上層協(xié)議指定的, 還是從路由表中找到的, 如果該路由是直接可達(dá)的(源主機(jī)和目的地址在同一網(wǎng)絡(luò)中), 則將IP數(shù)據(jù)報(bào)中的目的IP地址通告給網(wǎng)絡(luò)接口程序;如果該路由不是直接可達(dá)的, 則將路由表中對(duì)應(yīng)的路由器IP 地址通告給網(wǎng)絡(luò)接口程序。對(duì)于多路由場(chǎng)合, 要通告忙閑度最小的路由器地址。
網(wǎng)絡(luò)接口程序收到IP協(xié)議提交的IP數(shù)據(jù)報(bào)和目的IP地址后, 調(diào)用ARP協(xié)議, 將IP地址映射成物理地址, 并把IP數(shù)據(jù)報(bào)封裝成數(shù)據(jù)幀,通過物理網(wǎng)絡(luò)傳送給目的節(jié)點(diǎn),目的節(jié)點(diǎn)或是路由器(中轉(zhuǎn)路由)或是目的主機(jī)(直達(dá)路由)。
(2) 數(shù)據(jù)報(bào)接收
當(dāng)接收節(jié)點(diǎn)IP協(xié)議收到由網(wǎng)絡(luò)接口程序傳來的數(shù)據(jù)報(bào)時(shí), 分兩種情況處理:
①當(dāng)該節(jié)點(diǎn)為主機(jī)節(jié)點(diǎn)時(shí), 則比較IP數(shù)據(jù)報(bào)中的目的IP地址與本機(jī)IP地址是否相匹配。若匹配, 則把IP數(shù)據(jù)報(bào)遞交給對(duì)應(yīng)的上層協(xié)議;否則丟棄該數(shù)據(jù)報(bào)。
②當(dāng)該節(jié)點(diǎn)為路由器節(jié)點(diǎn)時(shí), 需要轉(zhuǎn)發(fā)該數(shù)據(jù)報(bào), 即用該數(shù)據(jù)報(bào)的目的IP地址從路由表中查找轉(zhuǎn)發(fā)路由。如果找到路由, 則按該路由轉(zhuǎn)發(fā)數(shù)據(jù)報(bào), 其過程如前所述;否則, 向發(fā)送該數(shù)據(jù)報(bào)的源主機(jī)發(fā)送ICMP報(bào)文, 報(bào)告目的不可達(dá)。
如果該節(jié)點(diǎn)是一個(gè)被配置成具有路由選擇功能的主機(jī), 則先執(zhí)行①。若不匹配,則是待轉(zhuǎn)發(fā)的數(shù)據(jù)報(bào), 不能丟棄掉, 而是轉(zhuǎn)入執(zhí)行②。
4. IP數(shù)據(jù)報(bào)選項(xiàng)
在IP數(shù)據(jù)報(bào)的任選項(xiàng)字段中提供了若干選項(xiàng)主要用于控制和測(cè)試兩大目的。選項(xiàng)處理作為IP協(xié)議的組成部分, 在所有的IP協(xié)議實(shí)現(xiàn)中都是不可缺少的。主要的選項(xiàng)有:
(1) 源路由
源路由是指傳送數(shù)據(jù)報(bào)的路由是由源主機(jī)指定, 而不是由IP協(xié)議通過路由表確定的。源路由選項(xiàng)可以用于測(cè)試某特定網(wǎng)絡(luò)的吞吐率, 可以使數(shù)據(jù)報(bào)繞開出錯(cuò)的網(wǎng)絡(luò)等, 是一個(gè)有用的選項(xiàng)。源路由選項(xiàng)有兩類: 一是限制源路由, 另一是自由源路由。限制源路由要給出一條完整的路徑, 并規(guī)定數(shù)據(jù)報(bào)要經(jīng)過路徑上的每一個(gè)路由器, 并且經(jīng)過路由器的順序也不可改變。自由源路由給出的不是完整路徑, 而是精簡路徑, 必要時(shí)要由IP協(xié)議為其補(bǔ)充路徑。
(2) 記錄路由
記錄路由是指記錄下數(shù)據(jù)報(bào)從源主機(jī)到目的主機(jī)所經(jīng)過路徑上各個(gè)路由器的IP地址。這種功能由記錄路由選項(xiàng)來完成。記錄地址的區(qū)域大小是由源主機(jī)預(yù)先分配并初始化的,如果預(yù)先分配的區(qū)域不足以記錄下全部路徑, 則IP協(xié)議將放棄記錄余下地址的嘗試。此外, 只有在源主機(jī)和目的主機(jī)雙方都同意的情況下, 記錄路由選項(xiàng)中的各個(gè)IP地址才能得到處理, 該選項(xiàng)才是有效的。
(3) 時(shí)戳
所謂時(shí)戳(Time Stamp)是指數(shù)據(jù)報(bào)每經(jīng)過一個(gè)路由器時(shí)所記錄下的當(dāng)時(shí)時(shí)間。這個(gè)功能由時(shí)戳選項(xiàng)來完成。通過時(shí)戳可以獲得IP數(shù)據(jù)報(bào)在互連網(wǎng)中的時(shí)域參數(shù), 可用于分析網(wǎng)絡(luò)的吞吐量、擁塞情況、負(fù)載情況等。時(shí)戳中的時(shí)間采用環(huán)球時(shí)間(Universal Time)表示, 以千分之一秒為單位。由于各個(gè)路由器中的時(shí)鐘并不嚴(yán)格同步, 所以時(shí)戳只是一種大致的參考值。此外, 在選擇時(shí)戳選項(xiàng)時(shí), 可以設(shè)置成時(shí)間和地址同時(shí)記錄, 缺省為只記錄時(shí)間。
2 IP v6協(xié)議
由于IP v4協(xié)議存在著地址空間匱乏、安全性差和不支持QoS等方面的固有缺陷,使IP v4協(xié)議難以擔(dān)當(dāng)下一代Internet核心協(xié)議的重任。為此,IETF提出了下一代IP協(xié)議:Ipng的建議方案,并將它命名為IP v6。IP v6在IP地址空間、路由協(xié)議、安全性、移動(dòng)性以及QoS支持等方面作了較大的改進(jìn),增強(qiáng)了IP協(xié)議的功能。
1.IP v6報(bào)文格式
與IP v4相比,IP v6的報(bào)文格式大為簡化,參見下圖。
IP v6報(bào)頭各個(gè)字段含義如下:
·版本號(hào):4位, 表示IP協(xié)議的版本號(hào), IP v6版本取值為6;
·優(yōu)先級(jí):4位,表示該數(shù)據(jù)報(bào)的優(yōu)先級(jí);
·流類別:24位,與優(yōu)先級(jí)一起共同標(biāo)識(shí)該數(shù)據(jù)報(bào)的服務(wù)質(zhì)量級(jí);
·載荷長度:16位,以字節(jié)為單位表示有效載荷長度;
·后續(xù)報(bào)頭:8位,標(biāo)識(shí)緊接在IP v6后的后續(xù)擴(kuò)展報(bào)頭的類型;
·跳步數(shù)(Hops):8 位,允許數(shù)據(jù)報(bào)跨越路由器的個(gè)數(shù),表示該數(shù)據(jù)報(bào)在網(wǎng)間傳輸?shù)淖畲蟠婊顣r(shí)間;
·源IP地址:128位,發(fā)送數(shù)據(jù)報(bào)的源主機(jī)IP地址;
·目的IP地址:128位,接收數(shù)據(jù)報(bào)的目的主機(jī)IP地址。
IP v6通過擴(kuò)展報(bào)頭來增強(qiáng)協(xié)議的功能,擴(kuò)展報(bào)頭是可選的。如果選擇了擴(kuò)展報(bào)頭,則位于IP v6報(bào)頭之后。IP v6定義了多種擴(kuò)展報(bào)頭,如逐次跳步、路由、分段、封裝、安全認(rèn)證以及目的端選項(xiàng)等,除了逐次跳步擴(kuò)展報(bào)頭外,其它的擴(kuò)展報(bào)頭由端點(diǎn)解釋,中間點(diǎn)并不檢查這些內(nèi)容。一個(gè)數(shù)據(jù)報(bào)中可以包含多個(gè)擴(kuò)展報(bào)頭,由擴(kuò)展報(bào)頭的后續(xù)報(bào)頭字段指出下一個(gè)擴(kuò)展報(bào)頭的類型。下圖給出一個(gè)帶有多個(gè)擴(kuò)展報(bào)頭的IP v6數(shù)據(jù)報(bào)中的例子。
2.IP v6地址格式
在IP v4中,32位的IP地址被分成網(wǎng)絡(luò)地址和主機(jī)地址兩部分。根據(jù)不同的地址類別,網(wǎng)絡(luò)地址和主機(jī)地址所分配的位數(shù)是不同的。這種地址分配方法的缺陷是不夠靈活。
IP v6對(duì)128位的地址沒有作類別限制,允許服務(wù)提供者根據(jù)實(shí)際需要進(jìn)行地址劃分。IP v6的標(biāo)準(zhǔn)地址格式為X:X:X:X:X:X:X:X,每個(gè)X為16位。在IP v6地址中,允許出現(xiàn)連續(xù)的0,并可用“::”表示,但一個(gè)地址中只能出現(xiàn)“::”一次,這樣對(duì)連續(xù)多組X為0的地址起到一定的壓縮作用。IP v6地址使用了地址前綴(FP)概念,用來表示該地址的前幾位,并用X/Y形式表示,其中X是地址前綴,Y是地址前綴的位數(shù)。例如,5D4C:0000::/16表示其地址前綴為5D4C。
IP v6目前定義了三種地址:單播(Unicast)、多播(Multicast)和任播(Anycast),利用地址格式前綴表示各種類型。
(1) 單播地址
單播地址唯一地標(biāo)識(shí)一個(gè)接口,以該類地址傳送的數(shù)據(jù)報(bào)將交付給該地址對(duì)應(yīng)的接口。IP v6定義了多種單播地址格式,如完整用戶單播地址、NSAP(網(wǎng)絡(luò)層服務(wù)訪問點(diǎn))地址、基于地理區(qū)域的地址、局部地址、與IP v4兼容的地址以及其它保留地址類型。下圖是完整單播地址格式,其中:
·前3位是該地址類型的標(biāo)識(shí)符;
·REG ID是Internet服務(wù)提供者的注冊(cè)標(biāo)識(shí)符;
·PROV ID為提供者標(biāo)識(shí)符;
·SUBSC ID用于標(biāo)識(shí)多個(gè)提供者所管理的用戶;
·SUBNET ID用于標(biāo)識(shí)一個(gè)指定的子網(wǎng);
·INTERFACE ID用于標(biāo)識(shí)一個(gè)單一接口。 如果INTERFACE ID是一個(gè)接口的全局惟一標(biāo)識(shí)符,則可用它實(shí)現(xiàn)地址的自動(dòng)生成。例如,一個(gè)節(jié)點(diǎn)通過監(jiān)聽路由器廣播消息而發(fā)現(xiàn)了子網(wǎng)前綴,則可用IEEE 802 MAC地址作為INTERFACE ID來構(gòu)造一個(gè)完整的IP v6地址。
局部地址用于定義子網(wǎng)中的局部網(wǎng)絡(luò),局部網(wǎng)絡(luò)在未接入Internet之前可用局部地址進(jìn)行訪問操作。如果該局部網(wǎng)絡(luò)要接入Internet,可加入地址前綴(REG ID+PROV ID+SUBSC ID),形成完整的Internet地址。由于IP v4相當(dāng)普及,即使IP v6將來被推廣使用,也會(huì)長期處于的共存局面。因此,必須實(shí)現(xiàn)兩種地址格式之間的轉(zhuǎn)換。IP v4節(jié)點(diǎn)將分為只適用于IP v4和兼容IP v6兩種節(jié)點(diǎn)。為此,IP v6定義了兩種相應(yīng)的地址類型。對(duì)于兼容IP v6的節(jié)點(diǎn),當(dāng)接收到IP v6數(shù)據(jù)報(bào)時(shí),可利用隧道技術(shù)對(duì)IP v6數(shù)據(jù)報(bào)再封裝,或者通過對(duì)IP報(bào)頭的轉(zhuǎn)換來實(shí)現(xiàn)地址信息轉(zhuǎn)換。
(2) 多播地址
多播地址標(biāo)識(shí)了一組接口,以該地址類型傳送的數(shù)據(jù)報(bào)將交付給該地址對(duì)應(yīng)的所有接口。IP v6未定義廣播(broadcast)地址類型,它可利用多播地址來實(shí)現(xiàn)。
(3) 任播地址
任播地址標(biāo)識(shí)了一組接口,即該地址被分配給多個(gè)接口,當(dāng)一個(gè)數(shù)據(jù)報(bào)發(fā)送給該地址時(shí),只有按照路由協(xié)議計(jì)算出的最近的接口才接受該數(shù)據(jù)報(bào)。這種地址方式可用于標(biāo)注一組服務(wù)提供者所對(duì)應(yīng)的路由器,發(fā)送者利用路由擴(kuò)展報(bào)頭,將任播地址作為一個(gè)路由序列的一部分,從多個(gè)服務(wù)提供者中挑選一個(gè)來完成數(shù)據(jù)報(bào)傳送。
3.IP v6路由選擇
路由器的基本功能是存儲(chǔ)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)。在轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)時(shí),路由器將根據(jù)數(shù)據(jù)報(bào)的地址信息查找路由表,選擇一條可到達(dá)目的站點(diǎn)的最佳路徑。路由表的維護(hù)和更新由路由協(xié)議來完成。
IP v6的路由選擇是基于地址前綴概念實(shí)現(xiàn)的,這樣可以很方便地建立層次化的路由選擇策略,服務(wù)提供者可以根據(jù)網(wǎng)絡(luò)規(guī)模來匯聚IP地址,充分利用IP地址空間。IP v6中的路由協(xié)議盡量保持了與IP v4相一致,當(dāng)前Internet的路由協(xié)議稍加修改后便可用于IP v6路由。
此外,IETF正在研究一些新的路由協(xié)議,如策略路由協(xié)議、多點(diǎn)路由協(xié)議等,研究的重點(diǎn)集中在支持QoS和優(yōu)化路由等方面,這些研究成果將應(yīng)用于IP v6。
4.IP v6安全機(jī)制
IP v6利用擴(kuò)展報(bào)頭提供了兩種安全機(jī)制:數(shù)據(jù)報(bào)認(rèn)證和數(shù)據(jù)加密傳輸,這兩種安全機(jī)制是分離的,可單獨(dú)使用,也可一起使用。同時(shí),IP v6還允許高層采用其它的安全體系,實(shí)現(xiàn)多層安全體系。
(1)數(shù)據(jù)報(bào)認(rèn)證。它保證數(shù)據(jù)報(bào)傳輸?shù)耐暾院驮吹刂返恼_性,但它不提供信息保密性。其工作機(jī)制是:發(fā)送方根據(jù)數(shù)據(jù)報(bào)的報(bào)頭、有效載荷和用戶信息等計(jì)算出一個(gè)散列值,接收方也根據(jù)接收數(shù)據(jù)報(bào)的相同字段信息計(jì)算出一個(gè)散列值,若兩者相同,接收方認(rèn)為該數(shù)據(jù)報(bào)正確;若兩者不等則丟棄該數(shù)據(jù)報(bào)。
(2)數(shù)據(jù)加密傳輸。它采用數(shù)據(jù)加密方式提供數(shù)據(jù)傳輸?shù)谋C苄浴F涔ぷ鳈C(jī)制是:發(fā)送方對(duì)整個(gè)數(shù)據(jù)報(bào)進(jìn)行加密,生成一個(gè)安全有效載荷(ESP),并在ESP上重新封裝一個(gè)IP v6報(bào)頭后,再進(jìn)行傳輸。當(dāng)接收方接收到該數(shù)據(jù)報(bào)后,刪除封裝報(bào)頭,再對(duì)ESP解密后的數(shù)據(jù)報(bào)進(jìn)行處理。封裝報(bào)頭支持多種加密算法,使用戶有較大選擇余地。
5.IP v6移動(dòng)性
為了支持Internet上的移動(dòng)IP業(yè)務(wù),IETF提出了支持移動(dòng)主機(jī)在Internet 上進(jìn)行無縫漫游的移動(dòng)IP技術(shù)。在移動(dòng)IP業(yè)務(wù)中,移動(dòng)主機(jī)需要兩個(gè)地址:基地地址和轉(zhuǎn)交地址。基地地址是指以移動(dòng)主機(jī)在基地網(wǎng)絡(luò)上注冊(cè)的地址;轉(zhuǎn)交地址是指移動(dòng)主機(jī)到達(dá)外部網(wǎng)絡(luò)時(shí)的臨時(shí)地址。在IP v4中,一般主機(jī)不能與移動(dòng)主機(jī)建立直接的通信關(guān)系,它們需要通過設(shè)在基地網(wǎng)絡(luò)或外部網(wǎng)絡(luò)上的代理服務(wù)器來實(shí)現(xiàn)通信。IP v6簡化了這一方法,它允許通信主機(jī)和移動(dòng)主機(jī)直接通信,其通信過程如圖5.7所示。
假定移動(dòng)主機(jī)在外部網(wǎng)絡(luò),且已獲得了轉(zhuǎn)交地址,并通過地址綁定技術(shù)將轉(zhuǎn)交地址通告給基地代理服務(wù)器。以后的通信工作過程是:第一步,通信主機(jī)利用移動(dòng)主機(jī)的基地地址向移動(dòng)主機(jī)發(fā)送數(shù)據(jù)報(bào);第二步,基地代理服務(wù)器截獲該信息,將其移交移動(dòng)主機(jī);第三步,移動(dòng)主機(jī)向通信主機(jī)發(fā)送地址綁定信息;第四步,通信主機(jī)與移動(dòng)主機(jī)建立直接通信。
6 IP v6 QoS支持機(jī)制
IP v6報(bào)頭的中的優(yōu)先級(jí)和流類別字段提供了QoS支持機(jī)制。IP v6報(bào)頭的優(yōu)先級(jí)字段允許發(fā)送端根據(jù)通信業(yè)務(wù)的需要設(shè)置數(shù)據(jù)報(bào)的優(yōu)先級(jí)別。通常,通信業(yè)務(wù)被分為兩類:可流控業(yè)務(wù)和不可流控業(yè)務(wù)。前者大多數(shù)是對(duì)時(shí)間不敏感的業(yè)務(wù),一般使用TCP協(xié)議作為傳輸協(xié)議,當(dāng)網(wǎng)絡(luò)發(fā)生擁擠時(shí),可通過調(diào)節(jié)流量來疏導(dǎo)網(wǎng)絡(luò)交通,其優(yōu)先級(jí)從1到7,例如,IPv6建議:USENET的優(yōu)先級(jí)為1;FTP的優(yōu)先級(jí)為4;Telnet的優(yōu)先級(jí)為6。后者大多數(shù)是對(duì)時(shí)間敏感的業(yè)務(wù),如多媒體實(shí)時(shí)通信,當(dāng)網(wǎng)絡(luò)發(fā)生擁擠時(shí),則按照數(shù)據(jù)報(bào)優(yōu)先級(jí)對(duì)數(shù)據(jù)報(bào)進(jìn)行丟棄處理來疏導(dǎo)網(wǎng)絡(luò)交通,其優(yōu)先級(jí)值從8到15。
數(shù)據(jù)流是指一組由源端發(fā)往目的端的數(shù)據(jù)報(bào)序列。源節(jié)點(diǎn)使用IP v6報(bào)頭的流類別符來標(biāo)識(shí)一個(gè)特定數(shù)據(jù)流。當(dāng)數(shù)據(jù)流途經(jīng)各個(gè)路由器時(shí),如果路由器具備流類別處理能力,則為該數(shù)據(jù)流預(yù)留資源,提供QoS保證;如果路由器不具備這種能力,則不提供任何QoS保證??梢?,在數(shù)據(jù)流傳輸路徑上,各個(gè)路由器都應(yīng)當(dāng)具備QoS支持能力,這樣網(wǎng)絡(luò)才能提供端到端的QoS保證。通常,IP v6應(yīng)當(dāng)和RSVP之類的資源保留協(xié)議一起使用,才能充分發(fā)揮應(yīng)有的作用。
IP v6通過優(yōu)先級(jí)和流類別字段提供了QoS支持機(jī)制,可以支持多媒體通信,但要求數(shù)據(jù)流傳輸路徑上各個(gè)路由器也應(yīng)具備QoS支持能力,這樣才能實(shí)現(xiàn)端到端的 QoS保證。IP v6作為下一代Internet(即Internet 2)的核心協(xié)議,在協(xié)議性能和功能上都作了較大的改進(jìn),以滿足Internet業(yè)務(wù)不斷增長的需要。
3 ARP協(xié)議和RARP協(xié)議
為了使TCP/IP協(xié)議與具體的物理網(wǎng)絡(luò)無關(guān), 通過網(wǎng)際層將物理地址隱藏起來, 統(tǒng)一使用IP地址進(jìn)行網(wǎng)際間通信。IP地址與物理地址之間的映射稱為地址解析。在網(wǎng)際層, 提供從IP地址到物理地址映像服務(wù)的協(xié)議是地址解析協(xié)議ARP(Address Resolution Protocol), 而提供從物理地址到IP地址映射服務(wù)的協(xié)議是逆向地址解析協(xié)議RARP(Reverse Address Resolution Protocol)。
1. ARP協(xié)議
當(dāng)一個(gè)主機(jī)向另一個(gè)主機(jī)發(fā)送報(bào)文時(shí), 只有知道與對(duì)方IP地址相對(duì)應(yīng)的物理地址后才能在物理網(wǎng)絡(luò)上進(jìn)行傳輸。這種地址解析服務(wù)是由ARP協(xié)議提供的。應(yīng)當(dāng)注意的是, ARP只用于解析對(duì)方的物理地址, 而不是解析本機(jī)的物理地址。
ARP是采用一種稱為動(dòng)態(tài)聯(lián)編(dynamic binding)方式來解析對(duì)方物理地址的。具體地說, 發(fā)送主機(jī)向網(wǎng)絡(luò)中廣播一個(gè)ARP請(qǐng)求報(bào)文, 報(bào)文中包含有目的主機(jī)的IP地址, 以請(qǐng)求與該IP地址相符合的目的主機(jī)物理地址。網(wǎng)絡(luò)上所有的主機(jī)都能接收到這個(gè)ARP請(qǐng)求報(bào)文, 但只有本機(jī)的IP地址與報(bào)文中目的IP地址相符合的主機(jī)才發(fā)送一個(gè)ARP響應(yīng)報(bào)文,報(bào)告本機(jī)的物理地址。這樣, 發(fā)送主機(jī)就得到了目的主機(jī)的物理地址了。ARP的報(bào)文格式下圖所示。
在 ARP/RARP報(bào)文格式中:
·物理網(wǎng)絡(luò)類型字段為2個(gè)字節(jié), 表示發(fā)送方主機(jī)的物理網(wǎng)絡(luò)類型。其中, “1”代表以太網(wǎng)。
·協(xié)議類型字段為2個(gè)字節(jié), 表示發(fā)送方使用ARP獲取物理地址的高層協(xié)議類型。其中, “0x0800”代表IP協(xié)議。
·物理地址長度字段為1個(gè)字節(jié), 用于規(guī)定物理地址字段的長度。通常, 物理地址字段占6個(gè)字節(jié)(48位地址)。
·IP地址長度字段為1個(gè)字節(jié), 用于規(guī)定IP地址字段的長度。通常, IP地址字段占4個(gè)字節(jié)(IP v4版本)。
·操作字段為2個(gè)字節(jié), 表示報(bào)文類型。其中:
1 ——ARP請(qǐng)求報(bào)文;
2 ——ARP響應(yīng)報(bào)文;
3 ——RARP請(qǐng)求報(bào)文;
4 ——RARP響應(yīng)報(bào)文。
·發(fā)送方物理地址字段為6個(gè)字節(jié), 用于存放發(fā)送方的物理地址。
·發(fā)送方IP地址字段為4個(gè)字節(jié), 用于存放發(fā)送方的IP地址。
·目的方物理地址字段為6個(gè)字節(jié), 用于存放目的方的物理地址。對(duì)于ARP請(qǐng)求報(bào)文, 該字段為空。
·目的方IP地址字段為 4 個(gè)字節(jié), 用于存放目的方的IP地址。
發(fā)送方在發(fā)送ARP請(qǐng)求報(bào)文時(shí), 要填寫除目的方物理地址字段外的其它字段。目的方通過發(fā)送ARP響應(yīng)報(bào)文報(bào)告自己的物理地址, 這時(shí)報(bào)文中的發(fā)送方和目的方字段要作相應(yīng)的交換。
在單一網(wǎng)絡(luò)中, 發(fā)送方的ARP請(qǐng)求報(bào)文可直接發(fā)送給網(wǎng)絡(luò)中任何一個(gè)主機(jī)。在互連網(wǎng)絡(luò)中, 發(fā)送給另一網(wǎng)絡(luò)主機(jī)的數(shù)據(jù)報(bào)要由路由器轉(zhuǎn)發(fā)。因此, 發(fā)送方必須首先獲取路由器節(jié)點(diǎn)的物理地址, 即發(fā)送ARP請(qǐng)求報(bào)文給該路由器節(jié)點(diǎn)。
2. RARP協(xié)議
如果一個(gè)主機(jī)初始化后只有自己的物理地址而沒有IP地址, 則可以通過RARP協(xié)議發(fā)送廣播式請(qǐng)求報(bào)文來請(qǐng)求自己的IP地址, 而RARP服務(wù)器負(fù)責(zé)對(duì)該請(qǐng)求作出應(yīng)答。這樣,無IP地址的主機(jī)可以通過RARP協(xié)議來獲取自己的IP地址。RARP協(xié)議主要用于無盤工作站來獲取自己的 IP地址。RARP的報(bào)文格式與ARP的相同。當(dāng)發(fā)送方以廣播方式發(fā)送RARP請(qǐng)求報(bào)文時(shí), 在發(fā)送方物理地址字段和目的方物理地址字段上都填入本機(jī)物理地址。RARP服務(wù)器主機(jī)接收到該請(qǐng)求報(bào)文后, 便給發(fā)送方回送一個(gè)RARP響應(yīng)報(bào)文, 從目的方IP地址字段中帶回發(fā)送方的IP地址。
4 ICMP協(xié)議
IP協(xié)議提供了無連接的數(shù)據(jù)報(bào)傳送服務(wù)。在傳送過程中, 如果發(fā)生差錯(cuò)或意外情況, 如數(shù)據(jù)報(bào)目的地址不可達(dá)、數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的滯留時(shí)間超過其生存期, 中轉(zhuǎn)節(jié)點(diǎn)或目的節(jié)點(diǎn)主機(jī)因緩沖區(qū)不足而無法處理數(shù)據(jù)報(bào)等, 總要通過一種通信機(jī)制, 向源節(jié)點(diǎn)報(bào)告差錯(cuò)情況, 以便源節(jié)點(diǎn)對(duì)差錯(cuò)進(jìn)行相應(yīng)的處理。網(wǎng)際控制報(bào)文協(xié)議ICMP(Internetwork Control Message Protocol)正是提供這類差錯(cuò)報(bào)告服務(wù)的協(xié)議。它在IP層加入一類特殊用途的報(bào)文機(jī)制, 以滿足IP協(xié)議報(bào)告差錯(cuò)的需求。
ICMP是IP協(xié)議的一部分, 必須包含在每一個(gè)IP實(shí)現(xiàn)中。 ICMP數(shù)據(jù)報(bào)要通過IP協(xié)議發(fā)送出去, 它有多種類型, 可以提供多種服務(wù)。例如, 測(cè)試報(bào)文目的可達(dá)性和狀態(tài), 報(bào)告不可達(dá)報(bào)文目的地址, 數(shù)據(jù)報(bào)流量控制, 網(wǎng)關(guān)路由改變請(qǐng)求, 檢查循環(huán)路由或超長路由, 報(bào)告錯(cuò)誤數(shù)據(jù)報(bào)報(bào)頭以獲取網(wǎng)絡(luò)地址等。
1.ICMP報(bào)文格式
每個(gè)ICMP報(bào)文都是作為IP數(shù)據(jù)報(bào)的數(shù)據(jù)部分在網(wǎng)際間傳送的。 ICMP報(bào)文格式如下圖所示。
其中, Type字段為1個(gè)字節(jié), 指出ICMP報(bào)文的類型, 參見表5.1。 Code字段也是1個(gè)字節(jié), 提供關(guān)于報(bào)文類型的進(jìn)一步信息。 Checksum字段共兩個(gè)字節(jié), 提供了整個(gè)ICMP報(bào)文的校驗(yàn)和, 其校驗(yàn)和算法與IP報(bào)頭的校驗(yàn)和算法相同。其它信息字段為4個(gè)字節(jié), 一般不使用(為全 0)。
Type ICMP報(bào)文類型 Type ICMP報(bào)文類型
0
回送響答
12
數(shù)據(jù)報(bào)參數(shù)錯(cuò)
3
目的不可達(dá)
13
時(shí)戳請(qǐng)求
4
報(bào)源抑制
14
時(shí)戳響答
5
重定向
17
屏蔽碼請(qǐng)求
8
回送請(qǐng)求
18
屏蔽碼響應(yīng)
11
數(shù)據(jù)報(bào)超時(shí)
ICMP報(bào)文類型
ICMP報(bào)文數(shù)據(jù)區(qū)包含出錯(cuò)數(shù)據(jù)報(bào)報(bào)頭以及該數(shù)據(jù)報(bào)前64位數(shù)據(jù)(TCP/IP規(guī)定, 各個(gè)協(xié)議都要把重要信息包含在這64位數(shù)據(jù)中), 提供這些信息的目的在于幫助源主機(jī)分析出錯(cuò)的數(shù)據(jù)報(bào)。
盡管ICMP報(bào)文是被封裝在 IP報(bào)頭中作為IP數(shù)據(jù)報(bào)的一部分向外發(fā)送的, 但并不能就此把ICMP看作是一種高層協(xié)議。如前所述, 它只是IP的一部分, 為IP提供差錯(cuò)處理功能。
2.ICMP差錯(cuò)報(bào)文
ICMP最基本的功能就是提供差錯(cuò)報(bào)告?zhèn)鬏敊C(jī)制。對(duì)于差錯(cuò)的處理方式, ICMP協(xié)議沒有嚴(yán)格的規(guī)定。事實(shí)上, 源主機(jī)收到ICMP差錯(cuò)報(bào)文后, 還需要與應(yīng)用程序聯(lián)系起來, 才能決定相應(yīng)的差錯(cuò)處理方式。
ICMP的差錯(cuò)報(bào)告都是采用路由器向源主機(jī)報(bào)告模式, 即當(dāng)路由器發(fā)現(xiàn)IP數(shù)據(jù)報(bào)差錯(cuò)后, 使用ICMP報(bào)文向該IP數(shù)據(jù)報(bào)的源主機(jī)報(bào)告其差錯(cuò)。同時(shí), 發(fā)生差錯(cuò)的IP數(shù)據(jù)報(bào)被丟棄掉, 不再向前轉(zhuǎn)發(fā)。
在ICMP差錯(cuò)報(bào)文中, 有目的不可達(dá)報(bào)文、超時(shí)報(bào)文和參數(shù)出錯(cuò)報(bào)文等。
(1) 目的不可達(dá)報(bào)文
路由器的主要功能是為數(shù)據(jù)報(bào)選擇路由并轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)。當(dāng)從路由表上查不出與IP數(shù)據(jù)報(bào)目的IP地址對(duì)應(yīng)的路由時(shí), 則會(huì)發(fā)生目的不可達(dá)的錯(cuò)誤。這時(shí), 路由器要向源主機(jī)發(fā)送目的不可達(dá)的ICMP報(bào)文。目的不可達(dá)ICMP報(bào)文類型(Type)為 3, 并進(jìn)一步細(xì)分成 13 種子類, 用代碼(Code)來標(biāo)識(shí), 其它信息字段未用, 為全 0。
(2) 超時(shí)報(bào)文
數(shù)據(jù)報(bào)每經(jīng)過一個(gè)路由器時(shí), 其生存期都要根據(jù)其滯留時(shí)間而遞減。如果在一個(gè)路由器上數(shù)據(jù)報(bào)的生存期遞減為0, 該路由器則會(huì)丟棄這個(gè)數(shù)據(jù)報(bào), 并向源主機(jī)發(fā)送Type=11、Code=0 的ICMP報(bào)文, 報(bào)告該數(shù)據(jù)報(bào)生存期超時(shí)。
當(dāng)目的主機(jī)在對(duì)數(shù)據(jù)報(bào)進(jìn)行重裝的過程中發(fā)生重裝超時(shí)時(shí), 將丟棄現(xiàn)已收到的各個(gè)分段數(shù)據(jù)報(bào), 并在第 1 個(gè)分段數(shù)據(jù)報(bào)到達(dá)后向源主機(jī)節(jié)點(diǎn)發(fā)送Type=11、Code=1的ICMP報(bào)文。 (3) 參數(shù)出錯(cuò)報(bào)文
當(dāng)路由器或目的主機(jī)在對(duì)收到的IP數(shù)據(jù)報(bào)進(jìn)行處理時(shí), 如果發(fā)現(xiàn)在IP報(bào)頭參數(shù)中含有無法繼續(xù)完成報(bào)文處理的錯(cuò)誤時(shí), 則將該數(shù)據(jù)報(bào)丟棄, 并向源主機(jī)發(fā)送Type=12、Code=0的ICMP報(bào)文, 并且在ICMP報(bào)文的其它信息字段中用1個(gè)字節(jié)作為指針來指出差錯(cuò)在數(shù)據(jù)報(bào)中的位置(以字節(jié)為單位)。
3. ICMP控制報(bào)文
ICMP控制報(bào)文主要用于擁塞控制和路由控制。
(1) 報(bào)源抑制報(bào)文
當(dāng)路由器的數(shù)據(jù)報(bào)輸入速度超過路由器的轉(zhuǎn)發(fā)速度時(shí), 則可能發(fā)生擁塞現(xiàn)象。擁塞控制的概念與流量控制有所不同。流量控制主要是解決端點(diǎn)對(duì)端點(diǎn)的傳輸速率匹配問題, 屬于局部控制;而擁塞控制帶有全局性質(zhì)。因?yàn)閾砣赡苡绊懙秸麄€(gè)網(wǎng)絡(luò)的數(shù)據(jù)傳輸, 故需要各個(gè)節(jié)點(diǎn)共同參與協(xié)同解決。
擁塞控制的方法有很多, 而TCP/IP采用的是報(bào)源抑制技術(shù), 即抑制源主機(jī)節(jié)點(diǎn)發(fā)送數(shù)據(jù)報(bào)的速率。具體的過程如下:
①當(dāng)路由器節(jié)點(diǎn)由于缺乏緩沖區(qū)空間而無法接收數(shù)據(jù)報(bào)時(shí), 或者當(dāng)目的主機(jī)節(jié)點(diǎn)由于數(shù)據(jù)報(bào)的到達(dá)速度太快而無法繼續(xù)處理時(shí), 它們都將丟棄這些輸入的數(shù)據(jù)報(bào), 并向源主機(jī)節(jié)點(diǎn)發(fā)送Type=4、Code=0的報(bào)源抑制ICMP報(bào)文。
②當(dāng)源主機(jī)節(jié)點(diǎn)收到報(bào)源抑制 ICMP報(bào)文后, 相應(yīng)地降低其報(bào)文發(fā)送速度, 直到不再收到報(bào)源抑制ICMP報(bào)文為止。然后, 源主機(jī)節(jié)點(diǎn)又逐漸增加它的報(bào)文發(fā)送速度, 直到再一次出現(xiàn)報(bào)源抑制ICMP報(bào)文為止。
對(duì)于路由器和目的主機(jī)節(jié)點(diǎn)而言, 理想的報(bào)源抑制報(bào)文發(fā)送時(shí)間是在當(dāng)前輸入數(shù)據(jù)報(bào)占用的緩沖區(qū)容量接近系統(tǒng)限制時(shí)。這樣可以避免由于輸入數(shù)據(jù)報(bào)占用的緩沖區(qū)容量超過系統(tǒng)限制而被丟棄, 從而可以減少網(wǎng)絡(luò)重發(fā)的數(shù)據(jù)量。
(2) 重定向報(bào)文
重定向功能提供了一種路由優(yōu)化控制機(jī)制, 使源主機(jī)能以動(dòng)態(tài)方式尋址最短路徑。通常, ICMP重定向報(bào)文只能在同一網(wǎng)絡(luò)中的源主機(jī)與路由器之間使用。
當(dāng)路由器R1從處于同一子網(wǎng)的主機(jī)H1收到一個(gè)需轉(zhuǎn)發(fā)的IP數(shù)據(jù)報(bào)時(shí), R1將檢查自身的路由表信息, 并假設(shè)它選定了下一個(gè)路由器R2繼續(xù)轉(zhuǎn)發(fā)該數(shù)據(jù)報(bào)。如果這時(shí)R1判別確認(rèn)R2和H1也處于同一子網(wǎng)時(shí), R1就向H1發(fā)送重定向ICMP報(bào)文, 通知H1將數(shù)據(jù)報(bào)直接發(fā)給R2將會(huì)是一條較短的傳送路徑。
重定向報(bào)文的類型 (Type)為 5, 分成四個(gè)子類:
·Code=0:網(wǎng)絡(luò)重定向數(shù)據(jù)報(bào);
·Code=1:主機(jī)重定向數(shù)據(jù)報(bào);
·Code=2:服務(wù)類型和網(wǎng)絡(luò)重定向數(shù)據(jù)報(bào);
·Code=3:服務(wù)類型和主機(jī)重定向數(shù)據(jù)報(bào)。
在重定向報(bào)文的其它信息字段中要填入重定向的路由器(如R2)IP地址。
4.ICMP請(qǐng)求/應(yīng)答報(bào)文
(1) 回送請(qǐng)求與響應(yīng)報(bào)文
回送請(qǐng)求與響應(yīng)報(bào)文主要用于測(cè)試網(wǎng)絡(luò)目的節(jié)點(diǎn)的可達(dá)性。源節(jié)點(diǎn)使用ICMP回送請(qǐng)求報(bào)文向某一特定的目的主機(jī)發(fā)送請(qǐng)求, 目的節(jié)點(diǎn)收到請(qǐng)求后必須使用ICMP回送響應(yīng)報(bào)文來響應(yīng)對(duì)方。在許多TCP/IP實(shí)現(xiàn)中, 提供的一種用戶命令Ping便是利用這種ICMP回送請(qǐng)求/響應(yīng)報(bào)文來測(cè)試目的可達(dá)性的。
(2) 時(shí)戳請(qǐng)求與響應(yīng)報(bào)文
時(shí)戳請(qǐng)求與響應(yīng)報(bào)文主要用于估算源和目的節(jié)點(diǎn)間的報(bào)文往返時(shí)間。在報(bào)文中使用了三個(gè)時(shí)戳字段:初始時(shí)戳字段是源節(jié)點(diǎn)發(fā)送時(shí)戳請(qǐng)求報(bào)文的時(shí)間;接收時(shí)戳字段是目的節(jié)點(diǎn)接收到時(shí)戳請(qǐng)求報(bào)文的時(shí)間;發(fā)送時(shí)戳字段是目的節(jié)點(diǎn)發(fā)送時(shí)戳響應(yīng)報(bào)文的時(shí)間。源節(jié)點(diǎn)首先發(fā)送時(shí)戳請(qǐng)求報(bào)文,然后等待目的節(jié)點(diǎn)返回其響應(yīng)報(bào)文,并根據(jù)這三個(gè)時(shí)戳字段來估算兩個(gè)節(jié)點(diǎn)間的報(bào)文往返時(shí)間。
(3) 屏蔽碼請(qǐng)求與響應(yīng)報(bào)文
屏蔽碼請(qǐng)求與響應(yīng)報(bào)文主要用于源節(jié)點(diǎn)獲取所在網(wǎng)絡(luò)的IP地址屏蔽碼信息。源節(jié)點(diǎn)在發(fā)送請(qǐng)求報(bào)文時(shí), 將IP報(bào)頭中的源和目的IP地址字段的網(wǎng)絡(luò)號(hào)部分設(shè)為0。這樣網(wǎng)絡(luò)上的目的節(jié)點(diǎn)(通常為路由器)接收到該請(qǐng)求后, 填寫好網(wǎng)絡(luò)的屏蔽碼向源節(jié)點(diǎn)回送響應(yīng)報(bào)文。