標籤:
1、引言
IP是TCP/IP協議族中最核心的協議。所有的TCP、UDP、ICMP及IGMP資料都以IP資料報格式傳輸。IP提供不可靠、不需連線的資料報傳送服務。
(1)不可靠
它不能保證IP資料報能成功地到達目的地。IP僅提供最好的傳輸服務。如果發生某種錯誤,如某個路由器暫時用完了緩衝區,IP有一個簡單的錯誤處理演算法:丟棄該資料報,然後發送ICMP訊息報給信源端。任何要求的可靠性必須由上層來提供(如TCP)。
(2)無串連
IP並不維護任何關於後續資料報的狀態資訊。每個資料報的處理是相互獨立的。即IP資料報可以不按發送順序接收。如果一信源向相同的信宿發送兩個連續的資料報(先是A,後是B),每個資料報都是獨立地進行路由選擇,可能選擇不同的路線,因此B可能在A到達之前先到達。
2、IP首部
IP資料報的格式3-1所示。
IP資料報說明:
(1)普通的IP首部長為20個位元組,除非含有選項欄位。最高位在左邊,記為0 bit;最低位在右邊,記為31 bit。
(2)4個位元組的32 bit值以下面的次序傳輸:首先是0~7 bit,其次8~15 bit,然後1 6~23 bit,最後是24~31 bit。這種傳輸次序稱作big endian位元組序。由於TCP/IP首部中所有的二進位整數在網路中傳輸時都要求以這種次序,因此又稱作網路位元組序。以其他形式儲存二進位整數的機器,如little endian格式,則必須在傳輸資料之前把首部轉換成網路位元組序。
(3)目前的協議版本號碼是4,因此IP有時也稱作IPv4。
(4)服務類型(TOS)欄位包括一個3 bit的優先權子欄位(現在已被忽略),4 bit的TOS子欄位和1 bit未用位,但必須置0。4 bit的TOS分別代表:最小時延、最大輸送量、最高可靠性和最小費用。 4 bit中只能置其中1 bit。如果所有4 bit均為0,那麼就意味著是一般服務。圖3-2列出了對不同應用建議的TOS值。
注意:現在大多數的TCP/IP實現都不支援TOS特性。
(5)總長度欄位是指整個IP資料報的長度,以位元組為單位。由於該欄位長16位元,所以IP資料報最長可達65535位元組。
注意:儘管可以傳送一個長達65535位元組的IP資料報,但是大多數的鏈路層都會對它進行分區。而且,主機也要求不能接收超過576位元組的資料報。
(6)識別欄位唯一地標識主機發送的每一份資料報。通常每發送一份報文它的值就會加1。
(7)TTL存留時間欄位設定了資料報可以經過的最多路由器數。它指定了資料報的存留時間。 TTL的初始值由源主機設定(通常為32或64),一旦經過一個處理它的路由器,它的值就減去1。當該欄位的值為0時,資料報就被丟棄,並發送ICMP報文通知源主機。
(8)協議欄位,它可以識別是哪個協議向IP傳送資料。
(9)首部檢驗和欄位是根據IP首部計算的檢驗和碼。
(10)任選項,是資料報中的一個可變長的可選資訊。這些選項很少被使用,並非所有的主機和路由器都支援這些選項。
3、IP路由選擇
IP路由選擇是簡單的,特別對於主機來說。如果目的主機與源主機直接相連(如點對點鏈路)或都在一個共用網路上(乙太網路或令牌環網),那麼IP資料報就直接送到目的主機上。否則,主機把資料報發往一預設的路由器上,由路由器來轉寄該資料報。
說明:大多數多使用者系統,都可以配置成一個路由器。我們可以為它指定主機和路由器都可以使用的簡單路由演算法。本質上的區別在於主機從不把資料報從一個介面轉寄到另一個介面,而路由器則要轉寄資料報。
(1)IP資料報處理過程
IP可以從TCP、UDP、ICMP和IGMP接收資料報(即在本地產生的資料報)並進行發送,或者從一個網路介面接收資料報(待轉寄的資料報)並進行發送。IP層在記憶體中有一個路由表。當收到一份資料報並進行發送時,它都要對該表搜尋一次。當資料報來自某個網路介面時, IP首先檢查目的IP地址是否為原生IP地址之一或者IP廣播位址。
如果是這些地址:資料報就被送到由IP首部協議欄位所指定的協議模組進行處理。如果不是這些地址:如果IP層被設定為路由器的功能,那麼就對資料報進行轉寄;否則資料報被丟棄。
(2)路由表包含的資訊
路由表中的每一項都包含下面這些資訊:
1)目的IP地址。
它既可以是一個完整的主機地址,也可以是一個網路地址,由該表目中的標誌欄位來指定。主機地址有一個非0的主機號,以指定某一特定的主機,而網路地址中的主機號為0,以指定網路中的所有主機(如乙太網路,令牌環網)。
2)下一跳路由器的IP地址,或者有直接連接的網路IP地址。
下一跳路由器是指一個在直接相連網路上的路由器,通過它可以轉寄資料報。下一跳路由器不是最終的目的,但是它可以把傳送給它的資料報轉寄到最終目的。
3)標誌。
其中一個標誌指明目的IP地址是網路地址還是主機地址,另一個標誌指明下一跳路由器是否為真正的下一跳路由器,還是一個直接相連的介面。
4)為資料報的傳輸指定一個網路介面。
(3)IP路由選擇主要完成的功能
IP路由選擇是逐跳地進行的。IP並不知道到達任何目的的完整路徑(當然,除了那些與主機直接相連的目的)。所有的IP路由選擇只為資料報傳輸提供下一跳路由器的IP地址。它假定下一跳路由器比發送資料報的主機更接近目的,而且下一跳路由器與該主機是直接相連的。
1)搜尋路由表,尋找能與目的IP地址完全符合的表目(網路號和主機號都要匹配)。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網路介面(取決於標誌欄位的值)。
2)搜尋路由表,尋找能與目的網路號相匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或直接連接的網路介面。
3)搜尋路由表,尋找標為“預設”的表目。如果找到,則把報文發送給該表目指定的下一站路由器。
說明:
(1)如果上面這些步驟都沒有成功,那麼該資料報就不能被傳送。如果不能傳送的資料報來自本機,那麼一般會向產生資料報的應用程式返回一個“主機不可達”或“網路不可達”的錯誤。
(2)完整主機地址匹配在網路號匹配之前執行。只有當它們都失敗後才選擇預設路由。
(3)為一個網路指定一個路由器,而不必為每個主機指定一個路由器,這是IP路由選擇機制的一個基本特性。這樣做可以極大地縮小路由表的規模,例如Internet上的路由器有只有幾千個表目,而不會是超過100萬個表目。
4、子網定址
所有的主機都要求支援子網編址。不是把IP地址看成由單純的一個網路號和一個主機號組成,而是把主機號再分成一個子網號和一個主機號。原因是:A類和B類地址為主機號分配了太多的空間,可分別容納的主機數為2^24-2和2^16-2,在一個網路中人們並不安排這麼多的主機。
說明:全0或全1的主機號都是無效的,因此總數減去2。
例如:有一個B類網路地址(140.252),在剩下的16bit中,8 bit用於子網號,8 bit用於主機號,這樣就允許有254個子網,每個子網可以有254台主機。
說明:子網對外部路由器來說隱藏了內部網路組織(一個校園或公司內部)的細節。縮減了路由表的規模,但子網對於子網內部的路由器是不透明的。
5、子網路遮罩
任何主機在引導時進行的部分配置是指定主機IP地址。除了此以外,還需要知道有多少位元用於子網號和多少位元用於主機號。這是在引導過程中通過子網路遮罩來確定的。子網路遮罩是一個32 bit的值,其中值為1的位元留給網路號和子網號,為0的位元留給主機號。
例如:一個B類地址的兩種不同的子網路遮罩格式。
第一個例子,子網號和主機號都是8 bit。第二個例子,子網號是10 bit,主機號是6 bit。
6、特殊情況的IP地址
介紹7個特殊的IP地址。0表示所有位元位全為0;-1表示所有位元位全為1; netid、subnetid和hostid分別表示不為全0或全1的對應欄位。子網號欄為空白表示該地址沒有進行子網劃分。
7、ifconfig和netstat命令
(1)ifconfig(8)命令一般在引導時運行,以配置主機上的每個介面。由於撥號介面可能會經常接通和掛斷(如SLIP鏈路),每次線路接通和掛斷時,ifconfig都必須以某種方法運行。這個過程如何完成取決於使用的SLIP軟體。
(2)netstat(1)命令提供系統上的介面資訊。-i參數將列印出介面資訊,-n參數則列印出IP地址,而不是主機名稱字。
這個命令列印出每個介面的MTU、輸入分組數、輸入錯誤、輸出分組數、輸出錯誤、衝突以及當前的輸出隊列長度。
《TCP/IP詳解卷1:協議》——第3章 IP:網際協議(轉載)