Chapter 11 使用者資料包通訊協定
目標 本章結束後,您將能夠: 可以去說明程序對程序的通訊 知道 UDP 使用者資料包的格式 可以去計算 UDP 的檢查碼
11.1 程序對程序的通訊 在仔細看 UDP 之前,我們先要了解主機對主機的通訊( host-to-host communication ) 與程序對程序的通訊 ( process-to-process communication ),以及它們之間有何不同。 本節所討論的主題包括: 通訊埠號碼 插座位址
請注意: 公認埠的號碼皆小於 1024。
範例1 在 UNIX 系統中,公認埠號被儲存在 /etc/services 的這個檔案中。檔案中的每一行給予某個服務的名稱及對應的公認埠號。我們可以使用 grep 的系統工具來擷取指定應用所對應的那一行或多行的資料。下面顯示 TFTP 的埠號,注意TFTP 可以使用 UDP 或 TCP 服務的 69 埠號。 接下一張投影片
範例1 (續) SNMP 通訊協定使用兩個埠號 ( 161 和 162 ),來針對不同的目的,我們會在第 21 章討論。
11.2 使用者資料包 UDP 的封包被稱為使用者資料包 ( user datagram ),它的標頭固定為 8 個位元組。
請注意: UDP長度= IP長度-IP標頭長度
11.3 檢查碼 UDP 的檢查碼計算與 IP 或 ICMP 不同,UDP 的檢查碼計算包含了三個部份:一個虛擬標頭 ( pseudoheader )、UDP標頭及來自應用層的資料。 本節所討論的主題包括: 傳送端檢查碼之計算 接收端檢查碼之計算 UDP 可以使用檢查碼也可以不使用
11.4 UDP的運作 UDP 使用的概念與傳輸層共通,在這一節,我們會先簡單介紹,待下一章 TCP 通訊協定再詳細介紹。 本節所討論的主題包括: 非預接式服務 流量與錯誤控制 封裝及拆裝 佇列 多工與解多工
11.5 UDP之用途 在本節中,我們討論一些使用 UDP 通訊協定的地方。
11.6 UDP套件 為了去說明 UDP 如何處理 UDP 封包的傳送與接收動作,我們展示一個簡易版本的 UDP 套件。 UDP 套件包含下面五個模組:控制區塊表 ( control-block table )、輸入佇列 ( input queue )、控制區塊模組 ( control-block module )、輸入模組 ( input module ) 及輸出模組 ( output module ) 。 本節所討論的主題包括: 控制區塊表 輸入佇列 控制區塊模組 輸入模組 輸出模組
範例2 一開始一個目的埠號為 52,012 的使用者資料包到來。 輸入模組在控制區塊表中尋找並找到這個埠號,同時知道這個埠已經使用,佇列代碼為 38。 輸入模組將使用者資料包傳送到 38 號佇列,控制區塊表保持不變。
範例3 在數秒後,一個程序啟動,它向作業系統要求一個埠號,而作業系統給予此程序一個 52,014 的埠號。 然後該程序將其程序代碼 ( 4,978 ) 及埠號交給控制區塊模組,以便在控制區塊表中建立一個條目。 控制模組選用第一個空著的條目,把收到的資訊填入。此時並沒有建立相對應的佇列,因為到此目的埠的使用者資料包還沒有到來 ( 見表11.3 )。 接下一張投影片
範例4 一個目的埠為 52,011 的使用者資料包傳送進來。 輸入模組檢查表中發現目前並沒有為這個目的埠安排佇列,這是因為到這個埠號的第一個資料包現在才到。 這時候輸入模組便建立一個佇列,其代碼為 43 ( 見表11.4 )。 接下一張投影片
範例5 數秒後,一個埠號為 52,222 的使用者資料包傳送進來。 輸入模組在表中無法找到一個與此埠號一樣的條目,於是該使用者資料包就被丟棄。 同時輸入模組要求 ICMP 送出一個通訊埠無法到達的訊息給資料包的來源端。