Internet協定

Internet協定

Internet協定(Internet Protocol)是一個協定簇的總稱,其本身並不是任何協定。一般有檔案傳輸協定、電子郵件協定、超文本傳輸協定、通信協定等。

協定介紹

產生原因

IP協定是用於將多個包交換網路連線起來的,它在源地址和目的地址之前傳送一種稱之為數據包的東

Internet協定 Internet協定

西,它還提供對數據大小的重新組裝功能,以適應不同網路對包大小的要求。

範圍

IP的責任就是把數據從源傳送到目的地。它不負責保證傳送可靠性,流控制,包順序和其它對於主機到主機協定來說很普通的服務。

接口

這個協定由主機到主機協定調用,而此協定負責調用本地網路協定將數據報傳送以下一個網關或目的主機。例如TCP可以調用IP協定,在調用時傳送目的地址和源地址作為參數,IP形成數據報並調用本地網路(協定)接口傳送數據報。

操作

IP實現兩個基本功能:定址和分段。IP可以根據數據報報頭中包括的目的地址將數據報傳送到目的地址,在此過程中IP負責選擇傳送的道路,這種選擇道路稱為路由功能。如果有些網路內只能傳送小數據報,IP可以將數據報重新組裝並在報頭域內註明。IP模組中包括這些基本功能,這些模組存在於網路中的每台主機和網關上,而且這些模組(特別在網關上)有路由選擇和其它服務功能。對IP來說,數據報之間沒有什麼聯繫,對IP不好說什麼連線或邏輯鏈路。

IP使用四個關鍵技術提供服務:服務類型,生存時間,選項和報頭校驗碼。服務類型指希望得到的服務質量。服務類型是一個參數集,這些參數是Internet能夠提供服務的代表。這種服務類型由網關使用,用於在特定的網路,或是用於下下一個要經過的網路,或是下一個要對這個數據報進行路由的網關上選擇實際的傳送參數。生存時間是數據報可以生存的時間上限。它由傳送者設定,由經過路由的地方處理。如果未到達時生存時間為零,拋棄此數據報。對於控制函式來說選項是重要的,但對於通常的通信來說它沒有存在的必要。選項包括時間戳,安全和特殊路由。報頭校驗碼保證數據的正確傳輸。如果校驗出錯,拋棄整個數據報。

IP不提供可靠的傳輸服務,它不提供端到端的或(路由)結點到(路由)結點的確認,對數據沒有差錯控制,它只使用報頭的校驗碼,它不提供重發和流量控制。如果出錯可以通過ICMP報告,ICMP在IP模組中實現。

內容

檔案傳輸協定

FTP協定 FTP協定

檔案傳輸協定(File Transfer Protocol,FTP)是一套允許檔案在不同的Internet計算機之間進行交換的規則。它與HTTP不同,後者供網頁瀏覽器請求網頁和相關檔案以顯示某一頁面,FTP只是用來將檔案從一台計算機傳送到另一台。網站開發人員通常使用FTP將網頁從他們自己的計算機傳送到伺服器,FTP也常常用來將程式和檔案從其他伺服器下載到個人計算機。請參閱附錄中的“網頁開發人員參考”之“FTP網頁發布教程”,了解更多關於FTP的信息。

電子郵件協定

POP3工作模式圖 POP3工作模式圖

我們大部分人對電子郵件已經司空見慣,但它的順利運行牽涉到兩台伺服器:一台郵件接收伺服器和一台郵件傳送伺服器。當你給別人傳送郵件時,使用的是簡單郵件傳輸協定(SMTP);當你接收郵件時,使用的是郵局協定(POP,現在是POP3)和Internet信息存取協定(IMAP)。


超文本傳輸協定

HTTP傳輸模式圖 HTTP傳輸模式圖

超文本傳輸協定HTTP是一組在Web上傳輸檔案的規則,例如文本、圖形圖像、聲音、視頻和其他多媒體檔案。網頁瀏覽器和網頁伺服器通常使用這一協定。當網頁瀏覽器用戶以輸入網址或點擊超級連結的方式請求一個檔案的時候,瀏覽器便建立一個HTTP請求並把它傳送到伺服器,目標機器上的網頁伺服器收到請求後進行必要的處理,再將被請求的檔案和相關的媒體檔案傳送出去,進行應答。

通信協定

一、 通信協定的種類和特點

目前常見的通信協定主要有:NetBEUI、IPX/SPX、NWLink、TCP/IP,在這幾種協定中用得最多、最為複雜的當然還是TCP/IP協定,最為簡單的是NetBEUI協定,它簡單得不需要任何設定即可成功配置。

