TCP和UDP協議是IP網絡中不一樣終端間通信的兩種傳輸協議。
在OSI模型中,TCP、UDP是傳輸層協議,其中TCP是面向鏈接的協議,UDP是無鏈接的協議。算法
單播協議:
TCP基於單播網絡模型,支持兩方之間的數據交換。它不支持廣播或多播網絡模型。數據庫
鏈接狀態:
TCP使用兩個端點之間的同步狀態,而不是在網絡內強加一個狀態來支持鏈接。
該同步狀態被設置爲初始鏈接過程的一部分,所以TCP能夠被認爲是面向鏈接的協議。
許多協議設計旨在確保每一個本地狀態轉換被傳送到遠程方並由其確認。安全
可靠性:bash
可靠性意味着在鏈接的一端傳遞給TCP驅動程序的八位字節流將經過網絡傳輸,使得流做爲相同的八位字節序列呈現給遠程進程,順序與生成的由發送方。這意味着協議檢測數據流的分段什麼時候已被網絡丟棄,從新排序,複製或損壞。
在必要的狀況下,發送器將重傳損壞的段,以便容許接收器重建原始數據流。
這意味着TCP發送方必須保持全部發送數據的本地副本,直到它接收到接收方已經完成數據的準確傳送的指示爲止。服務器
全雙工:網絡
TCP是全雙工協議; 它容許雙方在單個TCP鏈接的上下文內發送和接收數據。併發
流:tcp
雖然TCP使用分組結構用於網絡傳輸,但TCP是真正的流傳輸協議,而且應用級網絡操做不透明。一些協議明確地封裝每一個應用事務;
對於每一次寫,都必須有一個匹配的讀。以這種方式,在網絡上保留數據流到邏輯記錄結構的應用派生分段。
TCP不保留施加在數據流上的這種隱式結構,使得在網絡協議內的寫和讀操做之間不存在配對。
例如,TCP應用能夠將三個數據塊按順序寫入網絡鏈接,其能夠由遠程讀取器在單個讀取操做中收集。TCP會話中使用的數據塊(段)的大小在會話開始時協商。
發送器嘗試在接收器的最大段大小,配置的發送器的最大段大小和最大可支持的非分段分組大小的限制內使用它能夠用於數據傳輸的最大段大小網絡路徑(路徑最大傳輸單元[MTU])。
路徑MTU週期性地刷新以適應在TCP鏈接活動時可能發生在網絡內的任何改變。spa
速率適配:設計
TCP也是速率自適應協議,由於數據傳輸速率旨在適應網絡內的主要負載條件並適應接收機的處理能力。
沒有預約的TCP數據傳輸速率; 若是網絡和接收器都具備額外的可用容量,則TCP發送器將嘗試向網絡注入更多數據以佔用此可用空間。
相反,若是有擁塞,TCP發送方將下降其發送速率以容許網絡恢復。該適配功能試圖實現最高可能的數據傳輸速率,而不觸發一致的數據丟失。
客戶端發送SYN消息; 服務器發送組合對客戶端的SYN的ACK而且包含服務器的SYN的消息; 而後客戶端發送對服務器的SYN的ACK。
鏈接在其生命週期中通過一系列狀態:
偵聽,SYN發送,SYN接收,創建,FIN-WAIT-1,FIN-WAIT-2,CLOSE-等待,CLOSING,LAST-ACK,TIME-WAIT和虛構狀態CLOSED。CLOSED是虛構的,由於它表明沒有TCP時的狀態,所以沒有鏈接。
LISTEN - 表示等待來自任何遠程TCP和端口的鏈接請求。
SYN-SENT - 表示在發送鏈接請求以後等待匹配的鏈接請求。
SYN-RECEIVED - 表示在接收和發送鏈接請求以後等待確認鏈接請求確認。
ESTABLISHED - 表示打開鏈接,收到的數據能夠傳遞給用戶。鏈接的數據傳輸階段的正常狀態。
FIN-WAIT-1表示等待來自遠程TCP的鏈接終止請求,或者先前發送的鏈接終止請求的確認。
FIN-WAIT-2 - 表示等待來自遠程TCP的鏈接終止請求。
CLOSE-WAIT - 表示等待來自本地用戶的鏈接終止請求。
CLOSING - 表示等待來自遠程TCP的鏈接終止請求確認。
LAST-ACK-表示等待先前發送到遠程TCP的鏈接終止請求的確認(其包括對其鏈接終止請求的確認)。
TIME-WAIT - 表示等待足夠的時間經過,以確保遠程TCP接收到其鏈接終止請求的確認。
CLOSED - 根本不表示鏈接狀態。複製代碼
TCP鏈接響應事件從一個狀態進行到另外一個狀態。事件是用戶調用,OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS; 傳入段,特別是包含SYN,ACK,RST和FIN標誌的段; 和超時。
創建鏈接
只有在兩個機器之間的鏈接不存在,兩個機器都贊成鏈接,而且兩個機器都有足夠的TCP資源來爲鏈接提供服務時,才能在兩臺機器之間創建鏈接。
若是不知足這些條件中的任何一個,則不能進行鏈接。鏈接的接受能夠由應用或系統管理例程觸發。
數據傳輸
對於由機器A的TCP從ULP接收的每一個數據塊,TCP封裝它而且以遞增的序列號將其發送到機器B. 在機器B接收到消息以後,它使用增長下一個序列號的分段確認來確認它(而且所以指示它接收到該序列號的一切)。
全雙工:使鏈接的兩端在任什麼時候間,甚至同時發送。
及時性:使用計時器可確保在合理的時間內傳輸數據。
有序:從一個應用程序發送的數據將在另外一端以相同的順序接收。這發生,儘管事實上數據報可能經過IP被無序地接收,由於TCP在將消息傳遞到較高層以前以正確的順序從新組裝消息。
標籤:全部鏈接具備商定的優先級和安全值。
受控流:TCP能夠經過使用緩衝區和窗口限制來調節信息流。
錯誤校訂:校驗和確保數據沒有錯誤(在校驗和算法的限制內)。
關閉鏈接
爲了關閉鏈接,TCP之一從ULP接收關閉原語併發出具備設置爲開的FIN標誌的消息。
UDP是無鏈接和不可靠的傳輸協議。兩個端口用於標識源和目標機器內的端點。當不須要可靠的傳遞時,使用用戶數據報協議來代替TCP。然而,UDP從不用於發送諸如網頁,數據庫信息等重要數據。流式媒體例如視頻,音頻和其餘使用UDP由於它提供速度。
端到端。UDP能夠識別在計算機上運行的特定進程。
不可靠,無鏈接傳遞(例如USPS:UDP使用無鏈接通訊設置。在這個UDP中不須要在發送數據以前創建鏈接。通訊僅由數據段自己組成)。
與IP相同的盡力語義
無ack,無序列,無流量控制
丟失,複製,延遲,無序或丟失鏈接
快速,低開銷
由於以上特性udp更適合:
UDP是傳輸層協議。UDP是一種無鏈接和不可靠的協議。UDP不作流量控制,錯誤控制或重傳壞段。UDP比TCP快。UDP一般用於流音頻和視頻。UDP從未用於重要的文檔,如網頁,數據庫信息等。UDP傳輸由8字節頭組成的段。它包含源端口,目標端口,UDP長度和校驗和。UDP校驗和用於檢測傳輸段中的「錯誤」。
用戶數據報協議(UDP)和傳輸控制協議(TCP)是TCP / IP協議組中傳輸層的「同級」。它們執行相同的角色,提供應用程序和Internet協議(IP)的數據移動功能之間的接口,可是它們以很是不一樣的方式實現。所以,這兩種協議爲高層協議提供了選擇,容許每一個協議根據其須要選擇適當的協議。
有助於說明這兩種協議的最重要的基本屬性以及它們如何彼此對比的表: