TCP和UDP應用場景


TCP和UDP應用場景

tcp是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。是專門為了在不可靠的互聯網絡上提供一個可靠的端到端字節流而設計的,面向字節流。

udp(用戶數據報協議)是iso參考模型中一種無連接的傳輸層協議,提供面向操作的簡單不可靠的非連接傳輸層服務,面向報文。

它們之間的區別:

1、tcp是基於連接的,可靠性高;udp是基於無連接的,可靠性較低;

2、由於tcp是連接的通信,需要有三次握手、重新確認等連接過程,會有延時,實時性差;由於協議所致,安全性較高;而udp無連接,無建立連接的過程,因而實時性較強,安全略差;

3、在傳輸相同大小的數據時,tcp首部開銷20字節;udp首部開銷只有8個字節,tcp報頭比udp復雜,故實際包含的用戶數據較少。tcp無丟包,而udp有丟包,故tcp開銷大,udp開銷較小;

4、每條tcp連接只能是點到點的;udp支持一對一、一對多、多對一、多對多的交互通信。

所以對於應用這方面:

如果對實時性要求高和高速傳輸的場合下需要使用udp;如果需要傳輸大量數據且對可靠性要求高的情況下應該使用tcp;在可靠性要求較低,追求效率的情況下應該使用udp。

 

對於tcp來說,既然需要面向連接,就會涉及到三個階段:連接建立、數據傳送、連接釋放三個過程;而“三次握手”就發生在連接建立這個階段,下面對三次握手和四次揮手解釋一下:

三次握手:

第一次握手:客戶端發送一個tcp的syn標志位置為1的包(連接請求),指明客戶打算連接服務器的端口;

第二次握手:當服務器收到連接請求之后,返回確認包(ack)應答,即將syn和ack標志位同時致為1(授予連接),並為這次連接分配資源;

第三次握手:客戶端收到服務器的授予連接請求之后,再次發送確認包(ack)(syn標志位為0,ack標志位為1),並分配資源,這樣tcp就建立連接了。

四次揮手:

中斷連接端可以是客戶端也可以是服務端

假設是客戶端發起的中斷連接請求,則客戶端發送fin報文,服務端接收到客戶端發送的fin報文后,意思是說:“客戶端已經沒有數據要發送給你了”,但是這時候如果服務端有數據沒有發送完成,則不必着急關閉socket,可以繼續發送數據,所以服務端先發送ack,告訴客戶端,收到了客戶端剛才的關閉連接請求,但是服務端還沒有准備好,還有數據沒有發送完,所以請客戶端繼續等我的消息,這個時候客戶端就進入了fin_wait狀態,繼續等待服務端的fin報文;當服務端確定已經發送完數據后,則想客戶端發送fin報文,告訴客戶端已經發送完數據,可以關閉連接了;當客戶端接收到服務端的fin報文后,就知道可以關閉連接了,但是還是不相信網絡,怕服務端不知道要關閉,所以客戶端發送ack給服務端后進入了time_wait狀態,如果服務端沒有收到ack則可以重傳;服務端收到ack后,就知道可以關閉連接了;當服務端等待了2msl后依然沒有收到回復,則證明服務端已經正常關閉了,那客戶端也會關閉連接了,就這樣,tcp連接就完成了關閉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM