
系列文章目錄
文章目錄
- 系列文章目錄
- 前言
- 一、傳輸層
- 1.再談埠號
- 2.埠號范圍劃分
- 3.認識知名埠號(Well-Know Port Number)
- 4.行程和埠號兩個問題
- 5.netstat查看網路狀態
- 二、UDP協議
- 1.UDP協議端格式
- 2.UDP的特點
- 3.面向資料報
- 4.UDP的緩沖區
- 5.UDP的應用
- 6.UDP使用注意事項
- 7.16位的UDP校驗和的校驗原理
- 總結
前言

一、傳輸層
1.再談埠號
傳輸層是負責端對端之間的傳輸,端指的是埠(port);TCP協議和UDP協議都是傳輸層的協議,

在TCP/IP協議中, 用 “源IP”, “源埠號”, “目的IP”, “目的埠號”, “協議號” 這樣一個五元組來標識一個通信(可以通過netstat -n查看),

2.埠號范圍劃分
- 0 - 1023: 知名埠號, HTTP, FTP, SSH等這些廣為使用的應用層協議, 他們的埠號都是固定的,
- 1024 - 65535: 作業系統動態分配的埠號. 客戶端程式的埠號, 就是由作業系統從這個范圍分配的,
3.認識知名埠號(Well-Know Port Number)
- 有些服務器是非常常用的, 為了使用方便, 人們約定一些常用的服務器, 都是用以下這些固定的埠號,
- ssh服務器, 使用22埠,
- ftp服務器, 使用21埠,
- telnet服務器, 使用23埠,
- http服務器, 使用80埠,
- https服務器, 使用443,
執行下面的命令, 可以看到知名埠號,我們自己寫一個程式使用埠號時, 要避開這些知名埠號,執行下面的命令, 可以看到知名埠號,cat /etc/services,

4.行程和埠號兩個問題
- 一個行程是否可以bind多個埠號?
可以
- 一個埠號是否可以被多個行程bind?
不可以
5.netstat查看網路狀態
我們可以使用 netstat [選項] 命令來查看網路狀態,
- 常用選項如下:
- n 拒絕顯示別名,能顯示數字的全部轉化成數字,
- l 僅列出有在 Listen (監聽) 的服務狀態,
- p 顯示建立相關鏈接的程式名,
- a (all)顯示所有選項,默認不顯示LISTEN相關,
- u (udp)僅顯示udp相關選項,
- t (tcp)僅顯示tcp相關選項,
二、UDP協議
1.UDP協議端格式

- 16位源埠:資料從哪一個埠發出來的,也就是資料從哪一個行程發送出來的,
- 16位目的埠:資料想要到哪一個埠去,也就是資料想要去往哪一個行程,
- 16位UDP長度:表示整個資料報(UDP頭部+UDP資料)的最大長度,
- 16位的UDP校驗和:校驗資料在傳輸程序中是否失真,資料在傳輸的程序中需要經過很多鏈路設備,如果在轉發程序中有某個位元組損壞,就相當于整個這個資料失真了,如果UDP接收方校驗和出錯,就會直接將資料丟棄掉,且不會通知發送方,
- 如果校驗和出錯, 就會直接丟棄,
16位能夠表示的資料最大位長度位2^16=65536—>指的是UDP資料的最大長度,
2.UDP的特點
- UDP傳輸的程序類似于寄信:
- 無連接: 知道對端的IP和埠號就直接進行傳輸, 不需要建立連接,
- 不可靠: 沒有確認機制, 沒有重傳機制; 如果因為網路故障該段無法發到對方, UDP協議層也不會給應用層回傳任何錯誤資訊,
- 面向資料報: 不能夠靈活的控制讀寫資料的次數和數量,
3.面向資料報
應用層交給UDP多長的報文, UDP原樣發送, 既不會拆分, 也不會合并,
- 用UDP傳輸100個位元組的資料:
- 如果發送端呼叫一次sendto, 發送100個位元組, 那么接收端也必須呼叫對應的一次recvfrom, 接收100個位元組; 而不能回圈呼叫10次recvfrom, 每次接收10個位元組,
4.UDP的緩沖區
UDP的socket既能讀, 也能寫, 這個概念叫做 全雙工,

- UDP沒有真正意義上的 發送緩沖區. 呼叫sendto會直接交給內核, 由內核將資料傳給網路層協議進行后續的傳輸動作,
- 發送緩沖區:將應用層資料打上UDP報頭后直接遞交給網路層,
- UDP具有接識訓沖區. 但是這個接識訓沖區不能保證收到的UDP報的順序和發送UDP報的順序一致; 如果緩沖區滿了, 再到達的UDP資料就會被丟棄,
- 接識訓沖區:去掉UDP報頭后將資料遞交給應用層,
- UDP協議并不保證資料的有序到達,
5.UDP的應用
- NSF:網路檔案系統
- TFTP:簡單檔案傳輸協議
- DHCP:動態主機配置協議
- BOOTP:啟動協議(用于無盤設備啟動)
- DNS:域名決議協議
?
也包括自己寫UDP程式時自定義的應用層協議,
6.UDP使用注意事項

【拓展】16位能夠表示的資料最大位長度位2^16=65536—>指的是UDP資料的最大長度,
【問題三】想要使用UDP協議發送大于2^16的資料長度的資料應該如何發送?
采用自定制協議:當資料在應用層會被打上應用層的報頭,在報頭中會有資料的長度和兩個標識,一個標識用來標識是否屬于同一條資料,另一個標識用來標識當前資料在整個完整的資料的什么位置,相當于偏移量,
如下圖所示:
7.16位的UDP校驗和的校驗原理

(1)發送方進行填充,接收方進行校驗,
??對接收方:
????如果校驗成功(對所有16個位元位相加和全為1),會將資料交給應用層;
????如果校驗失敗,即使資料已經到達了接收方傳輸層的UDP協議,也會被丟棄,有可能在傳輸的程序中失真
(2)發送填充
Ⅰ. 將除了校驗和的16位位元位,其余的按照16個位元位相加,在相加的程序中如果出現位元位超過16位的情況需要進行回卷
??回卷的策略:最高位+低16位 計算出來的新值
Ⅱ. 加完的結果進行反碼運算
Ⅲ. 將反碼運算的結果放到16位的校驗和當中
總結
以上就是今天要講的內容,本文詳細介紹了傳輸層UDP協議使用,網路提供了大量的方法供我們使用,非常的便捷,我們務必掌握,希望大家多多支持!另外如果上述有任何問題,請懂哥指教,不過沒關系,主要是自己能堅持,更希望有一起學習的同學可以幫我指正,但是如果可以請溫柔一點跟我講,愛與和平是永遠的主題,愛各位了,加油啊!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293177.html
標籤:其他



