精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SCTP流控制傳輸協議簡析

SDNLAB ? 來源:云物互聯 ? 2023-07-25 10:02 ? 次閱讀

SCTP

SCTP(Stream Control Transmission Protocol,流控制傳輸協議,RFC 2960、RFC 3286、RFC 3309)是一個 IP 協議之上的、可靠的、面向控制信令的、傳輸層協議。SCTP 可以在 “盡力而為(無連接、不可靠)” 的 IP 網絡之上為電信級信令傳輸提供高效、可靠的信令傳輸服務,例如 5GC 中的 N2 接口就使用了 SCTP 協議。 SCTP 的誕生是為了彌補 TCP/UDP 在電信網絡控制信令傳輸場景中的不足,它們都難以完全滿足在電信網絡中信令承載的要求。包括:

UDP 是一種無連接的不可靠傳輸協議,自然無法滿足信令對傳輸質量的要求。

TCP 雖然是一種基于連接的可靠傳輸協議,但同時也具有隊頭阻塞、實時性差、支持多歸屬困難、易受 DDOS(拒絕服務)攻擊的缺陷。

為了解決 TCP/UDP 協議在傳輸實時信令時所面臨的不可靠傳輸和時延等問題,SCTP 協議設計了以下的核心特性,包括:

適當的擁塞控制;

防止泛濫和偽裝攻擊;

更優的實時性能;

多屬主(Multi-homing)特性支持;

多流(Multi-streaming)特性支持;

等等。

676ff96e-2a10-11ee-a368-dac502259ad0.png

SCTP 與 TCP 的區別

和 TCP 類似,SCTP 是面向連接、端到端、全雙工、帶有流量和擁塞控制的可靠傳輸協議。數據可靠傳輸都是通過確認機制來實現的,與 TCP 的區別是:

TCP 是以字節為單位傳輸的,SCTP 是以數據塊為單位傳輸的。

TCP 通常是單路徑傳輸,SCTP 可以多路徑傳輸。

TCP 的兩端都只能用一個 IP 來建立連接,連接建立之后就只能用這一對 IP 來相互收發消息。如果這一對 IP 之間的路徑出了問題,那這條 TCP 連接就不可用了;而 SCTP 的兩端都可以綁定到多個 IP 上,只要有其中一對 IP 能通,這條 SCTP 連接就還可以用。這就是 SCTP 的多宿主機制。

TCP 是單流的有序傳輸,SCTP 可以多流獨立有序/無序傳輸。這就是 SCTP 的多流機制。

TCP 連接的建立過程需要三步握手,SCTP 連接的建立過程需要四步握手。

SCTP 有 Heartbeat(心跳)機制來管理路徑的可用性。

SCTP 與 QUIC 的區別

SCTP 在 WebRTC 上已有基于 UDP 的實現,但 SCTP/UDP 與 QUIC/UDP 相比還不夠好:

沒有解決數據流的隊頭阻塞問題。

連接建立時需要決定數據流的數量。

沒有穩固的 TLS 安全性支持。

建立連接時候需要 4 次握手,而 QUIC 一次都不用(0-RTT)。

QUIC 是類 TCP 的字節流,而 SCTP 是信息流(message-based)。

QUIC 連接支持 IP 地址遷移,SCTP 不行。

SCTP 的基本概念

主機(Host)和端點(Endpoint)

主機(Host)就是具有一個或多個 IP 地址的計算機,是一個物理概念;

端點(Endpoint)就是一個 SCTP Endpoint,是一個邏輯概念,作為 SCTP 協議收/發的兩端。

SCTP Endpoint 有一個 L4 傳輸層端口號(Port)和若干個 L3 網絡層 IP 地址組成(通常是 2 個 IP 地址),但一個 SCTP Endpoint 所含有的若干個 IP 地址必須使用同一個相同的 Port。

678f8bee-2a10-11ee-a368-dac502259ad0.png

多宿主(Multi-homing)

