TCP(Transmission Control Protocol,傳輸控制協議) 即傳輸控制協議,是一種傳輸層通訊協議服務器
特色:面向鏈接、面向字節流、全雙工通訊、可靠網絡
面向鏈接:指的是要使用TCP傳輸數據,必須先創建TCP鏈接,傳輸完成後釋放鏈接,就像打電話同樣必須先撥號創建一條鏈接,打完後掛機釋放鏈接。性能
全雙工通訊:即一旦創建了TCP鏈接,通訊雙方能夠在任什麼時候候都能發送數據。spa
可靠的:指的是經過TCP鏈接傳送的數據,無差錯,不丟失,不重複,而且按序到達。.net
面向字節流:流,指的是流入到進程或從進程流出的字符序列。簡單來講,雖然有時候要傳輸的數據流太大,TCP報文長度有限制,不能一次傳輸完,要把它分爲好幾個數據塊,可是因爲可靠性保證,接收方能夠按順序接收數據塊而後從新組成分塊以前的數據流,因此TCP看起來就像直接互相傳輸字節流同樣,面向字節流。視頻
必須進行三次握手:若A要與B進行鏈接,則必須 blog
第一次握手:創建鏈接。客戶端發送鏈接請求報文段,將SYN位置爲1,Sequence Number爲x;而後,客戶端進入SYN_SEND狀態,等待服務器的確認。即A發送信息給B進程
第二次握手:服務器收到客戶端的SYN報文段,須要對這個SYN報文段進行確認。即B收到鏈接信息後向A返回確認信息資源
第三次握手:客戶端收到服務器的(SYN+ACK)報文段,並向服務器發送ACK報文段。即A收到確認信息後再次向B返回確認鏈接信息io
(此時,A告訴本身上層鏈接創建;B收到鏈接信息後告訴上層鏈接創建。)
這樣就完成TCP三次握手 = 一條TCP鏈接創建完成 = 能夠開始發送數據
防止服務器端由於接收了早已失效的鏈接請求報文從而一直等待客戶端請求,從而浪費資源。
如今假設A主動釋放鏈接:(數據傳輸結束後,通訊的雙方均可釋放鏈接),其釋放TCP鏈接的過程以下:
第一次握手: A發送釋放信息到B;(發出去以後,A->B發送數據這條路徑就斷了)
第二次握手: B收到A的釋放信息以後,回覆確認釋放的信息:我贊成你的釋放鏈接請求
第三次握手: B發送「請求釋放鏈接「信息給A
第四次握手: A收到B發送的信息後向B發送確認釋放信息:我贊成你的釋放鏈接請求
首先進行關閉的一方將執行主動關閉,而另外一方執行被動關閉。
爲了保證雙方都能通知對方「須要釋放鏈接」,即在釋放鏈接後都沒法接收或發送消息給對方
須要明確的是:TCP是全雙工模式,這意味着是雙向均可以發送、接收的
釋放鏈接的定義是:雙方都沒法接收或發送消息給對方,是雙向的
當主機1發出「釋放鏈接請求」(FIN報文段)時,只是表示主機1已經沒有數據要發送 / 數據已經所有發送完畢;
可是,這個時候主機1仍是能夠接受來自主機2的數據。
當主機2返回「確認釋放鏈接」信息(ACK報文段)時,表示它已經知道主機1沒有數據發送了
但此時主機2仍是能夠發送數據給主機1
當主機2也發送了FIN報文段時,即告訴主機1我也沒有數據要發送了
此時,主機1和2已經沒法進行通訊:主機1沒法發送數據給主機2,主機2也沒法發送數據給主機1,此時,TCP的鏈接纔算釋放
(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去!
特色:無鏈接的、不可靠的、面向報文、沒有擁塞控制
無鏈接的:和TCP要創建鏈接不一樣,UDP傳輸數據不須要創建鏈接,就像寫信,在信封寫上收信人名稱、地址就能夠交給郵局發送了,至於能不能送到,就要看郵局的送信能力和送信過程的困難程度了。
不可靠的:由於UDP發出去的數據包發出去就無論了,無論它會不會到達,因此極可能會出現丟包現象,使傳輸的數據出錯。
面向報文:數據報文,就至關於一個數據包,應用層交給UDP多大的數據包,UDP就照樣發送,不會像TCP那樣拆分。
沒有擁塞控制:擁塞,是指到達通訊子網中某一部分的分組數量過多,使得該部分網絡來不及處理,以至引發這部分乃至整個網絡性能降低的現象,嚴重時甚至會致使網絡通訊業務陷入停頓,即出現死鎖現象,就像交通堵塞同樣。TCP創建鏈接後若是發送的數據由於信道質量的緣由不能到達目的地,它會不斷重發,有可能致使愈來愈塞,因此須要一個複雜的原理來控制擁塞。而UDP就沒有這個煩惱,發出去就無論了。
一、TCP面向鏈接(如打電話要先撥號創建鏈接);UDP是無鏈接的,即發送數據以前不須要創建鏈接
二、TCP提供可靠的服務。也就是說,經過TCP鏈接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保 證可靠交付
三、TCP面向字節流,其實是TCP把數據當作一連串無結構的字節流;UDP是面向報文的UDP沒有擁塞控制,所以網絡出現擁塞不會使源主機的發送速率下降(對實時應用頗有用,如IP電話,實時視頻會議等)
四、每一條TCP鏈接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通訊
五、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
六、TCP的邏輯通訊信道是全雙工的可靠信道,UDP則是不可靠信道
參考資料
https://blog.csdn.net/guyuealian/article/details/52535294
https://blog.csdn.net/carson_ho/article/details/53366856
https://blog.csdn.net/qq_33951180/article/details/60767876