1. 程式人生 > >TCP和UDP的比較

TCP和UDP的比較

 * 1,TCP是面向連線(Connection oriented)的協議,UDP是無連線(Connection less)協議;
* 2,TCP無界,UDP有界;
* 3,TCP可靠,UDP不可靠;
* 4,TCP有序,UDP無序;
* 5,TCP有流量控制(擁塞控制),UDP沒有;
* 6,TCP的頭部比UDP大;

1,TCP是面向連線(Connection oriented)的協議,UDP是無連線(Connection less)協議;
以下舉例進行說明:
對於面向連線的: 兩個人打電話時,雙方確認並建立連線後才能進行通訊。
對於面向無連線的:在郵局寄信時,你只需要將信放在郵筒裡,不需要給收件人通知,收件人也不知道你給他寄信了。

2,TCP無界,UDP有界;
TCP通過位元組流傳輸,即TCP將應用程式看成是一連串的無結構的位元組流。每個TCP套介面有一個傳送緩衝區,如果位元組流太長時,TCP會將其拆分進行傳送。當位元組流太短時,TCP會等待緩衝區中的位元組流達到一定程度時再構成報文傳送出去,TCP發給對方的資料,對方在收到資料時必須給矛確認,只有在收到對方的確認時,本方TCP才會把TCP傳送緩衝區中的資料刪除。
而UDP傳輸報文的方式是由應用程式控制的,應用層交給UDP多長的報文,UDP照樣傳送,既不拆分,也不合並,而是保留這些報文的邊界,即一次傳送一個報文。
有界與無界之分是根據接收報文來劃分的,對於TCP協議,客戶端連續傳送資料,只要服務端的這個函式的緩衝區足夠大,會一次性接收過來,即客戶端是分好幾次發過來,是有邊界的,而服務端卻一次性接收過來,所以證明是無邊界的;
而對於UDP協議,客戶端連續傳送資料,即使服務端的這個函式的緩衝區足夠大,也只會一次一次的接收,傳送多少次接收多少次,即客戶端分幾次傳送過來,服務端就必須按幾次接收,從而證明,這種UDP的通訊模式是有邊界的。

3,TCP可靠,UDP不可靠;由於TCP要保證所有的資料包都可以到達,所以,需要有重傳機制(快重傳,快恢復,超時重傳),UDP不會進行重傳。當出現以下情況時會進行重傳:
1,資料報傳輸中途丟失
2,接收端的ACK確認報文在傳輸中途丟失
3,接收端異常未響應ACK或被接收端丟棄
TCP重傳機制:
1,超時重傳機制;
2,快速重傳機制;
3,SACK 方法;
4,Duplicate SACK – 重複收到資料的問題

4,TCP有序,UDP無序;訊息在傳輸過程中可能會亂序,後傳送的訊息可能會先到達,TCP會對其進行重排序,UDP不會。

5,TCP有流量控制(擁塞控制),UDP沒有;流量控制:TCP利用滑動視窗機制在TCP連線上實現對傳送方的流量控制, 如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。
擁塞控制:防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提:網路能夠承受現有的網路負荷。擁塞控制是一個全域性性的過程,涉及到所有的主機、路由器,以及與降低網路傳輸效能有關的所有因素。
當出現網路抖動時,TCP會自覺降低傳送速度,他會努力維護次序,但udp依然保持速度不變

6,TCP的頭部比UDP大;TCP頭部20 bytes

補充:
TCP位元組流和UDP資料報區別
兩者的區別在於TCP接收的是一堆資料,而每次取多少由主機決定;而UDP發的是資料報,客戶傳送多少就接收多少。

擁有這些區別的原因是由於TCP和UDP的特性不同而決定的。TCP是面向連線的,也就是說,在連線持續的過程中,socket中收到的資料都是由同一臺主機發出的,因此,知道保證資料是有序的到達就行了,至於每次讀取多少資料自己看著辦。 而UDP是無連線的協議,也就是說,只要知道接收端的IP和埠,且網路是可達的,任何主機都可以向接收端傳送資料。這時候,如果一次能讀取超過一個報文的資料,則會亂套。比如,主機A向傳送了報文P1,主機B傳送了報文P2,如果能夠讀取超過一個報文的資料,那麼就會將P1和P2的資料合併在了一起,這樣的資料是沒有意義的。

TCP應用場景:效率要求相對低,但對準確性要求相對高的場景。因為傳輸中需要對資料確認、重發、排序等操作,相比之下效率沒有UDP高。舉幾個例子:檔案傳輸(準確高要求高、但是速度可以相對慢)、接受郵件、遠端登入。

UDP應用場景:效率要求相對高,對準確性要求相對低的場景。舉幾個例子:QQ聊天、線上視訊、網路語音電話(即時通訊,速度要求高,但是出現偶爾斷續不是太大問題,並且此處完全不可以使用重發機制)、廣播通訊(廣播、多播)。