SCTP Endpoint(具有多個 IP 地址)是 SCTP 多宿主特性的基礎,一個 SCTP Endpoint 可能有多個冗余的 IP 網絡連接。當不同 Hosts 之間的 SCTP Endpoint 建立了一個偶聯之后,如果它的某個 IP 網絡連接發生故障了,SCTP 就可以通過切換到另一個 IP 地址來避免業務中斷。是一種類似于主備的高可用思想。 如下圖所示,我們可以配置 “雙宿主” 模式。

67cc3738-2a10-11ee-a368-dac502259ad0.png

通路(Path)和首選通路(Primary Path)

多宿主特性提高了網絡的容錯能力,這也引出了另一對概念:通路(Path)和首選通路(Primary Path)。 如果 Receiver 是多宿主的,那么對于 Sender 來說每一個 Receiver 的 IP 地址就代表著一條通往對端的 Path,這樣 Sender 可以選擇任一條 Path 來發送數據。

SCTP 規定任何時間都有一條路徑作為 Primary Path 來發送數據,其他路徑作為 Backup Path。如果 Primary Path 因接口故障或者網絡擁塞等原因而失效,SCTP 可以自動切換到另外一條 Path 來發送,避免單點失效,從而提高整個關聯的容錯能力。

6813e9ca-2a10-11ee-a368-dac502259ad0.png

偶聯(Association)

SCTP 使用 “偶聯” 一詞替代 TCP 的 “連接” 是為了避免內涵的混淆:一個連接只涉及兩個 IP 地址間的通信。 SCTP 協議規定在任何時刻,2 個 SCTP Endpoint 之間能且僅能建立一個偶聯,它可能因為 SCTP 的多宿主特性而涉及若干個 IP 地址。

SCTP 支持多種網絡協議,當 SCTP 在 IP 網絡上運行時,Local IP 地址、Local SCTP Port 號、Remote IP 地址、Remote SCTP Port 號等 4 個參數,可以唯一標識一個 SCTP 偶聯。 SCTP 的偶聯需要通過 4 次握手建立。相對于 TCP 的 3 次握手建立連接,SCTP 的偶聯能夠抵御 DoS 攻擊,從而提高了安全性。數據只有在建立偶聯之后與關閉偶聯之前才可發送。SCTP 偶聯通過 3 次握手關閉,不支持類似 TCP 的半關閉連接。也就是在任何一方關閉偶聯后,對方即不再發送數據。

683b7c6a-2a10-11ee-a368-dac502259ad0.png

傳輸控制塊(TCB)

TCB(Transmission Control Block,傳輸控制塊)是 SCTP 內部的數據結構,是一個 SCTP Endpoint 為其他 Endpoint 之間已經建立的每 個偶聯生成的。TCB 包括 Endpoint 的所有狀態、操作信息,便于維護和管理相應的偶聯。

多流(Multi-streaming)

一個 SCTP 偶聯中的 Stream(流)用來表示需要按順序遞交到高層協議的用戶消息序列,在同一個 Stream 中的 Msg 需要按照其順序進行遞交。嚴格地說,Stream 就是一個 SCTP 偶聯中,從一個 Endpoint 到另一個 Endpoint 的單向邏輯通道。一個偶聯是由多個單向的 Stream 組成的。

Multi-streaming 是 SCTP 協議的另一個關鍵特性,主要解決了 TCP 隊頭擁塞的問題。在一個 SCTP 偶聯中,各個 Stream 之間相對獨立,使用 Stream ID 進行標識。在同一 Stream 內發送的消息有序,而不同 Stream 之間的消息無序,因此不同 Stream 之間的消息傳輸是相對獨立的,每個 Stream 可以單獨發送數據而不受其他流的影響。

一個 SCTP 偶聯中可用的 Stream 的數量是在建立 SCTP 偶聯時由雙方端點協商決定的,但一個 Stream 只能屬于一個 SCTP 偶聯。SCTP 報文會在不同的 Stream 內發送,這也是 “流控制傳輸協議“ 名稱的由來。