1、 NetBEUI協定

NetBEUI協定它的全稱是:NetBIOS Extend User Interface,即用戶擴展接口,它是由IBM於1985年公司開發的,它是一種體積小、效率高、速度快的通信協定,同時它也是微軟最為喜愛的一種協定。它主要適用於早期的微軟作業系統如:DOS、LAN Manager、Windows3.x和Windows for Workgroup,但微軟在當今流行的WIN9X和WINNT中仍把它視為固有預設協定,由此可見它並不是我們所認為是“多餘”的,而且在有的作業系統中連網還是必不可少的,如在用WIN9X和WINME組網進入NT網路時一定不能僅用TCP/IP協定,還必需加上“NetBEUI”協定,否則就無法實現網路連通,不信試試看!

因為它的出現比較早,也就有它的局限性,NetBEUI是專門為幾台到百多機所組成的單段網路而設計的,它不具有跨網段工作的能力,也就是說它不具有“路由”功能,如果您在一伺服器或工作站上安裝了多個網卡作網橋時,將不能使用NetBEUI作為通信協定,這一點必需記清楚!

NetBEUI通信協定的特點就是:a、體積小,因原來就要是DOS、LAN Manger等較低版本的作業系統,故它對系統的要求不高,運行後占用系統資源最少;b、上面已講過,也恐是因為主要服務的對象較低版本的作業系統,它不具有路由功能,不能實現跨網路通信;c、因為簡單,對系統要求低,也就適合初學組網人員學習使用。

2、IPX/SPX協定

IPX/SPX協定的全稱為:Internetwork Packet Exchange/Sequences Packet Exchange,網際包交換/順序包交換。它是NOVELL公司為了適應網路的發展而開發的通信協定,它的體積比較大,但它在複雜環境下有很強的適應性,同時它也具有“路由”功能,能實現多網段間的跨段通信。當用戶接入的是NetWare伺服器時,IPX/SPX及其兼容協定應是最好的選擇。但如在Windows環境中一般不用它,特別要強調的是在NT網路和WIN9X對等網中無法直接用IPX/SPX進行通信。

IPX/SPX的工作方式較簡單,不需要任何配置,它可通過“網路地址”來識別自己的身份。在整個協定中IPX是NetWare最底層的協定,它只負責數據在網路中的移動,並不保證數據傳輸是否成功,而SPX在協定中負責對整個傳輸的數據進行無差錯處理。在NT中提供了兩個IPX/SPX的兼容協定:NWLink IPX/SPX 兼容協定、NWLink NetBIOS,兩者統稱為NWLink 通信協定。它繼承了IPX/SPX協定的優點,更適應了微軟的作業系統和網路環境,當需要利用Windows系統進入NetWare伺服器時,NWLink通信協定是最好的選擇。

3、 TCP/IP協定

TCP/IP協定的全稱是:Transmission Control Protocol /Internet Protocol,即傳輸控制協定/網際協定。它是微軟公司為了適應不斷發展的網路,實現自己主流作業系統與其它系統間不同網路的互連而收購開發的,它是目前最常用的一種協定(包括INTERNET),也可算是網路通信協定的一種通信標準協定,同時它也是最複雜、最為龐大的一種協定。TCP/IP協定最早用於UNⅨ系統中,現在是Internet的基礎協定。

TCP/IP通信協定具有很靈活性,支持任意規模的網路,幾乎可連線所有的伺服器和工作站,正因為的靈活性也帶來了它的複雜性,它需要針對不同網路進行不同設定,且每個節點至少需要一個“IP位址”、一個“子網掩碼”、一個“默認網關”和一個“主機名”。但是在區域網路中微軟為了簡化TCP/IP協定的設定,在NT中配置了一個動態主機配置協定(DHCP),它可客戶端自動分配一個IP位址,避免了出錯。

TCP/IP通信協定當然也有“路由”功能,它的地址是分級的,不同於IPX/SPX協定,這樣系統就很容易找到網上的用戶,IPX/SPX協定用的是一種廣播協定,它經常會出現廣播包堵塞,無法獲得最佳網路頻寬。但特別要注意的一點就是在用WIN9X和WINME組網進入NT網路時一定不能僅用TCP/IP協定,還必需加上“NetBEUI”協定,否則就無法實現網路連通。

二、 協定選擇的原則

我們在選擇網路通信協定時為了儘量做到一次成功,最好遵循以下原則:

1、 所選擇的協定要與網路結構、功能一致

