简介
本文档介绍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上,路径MTU配置在处理这些数据包的IP接口上。
分段
一个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消息“Fragmentation needed”。

在帧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为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
相关信息