前端的面試中經(jīng)常問的 TCP 和 UDP 的區(qū)別观腊,網(wǎng)上也有好多內(nèi)容,比如
TCP 是面向連接的,UDP 是面向無連接的
UDP程序結構較簡單
TCP 是面向字節(jié)流的里伯,UDP 是基于數(shù)據(jù)報的
TCP 保證數(shù)據(jù)正確性含思,UDP 可能丟包
TCP 保證數(shù)據(jù)順序崎弃,UDP 不保證
1. UDP
要想理解 TCP 和 UDP 的區(qū)別,首先要明白什么是 TCP含潘,什么是 UDP
TCP 和 UDP 是傳輸層的兩個協(xié)議
我們來看一下 UDP 的包頭
由上圖可以看出饲做,UDP 除了端口號,基本啥都沒有了遏弱。如果沒有這兩個端口號盆均,數(shù)據(jù)就不知道該發(fā)給哪個應用。
UDP 的特點
溝通簡單漱逸,不需要大量的數(shù)據(jù)結構泪姨,處理邏輯和包頭字段
輕信他人。它不會建立連接饰抒,但是會監(jiān)聽這個地方肮砾,誰都可以傳給它數(shù)據(jù),它也可以傳給任何人數(shù)據(jù)袋坑,甚至可以同時傳給多個人數(shù)據(jù)仗处。
愣頭青,做事不懂變通枣宫。不會根據(jù)網(wǎng)絡的情況進行擁塞控制婆誓,無論是否丟包,它該怎么發(fā)還是怎么發(fā)
2. TCP
首先是 TCP 的包頭格式TCP 的包頭有哪些內(nèi)容也颤,分別有什么用
首先洋幻,源端口和目標端口是不可少的。
接下來是包的序號歇拆。主要是為了解決亂序問題鞋屈。不編好號怎么知道哪個先來,哪個后到
確認序號故觅。發(fā)出去的包應該有確認厂庇,這樣能知道對方是否收到,如果沒收到就應該重新發(fā)送输吏,這個解決的是不丟包的問題
狀態(tài)位权旷。SYN 是發(fā)起一個鏈接,ACK 是回復,RST 是重新連接拄氯,F(xiàn)IN 是結束連接躲查。因為 TCP 是面向連接的,因此需要雙方維護連接的狀態(tài)译柏,這些狀態(tài)位的包會引起雙方的狀態(tài)變更
窗口大小镣煮,TCP 要做流量控制,需要通信雙方各聲明一個窗口鄙麦,標識自己當前的處理能力典唇。
總結及面試問題
TCP 和 UDP 的區(qū)別
TCP 是面向連接的,UDP 是面向無連接的
UDP程序結構較簡單
TCP 是面向字節(jié)流的胯府,UDP 是基于數(shù)據(jù)報的
TCP 保證數(shù)據(jù)正確性介衔,UDP 可能丟包
TCP 保證數(shù)據(jù)順序,UDP 不保證
什么是面向連接骂因,什么是面向無連接
在互通之前炎咖,面向連接的協(xié)議會先建立連接,如 TCP 有三次握手寒波,而 UDP 不會
TCP 為什么是可靠連接
通過 TCP 連接傳輸?shù)臄?shù)據(jù)無差錯乘盼,不丟失,不重復影所,且按順序到達蹦肴。
TCP 報文頭里面的序號能使 TCP 的數(shù)據(jù)按序到達
報文頭里面的確認序號能保證不丟包,累計確認及超時重傳機制
TCP 擁有流量控制及擁塞控制的機制
TCP 的順序問題猴娩,丟包問題阴幌,流量控制都是通過滑動窗口來解決的
擁塞控制時通過擁塞窗口來解決的