如果您的網路有網橋等類似路由設備,則必需選擇具有路由功能的協定,如IPX/SPX、TCP/IP等,絕對不能選擇NetBEUI作為通信協定。但是您的網路沒有路由選擇功能,只是單一的網段,能用NetBEUI作為通信協定的儘量選用,因為此協定占用系統資源最少,運行速度最快,如在DOS下與NT伺服器相連,則最好選用NetBEUI作為通信協定,它比TCP/IP協定快且穩定,這一點我是深有體會的。以前我們公司在DOS通常用TCP/IP作為協定,但總是出現當機,有時根本連不上網,但改用`NetBEUI作為通信協定後,系統性能一下得到了提高。要注意的一點是如果用NetBEUI作為通信協定,則在您的NT伺服器上同時也要裝上此協定,否則根本行不通!還有就是在WIN9X(包括WINME)要實現與NT伺服器成功連網則必需在客戶和服務端安裝上`NetBEUI協定,否則可能連不上網,這一點我也做過多次試驗。當然對於較複雜的網路還是選擇TCP/IP協定好。

2、 儘量選用一種協定

如果可能的話最好只選用一種通信協定,因為每一仲協定都要占用系統的記憶體資源的,會影響系統的工作效率的,在絕大多數情況下一種協定是完全可以滿足連網需求的。

3、 保持協定的一致性

當您的網路要與其它網路進行通信時,要注意的是兩個網路在協定的選擇方面儘量一致,因為如果不一致,會導致在通信時互不相認,不過一般現在的通信協定標準中TCP/IP協定為絕大多數協定所接納、兼容,不過安裝TCP/IP協定一般是不會有這種不相認的現象出現的。

謬誤:

由於一些誤導,有很多人誤認為通信協定就是TCP/IP協定,只要安裝了它任何網路都可正常連通,認為其它協定沒有用,事實上,不同的網路協定都有其存在的必要。每一協定都有它所依賴的主要作業系統,不能隨便選取。在一個網路中運行良好的協定,在另一個卻未必能行得通。

總覽

聯繫

下圖顯示了IP協定在協定體系中的位置。

IP上下有兩個接口,一個是與主機與主機協定的接口,另一個是與本地網路的接口,本地網路可以是小型網路也可以大型網路,說不定的。

操作模式

下面的例子可以看到操作的模型是什麼。我們假設傳輸要經過中間網關。傳送進程調用本地IP模組傳送數據,同時傳送目的地址和其它參數作為調用參數。IP層準備數據報頭並把它加在需要傳送的數據之前。IP模組為這個網路地址決定一個本地網路地址,在這裡就是網關地址。IP傳送數據報和本地網路地址到網路接口。本地網路接口創建一個本地網路頭加在數據報上,然後向本地網路傳送。

加上本地網路頭的數據報到達網關後,本地網路接口去掉這個頭,將結果傳送給(網關上的)IP模組。這個IP模組決定目的主要的本地網路地址,然後再如上所述的過程傳送數據報到本地網路接口。這個本地網路接口創建一個本地網路頭加在數據報上,將數據報傳送到目的主機。在目的主機上,本地網路接口去掉數據報上的本地網路頭,將結果交給IP模組。IP模組決定數據報應該把數據報向哪一個應用程式傳送,系統會發出系統調用,IP模組返回源地址和其它參數。

功能描述

IP的功能就是把數據報在互聯的網路上傳送,通過將數據報在一個個IP模組間傳送直到目的模組來達到目的。網路中每個主機和網關上都有IP模組。數據報在一個個模組間通過路由處理網路地址傳送到目的地址。因此網路地址對於IP協定十分重要。如前所述,因為各個網路上的數據報大小可能不同,因此有必要對大的數據報進行分段。

定址

名字,地址和路由是有區別的,名字是我們要找的,地址指出這個名字在什麼地方,路由解決如何到那裡的問題。IP主要處理地址的問題。把名字和地址進行映射的工作由上層協定完成。IP模組將地址和本地網路地址加以映射,而將本地網路地址和路由進行映射則是低層協定的任務。

地址是32位長,由網路號和本地地址兩部分構成。地址有三類:A類的最高位為0,後7位表示網路號,其它的24位表示本地地址;B類前兩位為10,後14位表示網路地址,其它16位表示本地地址;C類三位為110,後21位是網路號,其它8位代表本地地址。

在將網路地址和本地網路地址進行映射時必須注意,有些主機可能使用幾個不同的IP位址(我們可以把本地網路地址理解為MAC地址)。我們必須能夠處理一台主機有幾個處理連線埠,而每個連線埠都有幾個邏輯的IP位址。

