ICMPv6 与 邻居发现协议

1610阅读 0评论2015-06-17 stevewang1979
分类:网络与安全


                

            ICMPv6包括差错消息和通知消息两类。
            
            差错消息:1,目的地不可达;2,数据包过大;3,超时;4,参数错误。
            
            通知消息:1,会现请求;2,回显应答;
                           1,多播侦听查询;2,多播侦听报告;3,多播侦听完成报告;
                           1,路由请求消息,2,路由宣告消息;3,邻居请求消息;4,邻居宣告消息;5,重定向消息;

        

          通用消息格式:
                         
          类型(8bit)                            代码(8bit)                    校验和(16bit)
        
        

                                消息正文

         类型:差错消息(0-127)     通知消息(128-255)
        ICMPv6差错消息的作用是告诉设备其发送的数据包无法被正确传送的原因。
         ICMPv6通知消息的作用是为各种测试、诊断和支撑功能提供必需的消息。



       差错消息:
       1,目的地不可达
      2,数据包超大

     IPv6只在源端(远端可以是主机,或是路由器)执行分段操作,当IPv6路由器收到数据包大于出站接口的MTU时,就会丢弃该数据并向远端发送ICMPv6数据包超大消息。数据包超大消息中包含了该链路的MTU值。

   IPv4的MTU最小是68字节。而IPv6要求所有链路的最小MTU是1280字节。

    路径MTU发现进程:先发送PMTU为1500,如果出现差错,这根据出错报文中的MTU值继续发送,知道目的地。得到MTU。


    3,超时 : 1,条数减为0;2,重组超时。
    
    4,参数错误


  ICMPv6通告消息;
 1,回显请求和回显应答;
 2,多播的一些。
 3,邻居发现协议,这里主要说这个。
    
    
     使用邻居发现协议的原因:
     

     1, 路由请求消息和路由宣告消息:
      路由宣告消息是周期性发送的,也可以作为路由请求消息的相应消息,它主要为主机提供编址信息以及其他配置消息,并且是SLAAC的重要组成部分。

     使用的默认网关是路由通告报文的源地址,也是链路本地地址,路由宣告消息可以作为路由请求消息的应答报文,但是始终发送给全部节点多播地址。

    2,邻居请求消息和邻居宣告消息
    
        另据请求和邻居宣告消息是以下三个重要进程的组成部分:
      邻居宣告消息既可以作为邻居请求消息的相应消息,也可以根据需要自主发送,以快速传播新消息。


   在讨论邻居宣告消息和邻居请求消息之前,先讨论两个重要的数据结构:邻居缓存表(neighbor cache ),和目的地缓存表(destination cache);
 

     主机需要为每个接口维护两张表或缓存表:
    1,邻居缓存表
    2,目的地缓存表
     邻居缓存表相当于IPv4中的ARP缓存表,邻居缓存表负责维护最近流量所送往邻居的信息列表,表项中包含了Ipv6单播地址及其对应的二层链路地址。设备通过接收到邻居宣告消息中的信息来维护该缓存表。
    目的地缓存表维护的是最近被发送的目的地列表,包括其他链路或其他网络上的目的地,此时的表项是吓一跳路由器的二层链路地址,目的地缓存表可以是邻居缓存表的子集。



    地址解析:类似与Ipv4中的arp进程。
    
    1, PC1向PC2发起ping命令。
    2,PC1 根据PC2的IP地址检查另据缓存表以获得相应的二层MAC地址,如果没有则3
     3,PC1暂停发送该包,而是向请求节点多播地址发送一条邻居请求消息,邻居请求消息中的目标地址就是ping命令中的Ipv6地址。
    4,PC2收到邻居请求消息之后,向PC1发送邻居宣告消息,在消息中提供其链路层MAC地址,邻居宣告消息是单播方式发送给PC1的,
    5,PC1接收到邻居宣告消息,更新其邻居缓存表
    6,PC1有了其MAC地址,就可以发送帧给PC2了。
    7,PC2以回显应答消息响应。



    组播MAC地址是33:33开头,后面取IP地址的后32位。


   有关请求节点多播地址的详细信息: 设备会利用映射技术为每个单播地址自动创建一个请求节点多播地址,清秋节点多播地址是通过将前缀FF02:0:0:0:0:1:FF00::/104附加单播地址的最后24bit创建而成。
   
  PC2的全局单播地址
   
    全局路由前缀        子网ID                接口ID    24bit
  2001:0DB8:AAAA   0001     0000 0000 00    00:0200
 

 PC2的Ipv6请求节点多播地址            (复制了上面的后24bit)
 FF02 0000 0000 0000 0000 0001 FF 00 0200