68636d4c-2a10-11ee-a368-dac502259ad0.png ?

每個 Stream 上某個 Msg 的丟失不會阻塞同一關聯其他 Stream 上消息的投遞。這種做法正好與 TCP 相反,就 TCP 而言,在單一字節流中任何位置的字節丟失都將在阻塞該連接上其后所有數據的遞送,直到該丟失被修復為止。SCTP 在某一個 Stream 內由于數據傳輸失敗而引起的阻塞不會影響其他 Stream 的消息遞交,多流特性可以幫助解決 TCP 中的隊頭阻塞(HOL)問題。

這一點與 HTTP/2 協議非常類型。因為 TCP 傳輸是按字節嚴格有序的,先行傳送的字節如果丟失或損壞,即使后續的字節正確地被接收到也不能向上層遞交,必須在接收端緩沖起來,直到先行字節由于重傳而全部正確接收到后才可以提交,并且釋放緩沖區。

傳輸順序號(TSN)和流順序號(SSN)

TSN(Transmission Sequence Number):SCTP 使用 TSN 機制實現數據的確認傳輸。一個偶聯的發送端為發送的每個數據塊順序分配一個基于初始 TSN 的 32 位順序號,以便接收端進行確認。TSN 是基于偶聯進行維護的。

SSN(Stream Sequence Number):SCTP 為一個偶聯的發送端中的一個流中發送的每個數據塊順序分配一個 16 位 SSN,以便保證流 內的順序傳遞。在偶聯建立時,所有流中的 SSN 都是從 0 開始。當 SSN 到達 65535 后,則接下來的 SSN 為 0。

TSN 和 SSN 的分配是相互獨立的。此外,SCTP 還定義了無序消息。如果消息帶有無序標志,則不論它在哪個流中(在具體實現中,數據塊中的 Steam ID 不被解析),只要被正確接收,都提交給 ULP,從而實現和流無關的無序遞交,具有更好的靈活性。

SCTP 的報文格式

一個 SCTP 報文包含了一個 Common Header(公共報頭)和若干個 Chunk(數據塊),每 個數據塊中既可以包含控制信息,也可以包含用戶數據。

68821364-2a10-11ee-a368-dac502259ad0.png

INIT 數據塊的報文中必須為 0。

含 SHUTDOWN-COMPLETE 數據塊且設置了 T 比特的報文中,驗證標簽必須要從包含 SHUTDOWN-ACK 數據塊的報文中復制。

含 ABORT 數據塊的報文中,驗證標簽必須要從觸發這個 ABORT 發送的報文中復制。

0:凈荷數據(DATA)

1:啟動(INIT)

2:啟動證實(INIT ACK)

3:選擇證實(SACK)

4:Heartbeat 請求(HEARTBEAT)

5:Heartbeat 證實(HEARTBEAT ACK)

6:中止(ABORT)

7:關閉(SHUTDOWN)

8:關閉證實(SHUTDOWN ACK)

9:操作差錯(ERROR)

10:狀態 Cookie(COOKIE ECHO)

11:Cookie 證實(COOKIE ACK)

12:為明確擁塞通知響應(ECNE)預留

13:為降低擁塞窗口(CWR)預留

14:關閉完成(SHUTDOWN COMPLETE)

15-62:IETF 預留

63:IETF 定義的數據塊擴展

64-126:IETF 預留

127:IETF 定義的數據塊擴展

128-190:IETF 預留

191:IETF 定義的數據塊擴展

192-254:IETF 預留

255:IETF 定義的數據塊擴展

Source Port Number(源端口號):接收方可以使用源端口號、源 IP 地址、目的端口號和目的 IP 地址標識該 SCTP 報文所屬的偶聯。

Destination Port Number(目的端口號):接收方可以使用目的端口號將 SCTP 報文復用到正確的端點或應用中。

Verification Tag(驗證標簽):偶聯建立時,本端端點為這個偶聯生成一個隨機標識。偶聯建立過程中,雙方會交換這個 Tag,到了數據傳遞時,發送端必須在 Common Header 中帶上對端的這個 Tag,以備校驗。

