① 計算機網路-運輸層-用戶數據報協議UDP
用戶數據報協議UDP只在IP的數據報服務之上增加的功能:復用和分用的功能以及差錯檢測的功能。
UDP的主要特點是:
(1) UDP是無連接的 ,即發送數據之前不需要建立連接(當然,發送數據結束時也沒有連接可釋放),因此了開銷和發送數據之前的時延。
(2) UDP使用盡最大努力交付 ,即不保證可靠交付,因此主機不需要維持復雜的連接狀態表(這裡面有許多參數)。
(3) UDP是面向報文的 。發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付IP層。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。這就是說,應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文,如圖5-4所示。在接收方的UDP,對IP層交上來的UDP用戶數據報,在去除首部後就原封不動地交付上層的應用進程。也就是說,UDP一次交付一個完整的報文。因此,應用程序必須選擇合適大小的報文,若報文太長,UDP把它交給IP層後,IP層在傳送時可能要進行分片,這會降低IP層的效率。反之,若報文太短,UDP把它交給IP層後,會使IP數據報的首部的相對長度太大,這也降低了IP層的效率。
(4)UDP沒有擁塞控制,因此網路出現的擁塞不會使源主機的發送速率降低。這對某些實時應用是很重要的。很多的實時應用(如P電話、實時祝頻會議等)要求源主機以恆定的速率發遞數據,並且允許在網鉻發生擁塞時丟失一些數據,但卻不允許數據有太大的時延。UDP正好適合這種要求。
(5)UDP支持一對一、一對多、多對一和多對多的交互通信.
(6)UDP的首部開銷小,只有8個位元組,比TCP的20個位元組的首部要短。
(7)網路環境差的情況下,丟包嚴重。
雖然某些實時應用需要使用沒有擁塞控制的UDP,但當很多的源主機同時都向網路發送高速率的實時視領流時,網鉻就有可能發生擁塞。結果大家都無法正常接收。因此,不使用擁塞控制功能的UDP有可能會引起網路產生嚴重的擁塞問題。
還有一些使用UDP的實時應用,需要對UDP的不可靠的傳輸進行適當的改進,以減少數據的丟失。在這種情況下,應用進程本身可以在不影響應用的實時性的前提下,增加一些提高可靠性的措施,如採用前向糾錯或重傳己丟失的報文。
用戶數據報UDP有兩個欄位:數據欄位和首部欄位。首部欄位很簡單,只有8個位元組(圖5-5),由四個欄位組成,每個欄位的長度都是兩個位元組。各欄位意義如下:
(1)源埠 源埠號。在需要對方回信時選用。不需要時可用全0。
(2)目的埠 目的埠號。這在終點交付報文時必須使用。
(3)長度 UDP用戶數據報的長度,其最小值是8(僅有首部)。
(4)檢驗和 檢測UDP用戶數據報在傳輸中是否有錯。有錯就丟棄。
偽首部的第3欄位是全零;第4欄位是P首部中的協議欄位的值,對於 UDP協議欄位值為17 ;第5欄位是UDP用戶數據報的長度。當運輸層從IP層收到UDP數據報時,就根據首部中的目的埠,把UDP數據報通過相應的埠,上交最後的終點一應用進程。
如果接收方UDP發現收到的報文中的目的埠號不正確(即不存在對應於該埠號的應用進程),就丟棄該報文,並由 網際控制報文協議ICMP發送「埠不可達」差錯報文 給發送方。「ICMP的應用」中的traceroute時,就是讓發送的UDP用戶數據報故意使用一個非法的UDP埠,結果ICMP就返回「埠不可達」差錯報文,因而達到了測試的目的。
請注意,雖然在UDP之間的通信要用到其埠號,但由於UDP的通信是無連接的,因此不需要使用套接字(TCP之間的通信必須要在兩個套接字之間建立連接)。
UDP用戶數據報首部中檢驗和的計算方法有些特殊。在計算檢驗和時,要在UDP用戶數據報之前增加12個位元組的偽首部。所謂「偽首部」是因為這種偽首部並不是UDP用戶數據報真正的首部。只是在計算檢驗和時,臨時添加在UDP用戶數據報前面,得到一個臨時的UDP用戶數據報。檢驗和就是按照這個臨時的UDP用戶數據報來計算的。偽首部既不向下傳送也不向上遞交,而僅僅是為了計算檢驗和。
UDP計算檢驗和的方法 和計算IP數據報首部檢驗和的方法相似。但不同的是:IP數據報的檢驗和只檢驗IP數據報的首部,但UDP的檢驗和是把首部和數據部分一起都檢驗。 在發送方 ,首先是先把全零放入檢驗和欄位。再把偽首部以及UDP用戶數據報看成是由許多16位的字串接起來的。若UDP用戶數據報的數據部分不是偶數個位元組,則要填入一個全零位元組(但此位元組不發送)。然後按二進制反碼計算出這些16位字的和。將此和的二進制反碼寫入檢驗和欄位後,就發送這樣的UDP用戶數據報。 在接收方 ,把收到的UDP用戶數據報連同偽首部(以及可能的填充全零位元組)一起,轉為8位數二進制,然後按二進制反碼求這些16位字的和。當無差錯時其結果應為全1。否則就表明有差錯出現,接收方就應丟棄這個UDP用戶數據報(也可以上交給應用層,但附上出現了差錯的警告)。 檢驗和 ,既檢查了UDP用戶數據報的源埠號和目的埠號以及UDP用戶數據報的數據部分,又檢查了IP數據報的源P地址和目的地址。
這里假定用戶數據報的長度是15位元組,因此要添加一個全0的位元組。這種簡單的差錯檢驗方法的檢錯能力並不強,但它的好處是簡單,處理起來較快。
② 計算機上的正負公差怎麼算
所謂原碼就是機器數,是加了一位符號位的二進制數,正數符號位為0,負數符號位為1,計算機中存儲、處理、運算的數據通常是8位、16位、32位或64位的,這里以最簡單的8位為例講解。注意符號位是包含在8位中的其中1位,故可直觀讀出的數只有7位(只有後7位數可以按權展開)。有心人可能注意到原碼是有缺陷的,它只能表示255種狀態,因為00000000(+0)和10000000(-0)其實是一個數,因此原碼的表示範圍成了-127到+127,這個問題需要神奇的補碼來解決,因為在補碼中10000000被用來表示-128。
所謂反碼,英語里又叫ones' complement(對1求補),這里的1,本質上是一個有限位計數系統里所能表示出的最大值,在8位二進制里就是11111111,在1位十進制里就是9,在3位十六進制里就是FFF(再大就要進位了)。求反又被稱為對一求補,用最大數減去一個數就能得到它的反,很容易看出在二進制里11111111減去任何數結果都是把這個數按位取反,0變1,1變零,所以才稱之為反碼。用原碼求反碼的方法是,正數不變,負數保留符號位1不變,剩下位按位取反。
所謂補碼,英語里又叫two's complement(對2求補),這個2指的是計數系統的容量(模),就是計數系統所能表示的狀態數。對1位二進制數來說只有0和1兩種狀態,所以模是10也就是十進制的2,對7位二進制數來說就是10000000,這個模是不可能取到的,因為位數多一位。用模減去一個數(無符號部分)就能得到這個數的補,比如10000000-1010010=0101110,事實上因為10000000=1111111+1,稍加改變就成了(1111111-1010010)+1,所以又可以表述為先求反再加1。總結求補碼的方法就是正數依舊不變,負數保留符號位不變,先求反碼再加上1。
記住了怎麼求補碼,接下來講講運算。通過原碼的符號位和數值,我們能迅速指出它代表的數,判斷其正負並進行四則運算,相比而言反碼和補碼對於人則顯得過於晦澀。如果說原碼是給人看的數字語言,那麼補碼就是計算機的數字語言。計算機不需要知道什麼是正負、大小,這些判斷對它而言過於復雜。事實上它存儲、處理、傳輸的數都只有補碼一種形式,人所做的加減乘除,在計算機里只通過相加和移位就能解決,這都來自於補碼系統的內在自洽和巧奪天工的神奇魔力,也是後文要闡述的重點。
河南新華網路運營協會為您解答
③ 計算機網路,UDP數據報的校驗和欄位是通過什麼來校驗源和目的IP的呢
其實這是一種加密技術用於對文件內容進行審計的方法,使用 精通讀文件把文件讀到內存中,再對文件內容作一個 MD5 校驗得到一串密碼,就是校驗和。
補充:
1、IP首部校驗和欄位是根據IP首部計算的校驗和碼,它不對首部後面的數據進行計算。ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和數據校驗和碼。
2、IP首部校驗和計算:
為了計算一份數據報的IP檢驗和,首先把檢驗和欄位置為0。然後,對首部中每個16bit進行二進制反碼求和(整個首部看成是由一串16bit的字組成),結果存在檢驗和欄位中。當收到一份IP數據報後,同樣對首部中每個16bit進行二進制反碼的求和。由於接收方在計算過程中包含了發送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那麼接收方計算的結果應該為全1。如果結果不是全1(即檢驗和錯誤),那麼IP就丟棄收到的數據報。但是不生成差錯報文,由上層去發現丟失的數據報並進行重傳。
3、TCP和UDP校驗和計算(兩者相同)
校驗和還包含—個96位的偽首標,理論上它位於TCP首標的前面。這個偽首標包含了源地址、目的地址、協議和TCP長度等欄位,這使得TCP能夠防止出現路由選擇錯誤的數據段。這些信息由網際協議(IP)承載,通過TCP/網路介面,在IP上運行的TCP調用參數或者結果中傳遞。
偽首部並非UDP數據報中實際的有效成分。偽首部是一個虛擬的數據結構,其中的信息是從數據報所在IP分組頭的分組頭中提取的,既不向下傳送也不向上遞交,而僅僅是為計算校驗和。
這樣的校驗和,既校驗了UDP用戶數據的源埠號和目的埠號以及UDP用戶數據報的數據部分,又檢驗了IP數據報的源IP地址和目的地址。(偽報頭保證UDP和TCP數據單元到達正確的目的地址。因此,偽報頭中包含IP地址並且作為計算校驗和需要考慮的一部分。最終目的端根據偽報頭和數據單元計算校驗和以驗證通信數據在傳輸過程中沒有改變而且到達了正確的目的地址。