TCP/IP協議--06 UDP協議
UDP簡要介紹
UDP是傳輸層協議,和TCP協議處於一個分層中,但是與TCP協議不同,UDP協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。
UDP協議頭
UDP埠號
由於很多軟體需要用到UDP協議,所以UDP協議必須通過某個標誌用以區分不同的程式所需要的資料包。埠號的功能就在於此,例如某一個UDP程式A在系統中註冊了3000埠,那麼,以後從外面傳進來的目的埠號為3000的UDP包都會交給該程式。埠號理論上可以有2^16這麼多。因為它的長度是16個bit。
UDP檢驗和
這是一個可選的選項,並不是所有的系統都對UDP資料包加以檢驗和資料(相對TCP協議的必須來說),但是RFC中標準要求,傳送端應該計算檢驗和。
UDP檢驗和覆蓋UDP協議頭和資料,這和IP的檢驗和是不同的,IP協議的檢驗和只是覆蓋IP資料頭,並不覆蓋所有的資料。UDP和TCP都包含一個偽首部,這是為了計算檢驗和而設定的
UDP長度
UDP可以很長很長,可以有65535位元組那麼長。但是一般網路在傳送的時候,一次一般傳送不了那麼長的協議(涉及到MTU的問題),就只好對資料分片,當然,這些是對UDP等上級協議透明的,UDP不需要關心IP協議層對資料如何分片,下一個章節將會稍微討論一些分片的策略。
IP分片
IP在從上層接到資料以後,要根據IP地址來判斷從那個介面傳送資料(通過選路),並進行MTU的查詢,如果資料大小超過MTU就進行資料分片。資料的分片是對上層和下層透明,而資料也只是到達目的地還會被重新組裝,不過不用擔心,IP層提供了足夠的資訊進行資料的再組裝。
在IP頭裡面,16bit識別號唯一記錄了一個IP包的ID,具有同一個ID的IP片將會被重新組裝;而13位片偏移則記錄了某IP片相對整個包的位置;而這兩個表示中間的3bit標誌則標示著該分片後面是否還有新的分片。這三個標示就組成了IP分片的所有資訊,接受方就可以利用這些資訊對IP資料進行重新組織(就算是後面的分片比前面的分片先到,這些資訊也是足夠了)。
因為分片技術在網路上被經常的使用,所以偽造IP分片包進行流氓攻擊的軟體和人也就層出不窮。
可以用Trancdroute程式來進行簡單的MTU偵測。
ICMP源站抑制差錯
當目標主機的處理速度趕不上資料接收的速度,因為接受主機的IP層快取會被佔滿,所以主機就會發出一個“我受不了”的一個ICMP報文。
UDP伺服器設計
UDP協議的某些特性將會影響我們的伺服器程式設計,大致總結如下:
-
關於客戶IP和地址:伺服器必須有根據客戶IP地址和埠號判斷資料包是否合法的能力(這似乎要求每一個伺服器都要具備)
-
關於目的地址:伺服器必須要有過濾廣播地址的能力。
-
關於資料輸入:通常伺服器系統的每一個埠號都會和一塊輸入緩衝區對應,進來的輸入根據先來後到的原則等待伺服器的處理,所以難免會出現緩衝區溢位的問題,這種情況下,UDP資料包可能會被丟棄,而應用伺服器程式本身並不知道這個問題。
-
伺服器應該限制本地IP地址,就是說它應該可以把自己繫結到某一個網路介面的某一個埠上。