UDP使用者資料報協議

2021-09-09 06:35:30 字數 1817 閱讀 9703

傳輸層

埠號

可以通過setsockopt()實現埠的復用

第三個引數使用so_reuseaddr

int val = 1;

setsockopt(sockfd, sol_socket, so_reuseaddr, &val , sizeof(val))

使用埠復用的主要場景:

當伺服器重啟時,此時的埠還沒有完全關閉,埠號還處於被其他套接埠繫結的狀態,如果不設定位址復用,重啟的伺服器繫結時會失敗,所以需要設定埠復用的功能

伺服器為何未能完全關閉:

在伺服器重啟時,屬於伺服器端主動退出,伺服器會進入time_wait狀態,可能會等待最長的2msl時間,此時伺服器並沒有完全關閉進入closed狀態,所以伺服器會等待一段時間後才能完全關閉。因此原來的埠仍在繫結中。

setsockopt()函式的功能

#include

int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len);

第乙個引數:套接字描述符

第二個引數:被設定的選項的級別 一般在套接字級別上設定就設定為 sol_socket

第三個引數:根據設定的選項的級別所選擇的指定的選項取值

基於sol_socket選項

- so_reuseaddr: 開啟位址的復用功能

- so_debug: 開啟除錯資訊

- so_dontroute: 開啟或關閉路由查詢功能

- so_broadcast: 允許或禁止廣播資料

- so_sndbuf: 改變傳送緩衝區的大小

- so_rcvbuf: 改變接收緩衝區的大小

第四個引數:指向存放緩衝區的指標

第五各引數:緩衝區的大小

埠號的劃分

一些知名的埠號

在主機上檢視知名的埠號

cat /etc/services
udp協議 使用者資料報協議

udp協議的特點

不可靠: 盡最大努力交付,不保證傳輸的可靠性,沒有確認機制,重傳機制

面向資料報:對於傳下來的報文不會進行拆分及合併,直接封裝後繼續傳輸,不能靈活的控制資料的數量及讀寫

沒有擁塞控制,當網路出現擁塞時不會降低主機的資料的傳送效率

支援一對一, 一對多, 多對多 的通訊

首部開銷小,只有八個位元組

udp協議的控制選項少,所以在傳輸過程中的延遲小,傳輸效率高

udp協議的報文

0<----------->15 16<---------------->31

---------------------------------- ---

16位的埠號 | 16位的目的埠號

---------------------------------- 8位元組

16位的udp長度 | 16位的udp校驗和

---------------------------------- ---

資料----------------------------------

可以通過設定setsockopt 關閉校驗和

bool nochecksum=false;

setsockopt(sock,ipproto_udp,udp_nochecksum,reinterpret_cast<&nochecksum>,sizeof(nochecksum));

udp中的緩衝區

基於udp的應用層協議

使用者資料報協議 UDP

udp 簡述 udp只在ip 的資料報服務之上增加了很少一點的功能,即埠的功能和差錯檢測的功能。udp 的主要特點 udp是無連線的 即傳送資料之前不需要建立連線。udp使用盡最大努力交付 即不保證可靠交付,同時也不使用擁塞控制。udp沒有擁塞控制,很適合多 通訊的要求。udp是面向報文的 udp ...

使用者資料報協議UDP

udp概述 使用者資料報協議udp只在ip的資料報服務上增加了兩個兩個共能。分別是埠功能 有了埠,運輸層就能進行復用和分用 和差錯檢測功能。雖然udp使用者資料報只能提供不可靠的交付,但是在某些方面尤其特殊的優勢 1.udp是無連線的,即傳送資料之前不需要建立連線 當然傳送資料結束時也沒有連線可以釋...

使用者資料報協議UDP

一 udp協議概述 使用者資料報協議 user datagram protocol,縮寫為 udp 又稱使用者資料報文協議,是乙個簡單的面向資料報的運輸協議。在 tcp ip 模型中,udp 為網路層以上和應用層以下提供了乙個簡單的介面。udp 只提供資料的不可靠傳遞,它一旦把應用程式發給網路層的資...