请求节点多播地址映射为以太网目的地MAC地址     33-33 FF-00-02-00 (复制了请求多播地址的后32bit)


PC2的IPv6请求节点多播地址 FF02::1:FF00:200
 PC2映射的请求及诶单以太网地址:33-33-ff-00-02-00


       
     虽然几率很小,但其他设备的接口ID仍然有可能拥有相同的24bit,不过这不会给处理数据包和检查ICMPv6目标地址带来问题,因为在这个过程中,其他设备能够确定该目标地址与自己的单播地址不匹配,因而不会用邻居宣告消息进行响应。
 

    在Ipv4中看,arp以广播方式发送给MAC为ff-ff-ff-ff-ff-ff,要发送给所有设备,IPv6的效率要高很多。





       重复地址检查:设备利用DAD机制来确定其希望使用的地址是否已经被其他设备使用,RFC4861建议在将单播地址分配给接口之前,要对每个单薄地址(链路本地单播地址或全局单播地址)都要执行DAD进程,而不管采取何种地址配置方式(SLAAC,DHCPv6,或手动配置)。
    1,  PC1 为其以太网接口自动创建其链路本地单播地址,将前缀FE80::/10附加到随机生成的64bit接口ID上。
    2,  PC1发送邻居请求消息以确定是否有其他设备正在使用该链路本地地址。

         源MAC地址:PC1的MAC地址
         目的MAC地址:33-33多播地址
  IPv6包头:
       源IPv6地址:未指定 ::
        目的IPv6地址,是于PC1 的链路本地地址相对应的请求多播地址
       目标Ipv6地址:PC1自己的链路本地地址。如果其他设备正在使用改地址,那么需要用邻居宣告消息进行响应。 


    3,PC1设置一个定时器,如果设定时间内没有收到响应信息,则可以使用该地址。
   
    邻居不可达性检测:由于两台Ipv6设备之间出现通信故障的原因很多,如主机掉电或电缆故障,因此设备要主动跟踪数据包将要发送的另据的可达性状态。 
    确认可达性的方式有两种:
    1,响应邻居请求消息的邻居宣告消息。
   2,上层进程指示连接成功,如活动TCP连接中的确认信息。




     无状态地址自动配置
    SLAAC(无状态地址自动配置)是一种允许主机通过组合本地可用洗洗脑与路由器宣告的信息生成自己的单播地址的机制。自动配置进程包括通过SLAAC生成链路本地地址和全局地址,还包括地址重复检测的步骤,以用来验证地址在链路上的唯一性。
      
     SLAAC通过以下4个步骤完成配置:
     第一步:创建链路本地单播:主机创建自己的链路本地地址,无需手动配置或借助DHCPv6服务器。链路本地地址的前缀是FE80::/10,附加到64bit的接口ID即可。接口ID通过EUI-64格式或者随机生成方式进行创建。
     第二步:对链路状态本地地址执行DAD。该消息的源地址是未指定地址::,目的地址是自己的与该链路本地地址相关联的的请求节点多播地址,如果其他节点使用该地址,那么就会响应以邻居宣告消息。
     第三步:路由器宣告消息提供地址配置信息。主机从路由器宣告消息获取全局单播地址信息和其他配置信息,如果主机没有收到路由器宣告消息,就会向全部路由器多播地址FF02::0发送路由器请求消息。  
     第四步:对全局单播地址执行DAD:和第二步步骤一样。


       重定向消息:ICMPv6重定向消息的作用是通知设备有更优的下一跳路由器,其工作方式和Ipv4的重定向消息相同。
                      比如主机发送数据给它的默认路由器A,A转发数据给路由器B,并且发现路由器B和A在一个网段内,则A就会向主机发送一个重定向消息,主机收到重定向消息后,数据包会直接发送给路由器B。
上一篇:ARP状态转换
下一篇:bcm56146学习笔记