1. 程式人生 > >運輸層之 TCP 概述 與 可靠傳輸的原理

運輸層之 TCP 概述 與 可靠傳輸的原理

每篇一句:生活需要平滑,但也需要一個方向,不能總是回到起點。  ——《三體 II:黑暗森林》

TCP 概述

1.TCP 介紹

TCP 最主要的特點:

  1. TCP 是 面向連線 的運輸層協議。應用程式在使用 TCP 協議之前,必須先建立連線。在傳輸完資料後,必須釋放已經建立的 TCP 連線

  2. 每一條 TCP 連線只能有 兩個端點,每一條 TCP 連線只能是點對點的( 一對一 )

  3. TCP 提供 可靠交付 的服務。通過 TCP 連線傳送的資料,無差錯. 不丟失. 不重複,並且按序到達

  4. TCP 提供 全雙工通訊。TCP 允許通訊雙方的應用程序在任何時候都能傳送資料。TCP 連線的兩端都設有傳送快取和接受快取,用來存放雙向通訊的資料

  5. 面向位元組流。雖然應用程式和 TCP 的互動是一次一個資料塊( 大小不等 ),但 TCP 把應用程式交下來的資料僅僅看成是一連串的無結構的位元組流

TCP 連線是一條虛連線( 邏輯連線 )。TCP 報文段先要傳送到 IP 層,加上 IP 首部後,再傳送到資料鏈路層。再加上資料鏈路層的首部和尾部後,才離開主機發送給物理鏈路

2.TCP 的連線

每一條 TCP 連線有兩個端點。TCP 連線的端點叫做 套接字 或 插口。埠號拼接到 IP 地址及構成了套接字。表示方法是在點分十進位制的 IP 地址後面寫上埠號,中間用冒號或逗號隔開。

套接字 socket = (IP 地址:埠號)

每一條 TCP 連線唯一地被通訊兩端的兩個端點( 即兩個套接字 ) 所確定。即:

TCP 連線 ::= {socket1, socket2} = {(IP1: port1), (IP1: port2)}

TCP 連線的端點是個抽象的套接字,即(IP 地址:埠號)。同一個 IP 地址可以有多個不同的 TCP 連線,而同一個埠號也可以出現在多個不同的 TCP 連線中

可靠傳輸的工作原理

TCP 傳送的報文段交給 IP 層傳送,但 IP 層只能提供盡最大努力服務,所以 TCP 下面的網路是不可靠的傳輸。

可以使用一些可靠傳輸協議,當出現差錯時讓傳送方重傳出現差錯的資料,同時在接收方來不及處理收到的資料時,及時告訴傳送方適當降低傳送資料的速度。這樣就能實現 可靠傳輸

1.停止等待協議

停止等待 就是 每傳送完一個分組就停止傳送,等待對方的確認。在收到確認後在傳送下一個分組。

1).無差錯情況

上圖是最簡單的無差錯情況。A 傳送分組 M1, 發完就暫停傳送,等待 B 的確認。 B 收到了 M1 就向 A 傳送確認。A 收到了對 M1 的確認後,就再發送下一個分組 M2 。。。

2).出現差錯

上圖是分組在傳輸過程中出現差錯。B 接收 M1 時檢測出現了差錯,就會丟棄 M1。而 A 只要超過了一段時間仍然沒有收到確認,就會重傳前面傳送過的分組 ( 認為剛才傳送的分組丟失了 )。這叫做 超時重傳

這裡應該注意:

  • A 在傳送完一個分組後,必須暫時保留已傳送的分組的副本。只有在收到相應確認後才能清除暫時保留的分組副本
  • 分組和確認分組都必須進行編號。這樣才能明確哪些分組收到確認,哪些沒有收到
  • 超時計時器設定的重傳時間應當比資料在分組傳輸的平均往返時間更長一些

3).確認丟失和確認遲到

上圖是確認丟失情況。B 所傳送的對 M1 的確認丟失了。A 在設定的超時重傳時間內沒有收到確認。在超時計時器到期後會重傳 M1,而 M1 收到分組後會丟棄這個重複的分組 M1,並向 A 傳送確認。

上圖是確認遲到的情況。傳輸過程中沒有出現差錯,但 B 對分組 M1 的確認遲到了,A 會收到重複的確認,但什麼也不做 ( A 對重複的確認會丟棄)。B 仍然會收到重複的 M1 ( 也會丟棄 ),並重傳確認分組。

使用上述的確認和重傳機制,就可以在不可靠的傳輸網路上實現可靠的通訊。

4).通道利用率

停止等待協議優點是簡單,但缺點是通道利用率太低。

傳送方可以採用 流水線傳輸 提高傳輸效率。流水線傳輸就是 傳送方可連續傳送多個分組,不必每發完一個分組就停頓下來等待對方的確認。

2.連續 ARQ 協議

下圖表示傳送方維持的傳送視窗,位於傳送視窗內的分組都可連續傳送出去,而不需要等待對方的確認,以提高通道利用率

連續 ARQ 協議規定:傳送方每收到一個確認,就把傳送視窗向前滾動一個分組的位置。

接收方採用累積確認的方式,接收方不必對收到的分組逐個傳送確認,而是在收到幾個分組後,對按序到達的最後一個分組傳送確認。

累計確認優缺點:

  • 優點: 容易實現,即使確認丟失也不必重傳
  • 缺點:不能向已傳送方反映出接收方已經正確收到的所有分組的資訊

寫在最後

如果有任何問題,歡迎交流學習。