天天看點

TCP和UDP協定傳輸層

傳輸層

傳輸層是為應用程序間提供邏輯通信。

1.1. UDP協定

1.1.1. UDP的主要特點

(1) UDP是無連接配接的,在傳輸資料之前不需要建立連接配接。

(2) UDP是盡最大努力傳遞的。UDP不提供可靠傳遞。

(3) UDP是面向資料報的。

(4) UDP支援一對一,一對多,多對一,多對多通信。

(5) UDP不提供擁塞控制。

(6) UDP首部開銷小隻有8個位元組。

1.1.2. UDP的首部格式

源端口 目的端口 長度 校驗和

源端口:在需要對方回信時選用,不需要時全置0

目的端口:在終點傳遞時使用

長度:UDP封包的長度(包括首部和資料字段)

校驗和:檢測使用者資料在傳輸時是否出現錯誤,出現就丢棄。

1.2. TCP協定

1.2.1. TCP的主要特點

(1) TCP是面向連接配接的,在傳輸資料之前需要建立連接配接。

(2) TCP是可靠傳輸的。

(3) TCP隻支援一對一通信。

(4) TCP是面向位元組流的。

(5) TCP有擁塞控制

(6) TCP是全雙工通信

(7) TCP首部長度是20個位元組

1.2.2. TCP的首部格式

源端口号 目的端口号
序号
确認序号
資料偏移 保留 URG ACK PSH RST SYN FIN 視窗
檢驗和 緊急指針
選項(長度可變) 填充

(1) 源端口号和目的端口号與UDP一樣。

(2) 序号:TCP連接配接中傳送的位元組流,每一個位元組都按序号編号。

(3) 确認序号:期望收到對方下一個封包段的第一個位元組的序号。

(4) 資料偏移:這個字段實際指出了TCP封包首部長度。

(5) URG:緊急标志位,表示此封包段中有緊急資料,應該快速發送。

(6) ACK:确認序号有效标記位。

(7) PUSH:推送标志位,當兩個程序進行通信時,有時需要一端輸入一個指令時,立即能夠收到對方的響應。

(8) RST:複位标志位,RST=1,表示TCP連接配接中出現嚴重差錯,需要釋放連接配接,然後重建立立連接配接。

(9) SYN:在連接配接建立時用來同步序号

(10) FIN:用來釋放連接配接。

(11) 視窗:指的是對方的接收視窗。接收視窗,是發送方設定發送視窗的依據。

1.2.3. 可靠傳輸的原理

通信雙方,發送方A,和接收方B。

停止等待協定:停止等待協定就是,每發送完一個分組就停止發送,等待對方的确認。在确認收到後再發送下一組。

A. 無差錯情況:發送方A發送分組M1後停止發送,等待接收方B發送确認信号。接收方B接受到分組M1後,向發送方A發送确認信号。發送方A接受到B的确認信号後,繼續發送分組M2。

B. 出現差錯情況:接收方B接受到發送A的分組M1,檢測出了差錯,就丢棄該封包什麼也不做。發送方A等待接收方B的确認資訊,A隻要超過一段時間沒有收到接收方B的确認資訊,就重新發送分組M1。

C. 确認丢失和确認遲到:接收方B發送的對M1确認資訊丢失了,A在逾時計時器到期後就重新發送M1分組。接收方B接收到該重複的分組M1将該重複分組丢棄,并且向A發送确認資訊。

滑動視窗協定:ARQ

位于視窗内的分組可以被連續的發送出去,而不需要等待對方的确認。連續ARQ協定規定,發送方每收到一個确認資訊就向前移動一個分組的位置。接受方一般采用累積确認的方式,不必對收到的分組注意發送确認,而是在接到幾個分組後,對按序到達的最後一個分組發送确認資訊,表示這個分組之前的所有分組都已到達。

1.2.4. TCP的流量控制

流量控制是讓發送方的速率不要太快,讓接收方來得及接收。

TCP使用滑動視窗進行流量控制,接收方會向發送方發送一個接收視窗大小。發送方發送的視窗不能超過接收方給出的接收視窗。

1.2.5. TCP的連接配接和釋放

TCP連接配接的建立:三次握手

1) 用戶端向服務端發送連接配接請求,将同步位SYN=1,同時講seq=x。這時用戶端進入SYN-SENT。

2) 服務端接收到用戶端的請求,如果同意建立連接配接,則向服務端發送确認封包。将SYN=1,ACK=1,ack=x+1,seq=y。服務端進入SYN-RCVD。

3) 用戶端接收到服務端的封包,還需要向用戶端确認。将ACK=1,ack=y+1,seq=x+1。連接配接建立完成,用戶端和服務端進入ESTABLISHED

為什麼需要用戶端第三次發送确認?

防止失效的資訊重新請求連接配接。用戶端向服務端發送連接配接請求,請求封包在某個網絡節點阻塞,用戶端逾時重傳新的連接配接請求,并建立連接配接,傳輸資料完成後。失效的請求封包到達用戶端,如果沒有第三次用戶端的确認。則伺服器建立連接配接後,用戶端沒有資源傳輸,這樣空的連接配接就會浪費資源。

TCP連接配接的釋放:四次揮手

1) 用戶端向服務端發送連接配接釋放封包,并停止發送資料。将FIN=1,seq=u(等于前 面發送的最後一個位元組的序号加1)。進入FINAL-WAIT-1

2) 服務端接受到封包後,發送确認信号,将ACK=1,ack=u+1,seq=v(等于其那面接 受到最後一個位元組的序号加1)。進入CLOSE_WAIT狀态。這時用戶端到服務端 的連接配接斷開。用戶端接受到确認信号後進入FINAL-WAIT-2狀态。等待服務端 發送連接配接釋放信号。

3) 服務端向用戶端發送連接配接釋放封包,将SYN=1,ack=u+1,seq=w。LAST-ACK

4) 用戶端接收到服務端的了封包後,向用戶端發送确認。将ACK=1,ack=w+1,seq=u+1.進入TIME-WAIT狀态。

繼續閱讀