rstp设备之间的对接

项目需要将自己开发的运行rstp的设备和moxa交换机对接。在实际对接过程中,发现收敛速度提不上来。具体表现出来的就是两种设备P/A协商不成功。后来抓包发现,我们自己实现的rstp协议将在收到bpdu时,这样设置bpdu.role:

switch ((buf[7] & 0x0c) >> 2)
{
				case 1:  p->bpdu.role = BR_BPDU_ROLE_ROOT;       break;
				case 2:  p->bpdu.role = BR_BPDU_ROLE_ALT_BKP;    break;
				case 3:  p->bpdu.role = BR_BPDU_ROLE_DESIGNATED; break;
				default: p->bpdu.role = BR_BPDU_ROLE_UNKNOWN;
	}

这里的意思就是0表示发送bpdu的端口角色未知,1为根端口,2为alternate/backup,3为指定端口。

而在wireshark抓包中发现

rstp设备之间的对接_第1张图片

bpdu flag字段为1而wireshark竟然显示为alternate/backup。

 

忽然意识到是不是两种rstp实现中的bpduflag指定值所代表的意义不一样。在rstp的标准文档中,并没有发现其对bpdu flag字段进行了规定。查找资料中,H3C这样定义

rstp设备之间的对接_第2张图片

而MOXA交换机中00为未知 01为alternate/backup10为根端口 11为指定端口。

 

在将我们的rstp实现中的bpdu flag设置为和MOXA一致时,能够实现正常对接,并快速收敛。


你可能感兴趣的:(linux,RSTP,快速收敛,设备对接)