1.引言
1.1、動機
Internet協議旨在用于數據包交換計算機通信網絡的互連系統中。這樣的系統被稱為“catenet”。 互聯網協議提供了從源向目的地傳輸稱為數據包的數據塊的功能,其中源和目的地是由固定長度地址標識的主機?;ヂ摼W協議還提供了長數據包的分段和重組(如果需要),以便通過“小數據包”網絡進行傳輸。
1.2、范圍
互聯網協議的范圍受到特定限制,以提供必要的功能,以通過互連的網絡系統將比特包(互聯網數據包)從源傳遞到目的地。沒有任何機制可以增強端到端數據的可靠性,流控制,排序或主機到主機協議中常見的其他服務?;ヂ摼W協議可以利用其支持網絡的服務來提供各種類型和質量的服務。
1.3、接口
Internet環境中的主機到主機協議調用此協議。該協議要求使用本地網絡協議將Internet數據包傳送到下一個網關或目標主機。
例如,TCP模塊將調用Internet模塊,以將TCP段(包括TCP標頭和用戶數據)作為Internet數據包的數據部分。 TCP模塊會將Internet標頭中的地址和其他參數提供給Internet模塊,作為調用的參數。然后,互聯網模塊將創建一個互聯網數據包,并在本地網絡接口上調用以傳輸互聯網數據包。
例如,在ARPANET情況下,Internet模塊將調用本地網絡模塊,該模塊會將1822前導添加到Internet數據包中,從而創建ARPANET消息以傳輸到IMP。 ARPANET地址將通過本地網絡接口從Internet地址派生而來,并且將是ARPANET中某些主機的地址,該主機可能是通向其他網絡的網關。
1.4、操作
互聯網協議實現了兩個基本功能:尋址和分段。
Internet模塊使用Internet標頭中攜帶的地址向其目的地傳輸Internet數據包。選擇傳輸路徑稱為路由。
Internet模塊在需要通過“小數據包”網絡傳輸時使用Internet標頭中的字段來分段和重組Internet數據包。
操作模型是Internet模塊駐留在每個從事Internet通信的主機和每個互連網絡的網關中。這些模塊共享用于解釋地址字段以及分段和組裝Internet數據包的通用規則。此外,這些模塊(尤其是在網關中)具有用于制定路由決策和其他功能的過程。
Internet協議將每個Internet數據包視為與任何其他Internet數據包無關的獨立實體。沒有連接或邏輯電路(虛擬或其他)。
Internet協議在提供服務時使用四個關鍵機制:服務類型,生存時間,選項和標頭校驗和。
服務類型用于指示所需服務的質量。服務類型是一組抽象或通用的參數,這些參數表征了組成Internet的網絡中提供的服務選擇。網關將使用這種類型的服務指示來選擇特定網絡,用于下一跳的網絡或路由互聯網數據包時的下一個網關的實際傳輸參數。
生存時間是Internet數據包生命周期上限的指示。它由數據包的發送方設置,并在處理數據的路徑上的點處進行縮減。如果生存時間在Internet數據包到達其目的地之前達到零,則將破壞Internet數據包。生存時間可以視為自我毀滅的時限。
這些選件提供了某些情況下所需或有用的控制功能,但對于最常見的通訊來說則是不必要的。這些選項包括時間戳,安全性和特殊路由的規定。
標頭校驗和提供了驗證,用于處理Internet數據包的信息已正確傳輸。數據可能包含錯誤。如果報頭校驗和失敗,則檢測到錯誤的實體會立即丟棄Internet數據包。
Internet協議不提供可靠的通信工具。端到端或逐跳都沒有確認。沒有數據錯誤控制,只有標頭校驗和。沒有重傳。沒有流量控制。
可以通過Internet協議模塊中實現的Internet控制消息協議(ICMP)報告檢測到的錯誤。
2.概述
2.1、與其他協議的關系
下圖說明了Internet協議在協議層次結構中的位置:


圖1、協議關系
Internet協議一方面與較高級別的主機到主機協議接口,另一方面與本地網絡協議接口。在這種情況下,“本地網絡”可以是建筑物中的小型網絡,也可以是諸如ARPANET之類的大型網絡。
2.2、運作模式
以下情形說明了將數據包從一個應用程序傳輸到另一個應用程序的操作模型:
我們假設這種傳輸將涉及一個中間網關。發送應用程序準備其數據,并在其本地Internet模塊上進行調用,以將該數據作為數據包發送,并傳遞目標地址和其他參數作為調用的參數。
Internet模塊準備一個數據包頭并將數據附加到它。 Internet模塊為此Internet地址確定一個本地網絡地址,在這種情況下,它是網關的地址。它將此數據包和本地網絡地址發送到本地網絡接口。本地網絡接口創建一個本地網絡頭,并向其附加數據包,然后通過本地網絡發送結果。
數據包到達報文在本地網絡頭中的網關主機,本地網絡接口剝離該頭,然后將數據包上交到Internet模塊。因特網模塊從因特網地址確定數據包將被轉發到第二網絡中的另一主機。 Internet模塊確定目標主機的本地網絡地址。它在該網絡的本地網絡接口上調用以發送數據包。
該本地網絡接口創建一個本地網絡頭并將數據包附加到將結果發送到目標主機的數據包。
在此目標主機上,數據包被本地網絡接口從本地網絡頭中剝離,并傳遞到Internet模塊。
Internet模塊確定該數據包用于該主機中的應用程序。它響應系統調用將數據傳遞到應用程序,并將源地址和其他參數作為調用的結果傳遞。