Checksum:SCTP 通過對用戶數據使用 ADLER-32 算法,計算出一個 32 位的校驗碼,帶在數據報文中,在接收端進行同樣的運算,通過檢查校驗碼是否相等來驗證用戶數據是否遭到破壞。

Chunk Type:定義塊值(Chunk Value)中消息所屬的類型。包括:INIT、INIT ACK、 SACK、ABORT、ERROR、SHUTDOWN、COOKIE ACK 等 13 種數據塊類型。該參數的取值范圍為 0~254,255 留作今后的擴展。數據塊類型字段的編碼分配如下:

另外,Chunk type 的高兩位 bit 指示了接收端不認識對應的 Chunk type 的處理原則:

00:停止處理數據報并丟棄,不再處理報中的其他 Chunk。

01:與 00 相同處理外,還要在 ERROR 或 INIT ACK 中上報,原因為不認識的參數類型。

10:忽略該 Chunk,繼續處理數據報中的其他 Chunk。

11:同 10 相同處理外,還要在 ERROR 中上報,原因為不認識的 Chunk 類型。

SCTP 的數據傳輸方式

從 SCTP 的報文格式可以看出 SCTP 是通過傳輸 Chunk 來傳輸數據的。對比 TCP 傳輸的數據方式:TCP 接收端確認的是收到的字節數(TCP 基于數據流進行數據傳輸),SCTP 接收端確認的是接收到的數據塊(SCTP 基于數據塊進行數據傳輸)。

SCTP 的數據塊(Data Chunk)通常會攜帶應用的一個數據報文,或者說是應用要發送的一個消息(Message)。 在實際的應用中,TCP 發送方的可以將應用程序需要發送的多個消息打包到一個 TCP 數據報文中發出。比如,應用程序連續調用兩次 send() 向對端發送兩條消息,TCP 協議可能把這兩條消息都打包放在同一個 TCP 數據報文中。接收端在收到這個 TCP 報文時,回給對端的 ACK 只是表明自己接收到了多少個字節,TCP 協議本身并不會把收到的數據重新拆散分成兩條應用層消息并通知應用程序去接收。

事實上,應用程序可能只需要調用一次 receive(),就會把兩條消息都收上來了,然后應用需要根據應用程序自己定義的格式去拆成兩條消息。 與 TCP 不同,SCTP 是將應用程序每次調用 sendmsg() 發送的數據當作一個整體,放到一個 Data Chunk,接收端也是以 Data Chunk 為單位接收數據,并重新組包,通知應用程序接收。

通常,應用程序每次調用 recvmesg() 都會收到一條完整的消息。在 SCTP 的發送端,多條短的應用層消息可以被 SCTP 協議打包放在同一個 SCTP 報文中,此時在 SCTP 包中可以看到多個 Data Chunk。另一方面,一條太長(比如,超過了路徑 MTU)的應用層消息也可能被 SCTP 協議拆分成多個片段,分別放在多個 Data Chunk 并通過不同的 SCTP 報文發送給對端。這兩種情況下,SCTP 的接收端都能重新組包,并通知應用程序去接收。

數據庫(Data Chunk)格式

68a458e8-2a10-11ee-a368-dac502259ad0.png ?

這里重點關注 Chunk Type=0 的數據塊:

Reserved:預留,應當設置為全 0,在接收方忽略。

U(比特):非順序比特。如果該比特設置為 1,則指示這是一個非順序的數據塊,不需要給該數據塊分配流順序號碼,所有接收方必須忽略流順序號碼。在重新組裝完成后(如果需要),非順序的數據塊不需要嘗試任何重新排序的過程,可以由接收方直接遞交到高層;如果一個非順序的用戶消息被分段,則消息的每個分段中的 U 比特必須被設置為 1。

B(比特):分段開始比特。如果該比特被設置,則表示這是用戶消息的第一個分段。

