CodingBox Q&A Ask question

Catalyst 2960X在SFP转储里到底校验什么:厂商代码、名称和MD5,以及为什么复制的转储通不过

Asked Active Viewed 25 AI translation from Русский
6

我负责维护一家运营商的网络,模块型号混杂,所以经常需要针对具体交换机准备模块。我想彻底搞清楚校验的机制,而不是靠瞎试转储数据。

手头的设备:

  • Cisco Catalyst 2960X-24PS-L,整个机房里最挑剔的一台
  • QTECH QSW-3750-28TX-AC和D-Link DGS-3420,同样的模块在这两台上都能顺利工作
  • 模块型号SNR-SFP+SR和SFP-10G-BX

在能被Catalyst接受的模块转储里,开头能看到厂商代码字节,紧接着是ASCII格式的名称:

0E 43 49 53 43 4F ...

我试过的:从一个能在C2960X-24PS-L上正常起来的模块上导出转储,只把这个转储里的厂商名称写进另一个模块。在QTECH和D-Link上,改完之后都能正常起来,但Catalyst不接受这个模块,尽管改动的字节和源模块逐字节完全一致。

由此产生一个关于校验机制的问题。Cisco到底校验的是什么、依据哪些字节,校验结果存在模块的哪个位置,以及为什么从正常转储里搬过来的厂商名称还不够?我关心的是背后的逻辑,剩下的我自己能搞定。

Comments 6

这套机制其实很简单,早就被人扒清楚了。校验的不是单独某个字段,而是一个组合:厂商代码字节加上厂商名称字节。对这段字节序列取MD5,结果就存在模块本身里,交换机自己算一遍同样的东西,然后比较。

用普通工具就能复现,不需要什么特殊手段:

echo 0E 43 49 53 43 4F ... | xxd -r -p | md5sum

把你自己的代码和厂商名称代进去,就能算出模块里应该存的那个值。转储里实际能碰到的代码有:02是Finisar,0E是Methode,11经常出现,但一直没弄清楚是谁的。只要代码和名称这一对是自洽的,而且哈希值也对得上,模块在C2960X-24PS-L上就能通过。

1 UkrainecoremonkUA Show original (Русский) AI translation

接上一条:贴出你的接收端模块里实际存的内容。那里留的厂商代码字节是什么,旁边的名称又是什么?从你的描述来看,你只搬了名称,代码或者哈希本身还是原模块的,那这个组合自然就对不上了,Catalyst拒收完全合理。三样东西要一起检查,不能只看交换机输出里能看到的那个字段。

3 KazakhstanracknodeKZ Show original (Русский) AI translation

查过了,跟你说的完全对得上。源模块里是0E,后面跟着CISCO,而我的接收端确实只改了名称,厂商代码还是原来那个模块的,哈希也是旧的。把两种组合都用xxd -r -p和md5sum跑了一遍:源模块算出来的值和模块里存的一致,我手动拼出来的那个则不一致。

也就是说要整体搬这个组合,而不是逐个字段搬。现在至少知道插模块之前该看哪里、该核对什么了。

0 Kazakhstanlambdaowl20KZ Show original (Русский) AI translation

有一个重要的推论大家老是忘掉:如果厂商代码和名称不匹配,即使交换机上已经允许了不受支持的模块,Catalyst照样不会放行。这也正是为什么别人给的转储时好时坏——那些转储是被部分修改过的,而校验看的是整个组合。

由此在数据量上有个实用结论:256字节的转储里有意义的是前128字节,后面是厂商保留区。没必要整个镜像都搬,但前半部分必须整体一致地搬过去,包括那些在交换机输出里肉眼看不到的字段。

3 Russiaportrunner91RU Show original (Русский) AI translation

顺便说一句,转储也不是万能的。Medick的SFP-10G-BX里坐的不是存储器,而是一颗C8051F392单片机:它模拟A0和A2,完全可能带密码或厂商查询机制。这种情况下你就算把那个组合比对到每个字节都一样,外部也照样写不进去。我自己在用的实际工具是SNR SFP Writer和SFPTotal Plus,同事那边还有基于CH341的自制设备。

1 Russialambdaops44RU Show original (Русский) AI translation

给后来看到这个帖子的人做个小小的更正。这个MD5跟MSA的校验和没有任何关系:SFF-8472里的CC_BASE和CC_EXT是简单的字节相加,算起来一下子就能对上。厂商校验是在这些之上、按自己的规则另外做的,而且恰恰是在MSA校验和都没问题的那个时刻才把模块拒收——这也就是为什么会有"转储明明是对的,模块还是不被接受"这种感觉。

顺带一提,Cisco在这方面远算不上最麻烦的情况:至少机制是清楚的,也能复现。最难搞的是HP和Aruba,它们的存储是交互式的,还需要密钥——那种情况光靠转储就搞不定了。

3 RussiawaveadminRU Show original (Русский) AI translation
Log in to comment. Log in