天天看點

傳輸層協定一:引言二:TCPUDP

傳輸層定義了主機應用程式之間端到端的連通性。傳輸層中最為常見的兩個協定是傳輸控制協定(TCP)和和使用者資料報協定(UDP)

TCP是一種面向連接配接的傳輸層協定,提供可靠的傳輸服務。

TCP位于TCP?IP模型的傳輸層。它是一種面向連接配接的端到端協定。TCP作為傳輸控制協定可以為主機提供可靠的資料傳輸。TCP需要依賴網絡協定為主機提供可用的傳輸協定。兩台主機在通信前,需要TCP在它們之間建立可靠的傳輸通道。

TCP允許一個主機同時運作多個應用程序。每台主機可以擁有多個應用端口,每對端口号、源和目标IP位址的組合唯一地辨別了一個會話。

傳輸層協定一:引言二:TCPUDP

有些網絡服務會使用固定的端口,這類端口稱為知名端口,端口号範圍是0-1023。其餘的為動态端口。

傳輸層協定一:引言二:TCPUDP

源端口、目标端口:計算機上的程序要和其他程序通信是要通過計算機端口的,而一個計算機端口某個時刻隻能被一個程序占用,是以通過指定源端口和目标端口,就可以知道是哪兩個程序需要通信。源端口、目标端口是用16位表示的,可推算計算機的端口個數為2^16個

序列号:表示本封包段所發送資料的第一個位元組的編号。在TCP連接配接中所傳送的位元組流的每一個位元組都會按順序編号。由于序列号由32位表示,是以每2^32個位元組,就會出現序列号回繞,再次從 0 開始

确認号:表示接收方期望收到發送方下一個封包段的第一個位元組資料的編号。也就是告訴發送發:我希望你(指發送方)下次發送的資料的第一個位元組資料的編号是這個确認号

資料偏移:表示TCP封包段的首部長度,共4位,由于TCP首部包含一個長度可變的選項部分,需要指定這個TCP封包段到底有多長。它指出 TCP 封包段的資料起始處距離 TCP 封包段的起始處有多遠。該字段的機關是32位(即4個位元組為計算機關), 4位二進制最大表示15,是以資料偏移也就是TCP首部最大60位元組76

TCP標頭

URG:表示本封包段中發送的資料是否包含緊急資料。後面的緊急指針字段(urgent pointer)隻有當URG=1時才有效

ACK:表示是否前面的确認号字段是否有效。 ACK=1,表示有效。隻有當ACK=1時,前面的确認号字段才有效。 TCP規定,連接配接建立後, ACK必須為1,帶ACK标志的TCP封包段稱為确認封包段

PSH:提示接收端應用程式應該立即從TCP接收緩沖區中讀走資料,為接收後續資料騰出空間。如果為1,則表示對方應當立即把資料送出給上層應用,而不是緩存起來,如果應用程式不将接收到的資料讀走,就會一直停留在TCP接收緩沖區中

RST:如果收到一個RST=1的封包,說明與主機的連接配接出現了嚴重錯誤(如主機崩潰),必須釋放連接配接,然後再重建立立連接配接。或者說明上次發送給主機的資料有問題,主機拒絕響應,帶RST标志的TCP封包段稱為複位封包段

SYN:在建立連接配接時使用,用來同步序号。當SYN=1, ACK=0時,表示這是一個請求建立連接配接的封包段;當SYN=1, ACK=1時,表示對方同意建立連接配接。 SYN=1,說明這是一個請求建立連接配接或同意建立連接配接的封包。隻有在前兩次握手中SYN才置為1,帶SYN标志的TCP封包段稱為同步封包段

FIN:表示通知對方本端要關閉連接配接了,标記資料是否發送完畢。如果FIN=1,即告訴對方:“我的資料已經發送完畢,你可以釋放連接配接了”,帶FIN标志的TCP封包段稱為結束封包段

視窗大小:表示現在充許對方發送的資料量,也就是告訴對方,從本封包段的确認号開始允許對方發送的資料量

校驗和:提供額外的可靠性

緊急指針:标記緊急資料在資料字段中的位置

選項部分:其最大長度可根據TCP首部長度進行推算。 TCP首

部長度用4位表示,選項部分最長為: (2^4-1)*4-20=40位元組

傳輸層協定一:引言二:TCPUDP

TCP是一種可靠的,面向連接配接的全雙工傳輸層協定。

TCP連接配接的建立是一個三次握手的過程。如圖所示