圖2、轉發路徑
2.3、功能說明
Internet協議的功能或目的是通過一組互連的網絡移動數據包。這是通過將數據包從一個Internet模塊傳遞到另一個Internet模塊直到到達目的地來完成的。 Internet模塊位于Internet系統中的主機和網關中。數據包基于互聯網地址的解釋,通過各個網絡從一個互聯網模塊路由到另一個互聯網模塊。因此,互聯網協議的一種重要機制是互聯網地址。
在將消息從一個Internet模塊路由到另一個Internet模塊時,數據包可能需要遍歷最大數據包大小小于數據包大小的網絡。為了克服這個困難,在互聯網協議中提供了分段機制。
編址
名稱,地址和路由之間有區別。名稱表示我們要尋找的東西。地址指示其位置。一條路線指示如何到達那里?;ヂ摼W協議主要處理地址。較高級別(即主機到主機或應用程序)協議的任務是進行從名稱到地址的映射。 Internet模塊將Internet地址映射到本地網絡地址。下級(即本地網絡或網關)過程的任務是進行從本地網絡地址到路由的映射。
地址是固定長度的四個八位位組(32位)。地址以網絡號開頭,后跟本地地址(稱為“空閑”字段)。 Internet地址有三種格式或類別:在a類中,高階位為0,后7位為網絡,后24位為本地地址;在b類中,高階兩位為0,后14位為網絡,后16位為本地地址;在c類中,高階三位為110,后21位為網絡,后8位為本地地址。
在將Internet地址映射到本地網絡地址時必須小心;一個單一的物理主機必須能夠像使用多個不同的Internet地址一樣充當多個不同的主機。某些主機還將具有多個物理接口(多宿主)。即,必須規定主機具有到網絡的多個物理接口,每個物理接口具有多個邏輯互聯網地址。
地址映射的示例可以在“地址映射”中找到。
分段
當Internet數據包起源于允許大數據包大小的本地網絡并且必須穿越將數據包限制為較小大小的本地網絡到達目的地時,必須進行分段。
互聯網數據包可以標記為“不要分段”。如此標記的任何Internet數據包在任何情況下都不得進行Internet分段。如果標記為“不分段”的互聯網數據包無法在不分段的情況下傳遞到其目的地,則應將其丟棄。
Internet協議模塊不可見的跨本地網絡的分段,傳輸和重組稱為Intranet分段,可以使用。
Internet分段和重組過程需要能夠將數據包分解為幾乎任意數量的分段,然后可以將其重新組裝。分段的接收者使用標識字段來確保不混合不同數據包的分段。分段偏移字段告訴接收者分段在原始數據包中的位置。分段的偏移量和長度確定了此分段覆蓋的原始數據包的部分。more-fragments標志指示(通過重置)最后一個分段。這些字段提供了足夠的信息來重組數據包。
標識字段用于區分一個數據包的分段和另一個數據包的分段。 Internet數據包的始發協議模塊將標識字段設置為對于該源-目的地對和協議必須唯一的值,以確保該數據包在Internet系統中處于活動狀態。完整數據包的始發協議模塊將more-fragments標志設置為零,并將分段偏移設置為零。
為了分段一個較長的Internet數據包,Internet協議模塊(例如,在網關中)將創建兩個新的Internet數據包,并將Internet報頭字段的內容從該長數據包復制到兩個新的Internet報頭中。長數據包的數據在8個八位位組(64位)邊界上分為兩部分(第二部分可能不是8個八位位組的整數倍,但第一部分必須是)。在第一部分NFB中調用8個八位位組塊的數量(對于分塊數量)。數據的第一部分放置在第一個新的Internet數據包中,并且總長度字段設置為第一個數據包的長度。 more-fragments標志設置為1。數據的第二部分放置在第二個新的Internet數據包中,并且總長度字段設置為第二個數據包的長度。 more-fragments標志帶有與長數據包相同的值。第二個新的Internet數據包的分段偏移字段設置為長數據包加NFB中該字段的值。
可以將此過程推廣到n向拆分,而不是所描述的雙向拆分。
為了組裝Internet數據包的分段,Internet協議模塊(例如,在目標主機處)將Internet數據包的四個字段(標識,源,目的地和協議)的值都相同。通過將每個分段的數據部分放置在該分段的Internet標頭中的分段偏移量指示的相對位置來完成組合。第一個分段的分段偏移量將為零,而最后一個分段的more-fragments標志將重置為零。
2.4、網關
網關實施Internet協議以在網絡之間轉發數據包。 網關還實現網關到網關協議(GGP),以協調路由和其他Internet控制信息。
在網關中,無需實施更高級別的協議,并且GGP功能已添加到IP模塊。


圖3、網關協議
3.規格
3.1、互聯網頭格式
Internet包頭內容的摘要如下:


圖4、Internet報文頭實例
注意,每個刻度線代表一個位的位置。
version:4位
“版本”字段指示Internet標頭的格式。本文檔介紹版本4。
IHL:4位
Internet標頭長度是Internet標頭的長度(以32位字為單位),因此指向數據的開頭。請注意,正確標頭的最小值為5。
ToS服務類型:8位
服務類型提供了所需服務質量的抽象參數的指示。當通過特定網絡傳輸數據包時,這些參數將用于指導實際服務參數的選擇。幾個網絡提供服務優先級,從而以某種方式將高優先級流量比其他流量更重要(通常是在高負載時僅接受高于特定優先級的流量)。主要選擇是在低延遲,高可靠性和高吞吐量之間進行權衡。
第0-2位:優先級。
第3位:0 =正常延遲,1 =低延遲。
第4位:0 =正常吞吐量,1 =高吞吐量。
第5位:0 =正常可靠性,1 =高可靠性。
第6-7位:保留以備將來使用。