E(比特):分段結束比特。如果該比特被設置,則指示這是用戶消息的最后一個分段。一個未分段的用戶消息應當把所有的 B 和 E 比特設置為 1。如果 B 和 E 比特都設置為 0,則表明這是一個分段的用戶消息的一個中間分段。當用戶消息被分段到多個數據塊中,接收方需要使用 TSN 對消息進行重組,這意味著給分段的用戶消息的每個分段都必須要使用連續的 TSN。

B、E 比特的取值含義如下:

0 表示高層未對該協議凈荷規定應用標識符。

M2UA 協議凈荷使用編碼 2。

M3UA 協議凈荷使用編碼 3。

SUA 協議凈荷使用編碼 4。

M2PA 協議凈荷使用的編碼待定。

B=1、E=0:用戶消息的第 1 個分片。

B=0、E=0:用戶消息的中間分片。

B=0、E=1:用戶消息的最后一個分片。

B=1、E=1:未分片的消息。

Length:表示數據塊從類型字段開始到用戶數據字段結束之間的字節數,但不包含任何填充字節,如果數據塊的用戶數據字段為 0,則長度字段設為 16。

TSN:TSN 的值達到 4294967295 后將回轉到 0。

Stream Identifier S:表示用戶數據屬于的流。

Stream Sequence Number n:表示所在流中的用戶數據的順序號碼。有效值為 0~65535。當一個用戶消息被 SCTP 分段后,則必須在消息的每個分段中都帶有相同的流順序號碼。

Payload Protocol Identifier:表示一個應用(或上層協議)特定的協議標識符。這個值由高層協議傳遞到 SCTP,并發送到對端。這個標識符不由 SCTP 使用,但卻可以由特定的網絡實體或對等的應用來識別在數據塊中攜帶的信息類型。甚至在每個分段的數據塊中也應包含該字段(以確保對網絡中間的代理可用)。

User Data:用來攜帶用戶數據凈荷。該字段必須被填充為 4 字節的整數,發送方填充的字節數應不超過 3 個字節,接收方忽略所有的填充字節。

68cdc728-2a10-11ee-a368-dac502259ad0.png ?

在實際開發時,需要注意在同一 SCTP 報文中對多個 DATA CHUNK 的處理。例如:如果為每個長度很短的用戶數據都帶上一個很大 SCTP Header,其傳遞效率比如會很低。因此,SCTP 協議至此將幾個用戶數據(容量足夠的前提下)捆綁到一個 SCTP 報文里面傳輸,以提高帶寬的利用率。這就是所謂的用戶消息捆綁。

SCTP 用戶能夠可選地使用捆綁功能,決定是否將多個用戶數據報捆綁在一個 SCTP 分組中。但為提高效率,在擁塞/重發時,捆綁功能可能仍被執行,即使用戶已經禁止捆綁了。這是開發時需要注意的地方,稍不留神就可能漏掉了用戶數據。

SCTP 基本信令流程

偶聯的建立和發送流程

6913c2c8-2a10-11ee-a368-dac502259ad0.png ?

上圖為 SCTP EndpointA 啟動建立偶聯,并向 EndpointB 發送一個用戶消息,隨后 EndpointB 向 EndpointA 發送 兩個用戶消息的信令流程(假定這些消息沒有捆綁和分段)。

啟動標簽(nitiate Tag):對端驗證標簽,如設為 Tag_A。Tag_A 是從 1 到 4294967295 中的一個隨機數。

輸出流數量(OS):本端點期望的最大出局流的數量。

輸入流數量(MIS):本端點允許入局流的最大數量。

目的地 IP 地址:設置成 INIT 數據塊的起源 IP 地址。

啟動標簽(Initiate Tag):設置成 Tag_B。