分段

對於不同的網路,其中傳送的包大小可能不一樣,因此把大包分小的功能是必須的。數據報也可以被標記為“不可分段”,如果一個數據報被如何標記了,那么在任何情況下都不準對它進行分段。如果不分段到不了目的地,那就把包在半路拋棄了。在本地網內進行的重新分段和重組對IP模組是不可見的,這種方法也可以使用。

本地網分段和重組把重組的各段加上標記,接收方使用這些標記使不同的段區別開來。段偏移量域告訴接收方應該把這一段放在什麼地方,多段標記指示最後一個段,利用不同的域完全可以重組一個數據報。標記域是用於唯一標記數據報的,它是最初的傳送方設定,而且要保證數據報在網路傳輸的全過程中它中唯一的。最初的傳送方把多段標記設定為零,段偏移量設定為零。

我們假設IP模組把一個大數據報分為兩個小的,IP模組首先取得數據報頭,再分隔數據為兩份,將數據報頭加在兩份數據上。分隔數據時以8個位元組為單位,第二段不一定是8個位元組,但第一個必須是。我們把第一段中的8位位元組數稱為段塊數(NFB)。新生成的第一個數據報內是生成的第一段數據,設定多段標記為1;新生成的第二個數據報內是生成的第二段數據,多段標記等於原來數據報內的值,段偏移量等於原數據報中的值加上NFB。上述過程可以從2擴展至N的情況。

對段的重組要求以下四個域有相同的值:標記,源地址,目標地址和協定。將不同的數據報根據自己帶的偏移量重新組合為新段,第一個段的偏移量為0,最後一個段的多段標記為0。

網關

網關在不同網路間傳送數據報,網關也實現網關到網關協定(GGP),它用於傳送路由和其它控制信息。網關中的高層協定根本不用實現,GGP的功能可以在IP模組內實現。

說明

Internet包頭格式

包頭格式如下:

版本:4位

此域標明包頭的格式。我們以IP版本4為例。

IHL:4位

Internet包頭長度是以32位為單位標記的包頭長度,它指向數據的開始位置,這個域的最小合法值為5。

服務類型:8位

它是一些指示服務質量的參數,這些參數用於在特定網路指示所需要的服務。有些網路會提供優先權服務。選擇的基本原則是以下三者的權衡:低延時,高可靠和高吞吐量。

0-2 優先權

3 0 = 通常延時 1 = 低延時

4 0 = 通常吞吐量 1 = 高吞吐量

5 0 = 通常可靠性 1 = 高可靠性

6-7 保留

優先權的說明如下:

111 - Network Control

110 - Internetwork Control

101 - CRITICECP

100 - Flash Override

011 - Flash

010 - Immediate

001 - Priority

000 - Routine

如果使用了延時(D),吞吐量(T)和可靠性(R)選項可以增加服務質量。這因各個網路不同而不同,沒有通用性。除了非常特殊的情況外,最多設定兩個參數就夠了。服務類型是用來指示如何對待在網路中傳送的數據報。網路控制優先權原來是用於一個網路中的,而實際中卻套用於每個網路了。互聯控制是用於網關控制的。如果只在一個網路中實現了這些參數,那個網路必須在自己的範圍之內控制對它們的訪問。

總長度:16位

總長度指的是數據報的長度,由位元組計,包括數據和報頭。允許數據報的大小為64K。這么大的數據報對大多數主機和網路來說是不適用的。但是,所有主機必須能夠接收大於576位元組的數據報,無論它們是一起來,還是分段來。如果知道對方主機能夠接收大於576位元組的數據報,最好在傳送時不要傳送小於576位元組的數據報。選擇576是因為576=512(數據)+64(報頭)。報頭最長不超過60位元組,通常為20位元組。

標識:16位

標記是傳送用於幫助重組分段的包的。

標記:3位

0 保留,必須為0

1 (DF) 0 = 可分段,1 = 不可分段

Bit 2 (MF) 0 = 最後一段,1 = 還有多段

0

1

2

0

D

F

M

F

段偏移:13位

此域指示這個段在應該在數據報中什麼位置,它以64位為單位計算,首段的偏移為零。

生存期:8位

此域說明數據報在網際網路系統生存的最大時間。如果此域的值為零,拋棄此數據報。在處理報頭的同時也處理此域。時間以秒計,但每個處理單元都至少會對TTL減一,即使時間小於一秒。

