ETS 300_364 V5.1接口协议栈解析与现场排障实战
简介这是一份面向ETS300与ETS364测试机使用与维护人员的完整手册合集内容覆盖硬件结构、软件系统、测试程序开发、故障诊断与合规操作等核心环节适合电子测试工程师、设备运维人员以及相关专业学生系统学习。压缩包共一百一十个文件以RTF和PDF两类文档为主其中详细手册二十七份补充说明五十三份另有若干电路图、界面截图、网页辅助资料和表格文件整体容量约七十八兆字节便于按需查阅。目前已有一千三百三十六人学习浏览。资料从硬件安装与升级、嵌入式系统配置到测试脚本编写调试、测试流程与行业标准均给出细致讲解并配有故障代码解释、硬件排查步骤、软件修复方法以及安全操作规范还包含实例分析与参考附录能帮助读者快速掌握设备操作要领提升自动化测试效率。对于需要系统掌握ETS300/ETS364测试平台的工程师来说这是一份少见的实战参考。1. ETS 300_364 手册到底管什么接入网与交换机之间那道 V5.1 口干接入网维护的人迟早会碰上一台贴着 V5.1 标签的老设备。我印象很深的一次某地机房扩容新接入网设备要和旧交换机对开 E1两侧文档各说各话现场老师傅翻出一本编号 ETS 300 364 的旧规范指着帧结构图讲了一句信令在 TS16业务时隙顺着 B 通路走。这一句话省了我们半天弯路。ETS 300_364 管的就是接入网 AN 与本地交换机 LE 之间的 V5.1 接口覆盖物理层、LAPV5 数据链路以及 PSTN 信令、控制协议和链路控制协议三个子层。这篇按落地顺序拆开它先讲协议栈构成再给可复现的抓包与解析方法最后聊对接参数和现场踩坑。2. 先把协议栈拆开ETS 300_364 的物理层、LAPV5 和三个子协议V5.1 接口的定位是接入网与本地交换机之间的数字接口。它的物理基础是一路或多路 2048 kbit/s 的 E1 线路但和普通 E1 中继不一样的地方在于业务时隙与信令时隙的分配方式由协议栈上层决定。排障时如果不能第一时间判断问题出在物理层、数据链路层还是协议子层后面的参数调整都会变成盲调。2.1 物理层与帧结构为什么 TS16 是 V5.1 绕不开的时隙ETS 300_364 的第一层直接引用了脉冲编码调制基群的规范2048 kbit/sHDB3 线路编码支持 75Ω 同轴或 120Ω 双绞两种物理接口。一帧 125 微秒32 个时隙每个时隙 8 bit。TS0 做帧定位和告警TS16 在传统随路信令系统里是留给信令的。V5.1 把 TS16 改造成一条 64 kbit/s 的共路信令通路也就是标准里说的通信通路 C 通路。所有 V5 协议消息都在这条通路上跑。其余时隙大部分静态分配给承载业务比如一条 ISDN BRA 用户线占用两个 64 kbit/s 时隙一条模拟 PSTN 用户线占用一个时隙。这里有个容易混淆的点V5.1 和 V5.2 虽然都叫 V5但设计思路完全不同。V5.1 的每个 E1 独立工作每个 E1 的 TS16 都是独立的 C 通路业务通路按端口静态映射不做动态分配也没有跨 E1 的保护能力。V5.2 则是把最多 16 条 E1 捆成一个链路群C 通路可以在多个 E1 的指定时隙里动态分配还多了承载通路连接控制协议支持话务集中的动态资源分配。对比项V5.1ETS 300_364V5.2对应规范线E1 数量每条 E1 独立工作最多 16 条 E1 组成链路群信令时隙固定 TS16TS16、TS15、TS31 等可配置承载通路分配静态映射动态分配有保护能力对应建议书G.964 对应线G.965 对应线现场维护最容易翻车的就是拿 V5.2 的习惯去配 V5.1比如在 V5.1 设备上把 C 通路配到 TS15结果链路根本起不来。理解 TS16 的唯一性是读这本手册的第一个关键点。2.2 LAPV5 帧地址字段、控制字段与 SAPI 的含义TS16 上跑的 LAPV5 是数据链路层本质上是面向连接的 HDLC 确认模式。先看地址字段它固定两个字节第一个字节高 6 位是 SAPI第二位由命令/响应标志充当最低位 EA 置 0第二个字节高 7 位是 TEI最低位 EA 置 1。V5.1 里 SAPI 的分配非常固定。PSTN 信令协议使用 SAPI 0控制协议使用 SAPI 1链路控制协议使用 SAPI 2。这三个协议复用同一条 LAPV5 数据链路靠 SAPI 区分消息归属。TEI 在标准默认配置下取全 1也就是 127。C/R 位用来区分命令帧和响应帧。控制字段按模 128 运行意味着帧序号 N(S) 和 N(R) 各占 7 位I 帧和 S 帧的控制字段是 2 字节链路建立用的是 SABME 帧而不是 SABM 帧。这个细节决定了解析脚本里控制字段长度的判断逻辑不能按模 8 的老规则硬套。一个典型的链路建立过程是这样AN 侧发起 SABMELE 侧回 UA。之后双方互发 RR 帧做链路确认就进入信息传送状态。如果上电后一直只看到 SABME 没有 UA问题几乎都出在 C 通路配置或者地址字段不匹配上而不是上层协议。调试时最直接的手段是把 SAPI、C/R、TEI 三个值打出来核对。下面这段 Python 逻辑可以快速解析地址字段def parse_lapv5_address(addr_bytes): if len(addr_bytes) 2: return None a1 addr_bytes[0] a2 addr_bytes[1] sapi (a1 2) 0x3F cr (a1 1) 0x01 ea1 a1 0x01 tei (a2 1) 0x7F ea2 a2 0x01 return { sapi: sapi, cr: cr, tei: tei, ea1_valid: ea1 0, ea2_valid: ea2 1, }这段逻辑对应手册里的地址字段图表SAPI 在第一个字节的高 6 位C/R 在 bit1EA1 必须为 0表示后面还有地址字节。TEI 取第二个字节的高 7 位EA2 必须为 1表示地址字段到此结束。解析工具里最先验这两个 EA 位比先看 SAPI 更能抓到错位问题。如果 EA 位不对说明抓包从错误的字节边界开始切了后续解析全部作废。2.3 协议子层分工PSTN 信令、控制协议与链路控制各管什么LAPV5 之上是三个并行的协议子层它们共用同一条数据链路但各管一摊。先看 PSTN 信令协议它负责传输传统模拟用户线的呼叫状态包括摘机、挂机、拨号、振铃、回铃V5.1 里的 PSTN 协议消息很多是从用户侧信令映射过来的。设备对接时如果电话摘机后交换机侧没有任何动作优先怀疑的就是这一层消息没走通。控制协议负责接入网端口的管理。它做的事情包括端口分配、端口阻塞与解除阻塞、以及公共控制比如协议版本协商。V5.1 是静态配通路的架构控制协议里的端口分配消息决定了一个用户端口对应哪条承载通路现场扩容加用户板时必须保证两侧的端口号、VP 号、时隙号一一对应。链路控制协议管的是 C 通路本身负责链路标识、链路状态管理和链路的建立维护。V5.2 里链路控制协议的重要性更高因为 C 通路是动态分配的V5.1 里它的职责相对轻但链路复位和故障上报都靠它。这个三层结构在排障里的意义是快速定界。看到 LAPV5 链路一直建不起来问题在 TS16 配置或地址字段LAPV5 正常但用户线呼叫全失败问题在 PSTN 协议子层业务时隙永远不分配问题多半在控制协议的端口映射。把这个判断顺序记住现场少走很多弯路。3. 把手册变成能跑的工具TS16 抓取与 LAPV5 帧解析脚本协议栈拆完接下来要做的是把手册里的帧格式落到可以验证的工具上。V5.1 不像以太网有现成的分析工具链常见做法是先抓 TS16 的 64 kbit/s 比特流再做 HDLC 帧提取和地址解析。这一步做扎实了后面参数调整才有依据。3.1 搭建一个 V5.1 接口观察点的硬件与接线方式抓 V5.1 的前提是能在物理线上提取 TS16。常用的办法是找一个带 E1 接口的协议分析仪或采集卡。采集卡接到 E1 线上有两种方式一种是串联接入把 E1 线断开一头接交换机、一头接接入网分析仪跨接在中间另一种是高阻跨接直接用高阻探头并联在正在运行的 E1 线路上不中断业务。我一般优先用高阻跨接因为 V5.1 对接现场往往没法停业务。跨接时要注意 75Ω 和 120Ω 不能混用否则电平不匹配采集下来的波形都是错的。时钟上分析仪必须跟随线路的时钟一般从接收方向提取不要用分析仪内部自由振荡的时钟否则帧定位会频繁丢失。采集得到的数据通常是完整 E1 帧流而不是直接的 TS16 内容。一个 E1 帧按 32 时隙算正好 32 字节循环帧结构中每一帧的 TS16 连续抽取出来就得到了 C 通路的原始比特流。注意 TS16 的抽取必须从 TS0 帧定位之后开始否则时隙边界偏一位后续全部错位。某些采集卡驱动会直接把某个时隙的数据提取成独立文件那就省掉了这一步。如果拿到的还是完整 E1 帧流下面的脚本就从文件里抽出 TS16。3.2 用 Python 从 TS16 比特流里解出 LAPV5 帧拿到 TS16 原始流之后要做的第一件事是找 HDLC 帧边界。HDLC 用 0x7E 当标志位数据里的 0x7E 用 0x7D 5E 两个字节转义0x7D 用 0x7D 5D 转义。下面是完整的抽取与解析脚本。import binascii def extract_ts16(e1_bytes, ts16): 从对齐的 E1 帧流中抽取指定时隙每帧 32 字节。 if len(e1_bytes) % 32 ! 0: raise ValueError(E1 帧流长度不是 32 字节的整数倍请先做帧对齐) ts16 bytearray() for i in range(0, len(e1_bytes), 32): ts16.append(e1_bytes[i ts]) return bytes(ts16) def extract_hdlc_frames(bitstream): 从比特流中提取 HDLC 帧并做字节去转义。 frames [] cur bytearray() in_frame False i 0 while i len(bitstream): b bitstream[i] if b 0x7E: if in_frame and len(cur) 4: frames.append(bytes(cur)) cur bytearray() in_frame True elif in_frame: if b 0x7D and i 1 len(bitstream): cur.append(bitstream[i 1] ^ 0x20) i 1 else: cur.append(b) i 1 return frames def fcs_ok(frame): HDLC 帧校验初始值 0xFFFF最终寄存器应为 0xF0B8。 crc 0xFFFF for byte in frame: crc ^ byte 8 for _ in range(8): if crc 0x8000: crc ((crc 1) ^ 0x1021) 0xFFFF else: crc (crc 1) 0xFFFF return crc 0xF0B8 def parse_frame(frame): if len(frame) 4: return None a1, a2 frame[0], frame[1] sapi (a1 2) 0x3F cr (a1 1) 0x01 tei (a2 1) 0x7F control frame[2:4] if (frame[2] 0x01) 0 else frame[2:3] return sapi, cr, tei, control.hex() # 使用示例读入 E1 帧流抽取 TS16 并解析 raw open(e1_capture.bin, rb).read() ts16 extract_ts16(raw, ts16) frames extract_hdlc_frames(ts16) for f in frames: if fcs_ok(f): info parse_frame(f) if info: sapi, cr, tei, ctrl info print(fSAPI{sapi} C/R{cr} TEI{tei} Ctrl{ctrl})脚本里最关键的一步是extract_ts16的 32 字节步进。这里的前提是文件里的 E1 帧已经做过对齐TS0 在每 32 字节的第一个字节。如果采集卡输出的是不带帧对齐的原始比特流就得先在比特流里搜索帧定位字 0x00 0x11 0x01 1 的循环结构那一套逻辑比这复杂但工程上很少遇到因为采集驱动一般都会做帧定位。extract_hdlc_frames处理转义时有一个边界条件连续出现 0x7D 7D 时两个字节都要解转义。上面的写法逐个字节扫描遇到 0x7D 就处理下一字节并跳过一次能正确处理连续转义。FCS 校验用了帧包含 FCS 字段的完整重算方式最终寄存器固定为 0xF0B8。这条规则和以太网 FCS 的校验思路不一样不要混用。3.3 用解码结果核对手册里的消息格式脚本跑出来的结果是一串带 SAPI 和 C/R 的帧摘要。正常运行的 V5.1 接口上你会看到三类典型输出链路建立阶段的 SABME 和 UASAPI 为 2 的链路控制帧SAPI 为 1 的控制协议帧。如果某个 SAPI 一直没有出现说明对应的协议子层没有被激活。SABME 和 UA 帧的解码依据是控制字段值SABME 的命令控制字段为 0x7FUA 响应控制字段为 0x63。这里用模 128 的规则不要用模 8 的 0x2F 和 0x73 去套。如果抓到的帧控制字段是两个字节且低位字节是全 1基本可以确认是 SABME。还要注意LAPV5 有一个额外的封装功能层 LAPV5-EF它负责把上层多个协议的消息封装进数据链路。抓包解析时LAPV5 帧里的信息字段拆开之后并不能直接当作协议消息读还要先剥掉封装格式的几个字节。手册里对这块的描述集中在协议子层复用那几张图现场核对消息内容时最好先找到协议鉴别语字节用它判断是哪类消息再继续往下解析。鉴定了协议鉴别语才能确定消息类型和 IE 的解析起点否则很容易把信息字段内容读偏。4. 落上设备前先对好参数V5.1 对接检查表与默认值协议和抓包工具都齐了下一步是把手册里的参数落到实际设备上。V5.1 对接出问题绝大多数不是协议理解错误而是参数两侧不一致。这章给一张实用检查表覆盖物理层、链路层和端口映射三层。4.1 必查的物理层参数阻抗、时钟、CRC4物理层看起来简单现场出错率却最高。阻抗是第一关75Ω 同轴和 120Ω 双绞不能混接用错之后链路偶发误码时好时坏最迷惑人。判断方法很简单看设备面板上的接口标识和线缆型号同轴是 BNC 头双绞是 RJ45 头两者无法直接互换。时钟是第二关。V5.1 的时钟一般要求接入网侧从交换机侧提取也就是接入网做从时钟。如果两侧都配成主时钟会出现滑码链路层表现为频繁的帧重传如果两侧都配成从时钟链路根本锁不住物理层告警直接亮红灯。现场最稳的做法是交换机侧用内部时钟或上级时钟接入网侧线路时钟跟踪。CRC4 是第三关。2048 kbit/s 基群的复帧里有个 CRC4 校验机制用于监测传输质量。两侧 CRC4 必须同时开启或同时关闭。有时候传输链路上级设备做了 CRC4 透传但两端设备没开会出现偶发误码被交换机忽略的情况有时候两侧都开了中间传输设备不支持反而产生大量 CRC 错误告警。检查项推荐值常见误配接口阻抗75Ω 或 120Ω两侧一致两侧线缆类型混用时钟源接入网从 LE 侧提取两侧都配主时钟线路编码HDB3误配为 AMI链路锁不住CRC4两侧同开或同关一侧开一侧关偶发误码帧结构支持 TS16 数据通路配置为普通 PRATS16 做随路信令最后还有一个帧结构选项。普通 E1 中继和 V5.1 的帧结构虽然都符合基群规范但 TS16 的用途完全不同。设备选型时要确认硬件接口支持 V5.1 模式而不是只能在普通随路信令模式下工作。有些老设备的面板拨码开关默认值是随路信令模式忘了改就会把 TS16 当信令时隙用C 通路完全瘫痪。4.2 LAPV5 链路参数T200、N200、T203、窗口 K链路层参数里T200、N200、T203 是现场工程师最该记住的三兄弟。T200 是等待确认的定时器发送 I 帧或 RR 帧后在这个时间内没收到对方的确认或响应就触发重传。默认值是 1 秒。如果对接链路是卫星链路或者有较大传输时延T200 太小会造成大量无谓重传建议放大到 2 秒。N200 是 T200 超时后的最大重传次数默认 3。这条参数直观地决定了一次 I 帧失败后最多重发几次。N200 设得太小瞬时的传输抖动就会导致链路层复位设得太大真正链路中断时检测时间过长。现场一般保持默认 3只有在传输质量差的链路上会调到 5。T203 是链路空闲时发送 RR 轮询的周期默认 10 秒。它起到保活作用让对端知道本端还活着。如果某条链路上连用户呼叫都没有T203 就是唯一证明链路健康的机制。两侧 T203 差别太大时一侧已经判定对端超时复位另一侧还没感知表现为链路时好时坏。窗口 K 值决定未确认 I 帧的最大数量。V5.1 场景下业务消息通常不多K 值按默认即可。但要注意LAPV5 跑在 64 kbit/s 通路上如果 K 值过大而传输时延又大会导致接收端缓存压力上升。我一般按照标准默认配置运行只在确认链路误码率高时先动物理层不轻易动窗口。参数默认值现场调整建议T2001 秒长时延链路放大到 2 秒N2003 次质量差链路调到 5T20310 秒保持不变K标准默认业务量大时按需放小调整 LAPV5 参数有个前提必须先确认物理层无误码、C 通路位置正确。如果链路建立都失败调参数没有意义这是排查纪律的问题。4.3 端口编号与 V5.1 静态承载通路映射的核对方法V5.1 的承载通路是静态映射意味着接入网的每个用户端口必须在两侧设备里预先绑定到具体的 E1 时隙。这张映射表在控制协议里通过端口分配消息下发现场扩容时最容易错的就是这里。核对时首先拿两侧的端口编号规范对齐。交换机侧对用户端口的编号方式可能是E1号-时隙号-子端口号接入网侧可能是机框-板卡-端口。两边团队各自维护一张表邮件往来几轮之后经常出现编号错位。我习惯把两侧的映射关系导成一张 CSV用脚本做交叉比对时隙冲突一眼就能看出来。import csv def load_mapping(path): mapping {} with open(path, newline, encodingutf-8) as fp: for row in csv.DictReader(fp): # 假设列user_port, ts, vp mapping[row[user_port]] (int(row[ts]), int(row[vp])) return mapping an_map load_mapping(an_mapping.csv) le_map load_mapping(le_mapping.csv) for port in an_map: if port not in le_map: print(f端口 {port} 只在接入网侧配置) elif an_map[port] ! le_map[port]: print(f端口 {port} 时隙不一致: AN{an_map[port]} LE{le_map[port]})这段逻辑不复杂但能挡住大量配置回退。跑完之后还要看整条 E1 的时隙占用总数V5.1 里一个 2M 最多承载 30 个 64 kbit/s 业务加上一个 C 通路和一个帧时隙正好 32。如果业务配置超过 30 路说明有人把 TS16 也当业务时隙用了。映射核对还有一个容易被忽略的点VP 号。VP 是用户端口在 V5 协议里的逻辑标识两侧的 VP 必须一致。有的设备在端口分配消息里用 VP 寻址而不是用物理端口号如果 VP 错位即使物理时隙对上了呼叫还是会失败。5. 避坑手记V5.1 现场翻车最多的五个问题这章写的都是现场踩过的坑每一条都是先用现象迷惑人最后才暴露真实原因。整理成五条按出现频率排序。5.1 链路起不来、时隙错配、时钟不同步等五个高频问题第一条SABME 一直在发UA 永远不回。现象是抓包看到 AN 侧每隔一秒发一条 SABMELE 侧无任何响应。原因基本是 C 通路配置错位最典型的就是把 V5.2 的 C 通路习惯带进来配到了 TS15其次是两侧 V5 版本不匹配一边跑 V5.1 一边跑 V5.2。解决方法是先看两侧设备的 V5 模式配置确认都是 V5.1 且信令时隙都是 TS16再查物理层有没有告警。第二条链路能建立但业务时隙偶尔不通。现象是电话时好时坏摘机后听不到拨号音。原因多数是端口映射表错位某个 VP 在两侧绑定到了不同时隙。这种问题最麻烦因为抓包看链路层完全正常。解决方法是把两侧的映射表导出逐条比对不要只在配置界面里肉眼扫。第三条物理层红灯不亮但误码率一直往上涨。现象是设备不掉线但性能监视里 ES 和 SES 持续增加。原因通常是两侧 CRC4 配置不一致或者传输中间环节不支持 CRC4 透传。解决方法是统一两侧 CRC4 开关再检查中间传输设备的时隙交换配置。第四条时钟不同步导致的滑码。现象是链路偶尔复位T200 频繁超时重传计数不断上升。原因多为接入网侧没有启用从时钟模式两侧都在用自己的内部时钟频率偏差触发滑码。解决方法是把接入网侧的时钟源改成跟踪 E1 线路时钟再用性能监视确认滑码计数停止增长。第五条物理层接口接反。现象是 E1 物理层完全不通接收方向无信号。原因很隐蔽同轴线的收和发接反了。E1 是收发分离的两对线不像以太网有自动翻转。解决方法是先查物理层告警无信号就交换一下收发接头这是最快验证手段。这条看着低端实际现场没少坑人。5.2 排查纪律先物理后链路再子协议不要一上来改定时器现场处理 V5.1 问题最常见的错误是跳层。链路起不来第一反应是调 T200、N200业务不通第一反应是重启板卡。这样操作既浪费时间又可能把问题搞得更隐蔽。我的习惯是固定三步走。第一步看物理层面板上有没有 LOS、AIS、RAI 告警性能监视里的误码计数是多少。第二步看链路层抓 TS16 确认 SABME、UA、RR 帧的交互是否正常。第三步才看协议子层核对端口分配和呼叫流程。这三步的顺序不能反因为上层正常的前提是下层稳定。跳层排查还有一个代价改动链路参数之后可能掩盖传输质量的真实问题。比如把 N200 从 3 调到 5链路重传变少表面稳定了但实际传输链路一直在丢帧。等到雷雨天误码加剧问题彻底爆发。所以链路参数改动一定要记录并且和物理层质量数据对照着看。6. 进阶技巧用两侧对拍法判断 V5.1 链路健康度链路层基本稳定之后光看告警面板是不够的。V5.1 链路健康度的判断最实用的方法是对拍在 AN 侧和 LE 侧同时抓 TS16把两侧的帧序列放在同一条时间轴上对照。对拍法能直接看出三个指标。第一个是链路建立时延从第一条 SABME 发起到收到 UA 的时间正常应该在几十毫秒量级如果这个值周期性变大说明链路存在排队或时钟滑动。第二个是 RR 帧的间隔均匀度T203 到期会发 RR两侧的 RR 帧应该规律出现如果间隔忽长忽短说明对端在处理超时重传。第三个是 I 帧的 N(S) 连续性如果出现 N(S) 跳变或者重复说明链路层发生过重传底层有质量劣化。对拍数据的处理可以用脚本快速统计。先按两侧抓包文件分别提取帧到达时间和帧类型再做时间对齐和差量计算。from collections import Counter def analyze_side(pcap_lapv5_frames): # 假设输入是 [(timestamp, frame_type), ...] timestamps [t for t, _ in pcap_lapv5_frames] types Counter(ftype for _, ftype in pcap_lapv5_frames) rr_gaps [] last_rr None for t, ftype in pcap_lapv5_frames: if ftype RR: if last_rr is not None: rr_gaps.append(t - last_rr) last_rr t return { frame_count: len(pcap_lapv5_frames), type_dist: types, rr_gap_mean: sum(rr_gaps) / len(rr_gaps) if rr_gaps else None, rr_gap_max: max(rr_gaps) if rr_gaps else None, }这段脚本的价值在于它能自动暴露“表面正常、实质劣化”的链路。RR 帧平均间隔接近 T203 是正常的但如果最大间隔超过 T203 一倍说明有一次 T200 超时发生过。帧类型分布里如果出现大量 REJ 或 RNR那更是明确的拥塞或丢帧信号应该回头检查物理层而不是继续调上层。我实际工作中养成的一个习惯是每次 V5.1 对接完成先存一份对拍基线数据包含链路建立时延、RR 间隔均值、I 帧重传计数。之后每次维护或割接拿新的对拍结果和基线对比偏差超过 20% 就开始查物理层。这个习惯救过我不少次尤其在某次机房搬迁后业务看着正常但对拍数据里 RR 间隔已经乱了提前发现了时钟源配置被复位的问题。对拍法不需要高档仪表一台带 E1 接口的采集设备和一套解析脚本就够用。希望帮到你。本文还有配套的精品资源点击获取