ICMPv6和IPv6 NDP
1. ICMPv6
IPV4使用ICMP做很多事情,诸如目的地不可达等错误消息以及ping和traceroute等诊断功能。ICMPv6也提供了这些功能,但不同的是,它不是独立的第3层协议。ICMPV6是IPV6不可分割的部分,其信息包含在基本IPv6报头后面的扩展报头中,ICMPv6新增了一项功能:默认情况下,可通过ICMPv6过程“路径MTU发现”来避免IPv6对分组进行分段。
路径MTU发现过程工作原理:源节点发送一个分组,其长度为本地链路的MTU。在该分组前往目的地的过程中,如果链路的MTU小于该分组的长度,中间路由器就会向源节点发送消息“分组太大”。这条消息向源节点指出了当前链路支持的最大分组长度,并要求源节点发送可穿越该链路的小分组、这个讨程不断持续下去,直到到达目的地,此时源节点便知道了该传输路径的MTU。接下来,传输其他数据分组时,源节点将确保分组不会被分段。
ICMPv6接管了发现本地链路上其他设备的地址的任务;在IPV4中,这项任务由地址解析协议负责,但ICMPV6将这种协议重命名为邻居发现协议(NDP)。这个过程是使用被称为请求节点地址(solicited node address)的组播地址完成的,每台主机连接到网络时都会加入这个组播组。为生成请求节点地址,在FF02:0:0:0:0:1:FF/104末尾加上目标主机的IPV6地址的最后24位。查询请求节点地址时,相应的主机将返回其第2层地址。网络设备也以类似的方式发现和跟踪相邻设备。前面介绍RA和RS消息时说过,它们使用组播来请求和发送地址信息,这也是ICMPv6的邻居发现功能。
在IPV4中,主机使用IGMP协议来告诉本地路由器,它要加入特定的组播组并接收发送给该组播组的数据流。这种IGMP功能已被ICMPv6取代,并被重命名为组播侦听者发现(multicast listener discovery)。
2. 邻居发现协议(NDP)

IPv6 ND的应用方式和协议栈位置
NDP以不同方式应用到主机和路由器。

IPv6 ND和其相应的IPv4协议组(ARP、IPCP等)的不同位置。IPv4相同链路相关协议在ARP/RARP(链路层之上)和ICMP(运行于IP之上)之间分割。IPv6 ND完全在ICMP之内。

