TCP和UDP應用場景

TCP和UDP應用場景

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

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

它們之間的區別:網絡

一、tcp是基於鏈接的,可靠性高;udp是基於無鏈接的,可靠性較低;socket

二、因爲tcp是鏈接的通訊,須要有三次握手、從新確認等鏈接過程,會有延時,實時性差;因爲協議所致,安全性較高;而udp無鏈接,無創建鏈接的過程,於是實時性較強,安全略差;tcp

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

四、每條tcp鏈接只能是點到點的;udp支持一對1、一對多、多對1、多對多的交互通訊。設計

因此對於應用這方面:blog

若是對實時性要求高和高速傳輸的場合下須要使用udp;若是須要傳輸大量數據且對可靠性要求高的狀況下應該使用tcp;在可靠性要求較低,追求效率的狀況下應該使用udp。資源

 

對於tcp來講,既然須要面向鏈接,就會涉及到三個階段:鏈接創建、數據傳送、鏈接釋放三個過程;而「三次握手」就發生在鏈接創建這個階段,下面對三次握手和四次揮手解釋一下:it

三次握手:

第一次握手:客戶端發送一個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鏈接就完成了關閉。

相關文章
相關標籤/搜索