? ? ? ? 在傳輸層中有UDP和TCP兩個重要的協議,下面將針對UDP數據報的結構進行分析
UDP結構圖示
?UDP報頭結構的分析
? ? ? ? UDP報頭有4個屬性,分別是源端口,目的端口,UDP報文長度,校驗和,它們都占16位2個字節,所以取值范圍是0-65535
? ? ? ? 一.源端口
? ? ? ? ? ? ? ? 源端口表示發送數據時,發送方的端口號,由于占16位2個字節,所以取值范圍是0-65535,所以一個合法的端口號,有效范圍就是0-65535不能再大了(實際上0是不使用的),
????????????????知名端口號
? ? ? ? ? ? ? ? ? ? ? ? 在1-1024這個范圍的端口號,系統賦予了特定的含義,一般也不建議使用,這些端口號已經給一些名氣比較大的服務器提前安排好了(坐飛機的頭等艙一樣)
? ? ? ? 二.目的端口號
????????????????目的端口號表示發送數據時,接收方的端口號,其余的特點和源端口號相同
? ? ? ? 三.UDP報文長度
? ? ? ? ? ? ? ? 表示UDP數據報的長度,由于占用兩個字節,所以也表示一個UDP數據報能傳輸的數據是有限制的,限制在大約64kb的數據,所以當我們要傳輸的數據大于64kb時就不建議用UDP協議的方式來傳輸數據了,建議采用TCP協議的方式傳輸,因為TCP數據報傳輸數據是不限制大小的
? ? ? ? 四.校驗和
? ? ? ? ? ? ? ? 當我們在進行網絡傳輸數據的過程中,本質上就是光信號/電信號/電磁波的數據傳輸,很可能就會受到外界的干擾,數據可能會出錯,比如,本來你要傳輸的數據是0變成了1,本來是1變成了0(發生了比特翻轉),此時數據就出錯了,所以接收方在收到數據了以后就需要先確認一下,這個數據是否是一個錯誤的數據,校驗和就是簡單有效的方式
? ? ? ? ? ? ? ? 校驗和的工作原理
? ? ? ? 校驗和會把UDP數據報中的每一個字節,都依次進行累加,把累加的結果,保存在兩個字節的變量中,加著加著可能就溢出了,但溢出也無所謂,將所有的字節都加了一遍,最終就獲得了校驗和
????????在傳輸數據的時候,就會把原始數據和校驗和一起傳遞過去,接收方收到數據,同樣也收到了發送方送過來的校驗和,接收方按同樣的方式再算一遍,獲得了新的校驗和,將新的校驗和與舊的校驗和進行對比,如果相同就說明數據正確,反之則不正確,要重新發送數據
? ? ? ? 此時可能會有一些高手想到,就算校驗和相同也可能傳輸的數據是錯誤的,因為二進制數據可能會有一個位置從0變為了1,另一個位置從1變為了0,這樣算出來的校驗和還是相同的,但傳輸的數據是錯誤的
? ? ? ? 確實會有這樣的情況,但這只能算是一個誤差,誤差是不可避免的,因為本來出現比特翻轉就是一個小概率事件,而發生兩次比特翻轉并且還剛好抵消,這更是非常小的概率了,所以我們只將這種情況看作是一個誤差。