一、概述

        在IPv4网络环境当中,我们想要与对端进行网络通信时,首先需要去解析对方的MAC地址这样我们才能封装二层数据帧,就算访问不同网络时也需要解析网关的MAC,这些都是需要我们的ARP协议来进行操作完成的,但是在我们的IPv6网络环境当中并没有ARP协议,而是通过NDP协议来完成类似的操作,此文章我们将详细与大家介绍NDP协议的报文结构,NDP的工作机制等,方便大家对IPv6协议的进一步了解。

二、ICMPv6

        因为我们的NDP协议是封装在ICMPv6之上的所以这里我们先介绍一下ICMPv6协议并比较ICMPv6与ICMPv4的区别,ICMPv4在IPv4网络当中并不算特别重要,少了ICMPv4协议也可以正常通信,但在IPv6当中要是没有了ICMPv6则无法正常通信了,所以ICMPv6在IPv6网络当中非常重要。 

        ICMPv6是IPv6的基础协议之一,用于向原节点传递报文转发的信息或错误。

        协议类型好(即IPv6 Next Header)为58。

        在IPv6当中,ICMPv6除了提供ICMPv4的对应功能之外,还有其他一些功能的基础,如邻居发现、无状态地址配置、重复地址检测、PMTU发现等。

三、NDP

1、NDP能够实现的功能

  • 地址解析-ARP的功能
  • DAD-地址冲突检测-免费ARP功能
  • NUD-邻居不可达检测
  • 路由器发现-生成前缀信息-网关

2、报文类型

        常见的NDP报文类型有四个分别为:

  • RS(Router Solicitation)路由器请求报文
  • RA(Router Advertisement)路由器通告报文
  • NS(Neighbor Solicitation)邻居请求报文
  • NA(Neighbor Advertisement)邻居通告报文

2、NS和NA

在讲NS之前,我们先回顾一下IPv4中ARP是如何去解析对方的地址的。

首先我们想要去解析对方的MAC首先得有对方的三层信息就是IP,发出一个ARP的Request广播报文来寻找对方,对方在接收到我们的请求报文之后就会将自己的MAC地址填进去回复一个Reply响应报文,当我们接收到对方的响应报文时就得到了对方的MAC地址就可以封装二层数据了。

要注意的一点是,在IPv4当中使用ARP去请求MAC时发送的是一个广播报文,但在IPv6当中并没有广播报文,那我们在发送请求报文时目的IP怎么填写呢?

这里就需要用到我们IPv6详解当中介绍的被请求节点组播地址了,我们NS在请求对方MAC的时候目的IP填写的就是我们通过计算得出的对方的被请求节点组播地址。

举个例子:

此时我们让AR1去请求AR2的MAC,那么就会发出这样的一个报文

AR2在接收到这个NS请求报文之后,拆包发现目的MAC为自己的被请求节点组播地址的MAC,就会继续往上层进行拆包,拆完后发现对方要请求我的MAC,AR2首先会将ICMPv6 Option当中的Link-layer address(AR1的MAC)与源IP做一个绑定形成一个邻居表,随后发送一个NA报文给对方告诉对方AR2我的MAC是多少。

AR1在收到AR2发送的NA邻居通告报文之后就会通过里面的MAC和IPv6地址做一个绑定形成邻居表。

3、DAD 

当我们在接口上配置好IPv6地址并UP之后,会发送一份NS报文,这个报文类似于IPv4网络当中的免费ARP。用来检测是否有地址冲突的,假如这个网络当中存在地址冲突,对方就会回复一个NA报文,本设备在接收到对方的NA报文之后就知道网络中已经有人使用了这个地址。

与IPv4不同的是,在IPv4网络当中如果存在地址冲突但双方还是可以正常使用该地址的只不过可能会将报文误发给对方,但IPv6网络当中如果发现存在地址冲突,本设备收到了对方的NA报文以后就会将该地址的状态置为DUPLICATE状态,不能使用该地址。

举个例子:

我们将AR2的接口IPv6地址配置与AR1一致,AR2的地址UP的时候就会发送一份NS用来做DAD地址冲突检测

AR1在收到AR2发送的NS报文之后就会回复一份NA,AR2在收到这份NA报文之后就知道该地址已经被人使用了,会将该地址置为DUPLICATE状态。

