簡介
本檔案介紹Cisco MME中的SCTP分段和區塊繫結機制,以及分段和繫結如何影響封包捨棄。
必要條件
需求
本文件沒有特定需求。
採用元件
本文中的資訊係根據以下軟體和硬體版本:
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
串流控制傳輸通訊協定(SCTP)是一種可靠的傳輸通訊協定,可在無連線封包網路(例如IP)之上運作。 它可以將資料分段以符合發現的路徑MTU大小,並使用區塊繫結將多個使用者消息捆綁到單個SCTP資料包中。本文提供兩種方法來修正由於路徑MTU限制而發生的封包捨棄。
案例研究顯示了分段和捆綁機制以及演示資料包丟棄的方法,包括發生在Cisco MME外部的丟包,而不是由於SCTP最大MTU大小的配置。
根據RFC 4960(串流控制傳輸通訊協定)6.9(分段和重組):
如果終端支援分段,如果要傳送的使用者消息的大小導致出站SCTP資料包大小超過當前MTU,則終端必須對使用者消息進行分段。
此外,可以將多個SCTP資料塊捆綁到一個出站SCTP資料包中。生成的IP資料包的總大小(包括SCTP資料包和IP報頭)必須小於或等於當前路徑MTU。在MME上,在正在處理這些封包的IP介面上設定路徑MTU。
分段
一個SCTP關聯中可以有多個流,每個流都由流識別符號(SI)標識。 串流序號(SSN)用於識別特定SCTP串流中每個片段的順序。多個會話可以使用同一個SCTP流。傳輸序號(TSN)標識整個SCTP關聯內每個片段的順序。
分段後,SCTP負載資料區塊在B和E欄位中指示該片段是開始片段、中間片段還是結束片段:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0 | Reserved|U|B|E| Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TSN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream Identifier S | Stream Sequence Number n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Protocol Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ \
/ User Data (seq n of Stream S) /
\ \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
B E Description
============================================================
| 1 0 | First piece of a fragmented user message |
+----------------------------------------------------------+
| 0 0 | Middle piece of a fragmented user message |
+----------------------------------------------------------+
| 0 1 | Last piece of a fragmented user message |
+----------------------------------------------------------+
| 1 1 | Unfragmented message |
============================================================
| Table 1: Fragment Description Flags |
============================================================
流序列號中的間隙可能表示正在丟棄流或關聯中的片段。Wirshark過濾器可幫助識別SCTP流中的間隙:
sctp.sack_gap_block_start or sctp.sack_gap_block_end
SCTP區塊繫結
可以將多個資料塊捆綁到一個SCTP資料包中(最大大小為MTU),但INIT、INIT ACK和SHUTDOWN COMPLETE資料塊除外:
An SCTP packet is composed of a common header and chunks. A chunk
contains either control information or user data.
The SCTP packet format is shown below:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Common Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk #n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
每個SCTP資料塊的塊長度列在每個資料塊中:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk Type | Chunk Flags | Chunk Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ \
/ Chunk Value /
\ \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
影響規模調整的配置
SCTP-Param-Template SCTP MTU大小
在SCTP-Param-Template中,SCTP-Max-MTU-Size是使用sctp-max-mtu-size 選項和/或sctp-start-mtu-size 選項配置的,以位元組為單位。1500位元組是預設的SCTP最大MTU大小和預設SCTP開始MTU大小:
Exec > Global Configuration > SCTP Parameter Template Configuration
[Local]ASR5500-2# sctp-param-template template_name
[Local]ASR5500-2(sctp-param-template)# sctp-max-mtu-size 1500
[Local]ASR5500-2(sctp-param-template)# sctp-start-mtu-size 1500
在MME服務中,SCTP-Param-Template與MME上下文相關聯:
Exec > Global Configuration > Context Configuration > MME Service
[mme]ASR5500-2(config-mme-service)# associate sctp-param-template S1_MME_SCTP
MME內容乙太網路介面組態
MME服務要使用的介面設定為與所需IP MTU大小一起設定(預設值為1500):
Exec > Global Configuration > MME Context Configuration
[mme]ASR5500-2(config-ctx)# interface int1/10_s1mme
[mme]ASR5500-2(config-if-eth)# ip address
[mme]ASR5500-2(config-if-eth)#
ip mtu 2000
[mme]ASR5500-2(config-if-eth)# exit
S1AP UE無線電功能IE大小
在MME服務配置中,配置S1AP UE無線電功能IE消息大小。預設值為9000位元組:
[context_name]host_name(config-mme-service)#
s1-mme ue-radio-cap size 9000
案例研究
以下是分段初始上下文設定請求/UE功能資訊消息的示例,該消息會將SCTP分段以滿足配置的SCTP最大MTU大小。
在使用者中,在傳輸SCTP分段的INITIAL CONTEXT SETUP REQUEST消息後,從傳輸路由器向MME返回ICMP消息「需要分段」。

在幀5中,多個SCTP資料包(2)匯聚在一個IP資料包下:

第一個資料塊是分段消息的最後一個段,由E-Bit資訊元素中的1標籤表示。

第二個資料塊不是分段消息的一部分,因為由B位和E位資訊元素標籤了數字1:

第一個SCTP資料塊的長度是1383位元組。第二個SCTP資料塊的長度為89個位元組,因此每個SCTP資料包不會超過已配置的SCTP-Max-MTU-Size(1500個位元組):

由於產生的IP資料包的總大小(包括SCTP封包和IP標頭)小於已設定的IP MTU大小(2000),因此這些SCTP區塊在MME上的IP堆疊層級分組在一個IP封包中。
解決方案
在預設值為9000位元組的配置中,允許S1AP UE無線電功能IE消息大小。分段必須在SCTP層進行,以便在小於配置的SCTP最大MTU大小1500的級別傳送這些消息。
sctp-max-mtu-size is 1500表示傳輸的任何SCTP資料包都不超過1500位元組。
IP介面MTU大小為2000表示任何IP封包不能超過2000位元組。
一個IP資料包可以有多個SCTP資料包,每個SCTP資料包可以有多個塊。只要單個SCTP資料包大小與SCTP MTU大小一致,並且合併在一起的所有SCTP資料包的總大小與IP MTU大小一致,節點就可以按預期運行。
在以下情況下,節點內不會發生資料包丟棄:
- 資料包跟蹤幀中SCTP塊的總大小小於SCTP-Param-Template和
- SCTP PDU的總值+ IP報頭小於節點上配置的介面MTU大小。
在我們的案例研究示例中,對傳輸路由器的調查顯示傳輸路由器的IP MTU大小為1500。由於中間的傳輸節點的MTU為1500,因此傳輸節點上的IP介面丟棄了資料包,促使傳輸路由器向MME傳送一條指示「無法到達目的地」的消息。
解決丟棄問題的解決方法
因應#1法:減小SCTP最大MTU大小
將sctp-max-mtu-size配置為較小的值,直到您看不到丟包,從而減小SCTP MTU大小。
附註:降低sctp-max-mtu-size時,還確保sctp-start-mtu-size配置為小於或等於sctp-max-mtu-size的值。
範例:修改sctp-param-template S1_MME_SCTP(sctp-start-mtu-size,從1500到1460),
解決方#2:將傳輸節點MTU大小增加到大於1500
相關資訊