組合含義
111 – Network Control
110 – Internetwork Control
101 – CRITIC/ECP
100 – Flash Override
011 – Flash
010 – Immediate
001 – Priority
000 – Routine
使用“延遲”,“吞吐量”和“可靠性”指示可能會增加服務成本(從某種意義上來說)。在許多網絡中,其中一個參數的較好性能與另一個參數的較差性能結合在一起。除非常特殊的情況外,應在這三個指示中最多設置兩個。
服務類型用于指定數據包在通過Internet系統傳輸期間的處理方式。 “服務映射”中給出了互聯網類型的服務到在諸如AUTODIN II,ARPANET,SATNET和PRNET之類的網絡上提供的實際服務的示例映射。
網絡控制優先級指定僅在網絡內使用。該名稱的實際使用和控制取決于每個網絡。 Internetwork控件名稱僅供網關控件創建者使用。
如果這些優先級標記的實際使用與特定網絡有關,則該網絡有責任控制對這些優先級標記的訪問和使用。
總長度:16位
總長度是數據包的長度,以八位字節為單位,包括Internet標頭和數據。該字段允許數據包的長度最多為65535個八位位組。對于大多數主機和網絡來說,如此長的數據包是不切實際的。所有主機必須準備好接受最多576個八位字節的數據包(無論它們是完整到達還是以分段到達)。建議主機僅在確定目的地已準備好接受較大數據包的情況下,才發送大于576個八位位組的數據包。
選擇數字576以允許除了所需的報頭信息之外還發送合理大小的數據塊。例如,此大小允許將512個八位位組加上64個標頭八位位組的數據塊放入數據包中。 Internet標頭的最大值為60個八位位組,而典型的Internet標頭為20個八位位組,這為較高級別協議的標頭留有余量。
識別:16位
發送方分配的標識值,以幫助組裝數據包的分段。
標志:3位
各種控制標志。
第0位:保留,必須為零
第1位:(DF)0 =可以分段,1 =不分段。
第2位:(MF)0 =最后一個分段,1 =更多分段。


分段偏移量:13位
該字段指示該分段在數據包中的位置。
分段偏移以8個八位位組(64位)為單位進行測量。第一個分段的偏移量為零。
生存時間:8位
該字段指示允許數據包保留在Internet系統中的最長時間。如果此字段包含零值,則必須銷毀數據包。該字段在Internet標頭處理中被修改。時間以秒為單位進行度量,但是由于每個處理數據包的模塊都必須將TTL至少減少一個,即使它在不到一秒的時間內處理數據包,因此TTL必須僅被視為設備上的上限。數據包可能存在的時間。目的是使無法傳遞的數據包被丟棄,并限制最大數據包的生存期。
協議:8位
該字段指示在互聯網數據包的數據部分中使用的下一級協議。在“分配的編號”中指定了各種協議的值。
標頭校驗和:16位
僅在標頭上的校驗和。由于某些標頭字段發生變化(例如,生存時間),因此在處理互聯網標頭的每個點都會重新計算并驗證該字段。
校驗和算法為:
校驗和字段是標頭中所有16位字的一個人的補碼之和的16位一個人的補碼。為了計算校驗和,校驗和字段的值為零。
這是一種簡單的計算校驗和的方法,實驗證據表明它是足夠的,但它是臨時的,可以根據進一步的經驗用CRC程序代替。
源地址:32位
源地址。請參閱第3.2節。
目的地址:32位
目的地址。請參閱第3.2節。
選項:變量
這些選項可能會出現在數據包中,也可能不會出現在數據包中。它們必須由所有IP模塊(主機和網關)實現??蛇x的是它們在任何特定數據包中的傳輸,而不是它們的實現。
在某些環境中,所有數據包中可能都需要安全選項。
選項字段的長度是可變的??赡苡辛銈€或多個選項。選項的格式有兩種情況:
情況1:選項類型的一個八位位組。
情況2:選項類型的八位位組,選項長度的八位位組和實際的選項數據八位位組。
選項長度八位字節計算選項類型八位字節,選項長度八位字節以及選項數據八位字節。
選項類型的八位位組被視為具有3個字段:
第1位:復制標志,
第2-3位:選項類別,
第4-8位:選項號。
復制的標志指示此選項在分段時被復制到所有分段中。
0 =未復制
1 =復制
選項類別為:
0 =控制
1 =保留供將來使用
2 =調試和測量
3 =保留供將來使用
定義了以下Internet選項:
類 | 編號 | 長度 | 說明 |
0 | 0 | 無 | 選項列表結束。該選項僅占用1個字節。它沒有長度八位位組 |
0 | 1 | 無 | 無操作。該選項僅占用1個字節。它沒有長度八位位組 |
0 | 2 | 11 | 安全。用于攜帶與DOD要求兼容的安全性,隔離區,用戶組(TCC)和處理限制代碼 |
0 | 3 | 可變 | 松散的源路由。用于根據源提供的信息來路由Internet數據包 |
0 | 9 | 可變 | 嚴格的源路由。用于根據源提供的信息來路由Internet數據包 |
0 | 7 | 可變 | 記錄路線。用于跟蹤Internet數據包所采用的路由 |
0 | 8 | 4 | 流ID。用于攜帶流標識符 |
2 | 4 | 可變 | 互聯網時間戳 |
特定的選項定義
選項列表末尾