狀態 COOKIE(STATE COOKIE):根據偶聯的基本信息生成一個 TCB,不過這個 TCB 是一個臨時 TCB。這個 TCB 生成以后,將其中的必要信息(包含一個 COOKIE 生成的時間戳、COOKIE 的生命期)和一個本端的密鑰通過 RFC2401 描述的算法計算成一個32 位 的摘要 MAC(這種計算是不可逆的)。必要信息和 MAC 組合成 STATE COOKIE 參數。

本端點傳送地址。

最大入局流的數量。

最大出局流的數量。

TSN:DATA 數據塊的初始 TSN。流標識符(Stream Identifier):用戶數據屬于的流,假設流標識符為 0。流順序碼(Stream Sequence Number):所在流中的用戶數據的順序號碼。該字段從 0 到 65535。用戶數據(User Data):攜帶用戶數據凈荷。

累積證實 TSN 標簽(Cumulative TSN Ack):EndpointA 的初始 TSN。間隔塊(Gap Ack Block):此值為 0。EndpointA 收到 SACK 數據塊后,停止 T3-RTX 定時器

TSN:EndpointB 發出 DATA 數據塊的初始 TSN。

流標識符(Stream Identifier):用戶數據屬于的流,假設流標識符為 0。

流順序碼(Stream Sequence Number):所在流中的用戶數據的順序號碼。假設流 順序碼為 0。

用戶數據(User Data):攜帶用戶數據凈荷。

TSN:EndpointB 發出 DATA 數據塊的初始 TSN+1。

流標識符(Stream Identifier):用戶數據屬于的流,假設流標識符為 0。

流順序碼(Stream Sequence Number):所在流中的用戶數據的順序號碼。此時流順序碼為 1。

用戶數據(User Data):攜帶用戶數據凈荷。

累積證實 TSN 標簽(Cumulative TSN Ack):EndpointB 的初始 TSN。

間隔塊(Gap Ack Block)此值為 0。

EndpointA 創建一個數據結構 TCB(傳輸控制塊)來描述即將發起的這個偶聯(包含偶聯的基本信息),然后向 EndpointB 發送 INIT 數據塊。INIT 數據塊中主要包括如下參數:

EndpointB 收到 INIT 消息后,立即用 INIT ACK 數據塊響應。INIT ACK 數據塊中必須帶有如下參數:

EndpointA 收到 INIT ACK 后,首先停止 INIT,離開 COOKIE-WAIT 狀態, 然后發送 COOKIE ECHO 數據塊,將收到 INIT ACK 數據塊中的 STATE COOKIE 參數原封帶回。最后 EndpointA 啟動 COOKIE 定時器并進入 COOKIE-ECHOED 狀態。

EndpointB 收到 COOKIE ECHO 數據塊后,進行 COOKIE 驗證。將 STATE COOKIE 中的 TCB 部分和本端密鑰根據 RFC2401 的 MAC 算法進行計算,得出的 MAC 和 STATE COOKIE 中攜帶的 MAC 進行比較。如果不同則丟棄這個消息;如果相同,則取出 TCB 部分的時間 戳,和當前時間比較,看時間是否已經超過 了COOKIE 的生命期。如果是,同樣丟棄;否則根據 TCB 中的信息建立一個和 EndpointA 的偶聯。EndpointB 將狀態遷入 ESTABLISHED,并發出 COOKIE ACK 數據塊。EndpointB 向 SCTP 用戶發送 SCOMMUNCIATION UP 通知。

EndpointA 向 EndpointB 發送一個 DATA 數據塊,啟動 T3-RTS 定時器。DATA 數據塊中必須帶 有如下參數:

EndpointB 收到 DATA 數據塊后,返回 SACK 數據塊。SACK 數據塊中必須帶有如下參數:

EndpointB 向 EndpointA 發送第一個 DATA 數據塊。DATA 數據塊中必須帶有如下參數:

EndpointB 向 EndpointA 發送第二個 DATA 數據塊。DATA 數據塊中必須帶有如下參數:

EndpointA 收到 DATA 數據塊后,返回 SACK 數據塊。SACK 數據塊中必須帶有如下參數:

偶聯關閉流程

