天天看點

C++常見面試題 | Day9

7、TCP和UDP的差別?

TCP通過檢驗和、序列号、确認應答、重發控制、連接配接管理以及視窗控制等機制實作可靠性傳輸;

TCP、UDP都是傳輸層協定。

基本差別:

TCP是連接配接傳輸,UDP是無連接配接傳輸;TCP要求系統資源較多,UDP較少;UDP程式結構較簡單;TCP(位元組流模式)與UDP(資料報模式);TCP保證資料正确性,UDP可能丢包;TCP保證資料的順序,UDP不保證。

UDP應用場景:實時應用

面向資料報方式;網絡資料大多為短消息;擁有大量CLient;對資料安全性無特殊要求;網絡負擔非常嚴重,但對響應速度要求高;

UDP是不是全雙工

所謂全雙工,半雙工,單工是指面向連接配接時才有的說法,如果不是面向連接配接,沒有一個确定的連接配接的話,怎麼會出半雙工這種隻準一個來或者一個去的說法呢?

UDP支援一對一,一對多,多對一和多對多的互動通信。如果一定要涉及到全雙工的話大概了解為不僅提供全雙工,甚至提供全多工服務,隻是UDP不是可靠的服務而已。

TCP與UDP的差別總結

TCP面向連接配接,如打電話要先撥号建立連接配接,UDP是無連接配接的,即發送資料之前不需要建立連接配接;

TCP提供可靠服務。也就是說TCP連接配接傳送的資料,無差錯,不丢失,不重複,且按序到達;UDP盡最大努力傳遞,即不保證可靠傳遞;

TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向封包的,UDP沒有擁塞控制,是以網絡出現擁塞不會使源主機的發送速率降低;

每一條TCP連接配接隻能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通信;

TCP首部開銷20位元組;UDP的首部開銷小,隻8個位元組;

TCP的邏輯通信信道是全雙工的可靠通信,UDP則是不可靠信道。

8、如何使用UDP實作可靠傳輸?

目前有如下開源程式利用UDP實作了可靠的資料傳輸,分别為RUDP、RTP、UDT:

1.RUDP(Reliable User Datagram Protocol)

RUDP提供一組資料服務品質增強機制,如擁塞控制的改進、重發機制及淡化伺服器算法等,進而在包丢失和網絡擁塞的情況下,RTP客戶機(實時位置)面前呈現的就是一個高品質的RTP流。在不幹擾協定的實時特性的同時,可靠UDP的擁塞控制允許TCP方式下的流量控制行為。

2.RTP(Real Time Protocol)

RTP為資料提供了具有實時特征的端到端的傳送服務,如果在多點傳播或單點傳播網絡服務下的互動式視訊音頻或模拟資料;

3.UDT(UDP-based Data Transfer Protocol)

基于UDP資料傳輸協定是一種網際網路資料傳輸協定,UDT的主要目的是支援高速廣域網上的海量資料傳輸,而網際網路上的标準資料傳輸協定TCP在高帶寬長距離網絡上性能很差。

9、close_wait狀态的作用?

close_wait是服務端在收到用戶端關閉請求(FIN封包段)并且将ACK發送出後所處的狀态,這種狀态表示收到了對端關閉的請求,但本端還沒有完成工作,還未關閉;

10、滑動視窗的作用?