2.UDP協議

UDP只在IP數據報服務之上增加了很少功能,即複用分用和差錯檢測功能。

圖片

圖片

應用層給UDP多長的報文,UDP就照樣發送,即一次發送一個完整報文

一、UDP首部格式

圖片
這裏的長度是指(首部+數據)

UDP校驗:

圖片

圖片

在發送端:

  1. 填上僞首部
  2. 全0填充檢驗和字段
  3. 全0填充數據部分
  4. 僞首部+首部+數據部分採用二進制反碼求和
  5. 把求和反碼填入檢驗和字段
  6. 去掉僞首部,發送

在接收端:

  1. 填上僞首部
  2. 僞首部+首部+數據部分採用二進制反碼求和(此時校驗和不爲0了)
  3. 結果全爲1則無差錯,否則發生差錯

二、用python實現UDP校驗和

實驗步驟:
①傳入一個16位整數數組
②每個數加起來,當和溢出時,回捲
③將所有數的和求反,這個值就是校驗和
④驗證校驗和的正確性:校驗和+所有16位整數 = -1

"""
    @author: xsy
    @date: 2020/3/28
    @desc: UDP校驗和
"""

# 計算·udp校驗和(_data是一個16位整數的數組)
def calculate_udp_sum(_data):
    _sum = 0x0
    for d in _data:
        _sum = _sum + (d & 0xffff)
        # 溢出回捲
        if _sum < 0xffff:
            _sum = (_sum >> 16) + (_sum & 0xffff)
    # 取反
    return ~_sum



def check_ans(_ans, _data):
    if ans + data[0] + data[1] + data[2] == -1:
        print('校驗結果正確')
    else:
        print('校驗結果失敗')



# 測試數據
data = [0b0110011001100000, 0b0101010101010101, 0b1000111100001100]

# 校驗和
ans = calculate_udp_sum(data)

# 檢測UDP校驗和是否正確
check_ans(ans, data)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章