4、RS和RA

         在IPv6网络当中我们可以通过RS和RA报文来获取到前缀信息以及网关

举个例子:

我们让AR2去获取IPv6地址前缀,AR2会发出一份RS,当AR1收到这份RS时,就会将前缀放入到RA当中回复给AR2,AR2收到RA之后通过前缀+EUI64计算出一个IPv6地址进行使用。这就是我们所说的即插即用。

AR2的RS报文

AR1的RA报文

以上就是本章的全部内容了,感谢大家的浏览观看!文章若有错误或疑问可联系博主删除更改。

四、NDP案例

1、地址解析案例 

 

2、DAD案例

 3、无状态自动获取案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87286.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87286.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87286.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TortoiseSVN迁移到本地git

将项目从Subversion(SVN)迁移到Git是许多开发团队的需求,因为Git提供了更多的功能和灵活性。本文将详细介绍如何使用TortoiseSVN将项目迁移到本地Git仓库。 一、准备工作 安装Git:确保在本地机器上安装了Git。可以通过以下命令检…

高性能 Web 服务器之Tengine

一、概述 Tengine 是一个由淘宝网发起的 Web 服务器项目。它基于 Nginx 然后针对大访问量网站的需求,添加了很多高级功能和特性,从 2011 年 12 月开始,Tengine 正式开源。Tengine 的性能和稳定性已经100多家大型网站如淘宝网,天猫…

简单实现HTML在线编辑器

我们继续来看一下如何开发一个简单的html在线编辑器&#xff0c;要求很简单 能够同时编辑html&#xff0c;css&#xff0c;js代码&#xff0c;并且运行之后可以同时预览效果 一&#xff1a;前置知识 在H5中设置了一个新的标签&#xff0c;<iframe>&#xff0c; 用于在当前…

【Bluedroid】蓝牙启动之核心模块(startProfiles )初始化与功能源码解析

本文深入解析Android蓝牙协议栈中 start_profiles 函数及其调用的核心模块初始化逻辑,涵盖 BNEP、PAN、A2DP、AVRC、HID Host、BTA_AR 等关键配置文件和应用层模块。通过代码分析与流程梳理,阐述各模块如何通过全局控制块、状态机、回调机制实现功能初始化、连接管理及数据交…

RK3576 Android14 DMIC调制

一、背景 近期项目中有个DMIC调试的需求&#xff0c;搁置了较长时间&#xff0c;现今着手调试&#xff0c;遂作记录。 二、开发环境 OS&#xff1a;Android14 Platform&#xff1a;RK3576 Linux Version&#xff1a;6.1.99 SDK Version&#xff1a;android-14.0-mid-rkr6 …

使用 Prometheus 监控 Spring Boot 应用

SpringBoot+Prometheus+Grafana实现监控 逻辑如图 应用程序在生产环境中运行时,监控其运行状况是非常必要的。通过实时了解应用程序的运行状况,才能在问题出现之前得到警告,也可以通监控应用系统的运行状况,优化性能,提高运行效率。 一、监控 Spring Boot 应用 下面我们…

简易计算器 Python 实现

目录 一、代码逐步分析&#xff08;适合刚入门的朋友看&#xff09; 1.定义了一个名为simple_calculator的函数&#xff0c;封装了整个计算器的逻辑。 二、深入分析代码块&#xff0c;用更加官方的语词来说&#xff08;适合想要深入学习的朋友&#xff09; 主循环结构 退出…

开源编译器介绍

文章目录 基本构成传统编译器编译器的发展历史&#xff08;History of Compiler&#xff09;GCC 编译过程与原理&#xff08;GCC Process and Principle&#xff09;LLVM/Clang 编译过程与原理&#xff08;LLVM/Clang Process and Principle&#xff09;GCC与与 LLVM/Clang 的对…

C++ String知识点

当然可以&#xff01;下面我将以系统全面、通俗易懂、深入浅出的方式&#xff0c;为你讲解 C 中非常核心但也容易被低估的内容 —— std::string。 &#x1f31f; C std::string 全面详解 &#x1f4cc; 一、string 是什么&#xff1f; C 的 std::string 是 C 标准库中封装好…

