- 如题,先上1000个摄像机的设备拓扑图。本篇文章价值堪比黄金,阅读时间因您而定。

在这整个网络中只有一个默认VLAN1,业务VLAN888接入业务和下联Ai-POE的MTU隔离VLAN。只是OTL的接入ONU隔离并没有改变。ONU与ONU隔离,PON口与PON口之间隔离。但上层的视频接入存储设备在二层是与下联直接连通。这种基本上只允许南北流量阻止东西流量的PON网络特备适合B/S C/S架构的安防平台型监控网络。减少了前端设备间互相亲亲我我的广播包占用带宽,所以可以提高网内设备的数量到一千个。只是下面的前端如果想要加个智能分析什么的边缘服务器要互通需要上层核心路由器转发。
下面来逐一解决这两个问题,一个是大网络广播包,一个是前端设备有少量互通需求。
经过长期对大华、海康、天视通等一二线设备的网络抓包研究发现,基于linux底层的摄像机和基于windows系统的pc在基本的网络协议方面有很大区别的。
安防DHCP
DHCP获取网络地址方面,摄像机一般是把静态切换到dhcp获取时有dhcp服务器就用dhcp服务器分配,没有时就用最开始的默认地址。若是通过dhcp获取到了地址后,dhcp服务器消失了也会保留最开始获取到的IP地址。大多数哪怕重启后也还能保留获取到的IP地址,少数重启后会返回出厂的IP,但也绝不会出现windows系统的169.254打头的私有IP。
安防ARP
前端的摄像机好像更喜欢发免费arp (Gratuitous ARP)包。查询得知
免费ARP报文与普通ARP请求报文的区别在于报文中的目标IP地址。普通ARP报文中的目标IP地址是其他主机的IP地址;而免费ARP的请求报文中,目标IP地址是自己的IP地址。
免费 ARP 数据包有以下 3 个作用。
该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的IP地址和MAC地址。

可用于检测IP地址冲突。当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP地址的主机。
可用于更新其他主机的ARP缓存表。如果该主机更换了网卡,而其他主机的ARP缓存表仍然保留着原来的MAC地址。这时,可以发送免费的 ARP数据包。其他主机收到该数据包后,将更新ARP缓存表,将原来的 MAC地址替换为新的MAC地址。
一般这些情况在安防专网中其实是可以有其它方式来解决的。IP地址一般是静态或者是手动dhcp固定绑定的,几乎不会出现配置一个地址池让前端IP随意分配来注册到服务器上的。所有不存在要自作多情的宣告,特别是网络大了设备多了就更不好意思了吗,也不存在冲突。因为各大厂商都有专用的扫描工具,通过IP地址排序一清二楚明明白白的。再说了就算冲突打起来了,静态的配置IP也不会自己解决冲突啊。还是和平些好,你说是吧!废话少说,就一句好话:这个是可以屏蔽的。你要问地址单个单个问,不问就闭嘴不要出声。
在ros系统设备中,需要在路由器上做bridge过滤。在winbox的配置图是




命令是:
/interface bridge filter
add action=drop arp-gratuitous=yes chain=forward in-interface=前端桥端口 \
mac-protocol=arp out-interface=后端桥端口
与此相似的还有一种特殊arp包,即源地址为0.0.0.0,目标地址是自己ip的ARP Probe探测报文。

查询得知。
ARP Probe 的作用是,在分配到一个 IP 之后,但是在 IP 使用之前,可以先用 ARP 协议来检查一下当前的 LAN 内有没有人在使用这个 IP。
检查的方式就是用 ARP 询问这个 IP 的 MAC 地址,如果有主机正在使用,那么就会收到 ARP reply。
但是这里有一个问题。一个主机如果收到了 ARP request,询问谁有 IP X?请发送回复给 IP 地址 Y at MAC 地址 Z。即使这个主机没有 IP X,也不会单纯丢弃这个 ARP request,而是会从这个 ARP request 中学习到,IP Y 对应 MAC Z,会将它放到自己的 ARP cache 中。
这里我们只是想检查一个 IP 是否正在被使用,我们还没有真正地开始使用这个 IP。如果用普通的 ARP 请求来询问,假设这个 IP 已经被使用,那么发出去的 ARP request 就会传达错误的信息,其他主机就会根据这个 ARP request 来更新自己的 ARP cache。
为了解决这个问题,ARP Probe 使用的 request 将 Src IP 设置为 0.0.0.0,这样,这个 ARP request 就完全无害了。
一句话,ip地址的重复管理员能搞定的也是可以屏蔽的。winbox操作是:



ros的命令行配置代码为
/interface bridge filte
add action=drop arp-src-address=0.0.0.0/32 chain=forward in-interface=前端设备桥端口 \
mac-protocol=arp out-interface=后端设备桥端口
前端设备互通之本地代理arp Local Proxy ARP
本地代理ARP,以网关自身的MAC回应本网段的IP地址的ARP请求,用于二层端口隔离时,同一网段的客户之间能够通信。
咋一看上去,本地代理确实可以支持部分前端设备的互通问题。但是本地代理arp在本拓扑中里面会存在两个问题,1、由于本地代理是用在二层网络完全隔离的网络中运行,而这种安防的后端设备是没有隔离的,只有前端隔离。这样就会造成后端发arp包时会收到设备和网关的双重回复,会造成arp缓存中的mac地址漂移抖动,造成监控网络的秒断秒联问题。2、由于本地arp代理相当于一个单臂路由了,流量都经过网关转发的。延时增加,TTL值也抖动,有时直连,有时又代理增加了一跳。
还好,ros系统除了提供本地arp代理模式外还提供了bridge nat arp reply的转发策略模式。就可以让需要互通的几个arp以网关mac地址来回应。直接上图。

这个就是没有分隔的端口发送arp请求得到了两个回复,一个是设备本身回复的,一个是网关代理回复的。一般设备是选用后面回复的那个拿更新自己的arp缓存。所以非隔离端口的同网段设备通信,一定不要开启本地arp代理。由于pon组网的特性,加上前面介绍的ai交换机mtu vlan支持。前端设备完全可以做到全隔离。这样通过选择开启本地arp代理回复才不会造成mac地址表的漂移。



不排除网关就会成每次一问两达。还要排除后端直连的ip地址,因后端未隔离,也会出现mac地址漂移的问题。若是前端的网络未完全隔离,这里就取消前面的感叹号,填目标的ip地址。只是多点互通的话条目就多了。

注意这个mac地址填网关的
执行的代码是
/interface bridge nat
add action=arp-reply arp-dst-address=!网关ip/32 chain=dstnat \
mac-protocol=arp src-mac-address=前端互通MAC地址/FF:FF:FF:FF:FF:FF \
to-arp-reply-mac-address=网关MAC地址
或者
/interface bridge nat
add action=arp-reply arp-dst-address=目标IP地址/32 chain=dstnat \
mac-protocol=arp src-mac-address=前端互通MAC地址/FF:FF:FF:FF:FF:FF \
to-arp-reply-mac-address=网关MAC地址
这样就基本解决了大型监控网路中PON组网遇到的arp广播包太多和前端隔离后互访的问题。通过充分ros系统特性,通过本人对网络的底层理解,提供一个解决思路。仅供朋友们参考,若有bug和相关质疑。都可以在评论区提出来,大家相互交流共同成长。