傳輸層
埠號
setsockopt()函式的功能可以通過setsockopt()實現埠的復用
第三個引數使用so_reuseaddr
int val = 1;
setsockopt(sockfd, sol_socket, so_reuseaddr, &val , sizeof(val))
使用埠復用的主要場景:
當伺服器重啟時,此時的埠還沒有完全關閉,埠號還處於被其他套接埠繫結的狀態,如果不設定位址復用,重啟的伺服器繫結時會失敗,所以需要設定埠復用的功能
伺服器為何未能完全關閉:
在伺服器重啟時,屬於伺服器端主動退出,伺服器會進入time_wait狀態,可能會等待最長的2msl時間,此時伺服器並沒有完全關閉進入closed狀態,所以伺服器會等待一段時間後才能完全關閉。因此原來的埠仍在繫結中。
#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校驗和
---------------------------------- ---
資料----------------------------------
udp中的緩衝區可以通過設定setsockopt 關閉校驗和
bool nochecksum=false;
setsockopt(sock,ipproto_udp,udp_nochecksum,reinterpret_cast<&nochecksum>,sizeof(nochecksum));
基於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 只提供資料的不可靠傳遞,它一旦把應用程式發給網路層的資...