傳輸通訊:兩個協議是程序間通訊,也就是說應用間的通訊,那麼如何在眾多程式中找到自己的目的應用呢?在傳輸層,使用埠號來識別同一臺計算機中進行通訊的不同應用程式。
一般情況下可以根據“源IP地址”、“目標IP地址”、“源埠號”、“目標埠號”來進行識別一個通訊,但是有些特殊情況,比如IP地址和埠號都一樣,只是使用的傳輸協議不一樣,怎麼進行區分?資料到達IP層(網路層)之後,會先檢查IP頭部的協議號,然後再傳給相應協議的模組。
因此,TCP/IP或UDP/IP通訊中通常使用5個資訊來識別一個通訊:“源IP地址”、“目標IP地址”、“源埠號”、“目標埠號”以及“協議號”。(知名埠號與傳輸層協議沒有關係,例如53埠在TCP、UDP中都用於DNS服務)

埠號如何確定:標準既定的埠號,0-1023為知名埠號,其他已正式註冊的埠號是1024-49151;動態分配埠號,作業系統來為應用程式分配互不衝突的埠號,下一個埠號是在前一個分配號上加1,動態分配埠號範圍49152-65535.

TCP首部格式
各個段位說明:

* 源埠和目的埠:  各佔 2 位元組.埠是傳輸層與應用層的服務介面.傳輸層的複用和分用功能都要通過端口才能實現
* 序號:   Seq序號,佔32位,用來標識從TCP源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。
* 確認號:   Ack序號,佔32位,只有ACK標誌位為1時,確認序號欄位才有效,Ack=Seq+1。
* 資料偏移/首部長度:  佔 4 位,它指出 TCP 報文段的資料起始處距離 TCP 報文段的起始處有多遠.“資料偏移”的單位是 32 位字(以 4 位元組為計算單位)
* 保留:  佔 6 位,保留為今後使用,但目前應置為 0
* 緊急URG:  當 URG=1 時,表明緊急指標欄位有效.它告訴系統此報文段中有緊急資料,應儘快傳送(相當於高優先順序的資料)
* 確認ACK:  只有當 ACK=1 時確認號欄位才有效.當 ACK=0 時,確認號無效。   不要將確認序號Ack與標誌位中的ACK搞混了。
* PSH(PuSH):  接收 TCP 收到 PSH = 1 的報文段,就儘快地交付接收應用程序,而不再等到整個快取都填滿了後再向上交付
* RST (ReSeT):  當 RST=1 時,表明 TCP 連線中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連線,然後再重新建立運輸連線
* 同步 SYN:  同步 SYN = 1 表示這是一個連線請求或連線接受報文
* 終止 FIN:  用來釋放一個連線.FIN=1 表明此報文段的傳送端的資料已傳送完畢,並要求釋放運輸連線
* 檢驗和:  佔 2 位元組.檢驗和欄位檢驗的範圍包括首部和資料這兩部分.在計算檢驗和時,要在 TCP 報文段的前面加上 12 位元組的偽首部
* 緊急指標:  佔 16 位,指出在本報文段中緊急資料共有多少個位元組(緊急資料放在本報文段資料的最前面)
* 選項:  長度可變.TCP 最初只規定了一種選項,即最大報文段長度 MSS.MSS 告訴對方 TCP:“我的快取所能接收的報文段的資料欄位的最大長度是 MSS 個位元組.” [MSS(Maximum Segment Size)是 TCP 報文段中的資料欄位的最大長度.資料欄位加上 TCP 首部才等於整個的 TCP 報文段]
* 填充:  這是為了使整個首部長度是 4 位元組的整數倍

相關推薦

TCPUDP比較

雙工 tty 才幹 來看 電話 系統 那不 文件 pin 一、TCP/IP協議 TCP/IP協議,你一定常常聽說吧,當中TCP(Transmission Control Protocol)稱為傳輸控制協議,IP(Internet Protocol)稱為

TCPUDP協議的比較

通訊協議 網路通訊是兩臺計算機上的兩個程序之間的通訊。 網路通訊需要通訊協議。網路協議有很多種,就像我們平常交流說話,也有多種語言。。 最常見的協議是TCP/IP協議、UDP協議。 TCP:TCP 是傳輸控制協議的縮寫,它保障了兩個應用程式之間的可靠通訊。通常用於網際網路協議,被稱 TCP /

