TCP是面向連接的、可靠傳輸,而UDP是非連接的、不可靠傳輸,TCP建連需要3次握手,會造成delay,UDP更快。
TCP/UDP的區(qū)別上,我是這樣理解的:從北京到杭州,TCP相當(dāng)于修了一條高鐵線路(建連)再通車發(fā)貨(傳輸數(shù)據(jù)),而UDP相當(dāng)于寄快遞,丟了不管(直接傳輸數(shù)據(jù))。
TCP/IP是什么?
TCP/IP協(xié)議族是一組協(xié)議的集合,也叫互聯(lián)網(wǎng)協(xié)議族,用來實現(xiàn)互聯(lián)網(wǎng)上主機之間的相互通信。TCP和IP只是其中的2個協(xié)議,也是很重要的2個協(xié)議,所以用TCP/IP來命名這個互聯(lián)網(wǎng)協(xié)議族,實際上,它還包括其他協(xié)議,比如UDP、ICMP、IGMP、ARP/RARP等。
網(wǎng)絡(luò)分層
分層是計算機領(lǐng)域的常用技巧,比如互聯(lián)網(wǎng)后端的三層架構(gòu)“接入-邏輯-存儲”就是分層思想的典型應(yīng)用。
分層是為了隔離,通過分層劃分職能,拆解問題,層與層之間約定接口,屏蔽實現(xiàn)細(xì)節(jié)。
TCP/IP自下到上劃分為鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。下層向上層提供能力,上層利用下層的能力提供更高的抽象。
鏈路層,也稱網(wǎng)絡(luò)接口層,包括操作系統(tǒng)的設(shè)備驅(qū)動程序和網(wǎng)卡,它們一起處理與傳輸媒介(光纖等)的物理接口細(xì)節(jié)。
網(wǎng)絡(luò)層,也就是IP層,負(fù)責(zé)處理IP datagram在網(wǎng)絡(luò)中的傳輸,IP層傳輸?shù)氖?/font>IP datagram,借助路由表,把IP
datagram從網(wǎng)絡(luò)的一端傳輸?shù)搅硪欢?,簡而言之?/font>IP實現(xiàn)包的路由傳輸,IP協(xié)議和路由器工作在網(wǎng)絡(luò)層。
傳輸層,提供端到端之間的通信,包括提供面向連接和高可靠性的TCP,以及無連接不可靠的UDP。貌似TCP更好,但實際不是這樣,UDP因為不需要建連開銷,所以更快,應(yīng)用得也很廣,比如新一代互聯(lián)網(wǎng)協(xié)議HTTP3就從TCP轉(zhuǎn)向UDP,應(yīng)根據(jù)適應(yīng)場景選擇傳輸層協(xié)議。
應(yīng)用層,跟應(yīng)用相關(guān),不同應(yīng)用解決不同問題,需要不同的應(yīng)用層協(xié)議。
鏈路層處理數(shù)據(jù)在媒介上的傳輸,以及主機與網(wǎng)卡、光纖等打交道的細(xì)節(jié)。因為與硬件相關(guān),所以需要借助系統(tǒng)的驅(qū)動程序,鏈路層協(xié)議就是定義這些細(xì)節(jié)的,比如怎么把數(shù)據(jù)從網(wǎng)卡發(fā)送到光纖,采用什么格式編碼等,它解決的數(shù)據(jù)在媒介上表示、流動的問題
光有鏈路層功能肯定是不夠的,網(wǎng)絡(luò)上有成千上萬的機器,主機A與B通信,你不能將數(shù)據(jù)發(fā)到主機C,所以仿照現(xiàn)實,要為主機分配網(wǎng)絡(luò)地址,通過IP地址去標(biāo)識網(wǎng)絡(luò)中的一臺主機,發(fā)送一個數(shù)據(jù)包,需要正確路由到目的地,這就好比你從家到公司,要經(jīng)過哪些路徑,需要地圖,而路由表就類似這張地圖。IP解決的是數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸路由的問題。
有了網(wǎng)絡(luò)層的傳輸路由能力,還不夠,因為IP報在傳輸過程中可能丟包,比如中間經(jīng)歷過的路由器緩沖區(qū)滿了便會丟包,這樣不可靠,如果需要可靠傳輸?shù)哪芰?,便需要傳輸層基?/font>IP層,提供更多的能力,TCP解決了可靠性問題。具體而言,如果丟包了,TCP層會負(fù)責(zé)超時重傳,它通過接收確認(rèn)和重傳機制保證了可靠傳輸。另外,因為IP報都是獨立路由的,所以從主機A到主機B,一份數(shù)據(jù)被拆分成x、y兩個IP報先后發(fā)送,這2個包可能選擇不同的傳輸路徑,這樣有可能y包先于x包到達(dá),但我們希望在接收端(主機B)恢復(fù)這個數(shù)據(jù)的信息,但我們無法控制IP報的到達(dá)順序,所以,我們需要在接收端恢復(fù)數(shù)據(jù),我只需要在x、y包里記錄它屬于數(shù)據(jù)塊的哪個部分,然后重組這份數(shù)據(jù),這正是TCP做的,它會重新組裝IP報,從而保證順序性,遞交給應(yīng)用層。
韓國CN2線路直連中國大陸,在國內(nèi)訪問速度非??欤貏e是沿海地區(qū),韓國CN2線路服務(wù)器訪問速度比香港服務(wù)器快。韓國網(wǎng)絡(luò)采用BGP智能多線,連接世界網(wǎng)絡(luò)線路,不僅在我國,在世界范圍內(nèi)訪問速度也非常大。
有時候并不需要保證可靠性和順序性,這便是UDP能提供的,它只是簡單的把數(shù)據(jù)封裝成IP報,然后通過IP層路由發(fā)送到目的端。