此選項指示選項列表的末尾。 根據Internet標頭的長度,這可能與Internet標頭的末尾不一致。 該選項在所有選項的末尾使用,而不是在每個選項的末尾使用,并且僅在選項的末尾與Internet標頭的末尾不一致的情況下才需要使用。
可能由于分段或任何其他原因而被復制,引入或刪除。
無操作


此選項可在選項之間使用,例如,在32位邊界上對齊后續選項的開頭。
可能由于分段或任何其他原因而被復制,引入或刪除。
安全
此選項為主機提供了一種發送安全性,隔離,處理限制和TCC(封閉用戶組)參數的方式。 此選項的格式如下:


安全性(S字段):16位
指定16個安全級別之一(其中8個保留供將來使用)。
00000000 00000000-未分類
11110001 00110101-機密
01111000 10011010-EFTO
10111100 01001101-MMMM
01011110 00100110-程序
10101111 00010011-受限
11010111 10001000-秘密
01101011 11000101-最高機密
00110101 11100010-(保留以備將來使用)
10011010 11110001-(保留以備將來使用)
01001101 01111000-(保留供將來使用)
00100100 10111101-(保留供將來使用)
00010011 01011110-(保留供將來使用)
10001001 10101111-(保留供將來使用)
11000100 11010110-(保留供將來使用)
11100010 01101011-(保留供將來使用)
分隔(C區域):16位
當沒有分隔傳送的信息時,將使用全零值。 隔離專區字段的其他值可以從國防情報局獲得。
處理限制(H字段):16位
控制標記和釋放標記的值是字母數字二邊形,并且在防御中定義
情報局手冊DIAM 65-19,“標準安全標記”。
傳輸控制代碼(TCC字段):24位
提供一種隔離流量并在訂戶之間定義受控興趣社區的方法。 TCC值是三邊形,可從HQ DCA代碼530獲得。
必須在分段上復制。 此選項在數據包中最多出現一次。
松散的源和記錄路徑


松散的源和記錄路由(LSRR)選項為Internet數據包的源提供了一種途徑,以提供網關在將數據包轉發到目的地時要使用的路由信息?,并記錄路由信息。
選件以選件類型代碼開頭。第二個八位位組是選項長度,它包括選項類型代碼和路由數據的長度八位位組,指針八位位組和長度為3個八位位組。第三個八位位組是指向路由數據的指針,該數據指示八位位組,該八位位組開始下一個要處理的源地址。指針是相對于此選項的,并且指針的最小合法值為4。
路線數據由一系列Internet地址組成。
每個互聯網地址為32位或4個八位位組。如果指針大于長度,則源路由為空(且記錄的路由已滿),并且路由將基于目標地址字段。
如果已到達目標地址字段中的地址并且指針的長度不超過長度,則源路由中的下一個地址將替換目標地址字段中的地址,并且記錄的路由地址將替換剛剛使用的源地址,并且指針增加了四個。
記錄的路由地址是該數據包轉發到的環境中已知的Internet模塊自身的Internet地址。
用記錄的路由替換源路由的此過程(盡管與用作源路由的順序相反)意味著該選項(和整個IP報頭)保持不變的長度,因為數據包通過互聯網進行。
此選項是一個松散的源路由,因為允許網關或主機IP使用任意數量的其他中間網關的任何路由來到達該路由中的下一個地址。
必須在分段上復制。在數據包中最多出現一次。
嚴格的源和記錄路徑


嚴格的源和記錄路由(SSRR)選項為Internet數據包的源提供了一種途徑,以提供網關將數據包轉發到目的地時要使用的路由信息??,并記錄路由信息。
選件以選件類型代碼開頭。第二個八位位組是選項長度,它包括選項類型代碼和路由數據的長度八位位組,指針八位位組和長度為3個八位位組。第三個八位位組是指向路由數據的指針,該數據指示八位位組,該八位位組開始下一個要處理的源地址。指針是相對于此選項的,并且指針的最小合法值為4。
路線數據由一系列Internet地址組成。
每個互聯網地址為32位或4個八位位組。如果指針大于長度,則源路由為空(且記錄的路由已滿),并且路由將基于目標地址字段。
如果已到達目標地址字段中的地址并且指針的長度不超過長度,則源路由中的下一個地址將替換目標地址字段中的地址,并且記錄的路由地址將替換剛剛使用的源地址,并且指針增加了四個。
記錄的路由地址是該數據包轉發到的環境中已知的Internet模塊自身的Internet地址。
用記錄的路由替換源路由的此過程(盡管與用作源路由的順序相反)意味著該選項(和整個IP報頭)保持不變的長度,因為數據包通過互聯網進行。
此選項是嚴格的源路由,因為網關或主機IP必須僅通過下一個地址中指示的直接連接的網絡將數據包直接發送到源路由中的下一個地址,以到達路由中指定的下一個網關或主機。
必須在分段上復制。在數據包中最多出現一次。
記錄路線


記錄路由選項提供了一種記錄Internet數據包的路由的方法。
選件以選件類型代碼開頭。第二個八位位組是選項長度,它包括選項類型代碼和路由數據的長度八位位組,指針八位位組和長度為3個八位位組。第三個八位位組是指向路由數據的指針,指示八位位組,該八位位組從下一個區域開始存儲路由地址。指針是相對于此選項的,并且指針的最小合法值為4。
一條記錄的路線由一系列Internet地址組成。
每個互聯網地址為32位或4個八位位組。如果指針大于長度,則記錄的路線數據區域已滿。
始發主機必須使用足夠大的路由數據區域來組成此選項,以容納所有預期的地址。該選項的大小不會因添加地址而改變。路線數據區域的初始內容必須為零。
當Internet模塊路由數據包時,它會檢查是否存在“記錄路由”選項。如果是這樣,它將在該數據包轉發到的環境中插入它自己已知的互聯網地址,該環境從指針所指示的八位字節開始轉發到記錄的路由中,并將指針增加四。
如果路由數據區已滿(指針超過長度),則轉發數據包,而無需將地址插入記錄的路由中。如果有一些空間但沒有足夠的空間可插入完整地址,則原始數據包被認為是錯誤的,并被丟棄。無論哪種情況,都可以將ICMP參數問題消息發送到源主機。
分段時不復制,僅在第一個分段中進行。
在數據包中最多出現一次。
流標識符


