一看就懂系列之 超級詳解TCP與UDP

咖啡色的羊駝發表於2017-05-16

前言

今天突然發現有同事反饋一個簡單的介面超時,查了xhprof發現php的gethostbyname函式竟然跑了5s,嚇了一跳,然後查相關資料查著查著就查歪了,突然想到TCP和UDP的區別,這個面試經常被問到的題目,貌似我沒有收藏,本來想撿現成的,因為這個問題很古老了,但是沒有讓我想收藏的。還是自己動手搞一篇好了。

正文

以下幾個方面來解釋TCP與UCP的區別

1.TCP協議和UCP協議與TCP/IP協議的聯絡
2.TCP的概念與其傳輸過程
3.UDP的概念與其傳輸過程
4.TCP和UCP的區別

TCP協議和UCP協議與TCP/IP協議的聯絡

說到這個問題,有的人會犯糊塗,認為TCP/IP協議與UDP協議是一個層級的。這是錯的。
TCP/IP協議是UDP和TCP的乾爹。
TCP/IP協議是一個協議簇。裡面包括很多協議。UDP只是其中的一個。之所以命名為TCP/IP協議,因為TCP,IP協議是兩個很重要的協議,就用他兩命名了。

TCP的概念與其傳輸過程

名詞解釋

TCP(Transmission Control Protocol,傳輸控制協議)是面向連線的協議。

關鍵圖

這裡寫圖片描述

流程解釋

TCP三次握手過程

1 主機A通過向主機B 傳送一個含有同步序列號的標誌位的資料段給主機B ,向主機B 請求建立連線,通過這個資料段,
主機A告訴主機B 兩件事:我想要和你通訊;你可以用哪個序列號作為起始資料段來回應我.
2 主機B 收到主機A的請求後,用一個帶有確認應答(ACK)和同步序列號(SYN)標誌位的資料段響應主機A,也告訴主機A兩件事:
我已經收到你的請求了,你可以傳輸資料了;你要用哪佧序列號作為起始資料段來回應我
3 主機A收到這個資料段後,再傳送一個確認應答,確認已收到主機B 的資料段:”我已收到回覆,我現在要開始傳輸實際資料了
這樣3次握手就完成了,主機A和主機B 就可以傳輸資料了.

(沒有應用層的資料,SYN這個標誌位只有在TCP建產連線時才會被置1,握手完成後SYN標誌位被置0)

TCP死次揮手過程

1 當主機A完成資料傳輸後,將控制位FIN置1,提出停止TCP連線的請求
2 主機B收到FIN後對其作出響應,確認這一方向上的TCP連線將關閉,將ACK置1
3 由B 端再提出反方向的關閉請求,將FIN置1
4 主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束.

由TCP的三次握手和四次斷開可以看出,TCP使用面向連線的通訊方式,大大提高了資料通訊的可靠性,使傳送資料端
和接收端在資料正式傳輸前就有了互動,為資料正式傳輸打下了可靠的基礎

ACK  TCP報頭的控制位之一,對資料進行確認.確認由目的端發出,用它來告訴傳送端這個序列號之前的資料段都收到了.比如,確認號為X,則表示前X-1個資料段都收到了,只有當ACK=1時,確認號才有效,當ACK=0時,確認號無效,這時會要求重傳資料,保證資料的完整性.

SYN  同步序列號,TCP建立連線時將這個位置1

FIN  傳送端完成傳送任務位,當TCP完成資料傳輸需要斷開時,提出斷開連線的一方將這位置1

圖來自這篇,這篇講的也很詳細

包頭結構

內容 位數
源埠 16位
目標埠 16位
序列號 32位
迴應序號 32位
TCP頭長度 4位
reserved 6位
控制程式碼 6位
視窗大小 16位
偏移量 16位
校驗和 16位
選項 32位(可選)

得出:TCP包頭的最小長度,為20位元組

UDP的概念與其傳輸過程

名詞解釋

UDP(User Data Protocol,使用者資料包協議)是一個非連線的協議。

流程圖

這裡寫圖片描述

流程解釋

由於不需要建立連線,所以不斷往對方主機傳送UDP資料包,然後對方主機確認收到資料包,如果資料包是否到達的訊息及時反饋回來。

(ping操作就是這個原理,中間會有丟包情況)

UDP的關鍵點

1.UDP傳送資料的速度受到以下因素影響.

a.應用程式生成資料的速度
b.源端和終端主機效能的限制
c.傳輸頻寬的限制

2.由於不需要維護連線狀態,故一臺伺服器可向多個客戶端傳輸相同資料。

一對多的關係,而TCP是一對一

3.UDP是面向報文的

傳送方的UDP對應用程式交下來的報文,在新增首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程式需要選擇合適的報文大小。

包頭結構

內容 位數
源埠 16位
目標埠 16位
長度 16位
校驗和 16位

得出:UDP包頭的最小長度,為8位元組

TCP和UCP的區別

角度 TCP UCP
是否連線 面向連線(傳送資料前需要建立連線) 無連線(傳送資料無需連線)
是否丟包重試 實現了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的分包進行順序控制 不會進行丟包重試,也不會糾正到達的順序
模式 流模式(面向位元組流) 資料包模式(面向報文)
對應關係 一對一 支援一對一,一對多,多對一和多對多的互動通訊
頭部開銷 最小20位元組 只有8位元組
可靠性 全雙工非常可靠、無差錯、不丟失、不重複、且按序到達 不保證可靠交付,不保證順序到達
擁塞控制 有控制 更多詳情 有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等)
資源要求 TCP程式結構較複雜,較多 UDP程式結構簡單,少

相關文章