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

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

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

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

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