協定:8位

此域指示用於數據報數據部分的下一層協定。

頭校驗碼:16位

校驗碼只在頭部,因此頭域會在處理時改變,因此頭會經常改變。這種校驗方法比較容易計算,實驗證明它也是適用的,但它可能在未來被CRC校驗過程取代。

源地址和目的地址:32位,具體情況請看下文。

選項:長度不定

在數據報中可以有選項也可以沒有,但IP模組中必須有處理選項的功能。有些情況下,安全選項是必須的。它的長度不定,可以沒有也可以是多個。選項有兩種格式:

1 單獨一個選項類型位元組

2 一個選項類型位元組,一個選項長度位元組和實際選項數據位元組

選項長度是選項類型,長度本身和數據的長度。選項類型可被看作有3個域:

1位 複製標記

2位 選項類

5位 選項號

複製標記指這個選項要在分段是要存在於所有段中。

0 = 不複製

1 = 複製

選項類有:

0 = 控制

1 = 保留

2 = 調度和測量

3 = 保留

下面是具體選項:

CLASS

NUMBER

LENGTH

DESCRIPTION

0

0

-

選項表結束。只占一個位元組,沒有長度位元組

0

1

-

無操作。只占一個位元組,沒有長度位元組

0

2

11

安全,用於傳送安全,Compartmentation,用戶組(TCC)和DOD規則兼容的處理限制碼

0

3

變長

松源地址路由,使用源地址提供的信息進行路由

0

9

變長

緊源地址路由,使用源地址提供的信息進行路由

0

7

變長

記錄路由,用於跟蹤數據報採用的路由

0

8

4

流ID,用於傳送流標記

2

4

變長

Internet時間戳

特定選項定義

選項表結束

+--------+

00000000

+--------+

Type=0

此選項指示選項表的結束,它不一定和報頭結束點一致,它用於指示選項表的結束而不是每個選項的結束,只有當選項表結束位置和報頭結束位置不一致時使用。它可以被複製,引入或在分段時刪除。

無操作

+--------+

00000001

+--------+

Type=1

此選項可被用於選項間,它可以被複製,引入或在分段時刪除。

安全

此選項提供主機一種傳送安全,compartmentation,處理限制和TCC參數的方法。此選項的格式如下:

類型=130 長度=11

安全(S域):16位

安全共分16級,8級保留。

00000000 00000000 - 未分類的

11110001 00110101 - 機密

01111000 10011010 - EFTO

10111100 01001101 - MMMM

01011110 00100110 - PROG

10101111 00010011 - 限制的

11010111 10001000 - 秘密

01101011 11000101 - 絕對機密

00110101 11100010 - 保留

10011010 11110001 - 保留

01001101 01111000 - 保留

00100100 10111101 - 保留

00010011 01011110 - 保留

10001001 10101111 - 保留

11000100 11010110 - 保留

11100010 01101011 - 保留

Compartments(C域):16位

全0代表傳送的信息是非compartment的。

處理限制(H域):16位

控制值和版本標記是由字母和數字組成的,具體說明請參閱其它資料。

傳輸控制碼(TCC域):24位

提供控制流量的方法。TCC的值為三字母詞,在HQ DCA Code 530中有說明。在分段時必須複製它。

松源地址和記錄路由

+--------+--------+--------+-----------------+

10000011 length pointer route data

+--------+--------+--------+-----------------+

Type=131

松源地址和記錄路由(LSRR)可以由源地址提供路由信息,並記錄路由信息。這個選項以選項類型碼開始。第二位是選項長度,第三位是一個指針,指向路由數據中下一個要被處理的源地址,它的最小值為4。路由數據是由一系列地址組成的,每個地址是32位。如果指針大於長度,源路由為空(記錄的路由滿),路由要根據目的地址域進行。

如果目的地址已經達到,而指針未大於長度,源路由中的下一地址代替目的地址域中的地址,同時記錄的路由地址代替則使用過的源地址,將指針加4。這一以記錄的路由替換源路由的過程意味著選項(和IP頭一起作為一個整體)數據報在網路中經過處理後保持一個固定長度。它稱之為松源地址路由是因為網關或主機IP在達到路由的下一個地址時可以使用多箇中間網關。它在分段時必須複製。

緊源地址和記錄路由

+--------+--------+--------+-----------------+

10001001 length pointer route data

+--------+--------+--------+-----------------+

Type=137

