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