網絡協議是每一個前端工程師都必需要掌握的知識,TCP/IP 中有兩個具備表明性的傳輸層協議,分別是 TCP 和 UDP,本文將介紹下這二者以及它們之間的區別。前端
TCP/IP網絡模型緩存
計算機與網絡設備要相互通訊,雙方就必須基於相同的方法。好比,如何探測到通訊目標、由哪一邊先發起通訊、使用哪一種語言進行通訊、怎樣結束通訊等規則都須要事先肯定。不一樣的硬件、操做系統之間的通訊,全部的這一切都須要一種規則。而咱們就把這種規則稱爲協議(protocol)。安全
TCP/IP 是互聯網相關的各種協議族的總稱,好比:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都屬於 TCP/IP 族內的協議。網絡
TCP/IP模型是互聯網的基礎,它是一系列網絡協議的總稱。這些協議能夠劃分爲四層,分別爲鏈路層、網絡層、傳輸層和應用層。前端工程師
在網絡體系結構中網絡通訊的創建必須是在通訊雙方的對等層進行,不能交錯。 在整個數據傳輸過程當中,數據在發送端時通過各層時都要附加上相應層的協議頭和協議尾(僅數據鏈路層須要封裝協議尾)部分,也就是要對數據進行協議封裝,以標識對應層所用的通訊協議。接下去介紹TCP/IP 中有兩個具備表明性的傳輸層協議——TCP 和 UDP。數據結構
UDP操作系統
UDP協議全稱是用戶數據報協議,在網絡中它與TCP協議同樣用於處理數據包,是一種無鏈接的協議。在OSI模型中,在第四層——傳輸層,處於IP協議的上一層。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送以後,是沒法得知其是否安全完整到達的。blog
它有如下幾個特色:排序
一、面向無鏈接路由
首先 UDP 是不須要和 TCP同樣在發送數據前進行三次握手創建鏈接的,想發數據就能夠開始發送了。而且也只是數據報文的搬運工,不會對數據報文進行任何拆分和拼接操做。
具體來講就是:
二、有單播,多播,廣播的功能
UDP 不止支持一對一的傳輸方式,一樣支持一對多、多對多、多對一的方式,也就是說 UDP 提供了單播、多播、廣播的功能。
三、UDP是面向報文的
發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付IP層。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。所以,應用程序必須選擇合適大小的報文。
四、不可靠性
首先不可靠性體如今無鏈接上,通訊都不須要創建鏈接,想發就發,這樣的狀況確定不可靠。而且收到什麼數據就傳遞什麼數據,而且也不會備份數據,發送數據也不會關心對方是否已經正確接收到數據了。
再者網絡環境時好時壞,可是 UDP 由於沒有擁塞控制,一直會以恆定的速度發送數據。即便網絡條件很差,也不會對發送速率進行調整。這樣實現的弊端就是在網絡條件很差的狀況下可能會致使丟包,可是優勢也很明顯,在某些實時性要求高的場景(好比電話會議)就須要使用 UDP 而不是 TCP。
從上面的動態圖能夠得知,UDP只會把想發的數據報文一股腦的丟給對方,並不在乎數據有無安全完整到達。
五、頭部開銷小,傳輸數據報文時是很高效的
UDP 頭部包含了如下幾個數據:
所以 UDP 的頭部開銷小,只有八字節,相比 TCP 的至少二十字節要少得多,在傳輸數據報文時是很高效的。
TCP
當一臺計算機想要與另外一臺計算機通信時,兩臺計算機之間的通訊須要暢通且可靠,這樣才能保證正確收發數據。例如,當你想查看網頁或查看電子郵件時,但願完整且按順序查看網頁,而不丟失任何內容。當你下載文件時,但願得到的是完整的文件,而不只僅是文件的一部分,由於若是數據丟失或亂序,都不是你但願獲得的結果,因而就用到了TCP。
TCP協議全稱是傳輸控制協議是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由 IETF 的RFC 793定義。TCP 是面向鏈接的、可靠的流協議。流就是指不間斷的數據結構,你能夠把它想象成排水管中的水流。
一、TCP鏈接過程
以下圖所示,能夠看到創建一個TCP鏈接的過程爲(三次握手的過程):
這裏可能你們會有個疑惑:爲何 TCP 創建鏈接須要三次握手,而不是兩次?這是由於這是爲了防止出現失效的鏈接請求報文段被服務端接收的狀況,從而產生錯誤。
二、TCP斷開連接
TCP 是全雙工的,在斷開鏈接時兩端都須要發送 FIN 和 ACK。
三、TCP協議的特色
TCP和UDP的比較
一、對比
二、總結