緊源地址和記錄路由(SSRR)選項可以由源地址提供路由信息,並記錄路由信息。這個選項以選項類型碼開始。第二位是選項長度,第三位是一個指針,指向路由數據中下一個要被處理的源地址,它的最小值為4。路由數據是由一系列地址組成的,每個地址是32位。如果指針大於長度,源路由為空(記錄的路由滿),路由要根據目的地址域進行。

如果目的地址已經達到,而指針未大於長度,源路由中的下一地址代替目的地址域中的地址,同時記錄的路由地址代替則使用過的源地址,將指針加4。這一以記錄的路由替換源路由的過程意味著選項(和IP頭一起作為一個整體)數據報在網路中經過處理後保持一個固定長度。它稱之為緊源地址路由是因為網關或主機IP在達到路由的下一個地址時不可以使用中間網關。它在分段時必須複製。

記錄路由

+--------+--------+--------+-----------------+

00000111 length pointer route data

+--------+--------+--------+-----------------+

Type=7

此選項提供了記錄數據報路由的方法。這個選項以選項類型碼開始。第二位是選項長度,第三位是一個指針,指向路由數據中下一個要被處理的源地址,它的最小值為4。記錄的路由是由一系列IP位址構成的,每個IP位址是32位。如果指針大於長度,記錄路由數據域已滿。源主機必須為這一選項分配足夠大的空間。空間分定後不會因為加入地址而增加。初始內容必須為0。

當IP模組處理數據報時,它檢查是否有記錄路由選項,如果有,它將自己的IP位址放入記錄路由地址空間,指針值加4。如果地址空間已滿,模組不會把自己的IP位址加入了;如果空間未滿,可是不夠整個地址加入,模組會認為源數據報出錯並拋棄它。上面兩種情況下,ICMP參數信息訊息會傳送到源主機。在分段時不複製,而僅僅存在於第一個段。

流標記

10001000

00000010

流ID

類型=136 長度=4

此選項提供一種在不支持流的網路中傳送16位SATNET流標記的方法。分段時必須複製。

Internet時間戳

01000100

長度

指針

oflw標記

IP位址

時間戳

......

類型=68

選項長度是在選項內的類型,長度,指針和溢出標記位元組的大小。指針是從選項開始到時間戳結束的位元組數加一。最小值為5。當指針大於長度時時間戳域滿。溢出(oflw)(大小為4位)是IP模組號,這個模組因預設空間而不能註冊時間戳。它的值分別為:

0 -- 僅有時間戳,保存於連續的32位字中;

1 -- 每個時間戳前都有註冊單元的IP位址;

3 -- IP位址域是預先指定的,如果IP模組的地址和下一個指定的IP位址一致,則註冊自己的時間戳。

時間戳是從UT午夜時間開始以毫秒計算的,如果時間不以毫秒計算,或不能提供以UT午夜為基準,那用什麼時間倒都可以,只要時間戳的最高位設定為1,表示這不是一個標準值就行了。源主機必須為這一選項分配足夠大的空間。空間分定後不會因為加入地址而增加。初值必須為零或IP位址零這樣的偶對。如果空間已滿,模組在傳送數據報時不加入時間戳,但溢出計數仍然加一。

如果剩餘的空間不能使完全的時間戳加入,或溢出計數溢出,源數據報出錯並被拋棄。ICMP參數信息訊息會傳送到源主機。此選項在分段時不複製,僅在第一段出現。

填充:變長

報頭域填充用於保證報頭是32位的倍數。填充值為0。

討論

協定的實現必須健壯,每個實現都要保證與其它人的實現兼容。通常一個實現在傳送時應該遵守比較保守的策略,在接收時大可不必保守。也就是說,傳送構成良好的包,接收自己能夠解釋的包(有些錯誤也是將就著了)。

基本的Interent服務是面向數據報的,在網關處可以提供以數據報的分段和在目的主機的重組服務。當然,在一個網路內或在因遵守私下的協定而在一個網路的網關間進行分段和重組也是可以的,因為這對IP協定和高層協定是透明的。這種透明的分段稱為基於網路的分段,這裡不做討論。IP位址是在主機一級區別源地址和目的地址的。

定址

為了可以對網路大小進行靈活的控制,IP位址提供了幾類地址,一類是可以容納比較多主機的網路,一種容納的主機數就比較少,我們大家聽說過的什麼A類,B類地址,C類地址就是為了用於不同規模的網路而提出的。下面是一些地址格式:

最高位

格式

0

7位網路用,24位主機用

a

10

14位網路用,16位主機用

b

110

21位網路用,8位主機用

c

111

擴充地址模式

如果網路域為零意味著本網路,這種方式僅在於特定的ICMP訊息中使用;擴展的地址模型未定義。

由本地網路指定的本地地址必須考慮到單個的主機可以作為不同的網路主機使用。也就是說,必須在網路主機地址和網路主機接口之間進行映射,這種接口允許幾個IP位址對應一個接口。同時還應該考慮到一台主機有多個處理接口,對於從不同接收收到的信息應該看做是來自同一個IP位址的。

分段和重組

Internet標記域(ID)和源地址,目的地址和協定域一起用於確認數據報分段和重組。如果數據報不是最後一段,則設定多段標記位(MF)。段偏移域標記段位置,它是相對於未分段時的數據報而言的。段以8個位元組為單位,這樣的分段策略使未分段的數據報有全零的分段信息(MF = 0,段偏移= 0)。如果進行分段,邊界必須是8個位元組的倍數。這種格式允許2的13次方(8192)個8位元組段,一個數據報的最大長度剛好和長度域標明的數據64K一致。在分段時,有些選項被複製,有些則不。

每個IP模組必須能夠不分段地傳送68位元組的數據報。這因為IP包頭會達到60位元組,而最小數據段長為8,68=60+8;而它也必須能夠接收576位元組的數據,不論這數據是未分段的還是分段的。

會被分段影響的域包括:

⑴ 選項域

⑵ 多段標記

⑶ 段偏移

⑷ Internet包頭長度域

⑸ 總長度域

⑹ 包頭校驗碼

如果設定了不分段標記(DF),則不可進行分段,即使數據報會因此而被拋棄。如果接收主機不能進行重組時則需要設定此位。我們在進行無盤引導時,則需要設定這一位。下面通過例子說明這一過程。其中#代表不等於,X到Y指的是包括X,而不包括Y的所有數據。

能夠在下一個網路傳送的最大數據報稱為最大傳輸單元(MTU)。如果數據報的長度小於等於MTU,進行下一步;否則分為兩段,第一段的大小等於MTU,第二段就是剩餘的長度,將第一段傳送,如果第二段仍然大於MTU,則重複分段過程,直到可以傳送為止。下面我們給出一個定義:

FO - 段偏移

IHL - Internet包頭長度

DF - 不分段標記

MF - 多段標記

TL - 總長度

OFO - 原段偏移

OIHL - 原Internet包頭長度

OMF - 原多段標記

OTL - 原總長度

NFB - 段數

MTU - 最大傳輸單元

過程:

IF TL = MTU THEN 將此數據報提交給下一處理階段

ELSE IF DF = 1 THEN 拋棄數據報

ELSE 產生第一段:

⑴ 複製源internet包頭;

⑵ OIHL - IHL;OTL - TL;OFO - FO;OMF - MF;

⑶ NFB - (MTU-IHL4)8;

⑷ 附加第一個NFB8個數據位元組;

⑸ 校正包頭:MF - 1;TL - (IHL4)+(NFB8);重新計算校驗碼;

⑹ 提交數據段到下一個數據報處理階段;

如果要產生第二個段:

⑺ 有選擇地複製internet頭;

⑻ 附加剩餘數據;

⑼ 校正包頭:IHL - (((OIHL4)-(未複製的選項長度))+3)4;

TL - OTL - NFB8 - (OIHL-IHL)4);

FO - OFO + NFB;MF - OMF;重新計算校驗碼;

⑽ 將此段提交分段檢測;結束。

上例中除了最後一段外,其它段都達到了MTU的大小,各種實現不同,只要能夠得到的段小於等於MTU就可以了。

重組過程例子

對於每個數據報,緩衝區標記是由源地址,目的地址,協定和標記域一起確認的。如果數據報未分段,那就不需要進行重組,處理進行下一階段。重組需要的數據結構有:數據緩衝區,包頭緩衝區,段塊位表,數據長度域和計數器。段中的數據根據段偏移和長度放在相應位置,段塊標準表中的相應位根據接收的段塊被設定。

如果是第一段(段偏移為0),將包頭放於包頭緩衝區;如果是最後一段(多段標記為0),計算數據總長度。如果接收完了整個數據報,進行下一處理階段;如果沒有接收完,設定計數器值為當前計數器和此段中保存的生存時間之間比較在的一個,重組函式放棄控制權。如果逾時釋放所有緩衝區。計數器的初值是重組等待時間的下限。因為如果到達段中的生存時間大於計數器當前值等待時間增加,如果小於則不會減少。計數器的最大時間可以達到最大生存時間(大約為4.25分)。如果設定為15秒可能比較好,當然隨著實踐,這個值可能會有更改。這個值的選擇和緩衝區的大小和傳輸媒介有關,傳輸速度乘於計數器值等於緩衝區大小。

