zoukankan      html  css  js  c++  java
  • ipv6获取地址

    在本篇将会搞清楚如下几个名字所指的概念,以及他们之间的关系

    1.RS: Router Solicitation RA:Router Advertisement

    radvd: The Router Advertisement Daemon

    2.SLAAC: Stateless Auto Address Configuration

    3.DHCPv6和DHCPv6 PD

    4.NS:Neighbor Solicitation NA: Neighbor Advertisement

    除了第4组概念,其他3组都是与“ipv6当中,怎么获取ipv6地址有关”这个问题紧密联系的。下面通过获取一个ipv6地址的时间轴来分别阐述并串联这些概念。

    1.RS

    事情的起点是一台pc上电启动完成了,他会首先,不借助任何外面的信息,自己给自己配置一个Ipv6地址,类似fe80::xx这种,这就是所谓的link local地址。

    这种所谓的link local地址的使用范围是link之间,即直接相连的node之间。

    (这里突然引入了node的名字,因为一个网络上不仅包含pc,还包含各种网络设备,比如router,我们用node来指代所有的这些网络设备。)

    所以pc想要与更远的外界网络通信,就需要其他地址,site local和global address,具体分配哪个,取决于你的网络环境。

    总之,要想与非link上的其他node网络通信,你就需要非link local的address。

    怎么办呢,这时候故事就开始了。

    Pc首先发出一个RS(Router Solicitation),告诉link上的router,我想要一个地址,谁能给我啊,把这些信息编码成网络包的格式如下:

     

    对于这种编码格式,我们可以稍微看下,它使用的是icmpv6 type 133。

    2.RA

    Router收到pc发出的“想要获取地址”的信息后,就会告诉它 怎么获取。注意是怎么获取,不是直接给它地址。

    一个典型的RA包长得像下面这个样子

     

    信息的编码格式使用的是icmpv6 type 134。这里面包含很多信息,我们主要关注两大类信息: prefix information,其他网络配置信息(比如dns,mtu等等)

    Prefix information是我们最想要的那个用于生成ipv6地址的前缀,但是我们不一定用

    其他网络信息也是我们想要的,相比于上面这个,重要性就低一些。同样我们也不一定用。

    什么?你可能就有疑问了,都给了,为啥不用。

    因为在RA包里的信息,router明确说了 你要不要用,虽然我已经给了你prefix information和其他网络配置信息。

    Managed (M flag) = A ‘1’ means the address is provided by stateful DHCPv6.

    Other (O flag) = A ‘1’ means that the address is provided by Stateless DHCPv6

    M为1表示地址要向dhcpv6 server请求,O为1表示其他网络配置信息也要想dhcpv6 server请求。

    上面的stateful,stateless可以忽略,我觉得这个叫法起的不好。总之,就是向dhcpv6 server要这些信息。

    如果M为0那就是使用RA的prefix,下面将发生的过程就叫SLAAC

    如果M为1,那就不使用,下面将发生的过程就叫DHCPv6

    3. SLAAC: Stateless Auto Address Configuration

    Pc收到RA后发现M flag为0,告诉它不需要再向DHCPv6 server申请了,所以它就可以开始自己生成了,生成的方法如下:

    RA中的前缀+EUI64(mac地址)

    EUI64就是一个方法,具体可以google & baidu。

    4.DHCPv6

    Pc收到RA后发现M flag为1,告诉它需要再向DHCPv6 server申请了,所以它就开始通过dhcpv6报文向dhcpv6 server发送“我要地址”的信息。

    Dhcpv6 Solicit报文

     

    Dhcpv6 server收到后就会回复

    Advertise报文

     

    至此,整个获取ipv6地址的框架就出来了,也结束了。下面在基于这个这个框架之上,再谈些其他的几个概念。

    Ps1:关于stateful and stateless有状态和无状态

    为什么有了RA之后,还需要dhcpv6,这是为了可以记录状态,什么状态?,各个地址分配的情况,分配给了谁。这是单单靠RA做不到的。我认为不管dhcpv4还是v6都是为有状态而生,所以说什么”slacc + stateless dhcpv6”我不太同意,可能当初这样叫法的原因是,它只向dhcpv6 server申请其他网络配置信息,并不申请ip,所以就叫stateless,这样想,也可以理解,不过很容易误导人。

    Ps2:dhcpv6 PD (DHCPv6 Prefix Delegation)

    这个名字是指代这样一个过程,router b的上级router a会下发前缀给router b,比如prefix 32。router b然后再把这个前缀通过RA告知下面的节点,比如prefix 64,对上级的前缀进行再划分。这样就可以达到分层次管理的目的。

    Ps3: radvd: The Router Advertisement Daemon

    发出ra包的那个进程,它的配置文件中可以配置是否置起M flag, O flag

    /etc/radvd.conf

    Ps4: NS:Neighbor Solicitation NA: Neighbor Advertisement

    这两种报文是用于两台pc之间的通信时,获取对方的mac地址,可以完全认为是ipv4中 arp的另一种实现。

    参考:

    https://cshihong.github.io/2018/02/01/DHCPv6%E5%9F%BA%E7%A1%80/

    http://www.h3c.com/cn/d_200805/605924_30003_0.htm

    https://www.ictshore.com/free-ccna-course/dhcpv6-basics/

    https://blog.apnic.net/2019/10/18/how-to-ipv6-neighbor-discovery/

  • 相关阅读:
    第002篇 深入体验C#项目开发(一)
    C#编程打字指法练习
    第001篇——C#学习计划开启
    2020杭电多校第一场(待更新)
    LeetCode双周赛11
    LeetCode双周赛10
    LeetCode Weekly 156
    NOIP模板复习(4)区间操作之莫队算法,树状数组,线段树
    NOIP模板复习(3) 最短路三巨头Floyd,Dijkstra与SPFA
    NOIP模板复习(2) LCA的三种解法
  • 原文地址:https://www.cnblogs.com/midhillzhou/p/15484372.html
Copyright © 2011-2022 走看看