Internet傳輸層
Internet的傳輸層有兩個主要的協議,無連線的和麵向連線的各一個,兩個協議互為補充。無連線的協議是UDP,它除了給應用程式提供傳送資料包功能並允許他們在所需的層次之上架構自己的協議外,幾乎沒有做什麼特別的事情。面向連線的協議是TCP,該協議幾乎做了所有的事情。它建立連線,並通過重傳機制增加了可靠性,同時還進行流量控制和擁塞控制。
UDP
User Datagram Protocol,為應用程式提供了一種無需建立連結就可以傳送資料包的方法。UDP傳輸的段(segment)由8bytes的頭和有效載荷構成。
當一個UDP資料包到來時,它的有效載荷被遞交給與目標埠相關聯的那個程式。可以把埠看作應用程式租來接收資料包的郵箱。當接收端必須將一個應答返回給源端時,源埠欄位是必須的。UDP長度欄位包含8bytes的頭和資料兩部分的總長度。
UDP協議特別有用的一個領域是client-server應用開發。以這種方式使用UDP的一個應用是域名系統(DNS,Domain Name System)。
UDP是一個實現RPC的良好基礎。
UDP被廣泛應用於實時多媒體應用。RTP(Real-time Transport Protocol)就是一個在應用層實現的傳輸協議。
TCP
Transmission Control Protocol 是為了在不可靠的網際網路絡上提供可靠的端到端的位元組流而專門設計的一個傳輸協議。網際網路絡與單個網路有很大的不同,因為互連網路的不同部分可能有截然不同的拓撲結構、頻寬、延遲、資料包大小和其他引數。TCP的設計目標是能夠動態地適應互連網路的這些特性,而且具備面對各種故障時的健壯性。
每臺支援TCP的機器都有一個TCP傳輸實體,傳輸實體接收本地程式的使用者資料流,將他們分割成不超過64KB的分段(通常不超過1460bytes)。每個分段以IP資料包形式傳送。
IP層並不保證資料包一定被正確遞交到地方,也不指示資料包的傳送速度有多快。正是TCP負責既要足夠快地傳送資料包,以便使用網路容量,但又不可以引起網路擁塞;而且TCP超時後,要重傳沒有遞交的資料包。即使被遞交的資料包,也可能存在錯序的問題,這也是TCP的責任,它必須把接收到的資料包重新裝配成正確的順序。
TCP服務模型
TCP服務由傳送端和接收端建立一種稱為套接字(socket)的端點來獲得。為了獲得TCP服務,必須顯式地在一臺機器的套接字和另一臺機器的套接字之間建立一個連線,每個連線可以用(socket1,socket2)來表示。
1024以下的埠號被保留,只能用作特權使用者啟動的標準服務,這些埠稱為知名埠。例如:FTP(20,21)、SSH(22)、SMTP(25)、HTTP(80)、HTTPS(443)等等。
所有的TCP連線都是全雙工,點到點的。
一個TCP連線就是一個位元組流,而不是訊息流。端到端之間不保留訊息的邊界。
當一個應用將資料傳遞給TCP時,TCP可能立即將資料傳送出去,也可能將它緩衝起來,這完全由TCP軟體自己來決定。然而,有時候應用程式確實希望資料立即被髮送出去。為了強制將資料傳送出去,TCP有個PUSH標誌位,用於告訴TCP不要延遲傳輸。
TCP協議
TCP實體使用的基本協議是具有動態視窗大小的滑動視窗協議。當傳送端傳送一段時,它啟動一個計時器。當該段到達接收方時,接收端的TCP實體返回一個攜帶了確認號和剩餘視窗大小的段,並且確認號的值等於接收端期望接收的下一個序號。如果傳送端的計時器在確認段到達之前超時,則傳送端再次傳送原來的段。
每個段的起始位置都是一個20bytes的固定頭。其後跟著可選頭和使用者資料。
上圖中的保留位(未使用)現在只剩4bits,有2bits也用作了flag位,也就是有8個flag位。
- 源埠/目標埠:2bytes * 2
- 序號(sequence number)和確認號(Acknowledgement number):4bytes * 2。序號為為當前端成功傳送的資料位數。確認號為當前端成功接收的資料位數+1。
- TCP頭長度欄位指明瞭TCP頭包含了多少個32bits的字。
- 8個flags位
- CWR和ECE用作擁塞控制訊號。當TCP接收端收到了來自網路的擁塞指示後,就設定ECE以便給TCP傳送端傳送ECN-Echo訊號,告訴傳送端放慢傳送頻率。TCP傳送端設定CWR,給TCP接收端傳送CWR訊號,這樣接收端就知道傳送端已經放慢速率,不必再給傳送端傳送ECN-Echo訊號。
- URG,如果使用了緊急指標就設定這個flag。
- ACK被設定,表示確認號欄位是有效的。
- PSH被設定,表示這是被PUSH的資料。特此請求接收端一旦收到資料後立即將資料遞交給應用程式,而不是緩衝起來。
- RST用於重置一個已經變得很混亂的連線。
- SYN被用於建立連線過程。在連線請求中,SYN=1和ACK=0;在連線應答中,SYN=1和ACK=1。表示CONNECTION REQUEST和CONNECTION ACCEPTED。
- FIN被設定,表示傳送端已經沒有資料需要傳輸了。用來釋放一個連線。
- 視窗大小欄位指定了從被確認的位元組算起可以傳送多少個位元組。0表示接收端沒有空間存放資料了,希望傳送端停止傳送資料。接收端可以通過傳送一個具有同樣確認號但是非0視窗大小欄位的段來通知傳送端繼續傳送段。
- 校驗和。它校驗的範圍包括頭、資料、以及概念性偽頭,偽頭協議號為TCP(6),校驗和必須強制執行。
- 選項欄位必須32bits的倍數。
- MSS:允許每臺主機指定它願意接受的最大段長
- Window scale:允許傳送端和接收端在連線建立階段協商視窗尺度因子。雙方使用尺度因子將視窗大小欄位向左移位最多14bit。因此允許視窗最大可達2**30個位元組。
- Timestamp:攜帶傳送端發出的時間戳,並被接收端回應。一旦在連線建立階段啟用了它,那麼每個資料包都要包含這個選項。可以用來估計多久之後資料包可以被認為丟失。還可以被用作32位序列號的邏輯擴充套件,根據時間戳丟棄入境段,從而解決序號迴繞的問題。
- SACK(Selective ACK):使得接收端可以告訴傳送端已經接收段的序號範圍,這是對確認號的補充。
TCP連線建立
TCP使用三次握手來建立連線。
為了建立一個連線,某一段(比如伺服器)必須依次執行LISTEN和ACCEPT原語,然後被動地等待入境連線請求。
傳送端(比如客戶端)執行CONNECT原語,同時說明它希望連線的IP地址和埠號、他願意接受的最大TCP段長,以及一些可選的使用者資料(比如口令)等引數。CONNECT原語傳送一個SYN=1,ACK=0的TCP段,然後等待接收端(比如伺服器)的響應。
當這個段到大接收端,那裡的TCP實體檢查是否有一個程式已經等待目標埠欄位指定的埠上執行了LISTEN。如果沒有,則它傳送一個RST=1的應答報文,拒絕客戶的連線請求。如果某個程式在該埠監聽,如果它接收則傳送回一個確認段。
TCP連線釋放
為了釋放一個連線,任何一方都可以傳送一個設定了FIN標誌位的TCP段,這表示它已經沒有資料要傳送了。當FIN段被確認後,這個方向上的連線就被關閉,不再傳送任何資料。然而,另一個方向上或許還在繼續傳送資料。當兩個方向都關閉了之後,連線才算徹底釋放。所以,通常需要2個FIN段和2個ACK段(但第一個ACK可以和第二個FIN在一個段裡)。
雖然TCP通常採用對稱釋放方式來斷開連線,許多Web伺服器給客戶端傳送一個RST段,導致突然關閉連線,這種方式更像非對稱釋放。Web伺服器之所以這麼做,是因為它知道資料交換已經結束,所以它可以給客戶端傳送一個警告,然後驟然關閉連線。如果客戶端收到這樣的警告,它會釋放它的連線狀態;如果沒收到,最終它也會意識到伺服器不再與自己交談,並釋放連線。
參考
相關文章
- 傳輸層協議協議
- 透過Internet與資料鏈路層傳輸資訊時會發生什麼?—Vecloud微雲Cloud
- 計網作業(傳輸層)
- TCP/IP五層模型-傳輸層-TCP協議TCP模型協議
- 傳輸層的七七八八
- 傳輸層協議 TCP 和 UDP協議TCPUDP
- 9、如何理解應用層、傳輸層、網路層、鏈路層、物理層
- LayerZero 如何替換IBC的傳輸層
- 計算機網路(四)傳輸層計算機網路
- 計算機網路之傳輸層計算機網路
- 《計算機網路》傳輸層 (1)計算機網路
- 傳輸層協議、應用層、socket套接字、半連結池協議
- ajax的資料無法傳輸到controller層Controller
- 計算機網路基礎第五講 傳輸層計算機網路
- OSI參考模型詳解之玩轉傳輸層模型
- 傳輸層和網路層的checksum區別,TCP cksum為何包含偽首部TCP
- 計算機網路傳輸層學習筆記---(四)計算機網路筆記
- 資料鏈路層(流量控制與可靠傳輸機制)
- 五、運輸層
- 《計算機網路》第六章:傳輸層(The Transport Layer)計算機網路
- 計算機網路之傳輸層TCP與UDP對比、流量控制、擁塞控制、超時重傳時間的選擇、可靠傳輸計算機網路TCPUDP
- CCNA-Part5 - 傳輸層 ,TCP 為什麼是三次握手?TCP
- 鐳速傳輸:如何快速傳輸大檔案?
- 運輸層協議概述協議
- 鐳速傳輸:安全檔案傳輸的意義
- 【流式傳輸】使用Spring Boot實現ChatGpt流式傳輸Spring BootChatGPT
- 鐳速傳輸淺談TLS 和檔案傳輸TLS
- mongodb核心transport_layer網路傳輸層模組原始碼實現三MongoDB原始碼
- mongodb核心transport_layer 網路傳輸層模組原始碼實現四MongoDB原始碼
- sql 語句網路除錯和 sql 語句低層傳輸檢視SQL除錯
- 安全加密傳輸加密
- 【分段傳輸】c#使用IAsyncEnumerable實現流式分段傳輸C#
- 如何看待鐳速傳輸的Raysync高速傳輸協議?協議
- USB 控制寫傳輸、控制讀傳輸、無資料控制傳輸都是在什麼場景下?
- Minya 分層框架實現的思考(二):構建依賴及資料傳輸框架
- 運輸層 ,跑腿的祕書
- 什麼是極速檔案傳輸,極速檔案傳輸如何進行大檔案傳輸
- 點對點傳輸效率對比測試——鐳速傳輸