TCP/IP協議學習(5)-UDP協議

1.UDP協議

   UDP是傳輸層協議,和TCP協議處於一個分層中,但是與TCP協議不同,UDP協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。 

2.UDP協議頭

2.1.UDP端口號

   由於很多軟件需要用到UDP協議,因此UDP協議必須通過某個標誌用以區分不同的程序所需要的數據包。端口號的功能就在於此,例如某一個UDP程序A在系 統中註冊了3000端口,那麼,以後從外面傳進來的目的端口號爲3000的UDP包都會交給該程序。端口號理論上可以有2^16這麼多。因爲它的長度是16個bit

2.2.UDP檢驗和

   這是一個可選的選項,並不是所有的系統都對UDP數據包加以檢驗和數據(相對TCP協議的必須來說),但是RFC中標準要求,發送端應該計算檢驗和。
   UDP檢驗和覆蓋UDP協議頭和數據,這與IP的檢驗和是不同的,IP協議的檢驗和只是覆蓋IP數據頭,並不覆蓋所有的數據。UDP和TCP都包含一個僞首部,這是爲了計算檢驗和而設計的。僞首部甚至還包含IP地址這樣的IP協議裏面都有的信息,目的是讓UDP兩次檢查數據是否已經正確到達目的地。如果發送端沒有打開檢驗和選項,而接收端計算檢驗和有差錯,那麼UDP數據將會被悄悄的丟掉(不保證送達),而不產生任何差錯報文。

2.3.UDP長度

   UDP可以很長很長,可以有65535字節那麼長。但是一般網絡在傳送的時候,一次一般傳送不了那麼長的協議(涉及到MTU的問題),就只好對數據分片,當然,這些是對UDP等上級協議透明的,UDP不需要關心IP協議層對數據如何分片,下一個章節將會稍微討論一些分片的策略

3.IP分片

    IP在從上層接到數據以後,要根據IP地址來判斷從那個接口發送數據(通過選路),並進行MTU的查詢,如果數據大小超過MTU就進行數據分片。數據的分片是對上層和下層透明,而數據也只是到達目的地還會被重新組裝,不過不用擔心,IP層提供了足夠的信息進行數據的再組裝。

   在IP頭裏面,16bit識別號唯一記錄了一個IP包的ID,具有同一個ID的IP片將會被重新組裝;而13位片偏移則記錄了某IP片相對整個包的位置;而這兩個表示中間的3bit標誌則標示着該分片後面是否還有新的分片。這三個標示就組成了IP分片的所有信息,接受方就可以利用這些信息對IP數據進行重新組織(就算是後面的分片比前面的分片先到,這些信息也是足夠了)。

   因爲分片技術在網絡上被經常的使用,所以僞造IP分片包進行流氓攻擊的軟件和人也就層出不窮。可以用Trancdroute程序來進行簡單的MTU偵測。

4.UDP服務器設計

UDP協議的某些特性將會影響我們的服務器程序設計,大致總結如下:

   關於客戶IP和地址:服務器必須有根據客戶IP地址和端口號判斷數據包是否合法的能力(這似乎要求每一個服務器都要具備)
   關於目的地址:服務器必須要有過濾廣播地址的能力。
   關於數據輸入:通常服務器系統的每一個端口號都會和一塊輸入緩衝區對應,進來的輸入根據先來後到的原則等待服務器的處理,所以難免會出現緩衝區溢出的問題,這種情況下,UDP數據包可能會被丟棄,而應用服務器程序本身並不知道這個問題。
   服務器應該限制本地IP地址,就是說它應該可以把自己綁定到某一個網絡接口的某一個端口上。

參考鏈接:http://m.blog.csdn.net/article/details?id=713856

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章