【IPv6】邻节点不可到达检测学习(NUD)

邻节点不可到达检测

邻节点不可到达检测方法有2种:

1. 通过发送单播邻节点请求报文和接收响应请求的邻节点公告报文来完成。

2. 借助上层协议确定可达性。(TCP)

通过NS/NA报文进行NUD检测

响应请求的邻节点公告报文仅用于响应邻节点请求报文,响应请求的邻节点公告报文会将其报文中的请求标志置为1。(响应时,NA报文中请求标志位设为1)。

自发的邻节点公告报文或路由器公告报文并不能用于验证可达性。

邻节点请求报文和邻节点公告报文的交互仅能确认从发送邻节点请求报文的节点A到发送邻节点公告报文的节点B的可到达性,并不能验证从B到A的可达性。

不可达检测是单向的。

借助上层协议进行NUD检测

当上层协议表示使用下一跳地址进行的通信正处于发送数据的过程中时,可以间接确定可到达性。对于TCP业务流来说,开始发送数据表明已经收到了对方节点发来的对发送数据请求的确认。由接收到的TCP确认所证实的端到端的可到达性,也同时暗示了通往目标的第一跳的可到达性。TCP协议模块根据现有的机制,把这些暗示提供给了IPv6协议模块。

邻节点缓存表项的状态

1. 未完成(INCOMPLETE )

使用请求节点多播邻节点请求报文的IPv6地址解析过程正在进行中。当创建一个新的邻节点高速缓存表项,但此节点相应的链路层地址还没有得到时,会进入未完成状态。在放弃地址解析并删除邻节点高速缓存表项之前可以发送的多播邻节点请求报文的数目可以由变量来设置。RFC2461使用MAX_MULTICAST_SOLICIT的变量,并建议此变量的值为3。

个人理解:

也就是说,要添加一条邻居缓存表项,先进入INCOMPLETE状态,然后在发送MAX_MULTICAST_SOLICIT次NS请求前,如果获取到了节点相应的链路层地址,那么该条邻居缓存状态变化为REACHABLE。否则删除该条邻居缓存。

2. 可到达(REACHABLE)

通过接收响应请求的单播邻节点公告报文,可以确认邻节点的可到达性。邻节点高速缓存的表项会一直保持可到达REACHABLE状态,直到路由器公告报文的可到达时间字段中规定的时间(毫秒数)(或主机默认值)耗尽为止。

只要上层协议,比如TCP协议,表示传输数据的通信仍在进行中,则相关表项就会始终保持可到达状态。每当上层协议表示要开始传输数据时,表项中的可到达时间就会被刷新。

个人理解:

可到达可以保持一段时间,这段时间内,该条邻居缓存的状态一直是REACHABLE状态。

如果有上层协议TCP在通信,表项中的可到达时间就会被刷新。

3. 失效(STALE)

可到达时间(自从上次收到可到达确认后过去的时间)耗尽。当路由器公告报文的时间可到达时间字段中规定的时间(毫秒数)(或主机默认值)耗尽时,邻居缓存的表项进入失效STALE状态,并且一致保持该状态,直到有数据包发送给这个邻节点。

当主机收到一个公告自己链路层地址的自发邻节点公告报文(NA)时,与此邻节点对应的表项也会进入失效状态???

个人理解:

时间耗尽,邻居缓存表项状态变为STALE,直到有报文发送到该邻节点会发生变化。

4. 延迟(DELAY)

为等待上层协议提供可达性确认,在主机发送邻节点请求报文(NS)前,邻节点缓存表表项进入延迟DELAY状态,并且等待一段可以设定的时间。RFC2461中使用名为DELAY_FIRST_PROBE_TIME的变量,并建议此变量的值为5秒。如果在延迟时间结束时,还没有收到可到达性的确认,则此表项进入探测PROBE状态,并发送一个单播邻节点的请求报文。

个人理解:

在失效状态下,有报文要发送到一个邻节点,该邻居缓存的状态变换为延迟。

在延迟期内如果收到了可达性确认,则进入到REACHABLE状态。延迟期内没有收到可达性确认,发送一个单播邻节点的请求报文(NS),进入到探测阶段。

5. 探测(PROBE)

无论邻节点缓存的表项处于失效状态还是延迟状态,都表示正在进行可到达性的确认。主机按照一定的时间间隔发送单播邻节点请求报文(NS),这个时间间隔等于主机收到的路由器公告中的重传定时器字段的值(或默认值)。在放弃可达性检测并删除相应的邻节点缓存表项之前可以发送的邻节点请求报文的数目可以由变量来设置。RFC2461使用名为MAX_UNICAST_SOLICIT的变量,并建议此变量的值为3。

个人理解:

探测阶段,还可以发送几次NS报文用来确认可达性。如果不能得到确认,删除该表项。

任何表项在任何时刻,都可以从任何状态进入无表项存在状态。(表项不存在,即删除之)。

