TCP(Transmission Control Protocol,傳輸控制協議)
TCP協議是一種可靠的、一對一的、面向有連接的通信協議,TCP主要通過下列幾種方式保證數據傳輸的可靠性:
(1)在使用TCP協議進行數據傳輸時,往往需要客戶端和服務端先建立一個“通道“、且這個通道只能夠被客戶端和服務端使用,所以TCP傳輸協議只能面向一對一的連接。
(2)為了保證數據傳輸的准確無誤,TCP傳輸協議將用於傳輸的數據包分為若干個部分(每個部分的大小根據當時的網絡情況而定),然后在它們的首部添加一個檢驗字節。當數據的一個部分被接收完畢之后,服務端會對這一部分的完整性和准確性進行校驗,校驗之后如果數據的完整度和准確度都為100%,在服務端會要求客戶端開始數據下一個部分的傳輸,如果數據的完整性和准確性與原來不相符,那么服務端會要求客戶端再次傳輸這個部分。
客戶端與服務端在使用TCP傳輸協議時要先建立一個“通道”,在傳輸完畢之后又要關閉這“通道”,前者可以被形象地成為“三次握手”,而后者則可以被稱為“四次揮手”。
通道的建立——三次握手:
(1)在建立通道時,客戶端首先要向服務端發送一個SYN同步信號。
(2)服務端在接收到這個信號之后會向客戶端發出SYN同步信號和ACK確認信號。
(3)當服務端的ACK和SYN到達客戶端后,客戶端與服務端之間的這個“通道”就會被建立起來。
通道的關閉——四次揮手:
(1)在數據傳輸完畢之后,客戶端會向服務端發出一個FIN終止信號。
(2)服務端在收到這個信號之后會向客戶端發出一個ACK確認信號。
(3)如果服務端此后也沒有數據發給客戶端時服務端會向客戶端發送一個FIN終止信號。
(4)客戶端在收到這個信號之后會回復一個確認信號,在服務端接收到這個信號之后,服務端與客戶端的通道也就關閉了。
TCP協議能為應用程序提供可靠的通信連接,使一台計算機發出的字節流無差錯地發往網絡上的其他計算機,對可靠性要求高的數據通信系統往往使用TCP協議傳輸數據。
UDP(User Data Protocol,用戶數據報協議)
1、UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接, 當它想傳送時就簡單地去抓取來自應用程序的數據,並盡可能快地把它扔到網絡上。 在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、 計算機的能力和傳輸帶寬的限制; 在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
2、 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等, 因此一台服務機可同時向多個客戶機傳輸相同的消息。
3、UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
4、吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、 源端和終端主機性能的限制。
5、UDP使用盡最大努力交付,即不保證可靠交付, 因此主機不需要維持復雜的鏈接狀態表。
6、UDP是面向報文的。發送方的UDP對應用程序交下來的報文, 在添加首部后就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界, 因此,應用程序需要選擇合適的報文大小。
tcp、udp區別
TCP/IP 和UDP最大的區別就是:TCP/IP是面向連接的,UDP是無連接的。TCP協議和UDP協議各有所長、各有所短,適用於不同要求的通信環境。TCP協議和UDP協議之間的差別如下表所示。
在實際的使用中,TCP主要應用於文件傳輸精確性相對要求較高且不是很緊急的情景,比如電子郵件、遠程登錄等。有時在這些應用場景下即使丟失一兩個字節也會造成不可挽回的錯誤,所以這些場景中一般都使用TCP傳輸協議。由於UDP可以提高傳輸效率,所以UDP被廣泛應用於數據量大且精確性要求不高的數據傳輸,比如我們平常在網站上觀看視頻或者聽音樂的時候應用的基本上都是UDP傳輸協議。
|
TCP |
UDP |
是否建立連接 |
面向連接 |
無連接 |
傳輸可靠性 |
可靠 |
不可靠 |
應用場景 |
傳輸少量數據 |
大量數據 |
速度 |
慢 |
快 |