目录
为了减小设备故障对业务的影响 提高网络的可用性
设备需要能够尽快检测到与相邻设备间的通信故障
以便能够及时采取措施 从而保证业务继续进行

故障检测中的硬件检测特点是能够很快发现故障 但是并不适⽤于所有的传输介质
慢hello机制可以检测到⽹络故障 BFD是快速检测故障机制
能够实现快速故障检测
BFD Bidirectional Forwarding Detection 双向转发检测
解决了上述检测机制的不足
通用 标准化 介质无关 协议无关 为上层协议服务
全网统一的检测机制 用于快速检测 监控网络中链路或路由转发连通状况
保证邻居之间能够快速检测到通信故障 从而快速建立起备用通道恢复通信
BFD是⼀个与协议⽆关、介质⽆关的快速检测协议
本身没有发现机制 靠上层协议通知
建立BFD会话 周期性发送BFD控制报文进行检测-10次/1s
检测到故障后 再通知上层协议

上层协议通过自己的Hello机制发现邻居并建立连接
上层协议再建立了新的邻居关系时 将邻居的参数及检测参数都通告给BFD
BFD根据收到的参数进行计算并建立邻居

当网络出现故障时:
1 BFD检测到链路/网络故障
2 拆除BFD邻居会话
3 BFD通知本地上层协议进程BFD邻居不可达
4 本地上层协议中止上层协议邻居关系
5 如果网络中存在备用路径 路由器将选择备用路径


BFD状态机的建立和拆除都采用三次握手 以确保两端系统都能知道状态的变化

状态迁移规则:对端状态变化 检测定时器超时

BFD是公有技术 不同的厂商之间也都支持
BFD会话的建⽴有两种⽅式 即静态建⽴BFD会话和动态建⽴BFD会话
静态和动态创建BFD会话的主要区别在于
本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)的
配置⽅式不同
BFD通过控制报⽂中的Local Discriminator和Remote Discriminator区分不同的会话
静态配置BFD会话是指通过命令行、手工配置、BFD 会话参数
包括本地标识符和远端标识符等
静态建⽴BFD会话时 动态分配本地标⽰符
系统通过划分标识符区域的⽅式 来区分静态BFD会话和动态BFD会话
使用组播地址=224.0.0.184 封装在UDP下


检测IP链路
BFD单臂回声功能
与接口状态联动
与静态路由联动
与RIP联动
与OSPF联动
与IS-IS联动
与BGP联动
与MPLS联动
与IPv6联动
与Smart Link联动 -STP优化技术
与VRRP联动
在IP链路上建立BFD会话 利用BFD检测机制快速检测故障
BFD检测IP链路支持单跳检测和多跳检测

对于有一端不支持BFD的环境 通过BFD报文的环回操作检测转发链路的连通性
注 单臂回声功能只适用于单跳BFD会话中
BFD单臂可以用于直连的两台设备

关联接口状态 提高了接口感应链路故障的灵敏度 减少了非直连链路故障导致的问题

二层情况下 没有IP地址也可以照样工作 与接口关联
与动态路由协议不同 静态路由本身没有检测机制 所以当网络发生故障的时候
需要管理员介入 BFD为静态路由绑定会话 检测链路故障(由Up转为Down后)
BFD会将故障上报路由管理系统 由路由管理模块将这条路由设置为“非激活”状态
(此条留有不可用 从IP路由表中删除)Inactive
静态路由的缺点:需要管理员介入 没有错误检测机制
将BFD和OSPF关联起来 通过BFD对链路故障的快速感应进而通知OSPF协议
从而加快OSPF协议对于网络拓扑变化的响应


在不使⽤BFD检测机制的情况下 通过以太⽹链路建⽴邻居关系的OSPF路由器
在链路故障之后最⻓需要40秒才会中断邻居关系
OSPF邻居之间发送hello时间10s ,死亡时间为4倍的hello时间40s
BGP协议通过周期性的向对等体发送Keeplive报文来实现邻居检测机制
但这种机制检测到故障所需时间比较长 超过1s 当数据达到吉比特速率级别时
将会导致大量的数据丢失 利用BFD的快速检测机制 迅速发现BGP对等体间链路的故障
并报告给BGP协议 从而实现BGP路由的快速收敛
Keeplive-60s

将BFD应用于Backup对Master的检测 VRRP通过监视BFD会话状态实现主备快速切换
切换时间控制在50ms以内