定義:

FO - 段偏移

IHL - Internet包頭長度

MF - 多段標記

TTL - 生存時間

NFB - 段塊數

TL - 總長度

TDL - 總數據長度

BUFID - 緩衝區標記

RCVBT - 段接收位表

TLB - 計數器下限

過程:

如果到達的數據段中的數據有部分或全部相同,上面的過程會使用數據的最新版本。

標記

標記是為了對特定數據報的段提供唯一的標記。如果數據報擁有相同的源地址,目的地址,協定和標記,IP模組會把他們認定是同一數據報。選擇的任何由傳送方擔任。傳送協定模組需要保持一個標記表,每個目的地址保持一個表項。然而,因此標記域允許65536個不同的值,有些主機能夠不考慮目的地仍然可以達到標記唯一的目的。高層協定也可以使用標記。

服務類型

服務類型(TOS)是網路服務質量的選擇。服務類型是由抽象參數確定的優先權,時延,吞吐量和可靠性的結合物。這些參數和一些實際對應的網路服務對應。對於什麼是時延,什麼是吞吐量之類的定義這裡就不多說了。

生存時間

生存時間由傳送者設定,是數據報在網路中最長的生存時間,如果逾時會拋棄數據報。網路中每個結點都會處理存在於包頭中的生存時間。此域的最少減少量為1,單位是秒。因此,最長的生存時間為255秒。每個處理模組必須對TTL減1,即使所使用的時間少於一秒也是如此。高層可靠連線協定是基於原重複數據報將不會在特定時間後到達,TTL是為了滿足這樣假設而存在。

選項

選項中數據報中是可選的,但在實現中必須有的。有沒有選項是傳送者說了算,每個IP模組必須能夠分析每個選項,每個選項域有多個選項。選項可能沒有達到32位的邊界,不足的以零填充以達到32位的倍數。

校驗碼

如果包頭髮生改變必須重新計算包頭校驗碼,校驗碼可以在一定程度上杜絕傳輸錯誤。有些應用程式允許數據報中的數據出錯,如果IP強調數據正確性,類似的應用程式也就用不成了。

錯誤

IP協定錯誤可由ICMP協定報告。

接口

接口的描述是功能性的,這個描述的具體實現機制會因為作業系統的不同而不同。不同的IP實現會有不同的用戶接口。但是起碼的子集是所有實現必須支持的。本節將描述這個基本子集。IP協定有上下有兩個接口,一個是面向本地網路的,另一個是面向高層協定或應用程式的,我們稱後一個接口為用戶。雖然IP協定是數據報協定,所以用於保存狀態的資源(記憶體)很少。

下面是一個高層接口範例:

SEND (src,dst,prot,TOS,TTL,BufPTR,len,Id,DF,opt = result)

上式中:

src = 源地址

dst = 目的地址

prot = 協定

TOS = 服務類型

TTL = 生存時間

BufPTR = 緩衝區指針

len = 緩衝區長度

Id = 標記

DF = 不分段

opt = 選項數據

result = 回響,回響分為OK和Error兩種;

OK = 傳送成功

Error = 參數錯誤或本地網路錯誤

優先權和安全性參數在選項中傳送。

RECV (BufPTR,prot,= result,src,dst,TOS,len,opt)

上式中:

BufPTR = 緩衝區指針

prot = 協定

result = 回響,回響分為OK和Error兩種;

OK = 傳送成功

Error = 參數錯誤

len = 緩衝區長度

src = 源地址

dst = 目標地址

TOS = 服務類型

opt = 選項數據

當用戶傳送數據報時,他執行SEND命令。IP模組在收到調用時,檢查傳送來的參數並準備傳送數據。如果參數合法而且本地網路正常接收數據,返回成功。如果參數不合法,或本地網路未接收數據,返回不成功。在未成功時會返回報告,報告內容會因實現不同而不同。

當數據報到達IP模組時,要么有一個RECV調用要么沒有。如果有這個調用會傳送信息給用戶;如果沒有,通知用戶信息到達。如果沒有找到應該通知的用戶,返回ICMP錯誤,拋棄數據。通知用戶可以通過假中斷或類似的機制,這視作業系統不同而不同。源地址包括在傳送調用中,IP模組可以檢查源地址是否是一個合法地址。

相關詞條

相關搜尋

熱門詞條

聯絡我們