第三章 IP:網際協議
IP是TCP/IP協議族中最為核心的協議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸(如圖1所示)。

圖1
IP提供不可靠、無連接的數據報傳送服務。不可靠(unreliable)的意思是它不能保證IP數據報能成功地到達目的地。IP僅提供最好的傳輸服務。如果發生某種錯誤時,如某個路由器暫時用完了緩沖區,IP有一個簡單的錯誤處理算法:丟棄該數據報,然后發送ICMP消息報給信源端。任何要求的可靠性必須由上層來提供(如TCP)。無連接(connectionless)的意思是IP并不維護任何關于后續數據報的狀態信息。每個數據報的處理是相互獨立的。這也說明,IP數據報可以不按發送順序接收。如果一信源向相同的信宿發送兩個連續的數據報(先是A,然后是B),每個數據報都是獨立地進行路由選擇,可能選擇不同的路線,因此B可能在A到達之前先到達。
IP首部
IP數據報的格式如圖2所示。普通的IP首部長為20個字節,除非含有選項字段。

圖2:IP數據報頭部格式
其中:
●版本(Version)字段:占4比特。用來表明IP協議實現的版本號,當前一般為IPv4,即0100。
●報頭長度(Internet Header Length,IHL)字段:占4比特。是頭部占32比特的數字,包括可選項。普通IP數據報(沒有任何選項),該字段的值是5,即160比特=20字節。此字段最大值為60字節。
●服務類型(Type of Service ,TOS)字段:占8比特。其中前3比特為優先權子字段(Precedence,現已被忽略)。第8比特保留未用。第4至第7比特分別代表延遲、吞吐量、可靠性和花費。當它們取值為1時分別代表要求最小時延、最大吞吐量、最高可靠性和最小費用。這4比特的服務類型中只能置其中1比特為1。可以全為0,若全為0則表示一般服務。服務類型字段聲明了數據報被網絡系統傳輸時可以被怎樣處理。例如:TELNET協議可能要求有最小的延遲,FTP協議(數據)可能要求有最大吞吐量,SNMP協議可能要求有最高可靠性,NNTP(Network News Transfer Protocol,網絡新聞傳輸協議)可能要求最小費用,而ICMP協議可能無特殊要求(4比特全為0)。實際上,大部分主機會忽略這個字段,但一些動態路由協議如OSPF(Open Shortest Path First Protocol)、IS-IS(Intermediate System to Intermediate System Protocol)可以根據這些字段的值進行路由決策。
●總長度字段:占16比特。指明整個數據報的長度(以字節為單位)。最大長度為65535字節。
●標志字段:占16比特。用來唯一地標識主機發送的每一份數據報。通常每發一份報文,它的值會加1。
●標志位字段:占3比特。標志一份數據報是否要求分段。
●段偏移字段:占13比特。如果一份數據報要求分段的話,此字段指明該段偏移距原始數據報開始的位置。
●生存期(TTL:Time to Live)字段:占8比特。用來設置數據報最多可以經過的路由器數。由發送數據的源主機設置,通常為32、64、128等。每經過一個路由器,其值減1,直到0時該數據報被丟棄。
●協議字段:占8比特。指明IP層所封裝的上層協議類型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等。
●頭部校驗和字段:占16比特。內容是根據IP頭部計算得到的校驗和碼。計算方法是:對頭部中每個16比特進行二進制反碼求和。(和ICMP、IGMP、TCP、UDP不同,IP不對頭部后的數據進行校驗)。
●源IP地址、目標IP地址字段:各占32比特。用來標明發送IP數據報文的源主機地址和接收IP報文的目標主機地址。
可選項字段:占32比特。用來定義一些任選項:如記錄路徑、時間戳等。這些選項很少被使用,同時并不是所有主機和路由器都支持這些選項。可選項字段的長度必須是32比特的整數倍,如果不足,必須填充0以達到此長度要求。
IP路由選擇
從概念上說, IP路由選擇是簡單的,特別對于主機來說。如果目的主機與源主機直接相連(如點對點鏈路)或都在一個共享網絡上(以太網或令牌環網),那么IP數據報就直接送到目的主機上。否則,主機把數據報發往一默認的路由器上,由路由器來轉發該數據報。大多數的主機都是采用這種簡單機制。
在一般的體制中,IP可以從TCP、UDP、ICMP和IGMP接收數據報(即在本地生成的數據
報)并進行發送,或者從一個網絡接口接收數據報(待轉發的數據報)并進行發送。IP層在
內存中有一個路由表。當收到一份數據報并進行發送時,它都要對該表搜索一次。當數據報
來自某個網絡接口時, IP首先檢查目的IP地址是否為本機的IP地址之一或者IP廣播地址。如果確實是這樣,數據報就被送到由IP首部協議字段所指定的協議模塊進行處理。如果數據報的目的不是這些地址,那么(1)如果IP層被設置為路由器的功能,那么就對數據報進行轉發否則(2)數據報被丟棄。
IP路由選擇是逐跳地(hop-by-hop)進行的。IP并不知道到達任何目的的完整路徑(當然,除了那些與主機直接相連的目的)。所有的IP路由選擇只為數據報傳輸提供下一站路由器的IP地址。它假定下一站路由器比發送數據報的主機更接近目的,而且下一站路由器與該主機是直接相連的。
子網尋址
現在所有的主機都要求支持子網編址。不是把IP地址看成由單純的一個網絡號和一個主機號組成,而是把主機號再分成一個子網號和一個主機號。
子網掩碼
子網掩碼是一個32 bit的值,其中值為1的比特留給網絡號和子網號,為0的比特留給主機號。圖3是一個B類地址的兩種不同的子網掩碼格式。

圖3:兩種不同的子網掩碼格式
特殊情況的IP地址
經過子網劃分的描述,現在介紹7個特殊的IP地址,如圖4所示。在這個圖中,0表示所
有的比特位全為0;-1表示所有的比特位全為1;netid、subnetid和hostid分別表示不為全0或全1的對應字段。子網號欄為空表示該地址沒有進行子網劃分。

圖4:特殊情況的IP地址
posted on 2008-05-12 22:00
水 閱讀(2963)
評論(1) 編輯 收藏 引用 所屬分類:
tcp/ip