傳輸層協議

一:引言

傳輸層定義了主機應用程序之間端到端的連通性。傳輸層中最爲常見的兩個協議是傳輸控制協議(TCP)和和用戶數據報協議(UDP)

二:TCP

TCP概述

TCP是一種面向連接的傳輸層協議,提供可靠的傳輸服務。
TCP位於TCP?IP模型的傳輸層。它是一種面向連接的端到端協議。TCP作爲傳輸控制協議可以爲主機提供可靠的數據傳輸。TCP需要依賴網絡協議爲主機提供可用的傳輸協議。兩臺主機在通信前,需要TCP在它們之間建立可靠的傳輸通道。

TCP端口號

TCP允許一個主機同時運行多個應用進程。每臺主機可以擁有多個應用端口,每對端口號、源和目標IP地址的組合唯一地標識了一個會話。

傳輸層協議
有些網絡服務會使用固定的端口,這類端口稱爲知名端口,端口號範圍是0-1023。其餘的爲動態端口。

TCP頭部

傳輸層協議
源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口某個時刻只能被一個進程佔用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通信。源端口、目標端口是用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字節

TCP建立連接(重點)

傳輸層協議
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在傳輸過程中採用了確認技術,以確保目的設備收到了從原設備發來的數據,並且是準確無誤的。
工作原理:
目的設備收到原設備發送的數據段時,會向源端發送確認報文,源設備收到確認報文後,繼續發送報文,如此重複。

TCP流量控制

TCP滑動窗口技術通過動態改變窗口大小來實現端到端設備之間的數據傳輸進行流量控制。
當客戶端向服務器發送數據時,發送了四個長度爲1024字節的數據段,所以客戶端的窗口大小爲4096字節。結果服務器收到第三
個數據段之後緩存區滿,第四個數據段被丟棄。服務器則將自己的窗口大小調整爲3072字節(即3個數據段)表明服務器的緩存區只能處理3072個字節的數據段。於是客戶端改變其窗口大小,發送窗口大小爲3072的數據段。

TCP關閉連接

TCP支持全雙工模式的傳輸數據,這意味着同一時刻兩個方向都可以進行數據的傳輸。再傳輸數據之前,TCP通過三次握手建立的實際上是兩個方向的鏈接,因此在傳輸完畢後,兩個方向的連接都必須關閉。
傳輸層協議
上圖中的狀態:
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概述

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

UDP頭部

傳輸層協議

UDP傳輸過程

工作在傳輸層
提供不可靠的網絡訪問
非面向連接協議
有限的錯誤檢查
傳輸性能高
無數據恢復特性
使用UDP傳數據時,由應用程序根據需要提供保溫到達確認,排序,流量控制等功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章