當一個 Endpoint 退出服務時,需要停止它的偶聯。偶聯的停止使用兩種流程:

偶聯的中止流程(非正常關閉):可以在任何未完成期間進行,偶聯的兩端都舍棄數據并且不提交到對端。此種方法不考慮數據的安全。偶聯的中止步驟比較簡單:發起端點向對端端點發送 ABORT 數據塊,發送的 SCTP 分組中必須填上對端端點的驗證標簽,而且不在 ABORT 數據塊中捆綁任何 DATA 數據;接收端點收到 ABORT 數據塊后,進行驗證標簽的檢查。如果驗證標簽與本端驗證標簽相同,接收端點從記錄上清除該偶聯,并向 SCTP 用戶報告偶聯的停止。

偶聯的正常關閉流程:任何一個端點執行正常關閉程序時,偶聯的兩端將停止接受從其 SCTP 用戶層發來的新數據,并且在發送或接收到 SHUTDOWN 數據塊時,把分組中的數據遞交給 SCTP 用戶。偶聯的關閉可以保證所有兩端的未發送、發送未證實數據得到發送和證實后再終止偶聯。

6971bd60-2a10-11ee-a368-dac502259ad0.png ?

偶聯的正常關閉步驟如下:

偶聯關閉發起 EndpointA 的 SCTP 用戶層向 SCTP 發送請求 SHUTDOWN 原因。SCTP 偶聯從 ESTABLISHED 狀態遷入 SHUTDOWN-PENDING 狀態。在這個狀態,SCTP 不接受 SCTP 用戶在這個偶聯上的任何數據發送請求。同時等待 EndpointA 所有發送未證實的數據得到 EndpointB 的證實。當所有 EndpointA 發送未證實數據得到證實,則向 EndpointB 發送 SHUTDOWN 數據塊。EndpointA 啟動 T2-shutdown 定時器進入 SHUTDOWN-SENT 狀態。啟動 T2-shutdown 定時器的目的是等待 EndpointB 發回的 SHUTDOWN-ACK 數據塊,如果定時器超時,則 EndpointA 必須重新發送 SHUTDOWN 數據塊。

EndpointB 收到 SHUTDOWN 消息后,進入 SHOUTDOWN-RECEIVED 狀態,不再接收從 SCTP 用戶發來的的新數據,并且檢查數據塊的累積 TSN ACK 字段,驗證所有未完成的 DATA 數據塊已經被 SHUTDOWN 的發送方接收。當 EndpointB 所有未發送數據和發送未證實 數據得到發送和證實后, 發送 SHUTDOWN ACK 數據塊并啟動本端 T2-SHUTDOWN 定時器,并且進入 SHUTDOWN-ACK-SENT 狀態。如果定時器超時了,EndpointB 則重新發送 SHUTDOWN ACK 數據塊。

EndpointA 收到 SHUTDOWN ACK 消息后,停止 T2-shutdown 定時器,并且向 EndpointB 發送 SHUTDOWN COMPLETE 數據塊,并清除偶聯的所有記錄。EndpointB 收到 SHUTDOWN COMPLETE 數據塊后, 驗證是否處于 SHUTDOWN-ACK-SENT 狀態。如果不是處于該狀態,則丟棄該數據塊;如果端點處于 SHUTDOWN-ACK-SENT 狀態,EndpointB 則停止 T2- shutdown 定時器并清除偶聯的所有記錄,進入 CLOSED 狀態。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接收機
    +關注

    關注

    8

    文章

    1180

    瀏覽量

    53408
  • ACK
    ACK
    +關注

    關注

    0

    文章

    28

    瀏覽量

    11134
  • SCTP協議
    +關注

    關注

    0

    文章

    3

    瀏覽量

    6668
  • TCP通信
    +關注

    關注

    0

    文章

    146

    瀏覽量

    4217
  • TLS
    TLS
    +關注

    關注

    0

    文章

    44

    瀏覽量

    4245

原文標題:網絡協議: SCTP 流控制傳輸協議

