UDP中使用bind和connect的做用

1:UDP中可使用connect系統調用


2:UDP中connect操做與TCP中connect操做有着本質區別。


TCP中調用connect會引發三次握手,client與server創建連結.UDP中調用connect內核僅僅把對端ip&port記錄下來.


3:UDP中能夠屢次調用connect,TCP只能調用一次connect.  


UDP屢次調用connect有兩種用途:1,指定一個新的ip&port連結. 2,斷開和以前的ip&port的連結.


指定新連結,直接設置connect第二個參數便可.


斷開連結,須要將connect第二個參數中的sin_family設置成 AF_UNSPEC便可. 


4:UDP中使用connect能夠提升效率.緣由以下:


普通的UDP發送兩個報文內核作了以下:#1:創建連結#2:發送報文#3:斷開連結#4:創建連結#5:發送報文#6:斷開連結


採用connect方式的UDP發送兩個報文內核以下處理:#1:創建連結#2:發送報文#3:發送報文另一點,  每次發送報文內核都由可能要作路由查詢.


5:採用connect的UDP發送接受報文能夠調用send,write和recv,read操做.固然也能夠調用sendto,recvfrom.


調用sendto的時候第五個參數必須是NULL,第六個參數是0.調用recvfrom,recv,read系統調用只能獲取到先前connect的ip&port發送的報文. 




UDP中使用connect的好處:1:會提高效率.前面已經描述了.2:高併發服務中會增長系統穩定性.緣由:假設client A 經過非connect的UDP與server B,C通訊.B,C提供相同服務.爲了負載均衡,咱們讓A與B,C交替通訊.A 與 B通訊IPa:PORTa <----> IPb:PORTb;


A 與 C通訊IPa:PORTa' <---->IPc:PORTc 


假設PORTa 與 PORTa'相同了(在大併發狀況下會發生這種狀況),那麼就有可能出現A等待B的報文,卻收到了C的報文.致使收報錯誤.解決方法內就是採用connect的UDP通訊方式.在A中建立兩個udp,而後分別connect到B,C.服務器

 

 

對一個UDP的套接口屢次調用connect的狀況如何?併發

  • 鏈接新的IP和端口
  • 斷開前面的鏈接

第一個目的不一樣於TCP鏈接connect的使用:對於TCP鏈接,connect只能調用一次;針對UDP則能夠connect到不一樣的server,eg:client須要和多個服務器同時通訊。負載均衡

第二個目的爲了斷開一個已鏈接的UDP鏈接,再次調用connect時,把套接字地址結構的地址簇成員(IPv4爲sin_family,IPv6爲sin6_family),設置爲AF_UNSPEC便可。高併發

 

性能:當進程知道本身要給同一個目的地址發送多個數據報時,顯式鏈接套接字效率更高。性能

而臨時鏈接未鏈接的UDP套接字大約會消耗每一個UDP傳輸三分之一的開銷。spa

相關文章
相關標籤/搜索