IPv6地址、单播、多播/组播介绍
IPv6地址、单播、多播/组播介绍
1. IPv6地址介绍
这里主要介绍IPv6地址,什么是IP地址就不介绍了。
IPv6地址主要是为了解决IPv4地址枯竭的问题。
1.1 IPv6地址的格式
IPv6地址有128位,通常使用16进制表示,一个16进制数可以表示4位二进制,因此128位可以使用32个16进制数表示,而把4个16进制数又分成一组,因此128位可以表示成8组。
如下图所示,一个X表示一组(4个)16进制字符串,也就是一组包含了16个二进制。一共有8组。
图片来源:《IPv6 Fundamentals A Straightforward》
1.2 IPv6地址简写方式
一个完整的IPv6地址有32个十六进制字符串表示,太长了,可以简写,简写规则有两种:
- 省略每一组开头的0
- 省略连续的若干个0,使用两个冒号
::
表示省略的0。
1.2.1 省略开头的0
使用第一种简写规则,省略开头的0,如下图所示:
1.2.2 使用双冒号代替连续的0
如果使用第二种规则,省略连续的0,使用两个冒号表示::
,如下图:
1.2.3 两种方式结合
如果把两种规则结合起来,也是最常见的写法,如下图:
1.2.4 简写时注意事项
- 双冒号
::
只能在IPv6地址中出现一次
比如地址:ffff:0000:0000:ffff:0000:0000:0000:0001
,就不能写成:ffff::ffff::0001
,因为这样写根本不知道原来的地址是什么样的。 - 使用双冒号
::
代替连续0最多的
比如地址:ffff:0000:0000:ffff:0000:0000:0000:0001
,后面有连续的三组都是0,因此应该使用双冒号::
代替这里,因此标准简写应该是ffff:0000:0000:ffff::00001
。 - 连续的0出现位置一样多,双冒号代替先出现的(最左边的)。
比如地址:ffff:0000:0000:ffff:ffff:0000:0000:ffff
,第一二组是连续的0,第六七组也是连续的0,标准写法应该是只能使用双冒号::
代替先出现的,也就是第一二组,标准写法为:ffff::ffff:ffff:0000:0000:ffff
1.3 IPv6地址分类
IPv6地址分类基本可以如下图所示:
IPv6地址可以分为三种类型:单播地址、多播地址、任播地址。
2. 单播地址unicast
如上图,单播地址可以分为6种:
- Global Unicast
- Link-Local Unicast
- Loopback
- Unspecified
- Unique Local
- Embedded IPv4
2.1 Global Unicast Address
全局单播地址Global Unicast Address前缀是2000::/3
,/3
表示子网掩码,表示前面3位是固定的,跟IPv4掩码一样的。
全局单播地址全局唯一,不会重复,全局单播地址Global Unicast Address就像我们IPv4的公网IP地址。
2.2 Link-Local Unicast
Link-Local Unicast 前缀是fe80::/10
,用于一个局域网内,不同的局域网的Link-Local地址可以重复。
类似IPv4的私网IP,比如IPv4的192.168.0.1
2.3 Loopback
回环地址Loopback前缀是::1/128
,使用回环地址的数据包不会经过网卡,回环地址用于本地测试。
跟IPv4的回环地址127.0.0.1
是一样的。
2.4 Unspecified
unspecified未指定的,这个地址固定就是全0,表示没有IPv6地址。
2.5 Unique Local
看名字,有个单词local,这个地址也是用于局域网,但是不同局域网的Unique Local Address不会重复。
那么不同的局域网如何保证产生的地址不重复呢?这涉及到一个算法,这里就不介绍了,这个地址的生成就类似UUID的生成。
2.6 Embeded IPv4
这个地址就是把IPv4地址包含在IPv6地址中,把IPv6地址的高80位全部设置为0, 然后中间16位设置为1, 低32位设置为IPv4地址。如下图:
3. 多播地址multicast
还是这个图,怕看到这里忘了,再放一次:
多播地址有很多种,重要的有三种:
- Well-Known
- Transient
- Solicited-Node
3.1 多播地址格式介绍
如下图:
每个字段的意思图上都有解释,主要说说Scope字段,这个字段表示了多播的范围,按照字面意思可能不好理解,如下图:
3.1 Well-Known
Well-Known 多播地址前缀是ff00::/12
,也就是最常见的多播地址。
注意:
IPv6没有广播地址,Well-Known多播地址包含了广播地址,比如上图中第一条地址,多播给多有设备,就是广播。
3.2 Transient
这个,,先不讲了
3.3 Solicited-Node
这个,,有点没看懂,简单说说。。。
Solicited-Node多播地址前缀是ff02:0:0:0:0:1:ff00::/104
。
书上说Solicited-Node多播地址用于主要用于NDP(Neighbor Discovery Protocol)协议,NDP协议的功能有两个:
- Address resolution
- Duplicate Address Detection (DAD)
NDP协议的Address resolution功能就类似IPv4的ARP协议,名字都一样,就是根据IP地址请求MAC地址。
DAD功能是用来检测局域网中的所有设备的单播地址都是不同的。
3.3.1 单播地址到Solicited-Node多播地址的映射
Solicited-Node多播地址前104位是固定的,还剩下的24位则是来自单播地址,这剩下24位和单播地址是相同的。
如下图,把单播地址的低24位拷贝过来,作为Solicited-Node多播地址的低24位。
如上图,这个单播地址可以是全局单播地址,也可以是Link-Local单播地址。
3.3.2 Solicited-Node多播地址到MAC地址的映射
这个映射提现了多播地址比广播地址好的地方。。。。
Solicited-Node多播地址要映射到MAC地址上,就是Mac地址的高12位不变,低32位改为Solicited-Node多播地址的低32位。如图所示:
我之前以为MAC地址是固定不变了,原来可以改变。
这里我有个疑惑,每个设备有个公网地址Global Unicast Address,也有一个私网地址Link-Local Unicast Address,那这样不是会产生两个Mac地址吗????
这样映射有什么好处?
多播地址只能用于目的地址,因此这样的数据包发出去后,目标设备接收时,只看Mac地址就可以知道,是不是发给自己的,就不用拆包查看IP地址了。
4. IPv6地址查看
查看了自己电脑的IP,如下图:
可以确定的是有一个回环地址:::1/128
,还有个Link-Local地址:fe80::b105:a91f:85a5:e1ef/64
。
参考资料
《IPv6 Fundamentals A Straightforward》
IPv6地址、单播、多播/组播介绍相关推荐
- 判断mac地址单播还是组播(shell脚本)
MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置.MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique ide ...
- HCIA-RS自用笔记(9)数据转发过程、单播/多播/组播
数据转发过程(7/13,29min) 网关(Gateway) 不同网络的主机需要通讯,首先要把数据转发给网关,网关代表一条缺省路由 查看Windows主机路由表: C:\Users\Admin> ...
- ipv6下单播。组播 泛播
ipv6地址可以分成三类:单播地址.组播地址和任播地址. 单播地址又可以分为 单播本地链路地址(前缀为ff80::/10). 单播本地站点地址(前缀为FEC0::/10). 单播未指定地址(::/12 ...
- MAC地址 单播,组播,广播
今天调试了一个程序,我把板子的MAC地址随便设置为MCU的全球唯一码了,怎么也调试不通,最后更换了MAC地址之后莫名其妙通了: 弄好之后,"百思不得其解", 应网上浏览了一下MA ...
- Java实现单播,组播,广播
单播.组播.广播介绍:https://blog.csdn.net/ahou2468/article/details/86526509 目录 1.单播.组播.广播关键类说明 2.单播和广播的具体实现 2 ...
- 单播、广播、多播(组播)的概念和区别
单播.广播.多播(组播)的概念和区别 简单理解如下: 1.一台机器和一台机器通信这是单播. 2.一台机器发出的数据包能被多台机器收到这就叫组播. 一个机器发送,多台机器接收,但是又不同于广播, 发送端 ...
- CCIE-IPV6单播和组播地址
2021.10.16 每天的开心都来源于更优秀的自己和你 地址表示方法&地址分类 URL中与端口号的区分 因为在URL中地址后面可能需要跟上端口号,而端口号也是通过隔符来与地址进行区别,因此 ...
- Python 创建随机mac地址(单播、组播)
创建随机mac地址 import random def randomMAC(): mac = [ random.randint(0x00, 0x7f), random.randint(0x00, 0x ...
- android multicast(组播)发送端和接收端源代码,android multicast 多播(组播)问题
有谁遇到过同样问题的可以探讨下,或者已经解决问题的,能够指导下我 获取组播锁 private InetAddress group; WifiManager wm=(WifiManager)ge ...
- 【计算机网络】网络层 : IP 组播 ( IP 数据报传输方式 | 组播 IP 地址 | 组播 MAC 地址 | IGMP 协议 | 组播路由选择协议 )
文章目录 一.IP 数据报传输方式 二.组播 IP 地址 三.组播 MAC 地址 四.IGMP 协议 五.组播路由选择协议 一.IP 数据报传输方式 IP 数据报传输方式 : ① 单播 : 发送数据到 ...
最新文章
- buildroot 简要记录
- Vim的NERDTree快捷键
- Python-OpenCV 笔记9 -- 模板匹配
- ROS坐标系统,常见的坐标系和其含义
- __str__是什么函数_PHP str_shuffle()函数与示例
- break语句python_Python break 语句
- 雷军和董明珠“十亿赌局”胜负已定:小米格力营收差距依然很大
- 1.jenkins持续集成-jenkins安装
- 二维数组 : 旋转矩阵
- Java 匿名内部类、Java 中 == 与 equals 的区别
- 网页中的位图与矢量图使用
- 那些年啊,那些事——一个程序员的奋斗史 ——16
- 世界豪车 TOP 10
- Kaminari分页
- 产品经理的私房菜 - 腾讯产品模型 - 执行力篇
- 红米k30至尊纪念版和华为mate30pro哪个值得买
- Flutter 实现剑气加载
- 实现登录注册页面详细(Servlet+jsp+java)
- java 初始化块_详解Java中的实例初始化块(IIB)
- xargs的详细解释,记得收藏,相信我你会需要的