全新NVIDIA Llama Nemotron Nano视觉语言模型在OCR基准测试中准确率夺冠

全新NVIDIA Llama Nemotron Nano视觉语言模型在OCR基准测试中准确率夺冠 PDF、图表、图形和仪表板等文档是丰富的数据源&#xff0c;当这些数据被提取和整理后&#xff0c;能够为决策制定提供有价值的洞察。从自动化财务报表处理到改进商业智能工作流程&#xff0c;智能文档处…

gradle的 build时kaptDebugKotlin 处理数据库模块

gradle的 build时输出&#xff1a; Task :app:kaptDebugKotlin 注: Processing class HDCoinBean 注: Processing class HDCurrencyBean 注: Processing class HDSelfAddCoin 注: Processing class MN 注: Creating DefaultRealmModule <—> 80% EXECUTING [7m 56s] IDLE…

二叉树的节点操作算法

235. 二叉搜索树的最近公共祖先 力扣题目链接(opens new window) 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大…

【ubuntu驱动安装】安装nvidia驱动和cuda环境

1、安装驱动 首先查看环境和显卡&#xff1a; 更新apt 查看nouveau是否禁用 如果有返回值禁用nouveau(nouveau是通用的驱动程序)&#xff08;必须&#xff09;&#xff0c;两种文件&#xff0c;22.04是下面那个 添加如下&#xff1a; 终端输入后更新 重启电脑sudo reboo…

力扣HOT100之终章:一些随笔

今天终于把力扣HOT100系列给刷完了&#xff0c;每一道题都记录了自己的思考过程和解题过程中参考的一些题解和视频&#xff0c;方便自己以后再刷的时候快速复习&#xff0c;从2025年3月4日写下第一篇博客&#xff0c;到2025年6月12日完成最后一题并写下最后一篇博客&#xff0c…

榕壹云家政系统:基于Spring Boot与UniApp的智能家政服务解决方案

在数字化浪潮下&#xff0c;传统家政行业正面临效率与服务质量的升级挑战。榕壹云公司依托前沿技术&#xff0c;推出了一款用户端与师傅端二合一的家政服务小程序&#xff0c;通过整合预约上门、分销、储值、优惠券等功能&#xff0c;为家政服务行业提供了一套高效、灵活的数字…

CSRF扩展 JSONP劫持

介绍&#xff1a;JOSNP&#xff08;JSONP with Override Security Negotiation Protocol&#xff09;劫持是一种利用JSONP &#xff08;JSON with Padding&#xff09;跨域数据获取机制的安全漏洞&#xff0c;攻击者通过篡改或伪造JSONP回调函数窃 取用户敏感数据。由于JSONP…

HTTP/HTTPS 协议解析

前言 在当今互联网时代&#xff0c;HTTP/HTTPS 协议作为 Web 通信的基石&#xff0c;承载着几乎所有的网络内容传输。对于我们而言&#xff0c;深入理解这些协议不仅是技术素养的体现&#xff0c;更是构建高性能、安全、可靠 Web 应用的必要条件。 为什么我们需要深入了解 HT…

Flask-login 处理授权逻辑

认证 vs 授权&#xff1a; 在 Web 应用程序的安全机制中&#xff0c;认证&#xff08;Authentication&#xff09; 和 授权&#xff08;Authorization&#xff09; 是两个核心概念&#xff0c;它们虽然紧密相关&#xff0c;但职责和作用不同。 认证&#xff08;Authenticatio…

xenomai3+linux构建linux实时操作系统-基于X86_64和arm

简介&#xff1a; Xenomai是一个实时性解决方案&#xff0c;通过在Linux上添加实时内核Cobalt来增强实时性能。它有三个主要部分&#xff1a;libcobalt&#xff08;用户空间实时库&#xff09;、Cobalt&#xff08;内核空间实时内核&#xff09;和硬件架构特定层&#xff08;ip…

Linux核心文件(core file)详解

一、核心文件&#xff08;core file&#xff09;概述 1.1 什么是核心文件 核心文件&#xff08;core file&#xff09;是Linux操作系统在程序崩溃时生成的一种转储文件。它包含了程序崩溃时的内存内容、寄存器状态和执行状态。通过分析核心文件&#xff0c;开发者可以找到程序…