首先強調一點,TCP/IP協議是一個協議簇。裡面包括很多協議的,UDP只是其中的一個, 之所以命名為TCP/IP協議,因為TCP、IP協議是兩個很重要的協議,就用他兩命名了。
兩個協議的區別實際使用時,只需要記住“TCP正常連接發送數據時一般不會產生丟包(排除上下層其他因素),而UDP產生丟包是很常見的事。”
1 下面著重講解一下TCP協議和UDP協議的區別
1、基於連接與無連接;
2、對系統資源的要求(TCP較多,UDP少);
3、UDP程序結構較簡單;
4、流模式與數據報模式 ;
5、TCP保證數據正確性,UDP可能丟包;
6、TCP保證數據順序,UDP不保證。
通過以上分析,可能會有人認為,鑑於TCP可靠的傳輸協議,那麼它一定優於UDP,其實不然。
下面舉例說明這個問題:
TCP用於在傳輸層有必要實現可靠傳輸的情況。由於它是面向有鏈接並具備順序控制、重發控制等機制,所以它可以為應用提供可靠傳輸。
在另方面,UDP主要用於那些對高速傳輸和實時性較高要求的通信或廣播通信。我們舉一個例子-通過IP電話進行通話,如果使用TCP,數據在傳輸圖中如果丟失會被重發,但這樣無法流暢地傳輸通話人的聲音,會導致無法進行正常交流。而採用UDP,它不會進行重發處理。從而也就不會有聲音大幅度延遲到達的問題。即使有部分數據丟失,也只是會影響某一小部分的通話。此外,在多播與廣播信道中也使用UDP而不是TCP。
TCP(Transmission Control Protocol,傳輸控制協議)是面向連接的協議,也就是說,在收發數據前,必須和對方建立可靠的連接。 一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常複雜,只簡單的描述下這三次對話的簡單過程:
1)主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;
2)主機B向主機A發送同意連接和要求同步 (同步就是兩臺主機一個在發送,一個在接收,協調工作)的數據包 :“可以,你什麼時候發?”,這是第二次對話;
3)主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接著吧!”, 這是第三次對話。
三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之後,主機A才向主機B正式發送數據,這也是保證可靠傳輸的先決條件。
6 UDP(User Data Protocol,用戶數據報協議)
1、UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。 在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、 計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
2、 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。
3、UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
4、吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、 源端和終端主機性能的限制。
5、UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表(這裡面有許多參數)。
6、UDP是面向報文的。發送方的UDP對應用程序交下來的報文, 在添加首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界, 因此,應用程序需要選擇合適的報文大小。
我們經常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常, 其實“ping”命令的原理就是向對方主機發送UDP數據包,然後對方主機確認收到數據包, 如果數據包是否到達的消息及時反饋回來,那麼網絡就是通的。
ping命令是用來探測主機到主機之間是否可通信,如果不能ping到某臺主機,表明不能和這臺主機建立連接。ping命令是使用 IP 和網絡控制信息協議 (ICMP),因而沒有涉及到任何傳輸協議(UDP/TCP) 和應用程序。它發送icmp回送請求消息給目的主機。
ICMP協議規定:目的主機必須返回ICMP回送應答消息給源主機。如果源主機在一定時間內收到應答,則認為主機可達。