IP是Internet Protocol(網(wǎng)際互連協(xié)議)的縮寫,是TCP/IP體系中的網(wǎng)絡(luò)層協(xié)議。設(shè)計IP的目的是提高網(wǎng)絡(luò)的可擴(kuò)展性:一是解決互聯(lián)網(wǎng)問題,實(shí)現(xiàn)大規(guī)模、異構(gòu)網(wǎng)絡(luò)的互聯(lián)互通;二是分割頂層網(wǎng)絡(luò)應(yīng)用和底層網(wǎng)絡(luò)技術(shù)之間的耦合關(guān)系,以利于兩者的獨(dú)立發(fā)展。根據(jù)端到端的設(shè)計原則,IP只為主機(jī)提供一種無連接、不可靠的、盡力而為的數(shù)據(jù)包傳輸服務(wù)。
IP是整個TCP/IP協(xié)議族的核心,也是構(gòu)成互聯(lián)網(wǎng)的基礎(chǔ)。IP位于TCP/IP模型的網(wǎng)絡(luò)層(相當(dāng)于OSI模型的網(wǎng)絡(luò)層),它可以向傳輸層提供各種協(xié)議的信息,例如TCP、UDP等;對下可將IP信息包放到鏈路層,通過以太網(wǎng)、令牌環(huán)網(wǎng)絡(luò)等各種技術(shù)來傳送。為了能適應(yīng)異構(gòu)網(wǎng)絡(luò),IP強(qiáng)調(diào)適應(yīng)性、簡潔性和可操作性,并在可靠性做了一定的犧牲。IP不保證分組的交付時限和可靠性,所傳送分組有可能出現(xiàn)丟失、重復(fù)、延遲或亂序等問題。
IP主要包含三方面內(nèi)容:IP編址方案、分組封裝格式及分組轉(zhuǎn)發(fā)規(guī)則.IP分組的轉(zhuǎn)發(fā)規(guī)則路由器僅根據(jù)網(wǎng)絡(luò)地址進(jìn)行轉(zhuǎn)發(fā)。當(dāng)IP數(shù)據(jù)包經(jīng)由路由器轉(zhuǎn)發(fā)時,如果目標(biāo)網(wǎng)絡(luò)與本地路由器直接相連,則直接將數(shù)據(jù)包交付給目標(biāo)主機(jī),這稱為直接交付;否則,路由器通過路由表查找路由信息,并將數(shù)據(jù)包轉(zhuǎn)交給指明的下一跳路由器,這稱為間接交付。路由器在間接交付中,若路由表中有到達(dá)目標(biāo)網(wǎng)絡(luò)的路由,則把數(shù)據(jù)包傳送給路由表指明的下一跳路由器;如果沒有路由,但路由表中有一個默認(rèn)路由,則把數(shù)據(jù)包傳送給指明的默認(rèn)路由器;如果兩者都沒有,則丟棄數(shù)據(jù)包并報告錯誤。IP分片一個IP包從源主機(jī)傳輸?shù)侥繕?biāo)主機(jī)可能需要經(jīng)過多個不同的物理網(wǎng)絡(luò)。由于各種網(wǎng)絡(luò)的數(shù)據(jù)幀都有一個最大傳輸單元(MTU)的限制,如以太網(wǎng)幀的MTU是1500;因此,當(dāng)路由器在轉(zhuǎn)發(fā)IP包時,如果數(shù)據(jù)包的大小超過了出口鏈路的最大傳輸單元時,則會將該IP分組分解成很多足夠小的片段,以便能夠在目標(biāo)鏈路上進(jìn)行傳輸。這些IP分片重新封裝一個IP包獨(dú)立傳輸,并在到達(dá)目標(biāo)主機(jī)時才會被重組起來。IP分組結(jié)構(gòu)一個IP分組由首部和數(shù)據(jù)兩部分組成。首部的前20字節(jié)是所有IP分組必須具有的,也稱固定首部。在首部固定部分的后面是一些可選字段,其長度是可變的。
IP信息包的分割與重組為了能把一個IP報文放在不同的物理幀中,最大IP報文的長度就只能等于這條路徑上所有物理網(wǎng)絡(luò)的MTU的最小值。當(dāng)數(shù)據(jù)報通過一個可以傳輸長度更大的幀的網(wǎng)絡(luò)時,把數(shù)據(jù)報的大小限制在互聯(lián)網(wǎng)上最小的MTU之下不經(jīng)濟(jì);如果數(shù)據(jù)報的長度超過互聯(lián)網(wǎng)中最小的MTU值的話,則當(dāng)該數(shù)據(jù)報在穿越該子網(wǎng)時,就無法被封裝在一個幀中。
IP協(xié)議在發(fā)送IP報文時,一般選擇一個合適的初始長度。如果這個報文要經(jīng)歷的中間物理網(wǎng)絡(luò)的MTU值比IP報文長度要小,則IP協(xié)議把這個報文的數(shù)據(jù)部分分割成若干個較小的數(shù)據(jù)片,組成較小的報文,然后放到物理幀中去發(fā)送。每個小的報文稱為一個分段。分段的動作一般在路由器上進(jìn)行。如果路由器從某個網(wǎng)絡(luò)接口收到了一個IP報文,要向另外一個網(wǎng)絡(luò)轉(zhuǎn)發(fā),而該網(wǎng)絡(luò)的MTU比IP報文長度要小,那么就要把該IP報文分成多個小IP分段后再分別發(fā)送。重組是分段的逆過程,把若干個IP分段重新組合后還原為原來的IP報文。在目的端收到一個IP報文時,可以根據(jù)其分段偏移和MF標(biāo)志位來判斷它是否是一個分段。如果MF位是0,并且分段偏移為0,則表明這是一個完整的IP數(shù)據(jù)報。否則,如果分段偏移不為0,或者M(jìn)F標(biāo)志位為1,則表明它是一個分段。這時目的地端需要實(shí)行分段重組。IP協(xié)議根據(jù)IP報文頭中的標(biāo)識符字段的值來確定哪些分段屬于同一個原始報文,根據(jù)分段偏移來確定分段在原始報文中的位置。如果一個IP數(shù)據(jù)報的所有分段都正確地到達(dá)目的地,則把它重新組織成一個完整的報文后交給上層協(xié)議去處理。