1用戶端發送一個辨別了SYN的資料段,表示期望與伺服器A建立連接配接,次資料段的序列号為a。

2伺服器回複辨別了SYN+ACK的資料段,此資料段的序列号為b,确認序列号為a+1,以此作為對主機A的SYN豹紋的确認。

3主機A發送一個辨別了SYN的資料段,此資料段的序列号為a+1,确認序列号為b+1,以此作為對伺服器A的SYN封包段的确認。

TCP在傳輸過程中采用了确認技術,以確定目的裝置收到了從原裝置發來的資料,并且是準确無誤的。

工作原理:

目的裝置收到原裝置發送的資料段時,會向源端發送确認封包,源裝置收到确認封包後,繼續發送封包,如此重複。

TCP滑動視窗技術通過動态改變視窗大小來實作端到端裝置之間的資料傳輸進行流量控制。

當用戶端向伺服器發送資料時,發送了四個長度為1024位元組的資料段,是以用戶端的視窗大小為4096位元組。結果伺服器收到第三

個資料段之後緩存區滿,第四個資料段被丢棄。伺服器則将自己的視窗大小調整為3072位元組(即3個資料段)表明伺服器的緩存區隻能處理3072個位元組的資料段。于是用戶端改變其視窗大小,發送視窗大小為3072的資料段。

TCP支援全雙工模式的傳輸資料,這意味着同一時刻兩個方向都可以進行資料的傳輸。再傳輸資料之前,TCP通過三次握手建立的實際上是兩個方向的連結,是以在傳輸完畢後,兩個方向的連接配接都必須關閉。

傳輸層協定一:引言二:TCPUDP

上圖中的狀态:

CLOSED 沒有任何連接配接狀态

LISTEN 偵聽狀态,等待來自遠方TCP端口的連接配接請求

SYN-SENT 在發送連接配接請求後,等待對方确認

SYN-RECEIVED 在收到和發送一個連接配接請求後,等待對方确認

ESTABLISHED 代表傳輸連接配接建立,雙方進入資料傳送狀态

FIN-WAIT-1 主動關閉,主機已發送關閉連接配接請求,等待對方确認

FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接配接确認,等待對方發送關閉傳輸連接配接請求

TIME-WAIT 完成雙向傳輸連接配接關閉,等待所有分組消失

CLOSE-WAIT 被動關閉,收到對方發來的關閉連接配接請求,并已确認 LAST-ACK 被動關閉,等待最後一個關閉傳輸連接配接确認,并等待所有分組消失

CLOSING 雙方同時嘗試關閉傳輸連接配接,等待對方确認

關閉連接配接過程:

1當用戶端執行主動關閉時,它将向伺服器發送一個結束封包段,同時連接配接進入FIN_WAIT_1狀态。若此時用戶端收到伺服器專門用于确認目的的确認封包段,則連接配接轉移至FIN_WAIT_2狀态。當用戶端處于FIN_WAIT_2狀态時,伺服器處于CLOSE_WAIT狀态,這一對狀态是可能發生半關閉的狀态。此時如果伺服器也關閉連接配接(發送結束封包段),則用戶端将給予确認并進入TIME_WAIT狀态

2用戶端從FIN_WAIT_1狀态可能直接進入TIME_WAIT狀态(不經過FIN_WAIT_2狀态),前提是處于FIN_WAIT_1狀态的伺服器直接收到帶确認資訊的結束封包段(而不是先收到确認封包段,再收到結束封包段)

3處于FIN_WAIT_2狀态的用戶端需要等待伺服器發送結束封包段,才能轉移至TIME_WAIT狀态,否則它将一直停留在這個狀态。如果不是為了在半關閉狀态下繼續接收資料,連接配接長時間地停留在FIN_WAIT_2狀态并無益處。連接配接停留在FIN_WAIT_2狀态的情況可能發生在:用戶端執行半關閉後,未等伺服器關閉連接配接就強行退出了。此時用戶端連接配接由核心來接管,可稱之為孤兒連接配接(和孤兒程序類似)。

UDP是一種面向無連接配接的傳輸層協定,傳輸可靠性沒有保障。當應用程式對傳輸的可靠性要求不高,但是對傳輸速度和延遲要求較高時,可以用UDP協定來代替TCP協定

傳輸層協定一:引言二:TCPUDP

工作在傳輸層

提供不可靠的網絡通路

非面向連接配接協定

有限的錯誤檢查

傳輸性能高

無資料恢複特性

使用UDP傳資料時,由應用程式根據需要提供保溫到達确認,排序,流量控制等功能。