
SDH同步数字体系这块内容但凡搞过光传输的人基本都绕不开。最近在做一个SDH信号处理相关的项目把帧结构和复用这条路又重新完整走了一遍。和很多兄弟聊下来发现大家当年背过STM-N帧结构、记过复用路径但真正到要自己抓起一个STM-1帧分析指针、看V5字节的时候又容易懵。这篇东西就是想把帧结构与复用这套东西从头到尾、按实际操作逻辑再捋一遍给刚入行的同学一个能直接上手的参照也给有经验的同行提供一个可以一起讨论的框架。核心就三个词SDH、帧结构、复用。搞清楚它们2M、140M怎么进STM-1指针为什么老跳误码表怎么看这些问题自然就通了。下面我按自己实际项目的推进顺序来写不是按教材目录更适合想真正学懂、用懂的人。1. 我对这个项目的理解为什么要啃帧结构和复用1.1 从PDH痛点说起SDH到底解决了什么问题先不说技术细节你得先理解这套东西存在的意义。SDH之前是PDH准同步数字体系的天下各厂家的设备兼容性差上下电路要一层层把高速信号解复用下来代价大维护也麻烦。更头疼的是PDH没有统一的标准光接口不同厂商的设备没法直接互通机房运维经常一对一对地配协议转换器。SDH的革命性在于三点同步复用、标准光接口、强大的开销管理。同步复用意味着低速率信号可以直接通过指针定位嵌进高速信号里不需要逐级解复用来上下业务这直接改变了网络节点的设备形态。标准光接口打破了一家设备一个样的局面不同厂商设备可以同网络里跑。再加上丰富的开销字节SDH网络自带监控、保护、性能管理能力这些是PDH时代想都不敢想的。我们这个项目本质就是把SDH的核心机制从头实现一遍接收STM-N信号按照帧结构解析段开销、管理单元指针再通过复用路径把虚容器里的PDH支路信号完整地提取出来。整个过程最难的不是任何一个单独的模块而是把帧结构和复用这两块知识串成一个能跑的流程。1.2 项目的核心目标与技术边界项目目标很直接做一套SDH信号分析模块能够对STM-1/STM-4/STM-16级别的SDH信号进行实时解析。具体来说要完成三件事帧同步与定位从串行码流里准确找到每一帧的起始位置恢复出完整的9行×270×N列帧结构。开销解析提取RSOH、MSOH中的关键字节识别复用段状态、告警指示、保护倒换信息。复用路径解复用从STM-N里逐级提取AU→AUG→VC→TU→C容器最终恢复出PDH支路信号典型的就是2M。这里必须说清楚一个边界SDH处理分上行和下行两个方向。下行方向是把STM-N信号解开拿到支路上行方向是把多个支路复用到STM-N里发出去。两个方向逻辑上对称但实现细节不同我们项目先做的是下行解复用方向因为分析仪表类产品最需要的都是从现网抓信号、做诊断的能力。上行复用方向其实就是在下行路径上做逆操作理解了帧结构和复用逻辑之后实现起来就是顺序颠倒的事情。从技术选型看我们最终用了FPGADSP的方案FPGA负责高速串行信号的帧同步、字节定位、指针解释DSP跑上层的开销分析和性能统计。为什么这样分因为STM-1是155.52Mbit/sSTM-16已经到2.5Gbit/s这种速率下的字节级处理必须靠硬件逻辑保证确定性软件轮询根本跟不上帧周期。而开销分析这类逻辑复杂、速率要求不高的部分用DSP更灵活改起来也方便。2. STM-N帧结构逐块拆解2.1 帧的基本尺寸9行×270列的规律SDH帧结构的设计我个人认为最漂亮的一点就是它把“块”的概念贯彻到底。一帧STM-1由9行和270列字节组成总共9×2702430个字节。每秒8000帧所以总比特率就是2430×8×8000155.52Mbit/s。记住这个8000它是SDH所有计算的基调因为语音是8kHz采样8000帧每秒天然适配64K语音业务。STM-N就是把270列扩展成270×N列9行不变。所以STM-4是9×1080字节速率623.04Mbit/sSTM-16是9×4320字节速率2.488Gbit/s。N的取值是1、4、16、64这样以4倍步进的所以实际工程里都是STM-1、STM-4、STM-16、STM-64这样的形态。为什么选125微秒这个帧周期因为125微秒是8kHz的倒数一帧正好可以完整承载一路E12.048M的多个采样点映射计算方便。这个设计让PDH信号到SDH的映射变得非常规律。帧结构的三段式布局也是经典第1~3行前9列加上第5~9行前9列段开销SOH共8×972字节。第4行前9列管理单元指针AU-PTR共9字节。第1~9行第10列到第270列信息净负荷Payload共9×2612349字节。这套布局你要背下来但更要理解它的逻辑开销放在帧头区域方便接收端在帧定位后立刻读取净负荷独占大块区域保证传输效率指针夹在中间相当于给净负荷加了个“动态偏移指示器”。2.2 段开销SOH不是废话是监控系统的命脉段开销分成两部分再生段开销RSOH和复用段开销MSOH。这个区分对应SDH网络中的两种设备再生器和复用器/交叉连接设备。RSOH在第1~3行由再生器读取和处理包含帧定位字节A1、A2再生段踪迹字节J0再生段误码监测B1公务联络字节E1数据通信通路D1~D3。A1、A2是帧同步的核心A1固定为0xF6A2固定为0x28接收端就是靠不断搜索这两个字节的组合来确定帧头。B1字节是再生段的BIP-8误码监测它只监测上一帧扰码前的所有字节计算偶校验放到当前帧的B1位置。它的特点是逐段清零每经过一个再生器就重新计算所以B1的误码反映的是单个再生段的传输质量。MSOH在第5~9行由复用段设备处理。重点字节有B2BIP-24监测复用段误码、K1/K2自动保护倒换APS信令、S1同步状态标记、M1远端误码指示REI、E2复用段公务。实际查故障时K1/K2的变化能直接看出网络是不是发生了倒换S1能判断上游同步源的质量等级M1和B2搭配能判断劣化方向。这里有个容易忽略的点帧定位字节A1、A2是未扰码传输的其他字节都要经过扰码。原因在于接收端必须先找到A1/A2才能开始帧处理如果它们也被扰码就没法做初始同步了。但净负荷区为了保证数据随机性、防止长连续的0或1必须加扰所以SDH里的扰码器是“帧定位后启动”的这是一个很容易在实现时犯错的细节。2.3 管理单元指针AU-PTRSDH最精妙的设计指针是SDH区别于PDH的核心设计之一。它的作用通俗说就是告诉接收端虚容器VC的起始位置落在帧里的哪里。因为上游时钟和下游时钟不完全一致VC不可能永远对齐帧头会有微小的漂移指针就负责动态追踪这个漂移。AU-4指针由H1、H2、H3三个字节组成H1和H2拼出10比特指针值取值范围0~782步长为3。为什么步长是3因为AU-4的净负荷按3字节为一个调整单位一个指针单位对应3字节这样指针值的范围是0~782对应2349字节的净负荷区域刚好覆盖整个VC-4的空间。指针的工作机制分三种情况正常状态指针值指向VC-4的J1字节位置接收端按指针值定位VC起点。正调整当接收侧时钟慢于发送侧VC数据在帧内需要“下沉”就在H3字节之后插入3个填充字节同时把指针值加1告诉对端起点后移。负调整当接收侧时钟快于发送侧VC数据需要提前就把后续3个字节放到H3的位置同时指针值减1。项目中我们做指针解释时踩过一个坑指针值的更新不是瞬时生效的接收端需要连续检测到三次相同方向的变化才确认指针调整有效。如果只根据一次变化就跳变会把随机抖动误判成指针调整导致VC起点定位错误后果是整个支路信号全乱。这也解释了为什么仪表上指针调整次数不会狂跳因为协议本身就带迟滞确认。指针处理是SDH接收侧最容易出错的地方之一后面问题排查章节我会详细讲。3. 复用路径全流程从2M支路到STM-13.1 映射把PDH信号装进容器理解了帧结构之后第二步就是弄清楚各种速率的PDH信号是怎么被“装”进SDH的。这个过程在标准里叫映射Mapping。映射就是把PDH信号经过码速调整、加开销放到标准容器的过程。SDH里定义了多种容器Container每种容器对应一种PDH速率C-12承载2.048Mbit/s的E1信号。C-3承载34.368Mbit/s的E3或44.736Mbit/s的DS3。C-4承载139.264Mbit/s的E4信号。容器容量一定比PDH信号速率略大多出来的部分用于码速调整塞入固定填充比特。为什么要留富余因为PDH信号的时钟本身有偏差允许±50ppm量级容器必须能“吞下”这个偏差在不做指针调整的情况下也能通过比特填充来适配。拿最常见的E12M来说C-12容器的标称速率是2.240Mbit/s比2.048M多出接近200kbit/s。这多出来的部分就是异步/比特同步映射时用来做码速调整的空间。每个容器加上通道开销POH后变成虚容器VC。VC-12就是在C-12前面加了一列通道开销字节V5、J2、N2、K4。V5字节承载VC-12的误码监测BIP-2、远端缺陷指示RFI、信号标签等功能相当于VC-12的“健康档案”。为什么要加POH因为段开销SOH只管到复用段和再生段通道这一级也就是从业务接入点到业务落地点的全程的质量需要独立监测。POH跟着VC一起走跨过中间节点透明传输这样才能实现端到端的业务质量监视。这个思路后来在OTN里也被完整继承了。3.2 定位与指针调整时钟偏差怎么消化映射完形成VC之后下一步是定位Aligning。所谓定位就是用一个指针把VC的起点指示出来让信号能从“容器”这个相对独立的状态变成能在帧里灵活安放的状态。VC-12配的是支路单元指针TU-12由V1、V2两个字节组成取值范围0~139步长为1。VC-4配的是管理单元指针AU-4就是我们前面讲的H1、H2。TU-12指针解释和AU-4指针原理一样只是作用在不同的层级上。指针处理的本质就是吸收异步时钟偏差。如果输入端E1信号的速率比SDH网络侧标称速率略高VC-12数据会“涨”出来这时就需要负指针调整把多出来的数据塞到V3字节位置同时指针值减1反过来如果E1速率偏低VC-12数据不够填满就用正指针调整在V2之后插入填充字节指针值加1。实际项目里我们做完了指针解释逻辑后专门做了频偏测试给E1输入加一个2ppm的频偏然后长时间观察TU-12指针调整次数。理论上一秒8000帧2ppm对应每秒约16比特的偏差对VC-12来说净负荷按8比特为单位调整所以大约每500帧会出现一次负调整。实测下来只要连续确认三次才动作的逻辑写对了指针调整次数会稳定落在理论值附近不会乱跳。这个测试是我们验证指针模块可靠性的关键手段。3.3 复用63个2M怎么塞进一个STM-1复用Multiplexing是SDH里最容易看得眼花的部分因为它是一个逐级套娃的过程。以最常见的63个2M复用到STM-1为例整个路径是这样的第一步63个E1信号分别映射到63个C-12加上VC-12 POH后形成63个VC-12。第二步每个VC-12加上TU-12指针形成TU-12。3个TU-12字节间插复接成一个TUG-2支路单元组。第三步7个TUG-2再字节间插复接成一个TUG-3。第四步3个TUG-3加上VC-4 POH复接成一个VC-4。第五步VC-4加上AU-4指针形成AU-4单个AU-4再复用成AUG管理单元组。第六步AUG加上段开销SOH最终形成STM-1。所以倍数关系是3×7×363这就是业界常说的“63个2M”的来源。为什么中间要插TUG-2、TUG-3这两层而不直接63个TU-12塞到VC-4里核心原因是工程灵活性。TUG-2是一个中间重用单元如果网络里既有2M又有34M业务可以通过不同的装配方式共享TUG-3以下的通道结构设备支持更灵活。这就像集装箱货运先按标准尺寸把货装进小箱小箱再拼大箱不同尺寸的货物可以用同一种箱体体系来装。关于复用后的容量可以算一下63×2.048M129.024Mbit/s这些支路信号加上各自的POH、TU指针、以及各种填充开销之后装进VC-4里。VC-4能承载的净荷容量是9×260×8×8000149.76Mbit/s去除VC-4 POH那一列。所以从129M到149.76M之间的空间都被各级指针、开销、固定填充字节和码速调整比特占用了。很多初学者以为2M进STM-1是简单相加实际上开销无处不在。4. 实操环节抓帧分析复用信号的关键步骤4.1 用SDH分析仪抓取STM-1帧几个关键操作理论梳理完了再说说实操。我们项目里测试SDH解复用功能用的是一台支持STM-1/STM-4的SDH分析仪带光口和电口两种接入方式。从仪表抓帧分析的角度操作可以分成几步第一步物理层确认。把分析仪的光口通过测试光缆和被测试的SDH设备/网元连接确认接收光功率正常。一般STM-1光口的接收灵敏度在-28dBm左右视具体光模块而定低于这个值会出现误码甚至收不到光。仪表上如果显示“LOS”信号丢失先从光功率排查这是最基础也最容易被忽略的。第二步帧同步确认。确保分析仪配置的帧格式和被测信号一致复用结构选择AU-4还是AU-3是否是级联等。帧同步正常时仪表会显示“帧同步正常”或OOF帧失步次数为0。如果出现OOF多半是光路质量问题或者上下游设备故障。仪表上也会显示A1、A2字节的值正常情况下应该分别是0xF6和0x28。第三步看VC和TU层。在分析仪上设置VC-4路径可以看到VC-4的J1字节内容这是路径踪迹字节。然后下钻到VC-12层可以看到63个TU-12各自的指针值、V5字节内容、信令状态。这里最关键的是确认TU-12指针值是否稳定在一个正常范围内。如果指针值持续变化说明上游和本地的时钟偏差很大需要检查时钟源。我在项目里比较喜欢的一个操作习惯是先在仪表上看“告警性能”页面扫一眼有没有TU-AIS、TU-LOP、HP-SLM这类告警再进开销界面看具体字节。这样先用告警缩小范围再细看字节值比上来就铺开所有字节去猜效率高得多。4.2 关键指标实测与验证方法抓帧之后要验证解复用链路是否正确我通常会做三个方向上的检验第一个是通道开销校验。读VC-12的V5字节BIP-2误码计数必须为0。如果BIP-2有误码说明VC-12通道上有质量劣化如果BIP-2大量误码但RSOH层B1无误码问题大概率出在交叉连接或VC映射环节而不是光传输段。第二个是净负荷比对。在被测设备上配置一个测试业务比如从E1口发PRBS伪随机序列然后在对端SDH分析仪的E1口接收并比对。PRBS比对是最硬的指标——它能验证经过整个SDH复用、传输、解复用过程后业务比特是否完整一致。常见的有2^15-1和2^23-1两种PRBS序列。这个测试如果通过说明整个复用路径和指针处理逻辑基本没有大问题。第三个是时延测量。从分析仪打时间戳测E1业务经过SDH复用-解复用链路后的往返时延。一方面可以验证设备处理时延是否符合设计另一方面时延抖动异常也经常能和指针调整、缓存溢出这些内部逻辑问题关联上。我们遇到过一种情况时延曲线每隔一段时间出现毛刺追查下去发现是FPGA里VC-12的FIFO读指针在边界附近出现亚稳态做跨时钟域处理后才解决。这里特别提醒一下用分析仪抓帧很多仪表默认会把整个STM-1的所有TU-12都解出来。但在调试早期建议只配置一个TU-12把问题收敛到单通道等单通道逻辑完全稳定了再扩展到全63路。否则一旦从63路里随便抽几路测试出了问题定位会非常痛苦。5. 常见问题与排查技巧实录5.1 帧失步OOF与字节定位异常遇到OOFOut of Frame帧失步第一反应不要去看业务配置先从物理层查起。我调试中碰到比较多的一个场景是用分析仪接被测设备的光口偶尔出现OOF且伴随大量误码。用光功率计一测接收光功率在灵敏度边界上摇摆。这种通常不是帧处理逻辑的问题而是光源、光衰减或跳线脏污导致的信号劣化。处理办法也很朴素清洁光纤端面检查法兰盘连接必要时换一根跳线很多抖动和误码问题就消失了。但如果光功率正常仍有OOF就要怀疑帧定位逻辑或上游复用结构本身的问题了。我们在FPGA里实现帧同步时用A1、A2连续两行匹配作为捕获条件再用帧内的固定开销字段做确认。有一个容易踩的坑是A10xF6、A20x28这个序列在扰码后的数据里也偶尔会出现如果只匹配一次就锁定帧头会频繁误同步。标准做法是必须连续检测到预设次数的一致帧头通常为3次才算帧同步成立失步也要连续检测到预设次数的帧头丢失才判定OOF。顺带说一句A1/A2在所有STM-N帧里都是前两行但N大于1时第二列开始就是第二、第三……个AU的定位信息了。做多路STM-1并行处理时每一路都要独立做一次帧定位不要试图用第一路的结果去推其他路的帧头各路的相位可能完全不同。5.2 指针调整过频与滑码指针调整是最能反映时钟质量的窗口。正常情况下SDH分析仪上的TU-12指针调整次数应该很少如果网络同步状态好甚至可以长时间为0。指针调整过频意味着上游时钟相对本地参考存在持续频偏。最典型的问题是SDH设备没有正确跟踪上游同步源比如设备工作在内自由振荡模式而同步源配置错误或链路中断。这时设备本地晶振的频偏会直接反映到指针调整次数上。在仪表上你会看到TU-12指针调整次数以固定速率持续增长且伴随周期性滑码告警。之前我在测试中复现过一个场景把被测设备配成从光口提取时钟但上游设备没接任何同步参考两个设备的晶振各自跑彼此偏差大约2~3ppm。结果指针调整次数从每几百帧一次慢慢变成每几十帧一次最终出现滑码告警。后来把上游设备同步源切到GPS铯钟参考后指针调整次数瞬间降到接近0滑码也消失了。所以排查指针类问题核心是追时钟链仪表或设备的参考时钟从哪里来中间经过了哪些网元每一级是否都在跟踪上一级。不要把时间浪费在反复看指针字节值上先把时钟链路捋清楚问题基本就定位了一半。滑码对业务的影响是致命的。对64K语音来说一次滑码就是一个时钟周期的数据丢失表现在通话上是“咔哒”一声但对数据业务可能就是整包重传。现实中很多“偶尔丢包”的故障追根溯源就是时钟质量差导致的滑码。5.3 误码监测结果异常的分析思路误码是SDH系统里最常见的“症状”但它反映的问题层次可能很不同。我的经验是从跨层方向去定位先把误码归结到哪一层再顺着这一层往下查。B1误码说明再生段光传输质量有问题查光功率、色散、接收灵敏度、光纤污染。B2误码说明复用段有问题可能某个中间节点在处理或交叉时出了状况。V5字节里的BIP-2误码说明VC通道有问题可能是VC映射解映射逻辑或TU指针处理异常。不同层级的误码原因范围完全不同。一个容易混淆的场景是B2大量误码B1却为0。这说明光路本身是好的问题出在复用段的某个网元处理环节上比如交叉板件故障、时钟板不同步导致塞入/丢弃错误。另外M1字节是远端误码指示它反馈的是对端收到的误码情况。排查方向性故障时A端看M1B端看B2这样就能区分是A到B方向的传输问题还是B到A方向的回程问题。很多现场人员只看本端B2不看对端M1容易把问题方向搞反白折腾好久。还有一点误码测试要区分在位误码和背景误码。现网上偶尔几个误码可能是外部强干扰或光路微弯导致通过清洁光路、重插法兰盘就能解决如果误码持续增长且有规律性大概率是设备内部逻辑问题。用分析仪长时间24小时或72小时连续测试比短时间点测更能反映真实情况。6. 复盘与一点个人感想6.1 从SDH到OTN这套思想一点没过时做完了这个项目最大的感受是SDH的帧结构和复用思想在今天不仅没有过时反而成了更高速率体系的基础框架。OTN光传送网很多核心设计都继承自SDHOTN帧同样是块状结构同样有类似段开销的OTU/ODU开销同样有类似指针的调整机制虽然后来OPU调整机制有所不同同样把多层监控开销放在帧头区域。甚至新型的FlexO、FlexE这类技术在做多通道捆绑时也保留了“字节间插复接”的概念。所以掌握了SDH这一套帧结构复用的方法论再去看OTN、FlexE会发现很多知识是平移过去的。做传输方向的人打好SDL基础不只是为了应付眼前的项目更是为了能看懂后面几代技术演进的底层逻辑。当然SDH体系本身也在不断演进比如VC级联、LCAS链路容量调整这些增强功能允许把多个VC捆绑起来当作一个大管道用。级联情况下每个VC还是按各自指针去定位但接收端需要把所有级联成员的指针都恢复出来并按顺序重组。这个在实现上比普通复用多了一层排序和等待逻辑也是挺考验细节的。6.2 给后来者的几点实操建议最后分享几条我实操中总结的心得第一学SDH帧结构一定要动手画图。把STM-1的9行×270列画成一张大表格标出RSOH、AU-PTR、MSOH、净荷区的边界再把一个VC-12的映射过程在这个表格上走一遍。画过一遍之后比单纯背十遍教材都管用。第二调试指针处理时一定要有好的测试仪表配合。先用分析仪仿真出标准的带已知指针偏移的信号再用有频偏的输出源验证指针调整的极限情况。如果没有仪表用QSFP环回或者对端设备配合也行但调试效率会差不少。第三做FPGA实现时跨时钟域处理一定要仔细。SDH系统天然存在多个时钟域线路时钟、系统时钟、支路时钟。VC净荷在不同时钟域之间传递时一定要用异步FIFO或DPRAM做缓冲FIFO深度要按指针调整的最大突发量来设计。我们曾经因为FIFO深度少算了几个字节导致在最坏情况下的指针调整时丢数据这种问题在常规测试下发现不了需要专门做极限压力测试才能暴露。第四别只盯着帧结构和复用路径同步、告警开销、保护倒换这些机制也要懂。实际工程项目里SDH帧结构只是基础真正让系统稳定工作的是那一整套开销字节承载的状态机和协同逻辑。帧结构是骨架开销和指针是神经复用路径是血管三者一起才能构成一个完整的传输系统。总的来说SDH虽然“年纪”不小了但它作为光传输的经典体系值得每个通信工程师认真吃透一遍。这次项目重新把帧结构和复用这块走了一遍我个人收获很大也建议刚接触传输领域的同学不要嫌它老、不要嫌它基础把这块地基打扎实了后面不管是OTN、PTN还是未来的什么传输技术你都有底气去学。