TCP UDP與connect系統呼叫

2021-07-02 03:07:05 字數 1511 閱讀 6863

一、tcp與udp區別

tcp保證資料正確性,udp可能丟包;tcp保證資料順序,udp不保證。

tcp---傳輸控制協議,提供的是面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。

udp---使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp不提供可靠性,它只是把應用程式傳給ip層的資料報傳送出去,但是並不能保證它們能到達目的地。由於udp在傳輸資料報前不用在客戶和伺服器之間建立乙個連線,且沒有超時重發等機制,故而傳輸速度很快

二、tcp中connect操作與udp中connect操作的區別

1)tcp中呼叫connect會引起三次握手,client與server建立連線。udp中呼叫connect時核心僅僅把對端ip&port記錄下來。

2)tcp只能呼叫一次connect,udp中可以多次呼叫connect。

三、udp多次呼叫connect的兩種用途

udp是乙個無連線的協議,因此socket函式connect()似乎對udp是沒有意義的,然而事實不是這樣。它可以用來指定本地埠和本地位址,來建立虛擬連線。

1)指定乙個新的ip&port連線。(直接設定connect第二個引數即可)

2)斷開和之前的ip&port的連線。(將connect第二個引數中的

sin_family設定成 af_unspec即可)

四、udp呼叫connect的作用:提高效率

普通的udp傳送兩個報文時核心操作如下:建立連線--->傳送報文--->斷開連線--->建立連線--->傳送報文--->斷開連線;

採用connect方式的udp傳送兩個報文時核心操作如下:建立連線--->傳送報文--->傳送報文。另外一點,每次傳送報文核心都有可能要做路由查詢。

五、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。

ps:採用connect的udp傳送接受報文可以呼叫send,write和recv,read操作。當然也可以呼叫sendto,recvfrom。呼叫sendto的時候第五個引數必須是null,第六個引數是0。呼叫recvfrom,recv,read系統呼叫只能獲取到先前connect的ip&port傳送的報文。

accept與connect的超時設定

connect超時 我們都知道,connect對應與三次握手中的第一次傳送syn,而對待伺服器的ack,如果伺服器沒有啟動伺服器,有些機器會立刻返回乙個rst表示伺服器拒絕,從而connect失敗,但又些伺服器為了防止攻擊,什麼也不傳送,直至客戶端connect超時,而這一時間又75s,對於客戶端來...

accept與connect的超時設定

connect超時 我們都知道,connect對應與三次握手中的第一次傳送syn,而對待伺服器的ack,如果伺服器沒有啟動伺服器,有些機器會立刻返回乙個rst表示伺服器拒絕,從而connect失敗,但又些伺服器為了防止攻擊,什麼也不傳送,直至客戶端connect超時,而這一時間又75s,對於客戶端來...

accept與connect的超時設定

connect超時 我們都知道,connect對應與三次握手中的第一次傳送syn,而對待伺服器的ack,如果伺服器沒有啟動伺服器,有些機器會立刻返回乙個rst表示伺服器拒絕,從而connect失敗,但又些伺服器為了防止攻擊,什麼也不傳送,直至客戶端connect超時,而這一時間又75s,對於客戶端來...