TCPUDP比較

 * 1,TCP是面向連線(Connection oriented)的協議,UDP是無連線(Connection less)協議; * 2,TCP無界,UDP有界; * 3,TCP可靠,UDP不可靠; * 4,TCP有序,UDP無序; * 5,TCP有流量控制(

理解TCPUDP協議

還要 資源 tcp 協議 code 長時間 tcp連接 一對多 客戶機 情況 目錄 TCP 協議 UDP協議 TCP和UDP的區別 TCP和UDP的使用場景 一 TCP協議 1.TCP的頭部格式 理解TCP協議,首要的就是TCP協議的頭部格式 ·

tcpudp之間區別的

比較 需要 快速 區別 復雜 udp 連接 可能 順序 1.tcp需要建立連接   udp不需要建立連接 2.tcp占用系統資源大   udp占用系統資源少 3.tcp結構復雜   udp結構簡單 4.tcp使用的是stearm流模式   udp使用的是Dragm數據報模式

【java】TCPUDP傳輸協議

有序 equal sig [] link 客戶端 數據傳輸 端口 sock TCP協議和UDP協議的比較 TCP的全稱是Transmission Control Protocol (傳輸控制協議) 傳輸控制協議,是一種面向連接的協議,類似打電話 在通信的整個過程中

初識Socket通信:基於TCPUDP協議學習網絡編程

auth bsp servers 客戶 name 本地 監聽 max ava 學習筆記: 1.基於TCP協議的Socket網絡編程:   (1)Socket類構造方法:在客戶端和服務器端建立連接     Socket s = new Socket(hostName,port

java的TCPUDP編程

while tin 控制臺 input service java col throw etl TCP 客戶端: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io

tcpudp

解決 數據 linux backlog 說了 listen 處理 跨網段 windows 多網卡 1 機器跨網段 2 網卡綁定 TCP和UDP tcp基於鏈接通信1 基於鏈接,則需要listen(backlog),指定連接池的大小2 基於鏈接,必須先運行服務端,然後客戶端發

走入計算機的第三十四天(基於tcpudp的套接字)

recv 設置 內存 tcp list dup lis 不知道 狀態 一 TCP套接字 1 low版TCP套接字 服務器端                              客戶端        2、改進版tcp套接字           服務端   

TCPUDP的區別

duyuheng tcp和udp的區別TCP和UDP的區別TCP協議與UDP協議的區別 首先咱們弄清楚,TCP協議和UCP協議與TCP/IP協議的聯系,很多人犯糊塗了,一直都是說TCP/IP協議與UDP協議的區別,我覺得這是沒有從本質上弄清楚網絡通信!TCP/IP協議是一個協議簇。裏面包括很多協議的。

TCPUDP通信(C#網絡編程) ---- 系列文章

xxxxx targe details 網絡編程 lan udp listen csdn href 文章系列目錄 C#網絡編程系列文章(一)之Socket實現異步TCP服務器 C#網絡編程系列文章(二)之Socket實現同步TCP服務器 C#網絡編程系列文章(三)之

傳輸層TCPUDP的區別分析與應用場景

郵件 建立連接 模型 傳遞數據 網絡通訊 num 進行 send 個數 轉載:http://blog.csdn.net/u013777351/article/details/49226101 基本概念: 1: 面向報文 面向報文的傳輸方式是應用層交給UDP多長的報文,U

Linux socket編程示例(最簡單的TCPUDP兩個例子)

步驟 proto 詳解 dto 應該 pro sock bind ram 一、socket編程    網絡功能是Uinux/Linux的一個重要特點,有著悠久的歷史,因此有一個非常固定的編程套路。   基於TCP的網絡編程:     基於連接, 在交互過程中, 服務器

TCPUDP最完整的區別

網絡數據 sock 數據傳輸 綁定 服務 cep 數據安全 clas 廣播 TCP與UDP基本區別 1.基於連接與無連接 2.TCP要求系統資源較多,UDP較少; 3.UDP程序結構較簡單 4.流模式(TCP)與數據報模式(UDP); 5.TCP保證數據正確

TCPUDP應用場景

通信 socket 客戶端 區別 階段 log 大量 一次 三次 tcp是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。是專門為了在不可靠的互聯網絡上提供一個可靠的端到端字節流而設計的,面向字節流。 udp(用戶數據報協議)是iso參考模型中一種無連接的傳輸層協

TCPUDP的最完整的區別【轉】

CP 資源 blank 必須 可靠的 有序 serve 通過 傳輸層協議 來源:https://blog.csdn.net/li_ning_/article/details/52117463 TCP UDPTCP與UDP基本區別 1.基於連接與無連接 2.TCP要求系統

TCPUDP比較 以及並發編程基礎知識

引用 層次 系統調用 指示 核心 () 樹形結構 list 設計 一、tcp比udp真正可靠地原因 1.為什麽tcp比udp傳輸可靠地原因: 我們知道在傳輸數據的時候,數據是先存在操作系統的緩存中,然後發送給客戶端,在客戶端也是要經過客戶端的操作系統的,因為這個過程涉及到

python網絡編程實現TCPUDP連接

socket python tcp udp 實現TCP #!/usr/bin/env python3 # -*- coding: utf-8 -*- import socket # 創建一個socket: s = socket.socket(socket.AF_INET, socket.S

TCPUDP的最完整的區別

窗口 每次 osi模型 流式 accep 接管 雙向 發送數據 () 轉自:Li_Ning_的博客 https://blog.csdn.net/li_ning_/article/details/52117463TCP與UDP基本區別 1.基於連接與無連接 2.TCP要