はじめに
このドキュメントでは、Cisco MMEのSCTPフラグメンテーションおよびチャンクバンドリングのメカニズムと、フラグメンテーションおよびバンドリングがパケットドロップに与える影響について説明します。
前提条件
要件
このドキュメントに関する固有の要件はありません。
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
- QVPC-SIソフトウェアバージョン21.28.m18
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
Stream Control Transmission Protocol(SCTP)は、IPなどのコネクションレス型パケットネットワーク上で動作する信頼性の高いトランスポートプロトコルです。検出されたパスMTUサイズに準拠するようにデータを断片化したり、チャンクバンドルを使用して複数のユーザメッセージを1つのSCTPパケットにバンドルしたりできます。このドキュメントでは、パスMTUの制限が原因で発生するパケットドロップを修復する2つの方法について説明します。
ケーススタディでは、フラグメンテーションとバンドリングのメカニズムを示し、SCTP Max MTUサイズの設定が原因ではなく、Cisco MMEの外部で発生するパケットドロップを含むパケットドロップを実証する方法を示します。
RFC 4960(Stream Control Transmission Protocol)6.9(フラグメンテーションとリアセンブリ)による:
「エンドポイントがフラグメンテーションをサポートする場合、送信されるユーザメッセージのサイズが原因で発信SCTPパケットサイズが現在のMTUを超える場合、エンドポイントはユーザメッセージをフラグメント化する必要があります。」
さらに、複数のSCTPデータチャンクを1つの発信SCTPパケットにバンドルできます。SCTPパケットとIPヘッダーを含む結果のIPデータグラムの合計サイズは、現在のパスMTU以下である必要があります。MMEでは、これらのパケットを処理しているIPインターフェイスにパスMTUが設定されます。
フラグメンテーション
SCTPアソシエーションには複数のストリームが存在する場合があり、それぞれがストリーム識別子(SI)で識別されます。 Stream Sequence Number(SSN;ストリームシーケンス番号)は、特定のSCTPストリーム内の各フラグメントの順序を識別します。複数のセッションが同じSCTPストリームを使用できます。Transmission Sequence Number(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チャンクのバンドル
INIT、INIT ACK、およびSHUTDOWN COMPLETEチャンクを除き、複数のチャンクを1つのSCTPパケットにMTUサイズまでバンドルできます。
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-start-mtu-sizeオプション(バイト単位)を使用して、SCTP-Max-MTU-Sizeが設定されます。 1500バイトは、デフォルトのSCTP Max MTU SizeとデフォルトのSCTP Start MTU Sizeです。
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 Radio Capability IEサイズ
MMEサービス設定では、S1AP UE Radio Capability IEメッセージサイズが設定されます。デフォルト値は9000バイトです。
[context_name]host_name(config-mme-service)#
s1-mme ue-radio-cap size 9000
ケース スタディ
フラグメント化されたINITIAL CONTEXT SETUP REQUEST/UE CAPABILITY INFORMATIONメッセージの例を次に示します。このメッセージは、設定されているSCTP Max MTU Sizeに一致するようにSCTPがフラグメント化されます。
サブスクライバトレースでは、SCTPフラグメント化INITIAL CONTEXT SETUP REQUESTメッセージの送信後、トランスポートルータからMMEに向けてICMPメッセージ「Fragmentation needed」が返されます。

フレーム5では、複数のSCTPパケット(2)が1つのIPパケットの下に組み合わされています。

最初のデータチャンクは、Eビット情報要素の1記号で示されるように、断片化されたメッセージの最後のセグメントです。

2番目のデータチャンクは、断片化されたメッセージの一部ではありません。BビットおよびEビットの情報要素は数値1でマークされているためです。

最初のSCTPデータチャンクの長さは1383バイトです。2番目のSCTPデータチャンクの長さは89バイトであるため、個々のSCTPパケットは、設定されているSCTP-Max-MTU-Size(1500バイト)を超えません。

SCTPパケットとIPヘッダーを含む結果のIPデータグラムの合計サイズは、設定されているIP MTUサイズの2000よりも小さいため、これらのSCTPチャンクは、MMEのIPスタックレベルで1つのIPパケット内にグループ化されます。
解決方法
S1AP UE Radio Capability IEメッセージサイズは、デフォルト値の9000バイトの設定で許可されます。設定されているSCTP Max MTUサイズ1500よりも小さいレベルでこれらのメッセージを伝送するには、SCTPレイヤでフラグメンテーションが発生する必要があります。
sctp-max-mtu-sizeが1500である場合は、送信されるSCTPパケットが1500バイトを超えないことを意味します。
IPインターフェイスのMTUサイズが2000である場合、どのIPパケットも2000バイトを超えないことを意味します。
1つのIPパケットに複数のSCTPパケットを含めることができ、各SCTPパケットに複数のチャンクを含めることができます。 個々のSCTPパケットサイズがSCTP MTUサイズに準拠し、組み合わされたすべてのSCTPパケットの合計サイズがIP MTUサイズに準拠している限り、ノードは期待どおりに動作しています。
次の場合、ノード内でパケットドロップは発生しません。
- パケットトレースフレーム内のSCTPチャンクの合計サイズが、SCTP-Param-TemplateのSCTP-Max-MTU-Sizeの設定値よりも小さいため、
- SCTP PDUとIPヘッダーの合計値が、ノードで設定されているインターフェイスMTUサイズよりも小さい。
このケーススタディの例では、転送ルータを調査した結果、転送ルータのIP MTUサイズが1500であることがわかりました。 中間のトランスポートノードのMTUは1500であるため、パケットはトランスポートノードのIPインターフェイスによってドロップされ、MMEに「Destination Unreachable」を示すメッセージを送信するようにトランスポートルータに求められます。
ドロップを解決する回避策
回避策#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 from 1500 to 1460)を変更します。
回避策#2:トランスポートノードMTUサイズを1500より大きくします
関連情報