2021-05-12 14:32:11
關於TCP協定和UDP協定
tcp協定
TCP(Transmission Control Protocol)可靠的、面向連線的協定(eg:打電話)、傳輸效率低全雙工通訊(傳送快取&接收快取)、面向位元組流。使用TCP的應用:Web瀏覽器;電子郵件、檔案傳輸程式。
概念:面向連線的可靠的流式傳輸 適合傳輸比較大的檔案,對穩定性要求比較高的
可靠地原因是建立了連線之後傳送的資訊不會丟失
當應用程式希望通過 TCP 與另一個應用程式通訊時,它會傳送一個通訊請求。這個請求必須被送到一個確切的地址。在雙方“握手”之後,TCP 將在兩個應用程式之間建立一個全雙工 (full-duplex) 的通訊。
這個全雙工的通訊將占用兩個計算機之間的通訊線路,直到它被一方或雙方關閉為止。
TCP是因特網中的傳輸層協定,使用三次握手協定建立連線。當主動方發出SYN連線請求後,等待對方回答SYN+ACK[1],並最終對對方的 SYN 執行 ACK 確認。這種建立連線的方法可以防止產生錯誤的連線。[1]
TCP三次握手的過程如下:
用戶端傳送SYN(SEQ=x)報文給伺服器端,進入SYN_SEND狀態。
伺服器端收到SYN報文,回應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。
用戶端收到伺服器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態。
三次握手完成,TCP用戶端和伺服器端成功地建立連線,可以開始傳輸資料了。
建立一個連線需要三次握手,而終止一個連線要經過四次握手,這是由TCP的半關閉(half-close)造成的。
(1) 某個應用進程首先呼叫close,稱該端執行“主動關閉”(active close)。該端的TCP於是傳送一個FIN分節,表示資料傳送完畢。
(2) 接收到這個FIN的對端執行 “被動關閉”(passive close),這個FIN由TCP確認。
注意:FIN的接收也作為一個檔案結束符(end-of-file)傳遞給接收端應用進程,放在已排隊等候該應用進程接收的任何其他資料之後,因為,FIN的接收意味著接收端應用進程在相應連線上再無額外資料可接收。
(3) 一段時間後,接收到這個檔案結束符的應用進程將呼叫close關閉它的通訊端。這導致它的TCP也傳送一個FIN。
(4) 接收這個最終FIN的原傳送端TCP(即執行主動關閉的那一端)確認這個FIN。[1]
既然每個方向都需要一個FIN和一個ACK,因此通常需要4個分節。
注意:
(1) “通常”是指,某些情況下,步驟1的FIN隨資料一起傳送,另外,步驟2和步驟3傳送的分節都出自執行被動關閉那一端,有可能被合併成一個分節。[2]
(2) 在步驟2與步驟3之間,從執行被動關閉一端到執行主動關閉一端流動資料是可能的,這稱為“半關閉”(half-close)。
(3) 當一個Unix進程無論自願地(呼叫exit或從main函數返回)還是非自願地(收到一個終止本進程的信號)終止時,所有開啟的描述符都被關閉,這也導致仍然開啟的任何TCP連線上也發出一個FIN。
無論是客戶還是伺服器,任何一端都可以執行主動關閉。通常情況是,客戶執行主動關閉,但是某些協定,例如,HTTP/1.0卻由伺服器執行主動關閉。
udp協定
UDP(User Datagram Protocol)不可靠的、無連線的服務,傳輸效率高(傳送前時延小),一對一、一對多、多對一、多對多、面向報文,盡最大努力服務,無擁塞控制。使用UDP的應用:域名系統 (DNS);視訊流;IP語音(VoIP)。
概念:無連線的 快速 但不可靠,適合傳輸對效率要求比較高的短訊息
當應用程式希望通過UDP與一個應用程式通訊時,傳輸資料之前源端和終端不建立連線。
當它想傳送時就簡單地去抓取來自應用程式的資料,並盡可能快地把它扔到網路上。
tcp和udp的對比
TCP---傳輸控制協定,提供的是面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立一個TCP連線,之後才能傳輸資料。TCP提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。
UDP---使用者資料包協定,是一個簡單的面向資料包的運輸層協定。UDP不提供可靠性,它只是把應用程式傳給IP層的資料包傳送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸資料包前不用在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,故而傳輸速度很快。
相關文章