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

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

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

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

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