此選項為不支持流概念的網絡攜帶16位SATNET流標識符提供了一種方法。
必須在分段上復制。在數據包中最多出現一次。
互聯網時間戳


選項長度是選項中的八位字節數,該字節計數類型,長度,指針和溢出/標志八位字節(最大長度為40)。
指針是從此選項的開始到時間戳記的末尾的八位字節數加1(即,它指向從下一個時間戳記開始的八位字節數)。最小合法值為5。當指針大于長度時,時間戳記區域已滿。
溢出(oflw)[4位]是由于空間不足而無法注冊時間戳的IP模塊的數量。
標志(flg)[4位]的值是
0-僅時間戳,以連續的32位字存儲,
1-每個時間戳前面都有注冊實體的互聯網地址,
3-互聯網地址字段是預先指定的。 IP模塊僅在其自己的地址與下一個指定的Internet地址匹配時才注冊其時間戳。
時間戳是自午夜UT起以毫秒為單位的右對齊32位時間戳。如果該時間以毫秒為單位不可用或相對于午夜UT無法提供,則可以插入任何時間作為時間戳,前提是時間戳字段的高階位設置為1以指示使用非標準值。
原始主機必須使用足夠大的時間戳數據區域組成此選項,以容納所有預期的時間戳信息。由于添加了時間戳,該選項的大小不會更改。時間戳數據區域的初始內容必須為零或Internet地址/零對。
如果時間戳數據區域已滿(指針超過長度),則在不插入時間戳的情況下轉發數據包,但溢出計數將增加1。
如果有足夠的空間但沒有足夠的空間插入完整的時間戳,或者溢出計數本身溢出,則認為原始數據包有誤,將其丟棄。
無論哪種情況,都可以將ICMP參數問題消息發送到源主機。
分段時不會復制timestamp選項。它攜帶在第一個分段中。在數據包中最多出現一次。
填充:可變
Internet標頭填充用于確保Internet標頭以32位邊界結束。填充為零。
3.2、討論
協議的實現必須健壯。每個實現都必須期望與不同個人創建的其他實現互操作。盡管本規范的目標是明確說明協議,但可能會有不同的解釋。通常,實現在發送行為上必須是保守的,而在接收行為上則必須是自由的。也就是說,必須謹慎發送格式正確的數據包,但必須接受它可以解釋的任何數據包(例如,不反對含義仍然清晰的技術錯誤)。
基本的Internet服務面向數據包,并在網關處提供數據包的分段,并在目標主機中的目標Internet協議模塊上進行重組。當然,也允許在網絡內或通過網絡網關之間的私有協議對數據包進行分段和重組,因為這對于Internet協議和更高級別的協議是透明的。這種透明的分段和重組類型稱為“網絡相關”(或Intranet)分段,此處不再贅述。
Internet地址區分主機級別的源和目的地,并提供協議字段。假定每種協議都將提供主機內所需的任何多路復用。
編址
為了在為網絡分配地址方面提供靈活性,并允許使用大量的中小型網絡,對地址字段的解釋進行編碼,以指定具有大量主機的少量網絡,具有主機數量的中等數量的網絡。數量適中的主機,以及數量眾多且主機數量少的網絡。此外,還有用于擴展尋址模式的轉義碼。
地址格式:


網絡字段中的零值表示該網絡。這僅在某些ICMP消息中使用。擴展尋址模式是不確定的。這兩個功能都保留供將來使用。
為網絡地址分配的實際值在“分配的編號”中給出。
由本地網絡分配的本地地址必須允許單個物理主機充當多個不同的Internet主機。也就是說,Internet主機地址和網絡/主機接口之間必須存在一個映射,以允許多個Internet地址對應一個接口。還必須允許主機具有多個物理接口,并將來自多個物理接口的數據包當作已全部尋址到單個主機一樣對待。
Internet地址與ARPANET,SATNET,PRNET和其他網絡的地址之間的地址映射在“地址映射”中進行了描述。
分段和重組
Internet標識字段(ID)與源地址和目標地址以及協議字段一起使用,以標識要重組的數據包分段。
如果數據包不是最后一個分段,則將設置“更多分段”標志位(MF)。分段偏移字段標識相對于原始未分段化數據包的開頭的分段位置。分段以8個八位位組為單位進行計數。設計分段策略是為了使未分段的數據包具有全部零的分段信息(MF = 0,分段偏移= 0)。如果Internet數據包是分段的,則其數據部分必須在8個八位位組邊界上斷開。
此格式允許2的13次方 = 8192個8個八位字節的分段,總共65536個八位字節。請注意,這與數據包總長度字段一致(當然,標頭是在總長度中計算的,而不是在分段中計算的)。
發生分段時,某些選項將被復制,而其他選項僅保留在第一個分段中。
每個Internet模塊必須能夠轉發68個八位位組的數據包,而不能進一步分段。這是因為Internet標頭最多可以包含60個八位位組,而最小分段為8個八位位組。
每個互聯網目的地都必須能夠以單個或分段形式接收576個八位字節的數據包,以進行重組。
可能受到分段影響的字段包括:
(1)選項字段
(2)更多分段標志
(3)分段偏移
(4)網絡頭長度字段
(5)總長度字段
(6)頭校驗和
如果設置了“不分段標志”(DF)位,則此數據包的Internet分段是不允許的,盡管它可能會被丟棄。在接收主機沒有足夠的資源來重新組合Internet分段的情況下,這可以用來禁止分段。
使用“不要分段”功能的一個示例是下行加載小型主機。小型主機可以具有一個引導程序,該程序接受一個數據包,將其存儲在內存中,然后執行它。
實例最容易描述分段和重組過程。以下過程是示例實現。
以下示例程序中的通用符號:“ = <”表示“小于或等于”,“?!北硎尽安坏扔凇?,“=”表示“等于”,“<-”表示“設置為”。同樣,“x到y”包括x并排除y;例如,“4到7”將包括4、5和6(但不包括7)。
分段程序示例
可以通過下一個網絡傳輸的最大大小的數據包稱為最大傳輸單元(MTU)。
如果總長度小于或等于最大傳輸單位,則將該數據包提交到數據包處理的下一步;否則,將其提交給數據包處理。否則,將數據包切成兩個分段,第一個分段為最大大小,第二個分段為數據包的其余部分。第一個分段被提交到數據包處理的下一步,而第二個分段如果仍然太大,則被提交給該程序。
示意:


計算方法:
如果TL = <MTU,則將此數據包提交到數據包處理,否則:如果DF = 1,則丟棄數據包,否則執行第一個分段:
(1)復制原始報文頭;
(2)OIHL設置為IHL;OTL設置為TL; OFO設置為FO; OMF設置為MF;
(3)NFB等于(MTU-IHL * 4)/ 8;
(4)附加第一個NFB * 8數據八位位組;
(5)休整報頭:MF設置為1; TL等于(IHL * 4)+(NFB * 8);重新計算校驗和;
(6)將此分段提交到數據包處理的下一步;
產生第二個分段:
(7)有選擇地復制報文頭(某些選項未復制,請參閱選項定義);
(八)追加剩余數據;
(9)更正報文頭:
IHL等于((((OIHL * 4)-(未復制的選項長度))+ 3)/ 4;
TL等于OTL-NFB * 8-(OIHL-IHL)* 4);
FO等于OFO + NFB;
MF等于OMF;重新計算校驗和;
(10)將該分段提交給分段測試;
完畢。
在上述過程中,每個分段(最后一個分段除外)都被設置為最大允許大小。替代方法可能會產生小于最大大小的數據包。例如,可以實施一種分段過程,該過程將大型數據包重復分成兩半,直到所得的分段小于最大傳輸單元大小為止。
重組程序示例
對于每個數據包,將緩沖區標識符計算為源,目標,協議和標識字段的串聯。如果這是一個完整的數據包(即分段偏移量和更多分段字段均為零),則釋放與此緩沖區標識符關聯的所有重組資源,并將數據包轉發到數據包處理的下一步。
如果沒有其他帶有此緩沖區標識符的分段,那么將分配重組資源。重組資源包括一個數據緩沖區,一個標頭緩沖區,一個分段塊位表,一個總數據長度字段和一個計時器。來自分段的數據根據??其分段偏移量和長度放置在數據緩沖區中,并且在分段塊位表中設置與接收到的分段塊相對應的位。
如果這是第一個分段(即分段偏移為零),則將此標頭放置在標頭緩沖區中。如果這是最后一個分段(更多分段字段為零),則計算總數據長度。如果此分段完成了數據包(通過檢查分段塊表中設置的位進行了測試),則數據包將被發送到數據包處理的下一步;否則,將計時器設置為當前計時器值和該分段中的生存時間字段中的最大值。重組例行程序放棄了控制權。
如果計時器用盡,則釋放該緩沖區標識符的所有重組資源。計時器的初始設置是重新組裝等待時間的下限。這是因為如果到達的分段中的生存時間大于當前計時器值,則等待時間將增加,但如果小于當前定時器值,則等待時間將不會減少。此計時器值可以達到的最大值是最長生存時間(約4.25分鐘)。當前建議的初始計時器設置為15秒。隨著該協議經驗的積累,這可能會改變。請注意,此參數值的選擇與可用的緩沖區容量和傳輸介質的數據速率有關。也就是說,數據速率乘以計時器值等于緩沖區大?。ɡ?0Kb / s X 15s = 150Kb)。
示意:


計算方法:


如果兩個或多個分段包含相同或部分重疊的相同數據,則此過程將使用數據緩沖區中最近到達的副本和傳遞的數據包。
鑒別
為數據包選擇標識符的選擇是基于提供唯一標識特定數據包的分段的方法的需要。如果分段具有相同的源,目的地,協議和標識符,則協議模塊組裝分段將判斷這些分段屬于同一數據包。因此,在數據包(或其任何分段)可以在Internet上存在的時間內,發送方必須為此源,目的地對和協議選擇唯一的標識符。
這樣看來,發送協議模塊需要保留一個標識符表,在互聯網的最后一個最大數據包生存期中,它與之通信的每個目的地都有一個條目。
但是,由于“標識符”字段允許65536個不同的值,因此某些主機可能能夠簡單地使用獨立于目的地的唯一標識符。
對于某些更高級別的協議,選擇標識符是合適的。例如,TCP協議模塊可以重傳相同的TCP段,并且如果重傳帶有與原始傳輸相同的標識符,則正確接收的可能性將提高,因為任何一個數據包的分段都可以用于構造正確的TCP段。
服務種類TOS
服務類型(TOS)用于選擇Internet服務質量。服務類型是根據抽象參數優先級,延遲,吞吐量和可靠性指定的。這些抽象參數將映射到數據包遍歷的特定網絡的實際服務參數中。
優先順序。此數據包重要性的獨立度量。
延遲。對于具有此指示的數據包,及時交付很重要。
吞吐量。高數據速率對于具有此指示的數據包很重要。
可靠性。對于具有此指示的數據包,確保交付的更高級別的工作很重要。
例如,ARPANET具有優先級位,并且可以在“標準”消息(類型0)和“不受控制”消息(類型3)之間進行選擇(單包消息和多包消息之間的選擇也可以視為服務參數)。不受控制的消息往往傳遞的可靠性較差,并且延遲較少。假設要通過ARPANET發送Internet數據包。令互聯網服務類型為:
優先順序:5
延遲:0
吞吐量:1
可靠性:1
在此示例中,這些參數到ARPANET可用參數的映射將是由于Internet優先級處于其范圍的上半部而將ARPANET優先級位設置為on,以選擇標準消息,因為指示了吞吐量和可靠性要求,并且延遲不是。有關服務映射的更多詳細信息,請參見“服務映射”。
生存時間
發送者將生存時間設置為允許數據包進入Internet系統的最長時間。如果數據包在Internet系統中的生存時間長于生存時間,則必須銷毀該數據包。
在處理Internet標頭時,必須減少此字段,以反映處理數據包所花費的時間。即使沒有關于實際花費時間的本地信息,該字段也必須遞減1。時間以秒為單位進行度量(即值1表示一秒鐘)。因此,最長生存時間為255秒或4.25分鐘。由于即使處理數據包的時間少于一秒,每個處理數據包的模塊也必須將TTL至少減少一個,因此TTL必須僅被視為存在數據包的時間的上限。目的是使無法傳遞的數據包被丟棄,并限制最大數據包的生存期。
一些更高級別的可靠連接協議基于以下假設:舊的重復數據包在經過一定時間后將不會到達。 TTL是此類協議確保滿足其假設的一種方式。
選項
這些選項在每個數據包中都是可選的,但在實現中是必需的。也就是說,選項的存在與否是發送者的選擇,但是每個Internet模塊必須能夠解析每個選項。選項字段中可能存在多個選項。
選項可能不會在32位邊界上結束。 Internet標頭必須用零的八位字節填充。其中的第一個將被解釋為選項的結束選項,其余的將被解釋為Internet標頭填充。
每個Internet模塊必須能夠對每個選項進行操作。如果要傳遞分類,限制或隔離的流量,則需要“安全選項”。
校驗和
如果更改了Internet標頭,則會重新計算Internet標頭校驗和。例如,減少了生存時間,增加了Internet選項或對其進行了更改或由于分段而造成的。 Internet級別的此校驗和旨在保護Internet標頭字段免受傳輸錯誤的影響。
在某些應用中,一些數據位錯誤是可以接受的,而重傳延遲是不可接受的。如果Internet協議強制數據正確性,則無法支持此類應用程序。
錯誤
Internet協議錯誤可能會通過ICMP消息報告。
3.3、接口
IP用戶界面的功能描述充其量只是虛構的,因為每個操作系統都具有不同的功能。因此,我們必須警告讀者,不同的IP實現可能具有不同的用戶界面。但是,所有IP必須提供一定的最小服務集,以確保所有IP實現都可以支持相同的協議層次結構。本節指定所有IP實現所需的功能接口。
Internet協議一方面與本地網絡接口,另一方面與更高級別的協議或應用程序接口。在下文中,由于較高級別的協議或應用程序(甚至是網關程序)正在使用Internet模塊,因此將其稱為“用戶”。由于Internet協議是數據包協議,因此在數據包傳輸之間保持最少的內存或狀態,并且用戶在Internet協議模塊上的每個調用都會提供IP執行請求的服務所需的所有信息。
上層接口示例
以下兩個示例調用滿足了用戶與Internet協議模塊通信的要求(“ =>”表示返回):


請注意,優先級已包含在TOS中,并且安全性/隔離專區是作為選項傳遞的。


當用戶發送數據包時,它將執行提供所有參數的SEND調用。 Internet協議模塊在收到此呼叫后,會檢查參數并準備并發送消息。如果參數正確,并且數據包被本地網絡接受,則調用成功返回。如果自變量錯誤,或者本地網絡不接受數據包,則調用將失敗。如果未成功返回,則必須就問題的原因做出合理的報告,但是此類報告的詳細信息取決于各個實現。
當數據包從本地網絡到達Internet協議模塊時,要么有來自正在尋址的用戶的未決RECV呼叫,要么沒有。在第一種情況下,通過將信息從數據包傳遞給用戶來滿足掛起的呼叫。在第二種情況下,被通知的用戶將收到未決的數據包。如果所尋址的用戶不存在,則會將ICMP錯誤消息返回給發送方,并丟棄數據。
在實現的特定操作系統環境中,可以適當地通過偽中斷或類似的機制來通知用戶。
然后,未決數據包可以立即滿足用戶的RECV呼叫,或者直到數據包到達之前,呼叫可能仍未決。
如果發送主機有多個地址(多個物理連接或邏輯地址),則源地址將包含在發送呼叫中。Internet模塊必須檢查以確保源地址是該主機的合法地址之一。
一種實現還可以允許或要求對互聯網模塊的調用以表示對一類數據包的興趣或保留其獨占使用(例如,在協議字段中具有一定值的所有數據包)。
本節從功能上描述了USER / IP接口。所使用的表示法與高級語言中的大多數函數調用過程相似,但是這種用法并不意味著排除陷阱類型的服務調用(例如SVC,UUO,EMT)或任何其他形式的進程間通信。
附錄A:示例和場景
范例1:
這是承載互聯網數據包的最小數據的示例:


圖5、網絡報文示例
注意,每個刻度線代表一個位的位置。
這是Internet協議版本4中的Internet數據包; Internet標頭由五個32位字組成,數據包的總長度為21個八位位組。該數據包是完整的數據包(不是分段)。
范例2:
在此示例中,我們首先顯示一個中等大小的Internet數據包(452個數據八位字節),然后顯示兩個Internet分段,如果允許的最大大小的傳輸是280個八位字節,則可能由于該數據包的分段而導致。


圖6、網絡報文示例
現在,第一個分段是由于在256個數據八位字節之后拆分數據包而產生的。


圖7、報文分段示例
還有第二個分段。


圖8、報文分段示例
范例3:
在這里,我們顯示一個包含選項的數據包的示例:


圖9、網絡報文示例
附錄B:數據傳輸順序
本文檔中描述的報頭和數據的傳輸順序解析為八位位組級別。 每當圖表顯示一組八位字節時,這些八位字節的傳輸順序就是用英語閱讀它們的正常順序。 例如,在下圖中,八位位組按照編號順序進行傳輸。


圖10、字節傳輸順序
每當八位位組代表數字量時,圖中最左邊的位就是高階或最高有效位。 即,標記為0的位是最高有效位。 例如,下圖表示值170(十進制)。


圖11、bit位示意圖
同樣,每當一個多字節的字段代表一個數字量時,整個字段的最左位就是最高有效位。傳輸多字節的數量時,最重要的字節首先傳輸。
名詞解釋
1822
BBN報告1822,“主機和IMP的互連規范”。主機和ARPANET之間的接口規范。
ARPANET leader
主機IMP接口上關于ARPANET消息的控制信息。
ARPANET message
主機和ARPANET中的IMP之間的傳輸單位。最大大小約為1012個八位位組(8096位)。
ARPANET packet
IMPs之間的ARPANET內部使用的一種傳輸單位。最大大小約為126個八位位組(1008位)。
Destination,目的地
目的地址,Internet標頭字段。
DF
flags字段中攜帶的Don’t Fragment位。
Flags
帶有各種控制標志的Internet標頭字段。
Fragment Offset
此Internet頭字段指示分段在Internet數據包中的位置。
GGP
Gateway to Gateway Protocol,網關到網關協議,網關之間主要用于控制路由和其他網關功能的協議。
header
消息,段,數據包,數據包或數據塊開頭的控制信息。
ICMP
ICMP是在Internet模塊中實現的Internet控制消息協議(Internet Control Message Protocol),從網關到主機以及在主機之間使用ICMP報告錯誤并提出路由建議。
Identification
Internet標頭字段,其中包含由發送方分配的標識值,以幫助組裝數據包的分段。
IHL
Internet頭字段Internet包頭長度(Internet Header Length)是Internet包頭的長度,以32位字為單位。
IMP
Interface Message Processor,接口消息處理器,ARPANET的數據包交換機。
Internet Address
由網絡字段和本地地址字段組成的四個八位字節(32位)的源或目標地址。
internet datagram
一對Internet模塊(包括Internet標頭)之間交換的數據單位。
internet fragment
具有Internet標頭的Internet數據包的一部分數據。
Local Address
網絡內主機的地址。 Internet本地地址到網絡中主機地址的實際映射非常普遍,允許多對一映射。
MF
Internet標頭標志字段中攜帶了“More-Fragments Flag,更多分段標志”。
module
協議或其他過程的一種實現,通常以軟件形式實現。
more-fragments flag
一個標志,指示此Internet數據包是否包含Internet數據包的末尾,并在Internet標頭的Flags字段中攜帶。
NFB
Internet分段的數據部分中的分段塊數(Number of Fragment Blocks)。也就是說,以8個八位位組為單位測量的一部分數據的長度。
octet
一個八位字節。
Options
Internet標頭的“選項”字段可能包含幾個選項,每個選項的長度可能是幾個八位位組。
Padding
Internet標頭的Padding字段用于確保數據以32位字邊界開始。填充為零。
Protocol
在本文檔中,下一個更高級別的協議標識符是Internet標頭字段。
Rest
Internet地址的本地地址部分。
Source
源地址,Internet標頭字段。
TCP
Transmission Control Protocol,傳輸控制協議:一種主機到主機協議,用于在Internet環境中進行可靠的通信。
TCP Segment
TCP模塊之間交換的數據單位(包括TCP標頭)。
TFTP
Trivial File Transfer Protocol,普通文件傳輸協議:一種基于UDP的簡單文件傳輸協議。
Time to Live
Internet標頭字段,指示此Internet數據包可以存在多長時間的上限。
TOS
Type of Service,服務種類。
Total Length
Internet標頭字段“總長度”是數據包的長度,以八位字節為單位,包括Internet標頭和數據。
TTL
Time to Live,生存時間。
Type of Service
Internet標頭字段,指示此Internet數據包的服務類型(或質量)。
UDP
User Datagram Protocol用戶數據包協議:用于面向事務的應用程序的用戶級別協議。
User
互聯網協議的用戶。 這可以是更高級別的協議模塊,應用程序或網關程序。
Version
“版本”字段指示Internet標頭的格式。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。