协议操作总结
列表:
- 在线IPV6地址和相应的链路层地址列表;
- 邻居状态表(可达的,不可达的);
- 特定主权:
- 在线前缀列表;
- 在线路由器列表;
- 缺省路由器列表(乐意成为缺省路由器的在线路由器)。
消息:
- 邻居请求(NS):
- 邻居公告(NA):
- 路由器请求(RS):
- 路由器公告(RA):
- 重定向:
- 反向邻居请求(INS);
- 反向邻居公告(INA)。
NDP直接位于IPV6/ICMP之上产生了一系列值得澄清的问题。
当进行匹配的一个给定目的地址的链路层地址不知道时,寻求该关联的节点必须将其请求发送到更广大的侦听节点。在IPV4中,使用MAC层广播做到这点。在IPV6中,节点在这个请求中使用组播。使用的组播组是被请求节点组播组(具有链路本地范围)
注意:当知道一个前级的链路层地址之后,邻居请求可能再次发送,以确认关联信息(IP地址,链路层地址)。在此情况下,请求直接单播到目的地。
源和目的地:
当一个节点使用NDP获得其自己的地址时(参见“自动配置”部分),出现了另一个问题。它需要用于其请求的一个源地址,但还没有这样的地址。在这样的情况下,它能够将IPV6非指定地址(::)用做分组的SA。
鉴于地址解析消息发送到被请求节点组播地址(具有链路本地范围),其他NDP消息则意图到达所有节点或所有路由器。同时,SA可能是发送者的一个全局的或链路本地地址:后者总是优先使用,以最小化节点对重新缩比的依赖。下面是所有特殊地址的列表,在NDP消息交换中节点能够将之用做源和
- 目的地址:
- 所有节点组播地址(FF02::1,目的地);
- 所有路由器组播地址(FF02::2,目的地);
- 被请求节点组播地址(目的地);
- 链路本地地址(源或目的地);
- 非指定地址(:: 源)。
最后,IPv6节点使用两个算法来处理通过NDP搜集的信息:
- 下一跳确定算法。
- 缺省路由器选择。
ICMPv6和IPv6 NDP的更多相关文章
- openwrt+ndp+ndppd+radvd+dhcpv6,ipv6穿透配置指南
要用ipv6首先你的openwrt路由内核必须已经支持ipv6,且能安装相关软件! 首先说说最简单的ndp手工ipv6穿透,很简单,看代码详解: 环境: wan口 eth1 lan口 br-lan w ...
- IPv6 neighbor discovery
IPv6 neighbor discovery By stretch | Thursday, August 28, 2008 at 5:03 a.m. UTC Neighbor Discovery P ...
- IPv6原理、应用与实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯微信技术架构部团队 2017年11月26日,中共中央办公厅和国务院办公厅印发了<推荐互联网协议第六版(IPv6)规模部署行动 ...
- IPv6技术详解:基本概念、应用现状、技术实践(下篇)
本文来自微信技术架构部的原创技术分享. 1.前言 在上篇<IPv6技术详解:基本概念.应用现状.技术实践(上篇)>,我们讲解了IPV6的基本概念. 本篇将继续从以下方面展开对IPV6的讲解 ...
- IPV6技术笔记(剖析IPv4toIPv6)
IPV6技术笔记 IPv6地址入门概念 什么是IPv6? IPv6,全称Internet Protocol version 6,即网际协议版本6,也叫互联网通信协议第六版.是互联网工程任务组(IETF ...
- [华三] IPv6技术白皮书(V1.00)
IPv6技术白皮书(V1.00) http://www.h3c.com/cn/d_200802/605649_30003_0.htm H3C S7500E IPv6技术白皮书 关键词:IPv6,隧道 ...
- 计算机网络体系结构整理-第二单元IP技术
IP技术 1.IPV4 Ipv4的报头格式 Ipv4地址分为ABCDE类, 类别 IP地址范围 私有IP地址范围 A 0.0.0.0-127.255.255.255 10.0.0.0-10.255.2 ...
- 使用RawSocket进行网络抓包
aw socket,即原始套接字,可以接收本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的,一共可以有3种方式创建这种socket. 中文名 原始套接字 外文名 RAW SOCKET ...
- DOS命令之----Netstat+Task以及相关使用
作为一个初步接触电脑的人,在学习Android的过程中,遇到各种问题,今天遇到了.这样一个错误提示: The connection to adb is down, and a severe error ...
随机推荐
- Chernobyl’ Eagle on a Roof(鹰蛋坚固度)
链接 Chernobyl’ Eagle on a Roof 题意 引用论文题意:有一堆共 M 个鹰蛋,一位教授想研究这些鹰蛋的坚硬度 E.他是通过不断从一幢 N 层的楼上向下扔鹰蛋来确定 E 的.当鹰 ...
- ack 工具
ack-tools ack其实就是快速查找工具,但centos在没有这个安装包. 下载安装 cd /tmp git clone https://github.com/dongci/ack.git cd ...
- [IOI2011]Race $O(nlog^{2}n)$ 做法
这个应该还不是正解,明天看一下正解到底是什么... Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in&qu ...
- Gym-101615D Rainbow Roads 树的DFS序 差分数组
题目链接:https://cn.vjudge.net/problem/Gym-101615D 题意 给一棵树,每个边权表示一种颜色. 现定义一条彩虹路是每个颜色不相邻的路. 一个好点是所有从该节点开始 ...
- 【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 估计试几个就会发现答案总是n-1吧. 队友给的证明 [代码] #include <bits/stdc++.h> #def ...
- 洛谷——P1030 求先序排列
https://www.luogu.org/problem/show?pid=1030#sub 题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度< ...
- ORM进阶之Hibernate中对象的三大状态解析
ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一 ...
- 16进制颜色字符串转为UIColor
//16进制颜色(html颜色值)字符串转为UIColor +(UIColor *) hexStringToColor: (NSString *) stringToConvert { NSS ...
- codecombat之KithGard地牢19-37关代码分享
codecombat中国游戏网址:http://www.codecombat.cn/ 全部代码为javascript代码分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 19 ...
- pthread_create()创建线程时传入多个參数
因为接口仅仅定义了一个入參void *arg int pthread_create(pthread_t *tidp,const pthread_attr_t *attr, (void*)(*start ...