610 likes | 671 Views
Chapter 8 網際網路通訊協定. 目標. 本章結束後,您將能夠: 了解資料包的格式和欄位 了解為什麼需要分段及相關的欄位 了解 IP 資料包中可獲得的各種選項 可以去執行檢查碼的計算 了解 IP 套件中的各模組及其交互運作的情況. 8.1 資料包. 在 IP 層的封包稱為 資料包 ( datagram ) ,為一不固定長度的封包,包括 標頭 ( header ) 及 資料 ( data ) 這兩個部分。 標頭有 20 到 60 個位元組長,包含傳送路徑的重要訊息。. 請注意:. 在第四版的 IP 中, 優先權欄位 並未被使用。.
E N D
目標 本章結束後,您將能夠: • 了解資料包的格式和欄位 • 了解為什麼需要分段及相關的欄位 • 了解 IP 資料包中可獲得的各種選項 • 可以去執行檢查碼的計算 • 了解 IP 套件中的各模組及其交互運作的情況
8.1 資料包 • 在 IP 層的封包稱為資料包 ( datagram ),為一不固定長度的封包,包括標頭 ( header )及資料 ( data )這兩個部分。 • 標頭有 20 到 60 個位元組長,包含傳送路徑的重要訊息。
請注意: 在第四版的 IP 中,優先權欄位並未被使用。
請注意: 總長度欄位定義了資料包的總長度,包括標頭。
範例1 某一個到達的 IP 封包,其最前面 8 個位元為: 01000010 接收者會移除該封包,為什麼? 解答此封包中有錯誤。最左的 4 位元 ( 0100 ) 代表版本,這部分正確。後面 4 位元 ( 0010 ) 代表標頭長度為 2 × 4 = 8 位元組,這是錯誤的,因為最小的標頭長度,需為 20 位元組,這封包在傳輸過程已經被破壞。
範例2 某 IP 封包其 HLEN 為 1000 ( 二進制 ),請問此封包攜帶多少位元組的選項? 解答HLEN 之值為 8,代表標頭的總長為 8 × 4 = 32 個位元組。最前面的 20 個位元組為主要標頭,剩下的 12 個位元組為選項。
範例3 某 IP 封包其 HLEN 之值為 ( 5 )16,總長度欄之值為 ( 0028 )16,請問此封包攜帶多少資料? 解答HLEN 之值為 5,表示標頭為 5 × 4 = 20 位元組 ( 無其他選項 ),總長度欄位的值為 40 個位元組,代表資料長度為( 40 – 20 ) = 20 個位元組。
範例4 某一個到達的 IP 封包,其前面幾個位元組以十六進制表示為: 4500 0028 0001 0000 0102 …. 請問這個封包還可以經過幾個路由器,而不會被移除?其資料屬於哪一種上層通訊協定? 解答要找到 TTL 值,我們要跳 8 個位元組,TTL 在第 9 位元組為01,表示這個封包只能再漫遊一個站台。通訊協定欄為 TTL的下一個位元組,其值為 02 表示上層的協定是 IGMP ( 見表8.4 )。
8.2 分段 一個訊框 ( frame )的格式與大小取決於該訊框所使用的實體網路通訊協定。一個資料包可能需要被分段 ( fragment ) 來符合該通訊協定的規定。 本節所討論的主題包括: • 最大傳輸單元 ( MTU ) • 與分段有關的欄位
範例5 某個到達的封包,其 M 位元值為 0。請問它是第一個片段,或是最後一個片段,或是中間的片段?我們是否能知道此封包有沒有被分段過? 解答如果 M 位元為 0 ,代表沒有其他片段,這是最後一個片段。但是我們無法判斷原來的封包是否被分段過。
範例6 某個到達的封包,其 M 位元值為 1。請問它是第一個片段,或是最後一個片段,或是中間的片段?我們是否能知道此封包有沒有被分段過? 解答如果 M=1 表示至少還有 1 個片段,目前這個片段可能是第一或是中間的一個片段,我們不知道這是第一個或是中間的。不過可以肯定的是原來的封包有被分段過,因為 M 為 1。
範例7 某個到達的封包,其 M 位元值為 1,分段差量值為 0。請問它是第一個片段,或是最後一個片段,或是中間的片段? 解答因為 M=1,所以,不是第一個片段就是中間的片段。因為分段差量值為 0,所以它是第一個片段。
範例8 某個到達的封包,其分段差量值為 100。請問它的第一個位元組的編號為何?我們是否能知道最後一個位元組的編號為何? 解答要找到第一個位元組的編號,需將分段差量值乘以 8。所以第一個位元組的編號為 800。我們無法知道最後一個位元組的編號,除非我們知道資料的長度。
範例9 某個到達的封包,其分段差量值為 100,HLEN值為 5,長度欄之值為 100。請問它的第一個位元組和最後一個位元組的編號為何? 解答第一個位元組的編號為100 × 8 = 800。因為總長度為 100 位元組,而標頭長度為 5 × 4 = 20 位元組,所以表示資料為 80 個位元組。第一個位元組的編號為 800,因此最後一個位元組的編號為 879。
8.3 選項 IP 資料包的標頭可分為兩個部分,分別是固定的部分及可變的部分。可變的部分所包含的選項 ( option )可達 40 個位元組長。 本節所討論的主題包括: • 格式 • 選項種類
範例10 在 IP 標頭的 6 個選項中,有哪些必須拷貝到每一個片段? • 解答 • 檢查每個選項之命令碼的第一個位元 ( 最左邊那個位元 )。 • 無動作:命令碼為000000001;不用拷貝。 • 選項結束:命令碼為00000000;不用拷貝。 • 記錄路由:命令碼為00000111;不用拷貝。 • 嚴格受控來源端路由:命令碼為10001001;要拷貝。 • 寬鬆受控來源端路由:命令碼為10000011;要拷貝。 • 時間戳記:命令碼為0100100;不用拷貝。
範例11 在 IP 標頭的 6 個選項中,有哪些是作為資料包控制用,有哪些用來作為偵錯及管理用? • 解答 • 檢查每個選項之左邊的第二及第三位元。 • 無動作:命令碼為000000001;資料包控制。 • 選項結束:命令碼為00000000;資料包控制。 • 記錄路由:命令碼為00000111;資料包控制。 • 嚴格受控來源端路由:命令碼為10001001;資料包控制。 • 寬鬆受控來源端路由:命令碼為10000011;資料包控制。 • 時間戳記:命令碼為0100100;偵錯及管理。
範例12 在 UNIX 的系統工具中,有一個稱為ping 的指令可以讓我們檢查 IP 封包的漫遊動作。我們會在下一章討論 ping 程式的細節,在這個範例中,我們先說明如何使用 ping 程式來檢查某個主機是否存在網路上。我們 ping 一台位於 De Anza College 的伺服器,名稱為 fhda.edu。結果顯示此主機的 IP 位置為153.18.8.1。 結果也顯示了使用的位元組個數。
範例13 我們可以在使用ping指令時加上 –R的選項,來執行記錄路由。 結果也顯示了介面及 IP 位址。
範例14 在 UNIX 的系統工具中,traceroute程式也可以使用來追溯某個封包的路徑選擇。 結果顯示了所經過的 3 個路由器。
範例15 traceroute程式也可以使用來執行寬鬆受控來源端路由。選項–g可能讓我們定義從來源端到目的端之間所要經過的路由器。下面說明了我們可以傳送一個封包到 fhda.edu 伺服器,並要求此封包要經過 IP 位址為 153.18.251.4 的路由器。
範例16 traceroute程式也可以使用來執行嚴格受控來源端路由。選項–G強迫此封包要經過定義在命令列中的路由器。下面說明了我們可以傳送一個封包到 fhda.edu 伺服器,並強迫此封包只能經過 IP 位址為153.18.251.4 的路由器。
8.4 檢查碼 TCP/IP 通訊協定組之中,大部分的通訊協定所使用的錯誤偵測方法稱為檢查碼 ( checksum )。檢查碼是針對封包在傳輸過程中可能遭受破壞所使用的一種保護措施。檢查碼算是封包所加入的一些多餘的訊息。 本節所討論的主題包括: • 傳送端檢查碼的計算 • 接收端檢查碼的計算 • IP 封包使用的檢查碼