文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TCP和UDP協議

    。二、TCP編程模型傳輸控制協議TCP (Transmission Control Protocol)是一種面向連接、可靠的協議。建立一個TCP連接,需要服務器和客戶機進行3次握手。而
    發表于 12-15 08:13

    APB接口協議的讀寫傳輸及工作流程

    查閱APB協議官方文檔該APB slave模塊只是對一些控制和狀態寄存器進行讀寫,無等待傳輸同時不生成傳輸錯誤信號。
    發表于 04-07 10:18

    Linux內核網絡之網絡層發送消息之IP分片

    1、Linux內核網絡之網絡層發送消息之IP分片本文分析下ip的分片。行 IP 分片。IP分片通常發生在網絡環境中,比如1個B環境中的MTU為500B,若的數據長度超過
    發表于 07-20 15:34

    基于SCTP 協議的偶聯管理系統設計

    在通信網絡一切基于IP 的驅動下,SCTP傳輸協議)在通信控制領域的應用變得越來越廣泛,保證SCT
    發表于 08-31 10:24 ?20次下載

    SigTran在3G組網中的應用

    【摘要】信令傳輸(SigTran)協議簇是由IETF的SigTran工作組制定的一系列協議,包括控制
    發表于 10-22 10:40 ?15次下載

    基于ATM理念的UTRAN傳輸架構

    基于ATM理念的UTRAN傳輸架構:UTRAN(UMTS無線接入網)系統傳輸網承載其內部業務傳送及至CN(核心網)側的業務匯聚功能,考慮3G網絡內,話音、媒體
    發表于 10-22 10:49 ?15次下載

    基于SCTP協議的偶聯管理系統設計

    在通信網絡一切基于IP 的驅動下,SCTP傳輸協議)在通信控制領域的應用變得越來越廣泛,保證SCT
    發表于 12-30 14:28 ?5次下載

    控制傳輸協議(SCTP),SCTP的結構和內容是什么?

    控制傳輸協議(SCTP),SCTP的結構和內容是什么? 隨著IP網向多業務網的發展,尤其是近
    發表于 03-20 15:08 ?7183次閱讀

    BGA封裝技術與質量控制

    BGA封裝技術與質量控制   SMT(Surface Mount Technology)表面安裝技術順應了電子產品小型化、輕型化的潮流趨勢,為實現電子
    發表于 03-30 16:49 ?1474次閱讀

    傳輸控制協議(TCP)/網絡層協議是什么意思

    傳輸控制協議(TCP)/網絡層協議是什么意思 傳輸控制協議
    發表于 04-06 16:44 ?2744次閱讀

    SCTP在軍事通信網絡中的應用研究

    SCTP是INTERNET標準化組織提出的一個新的傳輸協議,是新一代構架于IP層之上的提供可靠傳輸的通用IP傳輸
    發表于 03-15 22:26 ?15次下載

    鼠標HID例程(中)

    鼠標 HID 例程 緊接《鼠標 HID 例程(上)》一文,繼續向大家介紹鼠 標 HID 例程的未完的內容。
    發表于 07-26 15:18 ?0次下載

    5G AAU 功放控制和監測模塊

    5G AAU 功放控制和監測模塊
    發表于 10-28 12:00 ?2次下載
    5G AAU 功放<b class='flag-5'>控制</b>和監測模塊<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    AFE8092幀同步特性

    AFE8092幀同步特性
    的頭像 發表于 08-24 13:37 ?628次閱讀
    AFE8092幀同步特性<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    讓“可靠”變得“更快更安全”的數據傳輸協議SCTP

    SCTP(Stream Control Transmission Protocol,傳輸協議)的出現,并不是萬丈高樓平地起,而是站在TCP這個巨人肩膀上,讓數據
    的頭像 發表于 12-28 17:25 ?1351次閱讀
    讓“可靠”變得“更快更安全”的數據<b class='flag-5'>傳輸</b><b class='flag-5'>協議</b>:<b class='flag-5'>SCTP</b>