TCP和UDP 2020面試必看

2021-10-06 20:37:08 字數 2665 閱讀 6953

tcp協議是面向連線的通訊協議,即在傳輸資料前先在傳送端和接收端建立邏輯連線,然後再傳輸資料,它提供了兩台計算機之間可靠無差錯的資料傳輸。在tcp連線中必須要明確客戶端與伺服器端,由客戶端向服務端發出連線請求,每次連線的建立都需要經過「三次握手」。第一次握手,客戶端向伺服器端發出連線請求,等待伺服器確認,第二次握手,伺服器端向客戶端回送乙個響應,通知客戶端收到了連線請求,第三次握手,客戶端再次向伺服器端傳送確認資訊,確認連線。整個互動過程如下圖所示。

udp是無連線通訊協議,即在資料傳輸時,資料的傳送端和接收端不建立邏輯連線。簡單來說,當一台計算機向另外一台計算機傳送資料時,傳送端不會確認接收端是否存在,就會發出資料,同樣接收端在收到資料時,也不會向傳送端反饋是否收到資料。

但是在使用udp協議傳送資料時,由於udp的面向無連線性,不能保證資料的完整性,因此在傳輸重要資料時不建議使用udp協議。udp的交換過程如下圖所示。

1、tcp與udp區別總結:1、tcp面向連線(如打**要先撥號建立連線);udp是無連線的,即傳送資料之前不需要建立連線

2、tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達;udp盡最大努力交付,即不保證可靠交付

tcp通過校驗和,重傳控制,序號標識,滑動視窗、確認應答實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。

3、udp具有較好的實時性,工作效率比tcp高,適用於對高速傳輸和實時性有較高的通訊或廣播通訊。

4.每一條tcp連線只能是點到點的;udp支援一對一,一對多,多對一和多對多的互動通訊

5、tcp對系統資源要求較多,udp對系統資源要求較少。

2、為什麼udp有時比tcp更有優勢?

udp以其簡單、傳輸快的優勢,在越來越多場景下取代了tcp,如實時遊戲。

(1)網速的提公升給udp的穩定性提供可靠網路保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸的可靠性。

(2)tcp為了實現網路通訊的可靠性,使用了複雜的擁塞控制演算法,建立了繁瑣的握手過程,由於tcp內建的系統協議棧中,極難對其進行改進。

採用tcp,一旦發生丟包,tcp會將後續的包快取起來,等前面的包重傳並接收到後再繼續傳送,延時會越來越大,基於udp對實時性要求較為嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網路問題對遊戲性造成影響。

3、udp和tcp程式設計步驟也有些不同,如下:

tcp:tcp程式設計的伺服器端一般步驟是: 1、建立乙個socket,用函式socket();    socket socketlisten =socket(af_inet,sock_stream, ipproto_tcp);2、設定socket屬性,用函式setsockopt(); * 可選 3、繫結ip位址、埠等資訊到socket上,用函式bind(); socket_error = bind(socketlisten,(const sockaddr*)&addr,sizeof(addr))4、開啟監聽,用函式listen();                socket_error == listen(socketlisten,2)5、接收客戶端上來的連線,用函式accept();   socket socketwaiter = accept(socketlisten,

_out_    struct sockaddr *addr

udp:與之對應的udp程式設計步驟要簡單許多,分別如下: udp程式設計的伺服器端一般步驟是: 1、建立乙個socket,用函式socket(); 2、設定socket屬性,用函式setsockopt();* 可選 3、繫結ip位址、埠等資訊到socket上,用函式bind(); 4、迴圈接收資料,用函式recvfrom(); 5、關閉網路連線; udp程式設計的客戶端一般步驟是: 1、建立乙個socket,用函式socket(); 2、設定socket屬性,用函式setsockopt();* 可選 3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選 4、設定對方的ip位址和埠等屬性; 5、傳送資料,用函式sendto(); 6、關閉網路連線;

int recvfrom(  _in_         socket s,       //繫結的socket  _out_        char *buf,  _in_         int len,  _in_         int flags,  _out_        struct sockaddr *from,  //用來接收對方的  _inout_opt_  int *fromlen);

int nres=recvfrom(pthis->m_socketlisten,szbuf,sizeof(szbuf),0,(sockaddr*)&addrclient,&nsize);//0處標誌位sendto(m_socketlisten,szbuffer,nsize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))tcp和udp是osi模型中的運輸層中的協議。tcp提供可靠的通訊傳輸,而udp則常被用於讓廣播和細節控制交給應用的通訊傳輸。

4、將socket設定為廣播屬性bool optval=true;setsockopt(m_socketlisten,sol_socket,so_broadcast,(const char *)&optval,sizeof(bool));

5、將socket設定為非阻塞。//bool benable=true;//ioctlsocket(m_socketlisten,fionbio,(u_long*)&benable);

面試總結,TCP和UDP分析

分類 linux系統 2012 10 21 20 28 520人閱讀收藏 舉報還有就是謝老師寫的 計算機網路 第五版,tcp ip詳解 卷一,卷二 以及 unix網路程式設計 以及linux源 之外,rfc 一 概念 key tcp是一種面向連線的 可靠的 位元組流服務 2.可靠性 tcp提供端到端...

UDP和TCP 面試問題重點

一 udp 使用者資料報協議 其特點 1 udp是無連線 2 udp使用盡最大努力交付,即不保證可靠性 3 udp是面向報文的 4 udp 沒有擁塞控制,所以即使網路出現擁塞,也不會使源主機的傳送速率降低。5 udp 支援一對 一 一對多 多對 一 多對多的互動通訊。6 udp的首部開銷小,只有8個...

redis持久化 2020面試必看

聊聊redis持久化 兩種方式 rdb,簡而言之,就是在不同的時間點,將redis儲存的資料生成快照並儲存到磁碟等介質上 aof,則是換了乙個角度來實現持久化,那就是將redis執行過的所有寫指令記錄下來,在下次redis重新啟動時,只要把這些寫指令從前到後再重複執行一遍,就可以實現資料恢復了。其實...