Internet Protocol (IP) 第 6 章 通訊協定 Internet Protocol (IP)
IP 簡介 IP 位於 Network 層。 對上可載送 Transport 層各種協定的資訊, 例如:TCP、UDP 等等。 對下可將 IP 封包放到 Link 層, 透過乙太網路、Token Ring、FDDI、X.25、Frame Relay 等等各種規格的技術來傳送。
IP 所提供的服務 IP 封包的傳送。 IP 封包的切割與重組。
傳送 IP 封包 要將 IP 封包從來源裝置傳送到目的裝置, 必須依賴以下兩種機制: IP 位址 IP 路由 (IP Routing)
IP 位址 IP 位址如同現實生活中的地址。 所有使用 IP 的裝置, 至少都必須有一個獨一無二的 IP 位址, IP 封包才能正確送達目的裝置。
誰負責分派 IP 位址? 負責分派 IP 位址的最高機構為 Internet Corporation for Assigned Names and Numbers (ICANN, http://www.icann.org/ )。 ICANN 依地區與國家, 授權給公正的單位來執行 IP 位址分派的工作。 台灣是由財團法人臺灣網路資訊中心 (TWNIC, http://www.twnic.net/ ) 負責。
IP 路由 Internet 可視為由許多個網路連結起來所形成的大型網路。必須透過 IP 路由 (IP Routing) 的轉送, 才能將 IP 封包經過一個個的網路, 送達目的地。
路由器 在實體上,每個網路是透過路由器 (Router) 來相互連接。 路由器的功能是為 IP 封包選擇傳送的路徑。 IP 路由的過程中, 是由路由器負責選擇路徑, 而 IP 封包則是處於被動的狀態。
Connectionless 的傳送特性 IP 封包使用 Connectionless 傳送方式。 目的裝置是否正確收到每個封包, 則是由上層的協定 (例如:TCP) 來負責檢查。
切割與重組 IP 封包 路由器必須將過長的封包加以切割, 以便能在 MTU 較小的網路上傳輸。 切割後的 IP 封包, 會由目的裝置重組, 恢復成原來 IP 封包的模樣。 每一種 Data Link 層的技術, 都有其所能傳輸的最大封包長度 (MTU):
IP在TCP/IP 中的位置
IP 封包 IP 表頭: 記錄有關 IP 位址、路由、封包識別等資訊。長度為 4 Bytes的倍數, 最短為 20 Bytes, 最長可達 60 Bytes。 IP Payload: 載送上層協定的封包。長度最短為 8 Bytes, 最長可達 65515 Bytes。
IP 封包的包裝 IP 對上可接受 Transport 層協定所交付的封包, 形成 IP Payload: 對下則將整個 IP 封包交付給 Data Link 層的協定, 包裝後直接在介質上傳送:
IP 表頭內容
Version (版本) 佔 4 Bits, 記錄 IP 的版本編號。 目前最常見的 IP 版本為 IP Version 4, 亦即第 4 版, 欄位值為 4 (十進位) 或 0100 (二進位)。後續版本為 IP Version 6, 也就是第 6 版, 但目前仍不普及。
IHL (表頭長度) IHL ( Internet Header Length ) 用來定義 IP 表頭的長度。 以 4 Bytes 為基本單位。例如:IHL 欄位值為 0101 (二進位) 時, 換算為十進位為 5, 即代表 IP 表頭的長度為 5 x 4 = 20 Bytes。
範例 1 某到達之IP 封包其前8 位元為: 01000010 接收者丟棄該封包為什麼?
解答 此封包中有錯誤。最左的4位元0100 代表版本這部分正確。後面4位元(0010) 代表標頭長度為2 x 4=8,這是錯誤的,因為最小的標頭長度,需為20位元組,這封包在傳輸過程有被破壞過。
某IP封包其IHL 為1000(2 進制)問此封包攜帶多少位元組的選項? 範例 2 某IP封包其IHL 為1000(2 進制)問此封包攜帶多少位元組的選項?
解答 IHL值為8,代表標頭的總長為32(8 x 4)位元組。最前面20 位元組為主要標頭,剩下的12 位元組為選項。
Type of Service (服務類型) 路由器可根據 Type of Service 中的 6 項參數, 決定如何處理 IP 封包: Precedence 用來決定 IP 封包的優先等級。 Delay、Throughput、Reliability、Cost 提供路由器選擇路徑時的參考。 Reserved 保留未使用。
Type of Service 的參數位置
Precedence (優先等級) 數值愈大, 代表 IP 封包優先等級愈高。 平常的 IP 封包一律使用 0, 也就是優先等級最低的 Routine。
Delay (延遲性) 用來定義 IP 封包對於延遲性的要求。 Low Delay 代表 IP 封包儘量不要延遲。
Throughput (傳輸量) 用來定義 IP 封包對於頻寬的要求。 High Throughput 代表路由器應儘量選擇頻寬較高的傳遞路徑來傳送此封包。 傳輸資料量大的應用程式, 會將此參數設為 1, 至於一般的 IP 封包皆設為 0。
Reliability (可靠度) 定義 IP 封包對於路徑可靠度的要求。 High Reliability 代表路由器應儘量選擇可靠度較高的路徑來傳送此封包。 若應用程式希望在傳送過程中儘量減少 IP 封包遺失, 會將 Reliability 參數設為 1。一般的 IP 封包皆設為 0。
Cost (成本) 定義 IP 封包對於路徑成本的要求。 Low Cost 代表路由器應儘量選擇成本較低的傳遞路徑來傳送此封包。
Type of Service 的重要觀念 路由器必須具解讀這些參數的能力。 路由器必須有多條路徑可供選擇, Delay、Throughput、Reliability、Cost 等參數才會有作用。 當路由器有多條路徑可供選擇時, 路由器必須 『知道』 每條路徑的特性。
各應用程式的 Type of Service 建議值
Total Length (總長度) 記錄整個 IP 封包的長度, 單位為 Byte。 整個 IP 封包最大可達 1500 Bytes, 所以 此欄位的最大值即為 1500 (十進位)。
Identification (識別碼) 記錄 IP 封包的識別碼。 識別碼由來源裝置決定, 按照 IP 封包發出的順序遞增 1。
Flag (封包切割標示) 與 IP 封包的切割與重組有關。 總共有 3 個參數, 每參數佔 1 Bit:
DF 參數 定義 IP 封包是否可加以切割。 Don‘t Fragment 代表不允許路由器切割 IP 封包 ( 此時封包若大於 MTU 值, 路由器會丟棄此封包, 並發出 ICMP 訊息通知來源裝置 )。
MF 參數 定義此 IP fragment 是否為原始封包的最後一個 IP fragment。 Last Fragment 代表此 IP fragment 是原始 IP 封包經切割後, 所產生的最後 1 個 IP fragment ( 或原始封包未經切割 )。
Fragment Offset (切割重組點) 用來記錄 IP fragment 所載送的是原始 IP Payload 的哪一段資料。Fragment Offset 的單位是 8 Bytes。 因 IP 封包切割後, 原始封包內 IP Payload 的資料會分散到每個 IP fragment 中, 因此需要分別註明以便重組。
Fragment Offset 範例-1 假設原始 IP 封包長度為 4520 Bytes, IP 表頭的長度為 20 Bytes, IP Payload 長度為 4500 Bytes。 若必須經由乙太網路傳送, 在切割後每個 IP fragment 最大長度為 1500 Bytes, 其中 IP 表頭的長度為 20 Bytes, IP Payload 最大長度為 1480 Bytes。 因此, 會產生如下圖的 4 個新 IP fragment:
Fragment Offset 範例-2
Fragment Offset 範例-3 切割後所產生的第 1 個 IP fragment 載送了原始 IP Payload 的第 1 Byte到第 1480 Byte, 因此 Fragment Offset 設為 0。 第 2 個 IP fragment 載送了原始 IP Payload 從第 1481 Byte 到第 2960 Byte, 因此 Fragment Offset 設為 1480 / 8 = 185 (因為以 8 Bytes 為單位)。依此類推:
詳細分段範例
Time to Live (存活時間) 記錄 IP 封包的 『存活時間』, 以限制 IP 封包在路由器之間轉送的次數。 當 IP 封包每經過一部路由器時, 路由器便會將 Time to Live 欄位值減 1。 當路由器收到此欄位值為 0 的 IP 封包時, 便直接將之丟棄, 不再轉送。
某到達IP封包其前面幾個以16 進制表示數字之為: 範例 4 某到達IP封包其前面幾個以16 進制表示數字之為: 45000028000100000102................... 問這個封包還可以經過幾個路由器,而不會被丟掉?其資料屬於哪一種上層協定?
解答 要找到TTL 值,我們要跳8 個位元組,TTL 在第九位元組為01,表示這個封包只能再旅行一個站。協定欄為TTL 的下一個位元組,其值為02 表示上層的協定是IGMP。
Protocol (協定) 記錄上層所使用的協定。
Header Checksum (表頭錯誤檢查碼) 來源裝置先針對資料進行數學函數運算, 得到的結果即是錯誤檢查碼。 目的裝置對資料進行同樣的函數運算, 將結果與來源的錯誤檢查碼作核對。若兩者相同, 代表資料正確無誤。
Header Checksum 的檢查範圍 IP 只針對 IP 表頭進行檢查, 並不會檢查 IP Payload 的正確性。
Source Address (來源裝置的 IP 位址) 記錄來源裝置的 IP 位址, 佔 32 Bits。 Source Address 及以下的 Destination Address 欄位, 可說是 IP 表頭中最重要的資訊。
Destination Address (目的裝置的 IP 位址) 記錄目的裝置的 IP 位址, 佔 32 Bits 。
Options 與 Padding 此 2 欄位為選擇性, 提供 IP 封包功能擴充的可能性。 所有額外功能都記錄在 Options 欄位。 由於 Options 欄位長度不一定是 4 Bytes 的倍數。為讓整個 IP 封包的長度為 4 Bytes 的倍數, 因此再用不固定長度的 Padding 欄位, 讓 Options 與 Padding 加起來剛好是 4 Bytes 的倍數。
擷取 IP 封包-1 以一個 FTP 協定的封包作為範例:
擷取 IP 封包-2 1. Version:4 代表此 IP 封包的版本為 IPv4。 2. Header Length:IP 表頭的長度為 20 Bytes。 3. Precedence:優先等級為 Routine, 即最低的等級。 4. Type of Service:Normal Service 代表 Delay、Throughput、Reliability、Cost 等欄位皆設為 Normal。 5. Total Length:IP 封包的長度。因為此例是在乙太網路上傳送的 IP 封包, 因此長度為 1500 Bytes。
擷取 IP 封包-3 6. Identification:此 IP 封包的識別碼。 7. 此為 More Fragments 欄位。因為是未經切割的 IP 封包, 因此為 0。 8. 此為 Don‘t Fragments 欄位。1 代表傳送過程中不可切割。 9. 因為未經切割, 所以 Fragment Offset 為 0。 10. Windows 2000 預設的 Time to Live 為 128。當 IP 封包通過路由器時, Time to Live 欄位值會遞減 1。
擷取 IP 封包-4 11. 記錄 Transport 層所用的協定。FTP 使用的是 TCP 協定。 13. IP 封包來源裝置的 IP 位址。 14. IP 封包目的裝置的位址。 15. 這並非 IP 表頭的欄位, 而是網路監視器自行計算所得的 IP Payload 長度。
IPv6 VS IPv4 兩者的差異 大量增加IP位址:IPv4的位址是32bits, IPv6的位址是128bits擴大了位址的容量 表頭格式的簡化:IPv6將IPv4的表頭作了 大幅的修改,捨棄了部分的欄位,更作了 最佳的處理 加強表頭的延伸能力和選項部分: IPv6改 善了IPv4在表頭延伸上的限制,也提高了 選項欄位的使用彈性,以適用於未來的發 展
IPv6 VS IPv4 新增加流向標記(Flow Labeling)的能力: 流向標記可以要求流向特定的處理(例如 即時的服務) 用延伸能力來達成驗證,確保隱私和資料 完整的處理能力