TCP/UDP协议基本概念
TCP和UDP協(xié)議是TCP/IP協(xié)議的核心。 TCP 傳輸協(xié)議:TCP 協(xié)議是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協(xié)議屬于傳輸層協(xié)議。其中TCP提供IP環(huán)境下的數(shù)據(jù)可靠傳輸,它提供的服務包括數(shù)據(jù)流傳送、可靠性、有效流控、全雙工操作和多路復用。通過面向連接、端到端和可靠的數(shù)據(jù)包發(fā)送。通俗說,它是事先為所發(fā)送的數(shù)據(jù)開辟出連接好的通道,然后再進行數(shù)據(jù)發(fā)送;而UDP則不為IP提供可靠性、流控或差錯恢復功能。一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經(jīng)濟的應用。
一、定義
在TCP/IP網(wǎng)絡體系結構中,TCP(傳輸控制協(xié)議,Transport Controll Protocol、UDP(用戶數(shù)據(jù)報協(xié)議,User Data Protocol)是傳輸層最重要的兩種協(xié)議,為上層用戶提供級別的通信可靠性。
傳輸控制協(xié)議(TCP):TCP(傳輸控制協(xié)議)定義了兩臺計算機之間進行可靠的傳輸而交換的數(shù)據(jù)和確認信息的格式,以及計算機為了確保數(shù)據(jù)的正確到達而采取的措施。協(xié)議規(guī)定了TCP軟件怎樣識別給定計算機上的多個目的進程如何對分組重復這類差錯進行恢復。協(xié)議還規(guī)定了兩臺計算機如何初始化一個TCP數(shù)據(jù)流傳輸以及如何結束這一傳輸。TCP最大的特點就是提供的是面向連接、可靠的字節(jié)流服務。
用戶數(shù)據(jù)報協(xié)議(UDP):UDP(用戶數(shù)據(jù)報協(xié)議)是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議。提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。UDP不提供可靠性,也不提供報文到達確認、排序以及流量控制等功能。它只是把應用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達目的地。因此報文可能會丟失、重復以及亂序等。但由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務器之間建立一個連接,且沒有超時重發(fā)等機制,故而傳輸速度很快。
二、相關概念
網(wǎng)絡協(xié)議
網(wǎng)絡協(xié)議是指通信雙方就通信如何進行所必須共同遵守的約定和通信規(guī)則的集合。在網(wǎng)絡上通信的雙方只有遵守相同的協(xié)議,才能正確地交流信息,就像人們交談時要使用同一種語言一樣,如果談話里使用不同的語言,就會造成雙方都不知所云,交流就被迫中斷。典型的網(wǎng)絡協(xié)議有:TCP/IP協(xié)議、IPX/SPX協(xié)議、IEEEE802標準協(xié)議系列、X.25協(xié)議等。?[3]?
傳輸層
綜合OSI和TCP/IP參考模型的優(yōu)點,采用一種5層的網(wǎng)絡體系結構。傳輸層即五層網(wǎng)絡體系結構中的一層。傳輸層的設計目標是允許源主機和目標主機上的對等實體進行對話,即為兩個主機中進程之間的通信提供服務。例如,一臺主機上的瀏覽器進程與另一臺主機上的Web服務器進程之間進行通信。
傳輸層的基本功能是接收來自上一層應用層的數(shù)據(jù),在必要的時候把這些數(shù)據(jù)分割成較小的單元,然后把這些數(shù)據(jù)單元傳遞給網(wǎng)絡層,并且確保這些數(shù)據(jù)單元能夠正確地到達另一端。
傳輸層是真正的端到端的層,它負責將數(shù)據(jù)從源端傳送到目標端,即源端主機上的一個程序利用傳輸層協(xié)議與目標端主機上的一個程序進行會話。而在其下面的各層,只涉及一臺主機與它的直接鄰居的通信,這是因為源主機和目標主機之間可能存在多個中間路由器。
三、協(xié)議介紹
面向連接的TCP
“面向連接”就是在正式通信前必須要與對方建立起連接,是按照電話系統(tǒng)建模的。比如你給別人打電話,必須等線路接通了、對方拿起話筒才能相互通話。
TCP協(xié)議是一種可靠的、一對一的、面向有連接的通信協(xié)議,TCP主要通過下列幾種方式保證數(shù)據(jù)傳輸?shù)目煽啃?#xff1a;
(1)在使用TCP協(xié)議進行數(shù)據(jù)傳輸時,往往需要客戶端和服務端先建立一個“通道“、且這個通道只能夠被客戶端和服務端使用,所以TCP傳輸協(xié)議只能面向一對一的連接。
(2)為了保證數(shù)據(jù)傳輸?shù)臏蚀_無誤,TCP傳輸協(xié)議將用于傳輸?shù)臄?shù)據(jù)包分為若干個部分(每個部分的大小根據(jù)當時的網(wǎng)絡情況而定),然后在它們的首部添加一個檢驗字節(jié)。當數(shù)據(jù)的一個部分被接收完畢之后,服務端會對這一部分的完整性和準確性進行校驗,校驗之后如果數(shù)據(jù)的完整度和準確度都為100%,在服務端會要求客戶端開始數(shù)據(jù)下一個部分的傳輸,如果數(shù)據(jù)的完整性和準確性與原來不相符,那么服務端會要求客戶端再次傳輸這個部分。?[5]?
客戶端與服務端在使用TCP傳輸協(xié)議時要先建立一個“通道”,在傳輸完畢之后又要關閉這“通道”,前者可以被形象地成為“三次握手”,而后者則可以被稱為“四次揮手”。
通道的建立——三次握手:
(1)在建立通道時,客戶端首先要向服務端發(fā)送一個SYN同步信號。
(2)服務端在接收到這個信號之后會向客戶端發(fā)出SYN同步信號和ACK確認信號。
(3)當服務端的ACK和SYN到達客戶端后,客戶端與服務端之間的這個“通道”就會被建立起來。
通道的關閉——四次揮手:
(1)在數(shù)據(jù)傳輸完畢之后,客戶端會向服務端發(fā)出一個FIN終止信號。
(2)服務端在收到這個信號之后會向客戶端發(fā)出一個ACK確認信號。
(3)如果服務端此后也沒有數(shù)據(jù)發(fā)給客戶端時服務端會向客戶端發(fā)送一個FIN終止信號。
(4)客戶端在收到這個信號之后會回復一個確認信號,在服務端接收到這個信號之后,服務端與客戶端的通道也就關閉了。
TCP協(xié)議能為應用程序提供可靠的通信連接,使一臺計算機發(fā)出的字節(jié)流無差錯地發(fā)往網(wǎng)絡上的其他計算機,對可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù)。
無連接的UDP協(xié)議
“無連接”就是在正式通信前不必與對方先建立連接,不管對方狀態(tài)就直接發(fā)送。與手機短信非常相似:你在發(fā)短信的時候,只需要輸入對方手機號就OK了。
UDP傳輸協(xié)議是一種不可靠的、面向無連接、可以實現(xiàn)多對一、一對多和一對一連接的通信協(xié)議。UDP在傳輸數(shù)據(jù)前既不需要建立通道,在數(shù)據(jù)傳輸完畢后也不需要將通道關閉。只要客戶端給服務端發(fā)送一個請求,服務端就會一次性地把所有數(shù)據(jù)發(fā)送完畢。UDP在傳輸數(shù)據(jù)時不會對數(shù)據(jù)的完整性進行驗證,在數(shù)據(jù)丟失或數(shù)據(jù)出錯時也不會要求重新傳輸,因此也節(jié)省了很多用于驗證數(shù)據(jù)包的時間,所以以UDP建立的連接的延遲會比以TCP建立的連接的延遲更低。UDP不會根據(jù)當前的網(wǎng)絡情況來控制數(shù)據(jù)的發(fā)送速度,因此無論網(wǎng)絡情況是好是壞,服務端都會以恒定的速率發(fā)送數(shù)據(jù)。雖然這樣有時會造成數(shù)據(jù)的丟失與損壞,但是這一點對于一些實時應用來說是十分重要的。基于以上三點,UDP在數(shù)據(jù)傳輸方面速度更快,延遲更低,實時性更好,因此被廣泛地用于通信領域和視頻網(wǎng)站當中。?[5]?
UDP適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應用環(huán)境。比如,我們經(jīng)常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向對方主機發(fā)送ICMP數(shù)據(jù)包,然后對方主機確認收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達的消息及時反饋回來,那么網(wǎng)絡就是通的。例如,在默認狀態(tài)下,一次“ping”操作發(fā)送4個數(shù)據(jù)包(如圖所示)。大家可以看到,發(fā)送的數(shù)據(jù)包數(shù)量是4包,收到的也是4包(因為對方主機收到后會發(fā)回一個確認收到的數(shù)據(jù)包)。這充分說明了UDP協(xié)議是面向非連接的協(xié)議,沒有建立連接的過程。正因為UDP協(xié)議沒有連接的過程,所以它的通信效率高;但也正因為如此,它的可靠性不如TCP協(xié)議高。QQ就使用UDP發(fā)消息,因此有時會出現(xiàn)收不到消息的情況。
四、協(xié)議差別
TCP/IP 和UDP最大的區(qū)別就是:TCP/IP是面向連接的,UDP是無連接的。TCP協(xié)議和UDP協(xié)議各有所長、各有所短,適用于不同要求的通信環(huán)境。TCP協(xié)議和UDP協(xié)議之間的差別如下表所示。
在實際的使用中,TCP主要應用于文件傳輸精確性相對要求較高且不是很緊急的情景,比如電子郵件、遠程登錄等。有時在這些應用場景下即使丟失一兩個字節(jié)也會造成不可挽回的錯誤,所以這些場景中一般都使用TCP傳輸協(xié)議。由于UDP可以提高傳輸效率,所以UDP被廣泛應用于數(shù)據(jù)量大且精確性要求不高的數(shù)據(jù)傳輸,比如我們平常在網(wǎng)站上觀看視頻或者聽音樂的時候應用的基本上都是UDP傳輸協(xié)議。
| ? | TCP | UDP |
| 是否連接 | 面向連接 | 無連接 |
| 傳輸可靠性 | 可靠的 | 不可靠的 |
| 應用場景 | 傳輸少量數(shù)據(jù) | 大量數(shù)據(jù) |
| 速度 | 慢 | 快 |
總結
以上是生活随笔為你收集整理的TCP/UDP协议基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cache Aside Pattern(
- 下一篇: zookeeper原理特点案例