如果不可达的邻节点是路由器,则主机可以从的默认路由器列表中选择另一个路由器,并且对新选择的这个路由器进行地址解析和邻节点不可到达检测。

如果路由器变成主机,则它应该发送路由器标志为0的多播邻节点公告报文。如果主机收到了从路由器发来的邻节点公告报文,并且其中的路由器标志为0,则主机将它的默认路由器列表中删除该路由器,如果需要,就再选择另一个路由器。

原文地址:http://blog.51cto.com/qiaopeng688/2150119

时间: 2024-11-02 21:53:48

【IPv6】邻节点不可到达检测学习(NUD)的相关文章

模式匹配之surf----特征点检测学习_2(surf算法)

在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高.后面有不少学者对其进行了改进,其中比较出名的就是本文要介绍的surf算法,surf的中文意思为快速鲁棒特征.本文不是专门介绍surf所有理论(最好的理论是作者的论文)的,只是对surf算法进行了下整理,方便以后查阅. 网上有些文章对surf做了介绍,比如: http://wuzizhang.blog.163.com/blog/static/78

TCP带外数据学习总结(概念,发送接收过程,数据到达检测,代码实现)

最近在学习<Linux高性能服务器编程> 这本书,书中零零散散的讲了TCP带外数据的一些知识,在这里把这些知识总结以下,方便自己,也方便他人. 本文主要分为以下四个方面总结,分别为 TCP带外数据的概念,如何发送和接收带外数据,怎么检测带外数据的到达,最后介绍相关函数以及代码实现. 第一部分: TCP带外数据的概念 有很多传输层此协议都具有带外数据(OUT Of Band) 的概念,其作用是迅速通告通信的另一方本段发生的重要事件.带外数据具有比普通数据更高的优先级,理论上应该被立即发送和立即接

文本检测学习笔记——边界聚类,笔画分割,语句段落分类

时间: 2014-02-28 10:24:39 2.21 ~2.27  这一周在阅读一篇比较长的文献 Localizing Text in Scene Images by Boundary Clustering, Stroke Segmentation, and String Fragment Classification By Chucai Yi 1. 杂谈  从题目Localizing Text,可以看出文章主要是在做一个工作 ——— 文字定位.文字定位,也可以说是文字检测,是自然语言处理中

openCV目标检测学习笔记(一)

最近在研究一些基于openCV的目标检测算法,由浅入深,今天是第一天. 首先网上下载了一份较简单的来对视频中运动物体进行二值显示的代码进行学习,以下是我的理解,初学者会犯一些错希望大家予以指正. #include<cv.h>#include "cxcore.h"#include<highgui.h> int main(int argc,unsigned char* argv[]) { CvCapture* capture = cvCreateFileCaptur

【OpenCV】基于HOG与SVM的行人检测学习

最近听了关于HOG与SVM的报告,比较深刻的学习了算法原理与实现方式.这里根据一些资料作下总结,方便日后拾起: A.方向梯度直方图(HOG,Histogram of Gradient) 将图像依次划分为检测窗口(window).块(block).胞元(cell)3个层次 大体流程: 逐像素计算方向梯度: 对cell中的像素根据梯度划分区间,给出统计直方图: 对于每个block中重叠的cell进行对比度归一化: 把所有直方图向量组成HOG特征向量. HOG特征向量: OpenCV对于HOG描述子(

nginx下后端节点realserverweb健康检测模块ngx_http_upstream_check_module

本文章收录做资料使用,非本人原创,特此说明. 公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx

# PyTorch目标检测学习小结

一.环境搭建 当前:Windows10 + Anaconda3.6 1.1 创建PyTorch的虚拟环境 打开Anaconda中的Anaconda Prompt那个黑框框,输入: #注意这里pytorch是自己设置的虚拟环境名称,可以随意取 conda create --name pytorch python=3.6 之后输入y,创建pytorch虚拟环境.以下是一些常规命令: #进入到虚拟环境 activate pytorch #切回root环境 activate root #删除虚拟环境 c

pgspider Citu 副本以及节点移除简单学习

使用citus 使用副本配置对于灾备处理是比较重要的,以下是一个简单的学习 环境准备 使用docker-compose运行 docker-compose 文件 version: "3" services:  graphql-engine:    image: hasura/graphql-engine:v1.1.0    ports:    - "8080:8080"    environment:      HASURA_GRAPHQL_DATABASE_URL:

Harris角点检测学习

1.角点的定义与性质 角点是一种局部特征,具有旋转不变性和不随光照条件变化而变化的特点,一般将图像中曲率足够高或者曲率变化明显的点作为角点.检测得到的角点特征通常用于图像匹配.目标跟踪.运动估计等方面. 2.Harris角点 1)定性描述 该算法中,将图像分为平坦区域.边缘.角点三部分.平坦区域中像素灰度在各个方向上变换都很小,边缘上的像素灰度在某个方向变化很大,但是在另一些方向变化很小:位于角点上的像素灰度则在各个方向上的变化都比较大.这是通过人眼观察得到的直观感受. 2)量化的数学表达 不同