摘要:總長(zhǎng)度字段是指整個(gè)IP數(shù)據(jù)報(bào)的長(zhǎng)度,以字節(jié)(Byte)為單位。利用首部長(zhǎng)度字段和總長(zhǎng)度字段,就可以知道IP數(shù)據(jù)報(bào)中數(shù)據(jù)內(nèi)容的起始位置和長(zhǎng)度。由于該字段長(zhǎng)16bit,所以IP數(shù)據(jù)報(bào)最長(zhǎng)可達(dá)65535Byte.當(dāng)數(shù)據(jù)報(bào)被分片時(shí),該字段的值也隨著變化。盡管可以傳送一個(gè)長(zhǎng)達(dá)65535Byte的IP數(shù)據(jù)報(bào),但是大多數(shù)的數(shù)據(jù)鏈路層都會(huì)對(duì)它進(jìn)行分片。由于TCP
總長(zhǎng)度字段是指整個(gè)IP數(shù)據(jù)報(bào)的長(zhǎng)度,以字節(jié)(Byte)為單位。利用首部長(zhǎng)度字段和總長(zhǎng)度字段,就可以知道IP數(shù)據(jù)報(bào)中數(shù)據(jù)內(nèi)容的起始位置和長(zhǎng)度。由于該字段長(zhǎng)16bit,所以IP數(shù)據(jù)報(bào)最長(zhǎng)可達(dá)65535Byte.當(dāng)數(shù)據(jù)報(bào)被分片時(shí),該字段的值也隨著變化。
盡管可以傳送一個(gè)長(zhǎng)達(dá)65535Byte的IP數(shù)據(jù)報(bào),但是大多數(shù)的數(shù)據(jù)鏈路層都會(huì)對(duì)它進(jìn)行分片。由于TCP把用戶數(shù)據(jù)分成若干片,因此一般來(lái)說這個(gè)限制不會(huì)影響TCP.很多使用UDP的應(yīng)用(如RIP,TFTP,BOOTP,DNS以及SNMP),它們都限制用戶數(shù)據(jù)報(bào)長(zhǎng)度為512Byte,小于576Byte。但是,琪實(shí)上現(xiàn)在大多數(shù)的實(shí)現(xiàn)(特別是那些支持網(wǎng)絡(luò)文件系統(tǒng)NFS的實(shí)現(xiàn))允許超過8192Byte的IP數(shù)據(jù)報(bào)。
總長(zhǎng)度字段是IP首部中必要的內(nèi)容,因?yàn)橐恍?shù)據(jù)鏈路(如以太網(wǎng))需要填充一些數(shù)據(jù)以達(dá)到最小長(zhǎng)度。盡管以太網(wǎng)的最小幀長(zhǎng)為46Byte,但是1P數(shù)據(jù)報(bào)可能會(huì)更短。如果沒有總長(zhǎng)度字段,那么IP層就不知道46Byte中有多少是IP數(shù)據(jù)報(bào)的內(nèi)容。
標(biāo)識(shí)字段地標(biāo)識(shí)主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào)。通常每發(fā)送一份報(bào)文。它的值就會(huì)加1.該字段用于IP分組的分片和重組。同樣,標(biāo)志字段和片偏移字段也是用于IP分組的分片和重組。
RFC791IPostel1981a]認(rèn)為標(biāo)識(shí)字段應(yīng)該由讓IP發(fā)送數(shù)據(jù)報(bào)的上層來(lái)選擇。假設(shè)有兩個(gè)連續(xù)的IP數(shù)據(jù)報(bào),其中一個(gè)是由TCP生成的,而另一個(gè)是由UDP生成的,那么它們可能具有相同的標(biāo)識(shí)字段。盡管這也可以正常工作(由重組算法來(lái)處理),但是在大多數(shù)從伯克利派生出來(lái)的系統(tǒng)中,每發(fā)送一個(gè)IP數(shù)據(jù)報(bào),IP層都要把一個(gè)內(nèi)核變量的值加1,不管交給IP的數(shù)據(jù)來(lái)自哪一層。內(nèi)核變童的初始值根據(jù)系統(tǒng)引導(dǎo)時(shí)的時(shí)間來(lái)設(shè)置。
TTL(Time-To-Live)生存時(shí)間字段設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過的最多路由器數(shù),它指定了數(shù)據(jù)報(bào)的生存時(shí)間?TTL的初始值由源主機(jī)設(shè)置(通常為32或64),一旦經(jīng)過一個(gè)處理它的路由器,它的值就減去1.當(dāng)該字段的值為0時(shí),數(shù)據(jù)報(bào)就被丟棄,并發(fā)送ICMP報(bào)文通知源主機(jī)。
協(xié)議字段被IP用來(lái)對(duì)數(shù)據(jù)報(bào)進(jìn)行分用,根據(jù)它可以識(shí)別是哪個(gè)協(xié)議向IP傳送數(shù)據(jù)。
首部檢驗(yàn)和字段是根據(jù)IP首部計(jì)算的檢驗(yàn)和碼。它不對(duì)首部后面的數(shù)據(jù)進(jìn)行計(jì)算。ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時(shí)覆蓋首部和數(shù)據(jù)的檢驗(yàn)和碼。
為了計(jì)算一份數(shù)據(jù)報(bào)的IP檢驗(yàn)和,首先把檢驗(yàn)和字段置為0.然后,對(duì)首部中每個(gè)16bit進(jìn)行二進(jìn)制反碼求和(整個(gè)首部看成由一串16bit的字組成),結(jié)果存在檢驗(yàn)和字段中。當(dāng)收到一份IP數(shù)據(jù)報(bào)后,同樣對(duì)首部中每個(gè)16bit進(jìn)行二進(jìn)制反碼的求和。由于接收方在計(jì)算過程中包含了發(fā)送方存在首部中的檢驗(yàn)和,因此,如果首部在傳輸過程中沒有發(fā)生任何差錯(cuò),那么接收方計(jì)算的結(jié)果應(yīng)該為全1。如果結(jié)果不是全1(即檢驗(yàn)和錯(cuò)誤),那么IP就丟棄收到的數(shù)據(jù)報(bào)。但是不生成差錯(cuò)報(bào)文,由上層發(fā)現(xiàn)丟失的數(shù)據(jù)報(bào)并進(jìn)行重傳。
ICMP,IGMP、UDP和TCP都采用相同的檢驗(yàn)和算法,盡管TCP和UDP除了本身的首部和數(shù)據(jù)外,在IP首部中還包含不同的字段。在RFC1071[Braden,BormanandPatridge1988]中有關(guān)于如何計(jì)算Internet檢驗(yàn)和的實(shí)現(xiàn)技術(shù)。由于路由器經(jīng)常只修改TTL字段(減1),因此當(dāng)路由器轉(zhuǎn)發(fā)一份報(bào)文時(shí)可以增加它的檢驗(yàn)和,而不需要對(duì)IP整個(gè)首部進(jìn)行重新計(jì)算。RFC1141[MalloryandKullbei1990]為此給出了一個(gè)很有效的方法。
每一份IP數(shù)據(jù)報(bào)都包含源IP地址和目的IP地址。
最后一個(gè)字段是任選項(xiàng),是數(shù)據(jù)報(bào)中的一個(gè)可變長(zhǎng)度的可選信息。目前,這些任選項(xiàng)定義如下:
安全和處理限制(用于軍事領(lǐng)域,詳細(xì)內(nèi)容參見RFC1108[Kentl99IP:
記錄路徑(讓每個(gè)路由器都記下它的IP地址);
時(shí)間戳(讓每個(gè)路由器都記下它的IP地址和時(shí)間);寬松的源站選路(為數(shù)據(jù)報(bào)指定一系列必須經(jīng)過的IP地址);
嚴(yán)格的源站選路(與寬松的源站選路類似,但是要求只能經(jīng)過指定的這些地址,不能經(jīng)過其他地址),這些選項(xiàng)很少被使用,并非所有的主機(jī)和路由器都支持這些選項(xiàng)。
選項(xiàng)字段一直都是以32bit作為界限,在必要的時(shí)候插入值為0的填充字節(jié)。這樣就保證IP首部始終是32bit的整數(shù)倍,這是首部長(zhǎng)度字段所要求的。
2.分段和重裝
物理網(wǎng)絡(luò)層一般要限制每次發(fā)送數(shù)據(jù)幀的最大長(zhǎng)度。任何時(shí)候IP層接收到一份要發(fā)送的IP數(shù)據(jù)報(bào)時(shí),都要判斷向本地哪個(gè)接口發(fā)送數(shù)據(jù)(選路),并查詢?cè)摻涌讷@得其MTU.IP層把MTU與數(shù)據(jù)報(bào)長(zhǎng)度進(jìn)行比較,如果需要?jiǎng)t進(jìn)行分片。分片可以發(fā)生在原始發(fā)送端主機(jī)上,也可以發(fā)生在中間路由器上。
把一份IP數(shù)據(jù)報(bào)分片以后,只有到達(dá)目的地才進(jìn)行重新組裝,這里的重新組裝與其他網(wǎng)絡(luò)協(xié)議不同,它們要求在下一站就進(jìn)行重新組裝,而不是在最終的目的地。重新組裝由目的端的IP層來(lái)完成,其目的是使分片和重新組裝過程對(duì)運(yùn)輸層(如TCP和UDP)是透明的,除了某些可能的越級(jí)操作外。已經(jīng)分片過的數(shù)據(jù)報(bào)有可能會(huì)再次進(jìn)行分片(可能不止一次)。
IP首部中包含的數(shù)據(jù)為分片和重新組裝提供了足夠的信息。下面這些字段用于分片過程。對(duì)于發(fā)送端發(fā)送的每份IP數(shù)據(jù)報(bào)來(lái)說,其標(biāo)識(shí)字段都包含一個(gè)值。該值在數(shù)據(jù)報(bào)分片時(shí)被復(fù)制到每個(gè)片中。標(biāo)志字段用其中一個(gè)比特來(lái)表示“更多的片”。除了最后一片外,其他每個(gè)組成數(shù)據(jù)報(bào)的片都要把該比特置1.片偏移字段指的是該片偏移原始數(shù)據(jù)報(bào)開始處的位置。另外,當(dāng)數(shù)據(jù)報(bào)被分片后,每個(gè)片的總長(zhǎng)度值要改為該片的長(zhǎng)度值。最后,標(biāo)志字段中有一個(gè)比特稱做“不分片”位。如果將此比特置1,IP將不對(duì)數(shù)據(jù)報(bào)進(jìn)行分片。相反把數(shù)據(jù)報(bào)丟棄并發(fā)送一個(gè)ICMP差錯(cuò)報(bào)文(“需要進(jìn)行分片但設(shè)置了不分片比特”)給起始端。
當(dāng)IP數(shù)據(jù)報(bào)被分片后,每一片都成為一個(gè)分組,具有自己的IP首部,并在選擇路由時(shí)與其他分組獨(dú)立。這樣,當(dāng)數(shù)據(jù)報(bào)的這些片到達(dá)目的端時(shí)有可能會(huì)失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數(shù)據(jù)報(bào)片。
盡管IP分片過程看起來(lái)是透明的,但缺點(diǎn)是即使只丟失一片數(shù)據(jù)也要重傳整個(gè)數(shù)據(jù)報(bào)。為什么會(huì)發(fā)生這種情況呢?因?yàn)镮P層本身沒有超時(shí)重傳的機(jī)制--由更高層來(lái)負(fù)責(zé)超時(shí)和重傳(TCP有超時(shí)和重傳機(jī)制;但UDP沒有,一些UDP應(yīng)用程序本身也執(zhí)行超時(shí)和重傳)。當(dāng)來(lái)自TCP報(bào)文段的某一片丟失后,TCP在超時(shí)后會(huì)重發(fā)整個(gè)TCP報(bào)文段,該報(bào)文段對(duì)應(yīng)于一份IP數(shù)據(jù)報(bào)。沒有辦法只重傳數(shù)據(jù)報(bào)中的一個(gè)數(shù)據(jù)報(bào)片。事實(shí)上,如果對(duì)數(shù)據(jù)報(bào)分片的是中間路由器,而不是起始端系統(tǒng),那么起始端系統(tǒng)就無(wú)法知道數(shù)據(jù)報(bào)是如何被分片的。因此,經(jīng)常要避免分片。
3.TCP
TCP是傳輸層的協(xié)議,它提供面向連接的可靠數(shù)據(jù)傳輸服務(wù)。它提供可靠服務(wù)的手段和數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層中面向連接服務(wù)在原則上是相同的,即給報(bào)文編號(hào),收方回送應(yīng)答,超時(shí)重發(fā)。但由于連接兩端運(yùn)輸層實(shí)體的網(wǎng)絡(luò)比較復(fù)雜,且有可能是多個(gè)不同網(wǎng)絡(luò)互連而成,這就使TCP又有自己的特點(diǎn),如下所述。
通信工程師備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬(wàn)道題
已有25.02萬(wàn)小伙伴參與做題