實驗目的 明瞭不可靠傳輸層的基礎觀念 解析UDP協定下區段資料傳送的格式
背景資料 TCP協定與UDP協定各有其傳輸特性,主要差異在於訊息的處理時間與傳輸的可靠度問題,協定的選擇期望在處理時間與可靠度間找到一個平衡點。 UDP協定(User Datagram Protocol)是一個相當簡單的協定,僅提供Host-To-Host (End-to-End)最基本的功能,也就是提供連接埠號給主機判斷是由何應用程式處理資訊。
背景資料 UDP和IP都是以非連接導向性(Connectionless)的方式來傳送封包,所以傳送過程較為單純,相對地可靠性較差,無法保證資料到達目的地的順序,在傳送過程中若發生問題,並不具有確認、重送等機制,所以一般而言要使用UDP協定來傳送資料必須滿足底下條件: 允許資料損失。 不管資料到達目的地的順序,所以最好資訊均封裝在單一區段中。 對電腦資源的需求高。
背景資料 所以DNS查詢、網路多媒體視訊和網路廣播(Multicast或Broadcast)等,在資料損失時並不會造成重大影響,但對時效需求較高,或者應用層有能力來處理這些問題,如一些P2P程式,此時才會使用UDP協定。 UDP協定的主要作用是將區段的表頭壓縮成為一個較為簡易的格式,一個典型的UDP區段就是一個二進制的格式,每一個區段的前八個字元是用來包含區段表頭的訊息,其他的就用來當作包含具體的資料。
傳輸層連接埠 傳輸層協定使用2 Bytes來存放連接埠號,所以埠號的有效範圍是從0到65535,為不同的應用程式保留其各自的資料傳送的通道,連接埠號的規範在 http://www.iana.org/assignments/port-numbers。 UDP和TCP協定正是採用這類機制,來實現對同一個時間點中多個應用程式同時發送和接收資料的支援,發送資料的一方(可以是客戶端或是伺服器端)將UDP資料通過來源埠號發送出去,而資料接收的一方則是通過目標埠口來接收資料,有的網路應用程式只能使用事先為其預留的固定埠號,而另外有一些網路應用程式則可以使用未被使用的動態埠號。 按IANA的規定,編號0-1023的連接埠號稱為Well-Known埠,Well-Known連接埠僅是約定俗成的意思,並不具有強制性質,主要供伺服器應用程式使用,一般來說,大於49151的連接埠號都是代表動態連接埠號。
常見的保留埠編號
UDP區段 UDP整個區段的長度,是指包括區段表頭和資料部分在内,區段表頭的長度是固定的,資料區段的最大長度根據使用環境的不同會有差異,理論上來說,包含表頭在內的區段大小的最大長度為65535 bytes。 UDP協定使用表頭中的確認值來確保資料的正確性,確認值首先在資料發送方利用特殊的演算法來得到,在傳送到接收端之後,還要重新的再計算一次,如果有某一個資料區段在傳送的過程中被第三者更改而損壞的話,那麼發送端和接收端的確認值會不相同,由此可見UDP協定可以檢測是否出錯。這個和TCP協定是不同的。
UDP區段 UDP區段格式 UDP表頭欄位
UDP區段 Source Port:長度為2 Bytes,用來記錄來源端應用程式所用的連接埠號。 Destination Port:長度為2 Bytes,用來記錄目的端應用程式所用的連接埠號。 Length:長度為2 Bytes,用來記錄UDP區段的總長度,以Byte單位。欄位最小值為8,也就是只有UDP表頭,沒有任何UDP資料,最大值則受限於IP Payload的長度。 Checksum:長度為2 Bytes,用來檢查來源主機與目的主機所送出的資料區段是否正確。
UDP虛擬表頭 UDP與TCP執行其Checksum值運算時,除了表頭與資料外,還有一個所謂的虛擬表頭(Pseudo Header)作輔助。它包含以下的欄位: Source IP Address:IP表頭中來源端的IP位址 Destination IP Address:IP表頭中目的端的IP位址 Unused:長度為8 Bits,填入0 Protocol:IP表頭中紀錄上層協定的欄位 Length:UDP表頭中的Length欄位 UDP的錯誤檢查碼可視為雙重保險的機制,當區段在傳遞中發生錯誤,而位於UDP下的各層協定都沒有找出錯誤時,Pseudo Header提供了一道額外的防線。
UDP協定的應用 UDP雖然負責傳送訊息,但本層並不提供軟體來查核區段遞送狀況。 UDP提供了較為簡易的資料傳輸栛定,它的訊息可能會在網路傳送過程中遺失、重複或不依順序,但它可以提供一個較快的傳送機制,在某些場合中可能需要,如DNS。
實驗方法 DNS query
DNS query 說明:UDP表頭包含: 1.Source port = 1064; 2.Destination port = (domain) 53; 3.Length = 43; 4.Checksum = 0xa37b(十六進位)
微軟網路芳鄰協定
微軟網路芳鄰協定 說明:UDP表頭包含: 1.Source port = (netbios-dgm) 138; 2.Destination port = (netbios-dgm) 138; 3.Length = 215; 4.Checksum = 0xc54c(十六進位)
Bitcomet
Bitcomet 說明:UDP表頭包含: 1.Source port = 12017; 2.Destination port = 12195; 3.Length = 109; 4.Checksum = 0x6c90(十六進位)
Port Scan 使用Free IP scanner也可以掃瞄IP機器Port的使用情況,首先需在[Edit]->[Options]將Scan port這選項勾選,並輸入欲掃瞄的Port號,Port號間需用逗號隔開。相同的重申一下請勿隨意掃瞄他人IP機器Port的使用情況,這會讓人以為你具有攻擊的意圖。
Port Scan
nmap
學習評量 應用層如何決定選擇傳輸層中是使用TCP或UDP協定? 說明連接埠編號的原則? 說明UPD的checksum值的運算機制。 說明UDP協定中潛在的風險?