學(xué)計(jì)算機(jī)的同學(xué)都聽說過TCP和UDP,但是很少有人能解釋清楚他們的特點(diǎn)。到底什么是TCP、UDP呢?它們到底有什么區(qū)別?

TCP英文叫Transmission Control Protocol,中文叫傳輸控制協(xié)議,它其實(shí)就是一種網(wǎng)絡(luò)傳輸協(xié)議。
汽車在公路上行駛,需要遵守交通規(guī)則,同樣數(shù)據(jù)在網(wǎng)絡(luò)上傳輸也要遵守一套規(guī)則,這個(gè)規(guī)則就叫協(xié)議。
而TCP是一種面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對(duì)方確認(rèn)已經(jīng)建立了可靠的連接。

建立連接的方式又稱為三次握手:
(1)第一次握手,主機(jī)A向主機(jī)B發(fā)出請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”這是第一次對(duì)話。
(2)第二次握手,主機(jī)B向主機(jī)A發(fā)送同意連接,并要求同步的數(shù)據(jù)包(同步就是兩臺(tái)主機(jī)協(xié)調(diào)工作,一臺(tái)在發(fā)送,一臺(tái)在接收):“可以,你什么時(shí)候發(fā)?”這是第二次對(duì)話。
(3)第三次握手,主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接收吧!”這是第三次對(duì)話。
這三次對(duì)話的目的是使數(shù)據(jù)包的發(fā)送和接收同步,TCP協(xié)議是一定要經(jīng)過這三次對(duì)話之后,主機(jī)A才可以向主機(jī)B正式發(fā)送數(shù)據(jù)。

TCP建立連接需要進(jìn)行三次握手,但是斷開連接卻要進(jìn)行四次揮手:
(1)第一次揮手,在主機(jī)A完成數(shù)據(jù)傳輸后,將控制位FIN置1,提出停止TCP連接的請(qǐng)求。
(2)第二次揮手,主機(jī)B收到FIN位置上的1信息后對(duì)其做出響應(yīng),確認(rèn)這一方向上的TCP連 接將關(guān)閉,將ACK置1。
(3)第三次揮手,B主機(jī)再提出反方向的關(guān)閉請(qǐng)求,并將控制位FIN置1,發(fā)送給A主機(jī),并關(guān)閉連接。
(4)第四次揮手,主機(jī)A對(duì)主機(jī)B的請(qǐng)求進(jìn)行確認(rèn),將ACK置1,并關(guān)閉連接,至此雙方關(guān)閉連接。

TCP協(xié)議的這種復(fù)雜的建立連接和斷開連接的規(guī)則,其實(shí)是為了使網(wǎng)絡(luò)數(shù)據(jù)的傳輸更加安全可靠,使發(fā)送數(shù)據(jù)端和接收數(shù)據(jù)端在數(shù)據(jù)正式傳輸前就有了交互,為數(shù)據(jù)正式傳輸打下了可靠的基礎(chǔ)。
同時(shí)在數(shù)據(jù)的傳輸過程中TCP還具有流量控制,差錯(cuò)控制等功能,比如發(fā)送端發(fā)送的數(shù)據(jù)速度過快,而接收端的接收速度卻很慢,就很難保證數(shù)據(jù)不丟失,所以需要進(jìn)行流量控制。
而TCP是使用滑動(dòng)窗口的方式來進(jìn)行流量控制的,可以把這個(gè)滑動(dòng)窗口理解成一個(gè)緩沖區(qū),接收端利用滑動(dòng)窗口的值來告訴發(fā)送端對(duì)它所發(fā)送的數(shù)據(jù)能提供多大的緩沖區(qū),以此來協(xié)調(diào)控制兩邊的傳送節(jié)奏和速率。

我們?cè)賮砜纯碪DP,UDP英文叫User Datagram Protocol,中文叫用戶數(shù)據(jù)報(bào)協(xié)議,它也是一種網(wǎng)絡(luò)傳輸協(xié)議,但是它和TCP有很大的不同。
UDP主要有以下幾個(gè)特點(diǎn):
(1)UDP是一個(gè)非連接的協(xié)議,傳輸數(shù)據(jù)之前,源端和終端不建立連接,當(dāng)它想傳送時(shí),就簡(jiǎn)單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。
在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。
(2)由于傳輸數(shù)據(jù)不建立連接,因此不需要維護(hù)連接狀態(tài),包括收發(fā)狀態(tài)等。一臺(tái)服務(wù)機(jī)可同時(shí)向多個(gè)客戶機(jī)傳輸相同的消息。
(3)UDP信息包的包頭很短,只有8字節(jié),相對(duì)于TCP的20字節(jié)包頭信息,UDP的包頭開銷很小。
(4)吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機(jī)性能的限制。
(5)UDP會(huì)盡最大努力去傳輸和接受數(shù)據(jù)且沒有限制,但并不保證可靠的數(shù)據(jù)交付,主機(jī)也不需要維持復(fù)雜的鏈接狀態(tài)表(里面有許多參數(shù))。
(6)UDP是面向報(bào)文的。發(fā)送方的UDP對(duì)應(yīng)用程序傳過來的報(bào)文,在添加包頭后就向下交付給IP層。既不拆分,也不合并,而只是保留這些報(bào)文的邊界,因此,應(yīng)用程序需要自己限制合適的報(bào)文大小,以免報(bào)文太大導(dǎo)致丟失率高。

我們經(jīng)常使用ping命令來測(cè)試兩臺(tái)主機(jī)之間的TCP/IP通信是否正常。
其實(shí)ping命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包到達(dá)的消息及時(shí)反饋回來,那么網(wǎng)絡(luò)就是通的,并且可以通過返回的數(shù)據(jù)包計(jì)算響應(yīng)時(shí)間。
總結(jié)一下就是,TCP安全、可靠、面向連接,但是傳輸速度慢。UDP不安全、不可靠、面向非連接,但是傳輸速度快。
聲明:本文由網(wǎng)站用戶竹子發(fā)表,超夢(mèng)電商平臺(tái)僅提供信息存儲(chǔ)服務(wù),版權(quán)歸原作者所有。若發(fā)現(xiàn)本站文章存在版權(quán)問題,如發(fā)現(xiàn)文章、圖片等侵權(quán)行為,請(qǐng)聯(lián)系我們刪除。