SCTP - ianchen0119/Introduce-to-5GC GitHub Wiki

SCTP(Stream Control Transmission Protocol)相關的定義可以在 RFC4960 找到,SCTP 對比 TCP 協定有以下特點:

  • 初始化採用 4-way handshake
  • 結束時採用 3-way handshake
  • 使用 chunck 傳遞資料
  • Multi-homing
  • Multi-streaming
  • SACK(selective acknowledgement)機制
  • Path MTU Discovery
  • Ordered/Unordered 傳輸機制

本篇文章會依據上面列出的特點一一做介紹。

進入正題

SCTP association & termination

參考上圖,SCTP 的初始化採用四向交握的設計,如此一來可以避免 TCP 容易受到服務阻斷攻擊的弱點。再來是 SCTP 使用三向交握的方式結束連線,這樣可以避免 TCP 的半關閉狀態(意即有一方已關閉連線,但是另一方仍繼續傳送資料)。

SCTP Headers

image

Multi-homing

Multi-homing 的特性允許端點與端點之間的連線透過多個網路裝置進行傳遞,當一個 SCTP 連線具有多路徑時(應在 init ack 訊息中表示),SCTP 會選擇其中一個路徑做為資料傳輸的 primary path,其它的路徑作為 backup path。 SCTP 利用 heartbeat 定期檢測各個線路是否存活,當 primary path 中斷或是發生故障時,backup path 便能夠頂替上來加速故障轉移。

上圖為 SCTP init ack 的訊息內容,注意紅匡處的部分,我們可以發現在訊息中帶有多個 ip 位址。

Multi-streaming

image

SCTP multi-streaming 的特性可以大大的提高傳輸速率,在端點之間建立連線時,必須先協調好串流數量,將不同類型的資料分開使用不同的串流進行傳輸。 如果有某一個資料流發生阻塞,其他的資料流也不會受到任何影像,在每一個資料流中的 data chunk 都有各自的 stream sequence number,所以每一個資料流可以分開來管理封包的重送機制。想像一下,如果 http 協定可以基於 SCTP 重新設計,那麼瀏覽網站之前瀏覽器可以讓不同的檔案透過個別的資料流傳輸,大大的降低傳輸時間。

SACK(selective acknowledgement)機制

  • 接收端會發送 sack 訊息給發送端,sack 訊息會乘載所有已經收到的 Transmission Sequence Number(TSN)。
  • Cumulative TSN ack 欄位表示所有資料已經正確的在接收端重組。
  • Gap block 用於表示哪些 data chunk 已經送達、哪些 data chunk 遺失了。

image

以上圖為例:

  • TSN Ack = 29 表示截至 29 為止的 data chunk 都已經正確的被接收。
  • block 1 的 start 以及 end 分別是 3 和 4,表示接收端有收到 TSN 為 32(29+3)與 33(29+4)的 data chunk。
  • block 2 的 start 以及 end 都是 6,表示接收端有收到 TSN 為 35(29+6)的 data chunk。

Path MTU Discovery

MTU(傳輸單元最大值)代表一個裝置可以接受的最大資料封包的大小,如果超過 MTU 限制,那個封包會被切分成多個 segment,等到接收端收到這些被拆分的段落時再進行重組。 而 SCTP 支援 Path MTU discovery 的功能,這樣就可以確保封包在經過 IP layer 時不被分割。

image

圖片出處:https://techhub.hpe.com/eginfolib/networking/docs/switches/5130ei/5200-3942_l3-ip-svcs_cg/content/483572500.htm

上圖為傳統的 MTU discovery 流程圖,相比 TCP 協定,由於 SCTP 還具有 Multi-homing 的特性,在經過每一個 path 時都會取得 PMTU,因此,SCTP 可以從所有蒐集到的 PMTU 選擇一個最小值作為 sMPTU,並且在 SCTP layer 就先行調整 data chunk 的大小再傳入 IP layer,這樣的做法也帶來了更大的傳輸率,因為在 IP layer 進行分割之後,若碰到封包的某一個部分遺失,那麼就會需要將整個 segment 進行重傳。

Ordered/Unordered 傳輸機制

SCTP 支援 Ordered 與 Unordered 的傳輸機制,比起前者,後者不需要依序傳輸,這很好的避免了 Head-of-line blocking 的問題。 Head-of-line blocking 是指當一列的第一個封包在傳輸時受到阻礙,會導致整列的封包受到影響,這個狀況比較常出現在具有 buffering 機制的交換機、或是傳送端的傳輸順序錯亂。

總結

本篇文章簡單的介紹了 SCTP 協定,並且順帶講解了一些網路封包傳輸的概念和專有名詞,會特別介紹這個協定是因為在 EPC 中 MME 與 eNB(S1 interface)以及 5GC 中的 AMF 與 gNB(N2 interface)皆是使用 SCTP 協定進行傳輸。 有意思的是 SCTP 除了電信領域外,幾乎沒有在其他地方被使用,背後的原因主要是 SCTP 比起 TCP 和 UDP 複雜,而且沒有被整合至 TCP/IP 當中,但我們日常使用手機上網時其實會以極高的頻率觸發 SCTP 訊息的傳輸,算是一個為大家默默付出不吭聲的網路協定(?)

References