BFD快速检测机制,默认检测报⽂发送时间间隔1000ms
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我想知道我的代码是否在rspec下运行。这可能吗?原因是我正在加载一些错误记录器,这些记录器在测试期间会被故意错误(expect{x}.toraise_error)弄得乱七八糟。我查看了我的ENV变量,没有(明显的)测试环境变量的迹象。 最佳答案 在spec_helper.rb的开头添加:ENV['RACK_ENV']='test'现在您可以在代码中检查RACK_ENV是否经过测试。 关于ruby-检测由RSpec、Ruby运行的代码,我们在StackOverflow上找到一个类似的问题
我正在使用rubydaemongem。想知道如何向停止操作添加一些额外的步骤?希望我能检测到停止被调用,并向其添加一些额外的代码。任何人都知道我如何才能做到这一点? 最佳答案 查看守护程序gem代码,它似乎没有用于此目的的明显扩展点。但是,我想知道(在守护进程中)您是否可以捕获守护进程在发生“停止”时发送的KILL/TERM信号...?trap("TERM")do#executeyourextracodehereend或者你可以安装一个at_exit钩子(Hook):-at_exitdo#executeyourextracodehe
我有一个定义类的Ruby脚本。我希望脚本执行语句BoolParser.generate:file_base=>'bool_parser'仅当脚本作为可执行文件被调用时,而不是当它被irbrequire(或通过-r在命令行上传递)时。我可以用什么来包装上面的语句,以防止它在我的Ruby文件加载时执行? 最佳答案 条件$0==__FILE__...!/usr/bin/ruby1.8classBoolParserdefself.generate(args)p['BoolParser.generate',args]endendif$0==_
我有以下字符串,我想检测那里的换行符。但是Ruby的字符串方法include?检测不到它。我正在运行Ruby1.9.2p290。我哪里出错了?"/'ædres/\nYour".include?('\n')=>false 最佳答案 \n需要在双引号内,否则无法转义。>>"\n".include?'\n'=>false>>"\n".include?"\n"=>true 关于Ruby无法检测字符串中的换行符,我们在StackOverflow上找到一个类似的问题: h
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
我有一个连接到服务器的rubytcpsocket客户端。在发送数据之前如何检查套接字是否已连接?我是否尝试“拯救”断开连接的tcpsocket,重新连接然后重新发送?如果是这样,有没有人有一个简单的代码示例,因为我不知道从哪里开始:(我很自豪我设法在rails中获得了一个持久连接的客户端tcpsocket。然后服务器决定杀死客户端,一切都崩溃了;)编辑我已经使用此代码解决了一些问题-如果未连接,它将尝试重新连接,但如果服务器已关闭则不会处理这种情况(它将继续重试)。这是正确方法的开始吗?谢谢defself.write(data)begin@@my_connection.write(
我在一台Windows764位机器上使用Sass和Ruby(最新版本),我正在我的家庭服务器上处理一个共享文件夹。(但是,我不得不承认问题本身也出现在服务器上,因为我试图安装Ruby并直接-watch服务器上的文件)。问题如下:如果我第一次保存,检测到变化,我的style.css被直接覆盖。之后,我总是需要保存多达7次才能覆盖style.css。每次都会检测到更改,但不会编译任何内容。这是一个屏幕:>>>Sassiswatchingforchanges.PressCtrl-Ctostop.overwritestyle.css>>>Changedetectedto:E:/Websites
我所在的团队负责管理公司面向公众的云平台。我们拥有大量运行面向互联网的VM的用户群。我想对我们的地址空间进行自动扫描,看看是否有人在运行Rails应用程序,这样我就可以通知他们升级他们的Rails版本,以避免本周出现的严重安全漏洞。我注意到在某些Apache部署中,有一个有用的PassengerHeader:X-Powered-By:PhusionPassenger(mod_rails/mod_rack)2.0.3然而,这并不可靠。我想知道是否有一种可靠的方法来检测在Web服务器后面运行的Rails,无论是使用响应header还是某种可以确定的GET/POST。谢谢!
这行ruby代码检测素数(太棒了!)。("1"*n)!~/^1?$|^(11+?)\1+$/#wherenisapositiveinteger详细信息在这篇博文中解释http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/我很好奇它在BIG-O表示法中的表现。有人帮忙吗? 最佳答案 根据经验数据,它似乎是O(n2)。我对前10000个质数中的每100个运行Ruby代码。以下是结果:蓝点是记录的时间,橙色线是