计算机网络——网络层(IP地址与MAC地址、地址解析协议ARP、IP数据报格式以及转发分组、ICMP、IPV6)

IP地址与MAC地址

        由于MAC地址已固化在网卡上的ROM 中,因此常常将 MAC地址称为硬件地址或物理地址;物理地址的反义词就是虚拟地址、软件地址或逻辑地址,IP地址就属于这类地址。

        从层次的角度看,MAC地址是数据链路层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址为逻辑地址是因为IP地址是用软件实现的)。

 IP地址与MAC地址在层次间的关系

        总之,IP地址放在IP数据报的首部,而MAC地址则放在MAC帧的首部。在网络层和网络层以上使用的是IP地址,而数据链路层及以下使用的是MAC地址。

IP地址与MAC地址在运输中的关系


  • 数据报中间经过的两个路由器的IP地址并不出现在IP数据报的首部中。
  • IP数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化
    • 开始在H1到R1间传送时,MAC帧首部中写的是从MAC1地址发送到MAC3地址,路由器R1收到此MAC帧后,在数据链路层,要剥去原来的MAC帧的首部和尾部。在转发时,在数据链路层,要重新添加上MAC 帧的首部和尾部。这时首部中的源地址和目的地址分别变成为MAC4和MAC5。

为什么不能只用MAC地址进行寻址 

如果仅使用MAC地址进行通信,则会出现以下主要问题:

  • 路由表要记录网络中所有MAC地址:因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的MAC地址。
  • 配置路由表很麻烦:手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的MAC地址信息而严重占用通信资源。
  • 路由信息的存储和查找很麻烦:包含海量MAC地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延。

因特网的网际层使用IP地址进行寻址,就可使因特网中各路由器的路由表中的路由记录的数量大大减少:

  • 因为只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的MAC地址。
  • 路由器收到IP数据报后,根据其首部中的目的IP地址的网络号部分,基于自己的路由表进行查表转发。

地址解析协议ARP 

        已经知道了一个机器的IP地址,需要找出其相应的 MAC地址。地址解析协议ARP就是用来解决这样的问题的。 

ARP的要点:

  • IP与MAC之间的关系很模糊:网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用链路层的MAC 地址。IP地址和下面链路层的MAC地址之间由于格式不同而不存在简单的映射关系。
  • MAC地址也随时发生变动:在一个网络上可能经常会有新的主机加入进来,或撤走一些主机。更换网络适配器也会使主机的MAC地址改变(请注意,主机的MAC地址实际上就是其网络适配器的MAC地址)。

        地址解析协议ARP解决这个问题的方法是在主机的ARP高速缓存中存放一个从IP地址到MAC地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)

ARP运行流程 

 


那如果A中的ARP高速缓存中没有找到主机B的IP地址呢?



B发送响应分组的流程如下:



MAC地址类型:

  • 动态:通过ARP自动获取,生命周期默认为两分钟。 
  • 静态:手工配置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。

        设置生存时间的原因: 


        答:转发表中的MAC地址与交换机接口号的对应关系记录也要周期性删除,因为这种对应关系并不是永久不变的。同理,ARP高速缓存表中的IP地址与MAC地址的对应关系也并不是永久不变的。例如,主机更换了一块新网卡。

 主机跨网络寻址

IP数据报的格式 

 

        一个IP数据报由首部和数据两部分组成首部的前一部分长度是固定的,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

版本

        长度为4个比特,用来表示lP协议的版本;通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议的版本号为4(即IPv4)        

首部长度

长度为4个比特,该字段的取值以4字节为单位,用来表示IPv4数据报的首部长度

  • 最小取值为二进制的0101,即十进制的5,再乘以4字节单位,表示IPv4数据报首部只有20字节固定部分。
  • 最大取值为二进制的1111,即十进制的15,再乘以4字节单位,表示IPv4数据报首部包含20字节固定部分和最大40字节可变部分。

    以下是对该概念的深入讨论:

        大概可以得出首部长度是怎样控制的

区分服务

        长度为8个比特,用来获得更好的服务。
        该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。1998年,因特网工程任务组ETF把这个字段改名为区分服务。利用该字段的不同取值可提供不同等级的服务质量。
        只有在使用区分服务时该字段才起作用,一般情况下都不使用该字段。

总长度

        长度为16个比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度+数据载荷长度)最大取值为二进制的16个比特1,即十进制的65535(很少传输这么长的IPv4数据报)。

总长度与首部长度的关系 

标识、标志、片位移 

标识:长度为16个比特,属于同一个IPv4数据报的各分片数据报应该具有相同的标识。
        IP软件会维持一个计数器,每产生一个IPv4数据报,计数器值就加1,并将此值赋给标识字段。


标志:
最低位(More Fragment,MF)

  • MF=1表示本分片后面还有分片
  • MF=0表示本分片后面没有分片

中间位(Don't Fragment,DF)

  • DF=1表示不允许分片
  • DF=0表示允许分片

最高位为保留位,必须设置为0


片位移:长度为13个比特,该字段的取值以8字节为单位,用来指出分片lPv4数据报的数据载荷偏移其在原IPv4数据报的位置有多远。

数据报的划分


对划分的数据报进行再划分

 练习

正确的做法如下:

 生存时间、协议、首部检验和

 


生存时间(Time To Live,TTL)
        长度为8个比特,最大取值为二进制的111111,即十进制的255。该字段的取值最初以秒为单位。

        因此,IPv4数据报的最大生存时间最初为255秒。路由器转发IPv4数据报时,将其首部中该字段的值减去该数据报在路由器上所耗费的时间,若结果不为0就转发,否则就丢弃。
        生存时间字段后来改为以“跳数”为单位,路由器收到待转发的IPv4数据报时,将其首部中的该字段的值减1,若结果不为0就转发,否则就丢弃。


协议
        长度为8个比特,用来指明IPv4数据报的数据载荷是何种协议数据单元PDU。


首部检验和

        长度为16个比特,用于检测IPv4数据报在传输过程中其首部是否出现了差错。
        IPv4数据报每经过一个路由器,其首部中的某些字段的值(例如生存时间TTL、标志以及片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和。

 

首部检验和的计算方法 

二进制反码求和的运算 

源IP地址与目的IP地址

源IP地址
        长度为32个比特,用来填写发送IPv4数据报的源主机的IPv4地址。


目的IP地址
        长度为32个比特,用来填写接收IPv4数据报的目的主机的IPv4地址。

可变部分(可选字段+填充) 

可选字段 

        长度从1字节到40字节不等,用来支持排错、测量以及安全措施等功能。

        虽然可选字段增加了IPv4数据报的功能,但这同时也使得IPv4数据报的首部长度成为可变的,这就增加了因特网中每一个路由器处理IPv4数据报的开销。实际上,可选字段很少被使用。


填充

        
        用来确保IPv4数据报的首部长度是4字节的整数倍,使用全0进行填充。

 

IP转发分组 

        分组在互联网上传送和转发是基于分组首部中的目的地址的,因此这种转发方式称为基于终点的转发。 

        因此,分组每到达一个路由器,路由器就根据分组中的终点(目的地址)查找转发表,然后就得知下一跳应当到哪一个路由器。

        但是路由器路由器中的转发表却不是按目的IP地址来直接查出下一跳路由器的


        路由器的寻址方法:而是先查找目的网络(网络前缀),在找到了目的网络之后,就把分组在这个网络上直接交付目的主机。

        由于互联网上的网络数远远小于主机数,这样就可以大大压缩转发表的大小,加速分组在路由器中的转发。这就是基于终点的转发过程。

IP转发分组的工作流程 

我们用如下网络来进行举例

直接交付与间接交付 

  • 直接交付:同一个网络中的主机之间可以直接通信。
  • 间接交付:不同网络中的主机之间的通信需要通过路由器来中转。

源主机如何判断自己与目的主机在同一网络 

源主机C如何知道需要经由哪个路由器

        实际上用户为了让本网络中的各主机能与其他网络中的各主机进行通信,就要必须给本网络中的各主机指定本网络中的一个路由器,由该路由器帮忙进行转发。所指定的路由器也被称为默认网关。 

假设主机A要给主机D发送IP数据包


路由器配置IP地址时就生成了路由表条目


路由器收到IP数据报后的表现

  

主机A发送广播

静态路由配置

        静态路由配置是指用户或网络运维人员使用路由器的相关命令给路由器人工配置路由表。
        人工配置方式简单、开销小、但不能及时适应网络状态(流量、拓扑等)的变化,一般只在小规模网络中采用。
 

        进行静态路由配置需要认真考虑和谨慎操作,否则可能出现以下问题:

  • 路由条目配置错误,甚至导致出现路由环路。
  • 聚合路由条目时可能引入不存在的网络。

 

当R1向蓝色网络群发送IP数据

默认路由 

        我们思考一个问题:如果下述情况需要针对英特网中的每一个网络给R1添加一条相应的路由条目吗?

        回答是否定的。试想一下,如果针对因特网中的每一个网络给R1添加一条静态路由条目,这会给人工配置带来巨大的工作量,并且使R1的路由表变得非常大,降低了转发的速度。

特定主机路由 

        出于某种安全问题的考虑,同时为了使网络运维人员更方便地控制网络和测试网络,特别是在对网络的连接或路由表进行排错时,指明到某一台主机的特定主机路由是十分有用的。

最长前缀匹配 

分组目的地址可能出现与路由器多个项目匹配的情况

 得出最长前缀匹配如下:

使用二叉树线索查找转发表 

        为了进行更加有效的查找,通常是把无分类编址的转发表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。

二叉线索的结构

        IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表转发表中存放的各个地址

 二叉线索的运作

二叉树存储IP
 

        从二叉线索的根节点自顶向下的深度最多有32层,每一层对应于IP地址中的一位。

        一个IP地址存入二叉线索的规则很简单:先检查IP地址左边的第一位,如为0,则第一层的节点就在根节点的左下方;如为1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。由于唯一前缀一般都小于32位,因此用唯一前缀构造的二叉线索的深度往往不到32层。

在二叉树中查找IP地址

        以上只是给出了二叉线索这种数据结构的用法,而并没有说明“与唯一前缀匹配”和“与网络前缀匹配”的关系。

        显然,要将二叉线索用于转发表中,还必须使二叉线索中的每一个叶节点包含所对应的网络前缀和子网掩码。当搜索到一个叶节点时,就必须将寻找匹配的目的地址和该叶节点的子网掩码进行按位AND运算,看结果是否与对应的网络前缀相匹配。

若匹配,就按下一跳的接口转发该分组。

否则,就丢弃该分组

        总之,二叉线索只是提供了一种可以快速在转发表中找到匹配的叶节点的机制。但这是否和网络前缀匹配,还要和子网掩码进行一次逻辑AND运算。

        另外,为了提高二叉线索的查找速度,广泛使用了各种压缩技术。例如下图中的最后两个地址,其最前面的4位都是1011。因此,只要一个地址的前4位是1011,就可以跳过前面4位(即压缩了4个层次)而直接从第5位开始比较。这样就可以减少查找的时间。

网际控制报文ICMP

        为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文协议ICMP (Internet Control Message Protocol)

        ICMP是互联网的标准协议。但ICMP不是高层协议,而是IP层的协议。(看起来好像是高层协议,因为ICMP报文装在IP数据报中,作为其中的数据部分)。

        ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

ICMP报文的种类

        ICMP报文有两种,即ICMP差错报告报文ICMP询问报文

  • 差错报告报文:用来向主机或路由器报告差错情况。
  • 询问报文:用来向主机或路由器询问情况。
     

1、ICMP报文的前4字节是统一的格式,共有三个字段:类型、代码和检验和。

2、接着的4字节的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型
 

差错报告报文详解 

        (1)终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
                具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种。
 

        (2)时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向
源点发送时间超过报文。

        当路由器收到一个目的IP地址不是自己的IP数据报时,会将其首部中生存时间TTL字段的值减1。

  • 若结果不为0,则路由器将该数据报转发出去;
  • 若结果为0,路由器不但要丢弃该数据报,还要向发送该IP数据报的源点发送时间超过(超时)报文。

        另外,当终点在预先规定的时间内未能收到一个数据报的全部数据报分片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过(超时)报文。

(3)参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
 

(4)改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(也就是说,找到了更好的路由)。
 

(5)源点抑制:当路由器或主机由于拥塞而丢弃IP数据报时,就向发送该IP数据报的源点发送源点抑制报文,使源点知道应当把P数据报的发送速率放慢。


         同理主机也有可能出现因拥塞而丢弃IP数据报并发送ICMP差错报告报文的情况,如图所示。

不应发送ICMP差错报告报文的情况
  • 对ICMP差错报告报文不再发送ICMP差错报告报文。
  • 对第一个分片的IP数据报片的所有后续数据报片都不发送ICMP差错报告报文。
  • 对具有多播地址的IP数据报都不发送ICMP差错报告报文。
  • 对具有特殊地址(例如127.0.0.0或0.0.0.0)的IP数据报不发送ICMP差错报告报文。

询问报文详解 

        回送请求和回答: 

        由主机或路由器向一个特定的目的主机或路由器发出,收到此报文的主机或路由器必须给发送该报文的源主机或路由器发送ICMP回送回答报文。

        这种询问报文用来测试目的站是否可达以及了解其有关状态。

        时间戳请求和回答:

        用来请求某个主机或路由器回答当前的日期和时间。
        在ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
        这种询问报文用来进行时钟同步和测量时间。

ICMP的典型应用——分组网间探测PING
 

        分组网间探测PING用来测试主机或路由器之间的连通性

  • PING是TCP/IP体系结构的应用层直接使用网际层ICMP的一个例子,它并不使用运输层的TCP或UDP。
  • PING应用所使用的ICMP报文类型为回送请求和回答。

ICMP的典型应用——跟踪路由
 

         跟踪路由应用traceroute用于探测IP数据报从源主机到达目的主机要经过哪些路由器。

在不同操作系统中,traceroute应用的命令和实现机制有所不同:

  • 在UNIX版本中,具体命令为“traceroute”,其在运输层使用UDP协议,在网络层使用ICMP报文类型只有差错报告报文。
  • 在Windows版本中,具体命令为“tracert”,其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有回送请求和回答报文以及差错报告报文。

 跟踪路由的运行过程

 

 

接着H1在发送一段TTL=2的ICMP回送请求



接着H1在发送一段TTL=3的ICMP回送请求

IPV6

        互联网经过几十年的飞速发展,在2011年2月3日,IANA 开始停止向地区互联网注册机构RIR分配IPv4地址,因为 IPv4地址已经全部耗尽了。

        不久,各地区互联网地址分配机构也相继宣布地址耗尽。我国在2014年至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开始商用部署IPv6。 

        解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本的IP,即 IPv6。经过多年的研究和试验,2017年7月终于发布了IPv6的正式标准。

IPV6的优势

IPV6的基本首部

        IPv6数据报由两大部分组成,即基本首部(base header)和后面的有效载荷(payload)。

        有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部(extension header),再后面是数据部分。但请注意,所有的扩展首部并不属于IPv6 数据报的基本首部。

 与IPV4相比,IPV6首部某些字段发生更改

  • 取消了首部长度字段,因为它的首部长度是固定的(40字节)
  • 取消了服务类型字段,因为优先级和流标号字段实现了服务类型字段的功能。
  • 取消了总长度字段,改用有效载荷长度字段。
  • 取消了标识、标志和片偏移字段,因为这些功能已包含在分片扩展首部中。
  • 把 TTL字段改称为跳数限制字段,但作用是一样的(名称与作用更加一致)。
  • 取消了协议字段,改用下一个首部字段。
  • 取消了检验和字段,这样就加快了路由器处理数据报的速度。
  • 取消了选项字段,而用扩展首部来实现选项功能。

 IPv6基本首部中各字段的作用

版本字段:长度为4比特,用来表示IP协议的版本。对于IPv6该字段的值是6。
 

通信量类字段:长度为8比特,该字段用来区分不同的IPv6数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。

流标号字段:长度为20比特。IPv6提出了流的抽象概念

        “流”就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送),而在这个“流”所经过的路径上的所有路由器都保证指明的服务质量。所有属于同一个流的IlPv6数据报都具有同样的流标号。换句话说,流标号用于资源分配。

  • 流标号对实时音频/视频数据的传送特别有用。
  • 对于传统的电子邮件或非实时数据,流标号则没有用处,把它置为0即可。
     

有效载荷长度字段:长度为16比特,它指明IPv6数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量。

        该字段以字节为单位,最大取值为65535,因此IPv6数据报基本首部后面的有效载荷的最大长度为65535字节。

下一个首部字段:长度为8比特。该字段相当于IPv4数据报首部中的协议字段或可选字段。
        
当IPv6数据报没有扩展首部时,该字段的作用与IPv4的协议字段一样,它的值指出了IPv6数据报基本首部后面的数据是何种协议数据单元PDU。

          

        当IPv6数据报基本首部后面带有扩展首部时,该字段的值就标识后面第一个扩展首部的类型。

 

跳数限制字段:长度为8比特。该字段用来防止IPv6数据报在因特网中永久兜圈。

  • 源点在每个IPv6数据报发出时即设定某个跳数限制(最大255跳)。每个路由器在转发IPv6数据报时,要先把跳数限制字段中的值减1。
  • 当跳数限制的值为0时,就把这个IPv6数据报丢弃((即不转发)。

        该字段的作用与IPv4数据报首部中的生存时间TTL字段完全一样。IPv6将名称改为跳数限制后,可使名称与作用更加一致。


源地址字段和目的地址字段:长度都为128比特。分别用来填写IPv6数据报的发送端的IPv6地址和接收端的IPv6地址。

IPv6数据报的扩展首部

        IPv4数据报如果在其首部中使用了选项字段,则在数据报的整个传送路径中的全部路由器,都要对选项字段进行检查,这就降低了路由器处理数据报的速度。

        实际上,在路径中的路由器对很多选项是不需要检查的。因此,为了提高路由器对数据报的处理效率,IPv6把原来IPv4首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理,而数据报传送路径中的所有路由器都不处理这些扩展首部(除逐跳选项扩展首部)。

IPV6的地址
 

         在IPv6中,每个地址占128个比特。lPv6地址空间大小为2^{128}(大于3.4×1038 )

  • 如果整个地球表面(包括陆地和水面)都覆盖着需要IPv6地址的通信设备,那么IPv6允许每平方米拥有7×1023个IPv6地址。
  • 如果IPv6地址分配速率是每微秒分配100万个IPv6地址,则需要1019年的时间才能将所有可能的地址分配完毕。

        很显然,这样巨大的地址空间在采用合理编址方法的情况下,在可预见的未来是不会用完的。

 IPV6的表示方法



 二进制转化为十六进制的方法如下:

IPV6写作方式说明 



在一个IPv6地址中只能使用一次“连续零”压缩,否则会导致歧义


冒号十六进制记法还可结合点分十进制的后缀

IPV6地址的分类 

        

未指明地址:

  • 128个比特为“全0”的地址,可缩写为两个冒号“:”。
  • 该地址不能用作目的地址,只能用于还没有配置到一个标准IPv6地址的主机用作源地址。
  • 未指明地址仅有一个。


环回地址:

  • IPv6的环回地址是0:0:0:0:0:0:0:1,可缩写为::1。
  • 它的作用和IPv4的环回地址一样。
  • 这类地址也是仅此一个。

 
多播地址:

  • 最高8比特为“全1”的地址,可记为FF00:/8。
  • IPv6多播地址的功能与IPv4多播地址相同。
  • 这类地址占IPv6地址空间的1/256。
     

本地链路单播地址:

  • 最高10比特为1111111010的地址,可记为FE80::/10。
  • 即使用户网络没有连接到因特网,但仍然可以使用TCP/IP协议。连接在这种网络上的主机都可以使用本地链路单播地址进行通信,但不能和因特网上的其他主机通信。
  • 这类地址占IPv6地址空间的1/1024。
     

全球单播地址:

  • 全球单播地址是使用得最多的一类地址。
  • IPv6全球单播地址采用三级结构,这是为了使路由器可以更快地查找路由。

从IPv4向IPv6过渡
 

  • 因特网上使用IPv4的路由器的数量太大,要让所有路由器都改用IPv6并不能一蹴而就。因此,从IPv4转变到IPv6只能采用逐步演进的办法。
  • 另外,新部署的IPv6系统必须能够向后兼容,也就是IPv6系统必须能够接收和转发IPv4数据报,并且能够为IPv4数据报选择路由。

下面介绍两种由IPv4向IlPv6过渡的策略:

  • 使用双协议栈
  • 使用隧道技术

双协议栈 

  • 双协议栈(Dual Stack)是指在完全过渡到IPv6之前,使一部分主机或路由器装有IPv4和IPv6两套协议栈。
  • 双协议栈主机或路由器既可以和IPv6系统通信,又可以和IPv4系统通信。
  • 双协议栈主机或路由器记为IPv6/IPv4,表明它具有一个IPv6地址和一个IPv4地址。
    • 双协议栈主机在与IPv6主机通信时采用IPv6地址,而与IPv4主机通信时采用IPv4地址。
    • 双协议栈主机通过域名系统DNS查询目的主机采用的IP地址:
      • 若DNS返回的是IPv4地址,则双协议栈的源主机就使用IPv4地址;
      • 若DNS返回的是IPv6地址,则双协议栈的源主机就使用IPv6地址。

 双协议栈的工作流程

隧道技术 

        隧道技术的核心思想: 

  1. 当IPv6数据报要进入IPv4网络时,将IPv6数据报重新封装成IPv4数据报,即整个IPv6数据报成为IPv4数据报的数据载荷。
  2. 封装有IPv6数据报的IPv4数据报在IPv4网络中传输。
  3. 当IPv4数据报要离开IPv4网络时,再将其数据载荷(即原来的IPv6数据报)取出并转发到IPv6网络。

隧道技术的工作流程: 

        本例使用隧道技术,就好像在路由器R1和R4之间为ipv6数据报的传送打通了一条专用的隧道。R1是隧道的入口。R4是隧道的出口。

 网际控制报文协议ICMPv6

        由于IPv6与IPv4一样,都不确保数据报的可靠交付,因此IPv6也需要使用网际控制报文协议ICMP来向发送Pv6数据报的源主机反馈一些差错信息,相应的ICMP版本为ICMPv6。 

  • ICMPv6比ICMPv4要复杂得多,它合并了原来的地址解析协议ARP和网际组管理协议IGMP的功能。因此与IPv6配套使用的网际层协议就只有ICMPv6这一个协议。

ICMPv6的封装


有扩展首部的情况

ICMPv6报文的分类

        ICMPv6报文可被用来报告差错、获取信息、探测邻站或管理多播通信。

 

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

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

相关文章

Java 面试相关问题(上)——基础问题集合问题

这里只会写Java相关的问题,包括Java基础问题、JVM问题、线程问题等。全文所使用图片,部分是自己画的,部分是自己百度的。如果发现雷同图片,联系作者,侵权立删。 1. Java基础面试问题1.1 基本概念相关问题1.1.1 Java语言…

配置Maven并使用IDEA新建一个简单的Springboot项目

一.maven的配置 1.查看电脑上是否配置了maven ①使用快捷键“WinR”打开运行窗口,在窗口中输入cmd,点击确定进入黑色命令窗口 ②在命令行窗口中输入如下命令 mvn -version 如果出现下面的提示则表示该电脑已配置maven,否则需要进行maven配…

SpringBoot整合Java Mail实现发送邮件

SpringBoot整合Java Mail实现发送邮件 实现 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>发送邮件配置 这里使用qq邮箱发送邮件&#xff0c;需要…

Leetcode3200. 三角形的最大高度

Every day a Leetcode 题目来源&#xff1a;3200. 三角形的最大高度 解法1&#xff1a;模拟 枚举第一行是红色还是蓝色&#xff0c;再按题意模拟即可。 代码&#xff1a; /** lc appleetcode.cn id3200 langcpp** [3200] 三角形的最大高度*/// lc codestart class Solutio…

java.sql.SQLException: Before start of result set

情况描述&#xff0c;在通过JDBC连接数据库时&#xff0c;想直接判断获取的值是否存在&#xff0c;运行时报错。 翻译&#xff1a; 在开始结果集之前 报错截图 解决问题的方法&#xff1a;对结果集ResultSet进行操作之前&#xff0c;一定要先用ResultSet.next()将指针移动至…

RAG 效果提升的最后一步—— 微调LLM

如果说&#xff0c;rerank能够让RAG的效果实现百尺竿头更进一步&#xff0c;那么LLM微调应该是RAG效果提升的最后一步。 把召回的数据&#xff0c;经过粗排&#xff0c;重排序后&#xff0c;送给模型&#xff0c;由模型最后总结答案。LLM的确已经是RAG的最后一步了。 这里还是会…

C#可空类型与数组

文章目录 可空类型NULL合并运算符&#xff08;??&#xff09;数组数组声明数组初始化数组赋值数组访问多维数组交错数组数组类数组类的常用属性数组类的常用方法 可空类型 C#提供了一种特殊的数据类型&#xff0c;nullable类型&#xff08;可空类型&#xff09;&#xff0c;可…

<数据集>夜间车辆识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;5000张 标注数量(xml文件个数)&#xff1a;5000 标注数量(txt文件个数)&#xff1a;5000 标注类别数&#xff1a;8 标注类别名称&#xff1a;[car, pedestrian, traffic light, traffic sign, bicycle, bus, truck…

vue学习day08-v-model详解、sync修饰符、ref和$refs获取dom组件、Vue异步更新和$nextTick

25、v-model详解 &#xff08;1&#xff09;v-model原理 1&#xff09;原理: v-model本质上是一个语法糖&#xff0c;比如&#xff1a;在应用于输入框时&#xff0c;就是value属性与input事件的合写。 2&#xff09;作用 ①数据变&#xff0c;视图变 ②视图变&#xff0c…

短链接服务Octopus-搭建实战

[WARNING] The POM for cn.throwx:octopus-contract:jar:1.0-SNAPSHOT is missing, no dependency information available 解决方案&#xff1a; cd octopus-contract/ mvn install -------------- ➜ octopus-server git:(master) ✗ mkdir -p /data/log-center/octopus/s…

DockerCompose介绍,安装,使用

DockerCompose 1、Compose介绍 将单机服务-通过Dockerfile 构建为镜像 -docker run 成为一个服务 user 8080 net 7000 pay 8181 admin 5000 监控 .... docker run 单机版、一个个容器启动和停止问题&#xff1a; 前面我们使用Docker的时候&#xff0c;定义 Dockerfil…

Lottery 分布式抽奖(个人向记录总结)

1.搭建&#xff08;DDDRPC&#xff09;架构 DDD——微服务架构&#xff08;微服务是对系统拆分的方式&#xff09; &#xff08;Domain-Driven Design 领域驱动设计&#xff09; DDD与MVC同属微服务架构 是由Eric Evans最先提出&#xff0c;目的是对软件所涉及到的领域进行建…

.NET MAUI开源架构_2.什么是 .NET MAUI?

1.什么是.NET MAUI&#xff1f; .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。使用 .NET MAUI&#xff0c;可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款…

pytorch中一些最基本函数和类

1.Tensor操作 Tensor是PyTorch中最基本的数据结构&#xff0c;类似于NumPy的数组&#xff0c;但可以在GPU上运行加速计算。 示例&#xff1a;创建和操作Tensor import torch# 创建一个零填充的Tensor x torch.zeros(3, 3) print(x)# 加法操作 y torch.ones(3, 3) z x y pr…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(三)-机上无线电接入节点无人机

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

【JavaEE】AOP实现原理

概述 Spring AOP 是基于动态代理来实现AOP的, 此处主要介绍代理模式和Spring AOP的源码剖析 一.代理模式 代理模式是一种常用的设计模式&#xff0c;它允许为其他对象提供代理&#xff0c;以控制对这个对象的访问。这种结构在不改变原始类的基础上&#xff0c;通过引入代理类…

MongoDB教程(一):Linux系统安装mongoDB详细教程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、Ubuntu…

应急响应总结

应急响应 日志 windows IIS 6.0 及更早版本&#xff1a; C:\WINDOWS\system32\LogFiles\W3SVC[SiteID]\ IIS 7.0 及更高版本&#xff1a; C:\inetpub\logs\LogFiles\W3SVC[SiteID]\ Apache HTTP Server C:\Program Files (x86)\Apache Group\Apache2\logs\ 或者 C:\Prog…

STFT:解决音频-视频零样本学习 (ZSL) 中的挑战

传统的监督学习方法需要大量的标记训练实例来进行训练,视听零样本学习的任务是利用音频和视频模态对对象或场景进行分类&#xff0c;即使在没有可用标记数据的情况下。为了解决传统监督方法的限制&#xff0c;提出了广义零样本学习&#xff08;Generalized Zero-Shot Learning,…

Golang操作ES全系列(olivere curl操作es)

Golang操作ES全系列&#xff08;olivere & curl操作es&#xff09; &#x1f680;全部代码&#xff08;欢迎&#x1f44f;&#x1f3fb;star&#xff09;&#xff1a; https://github.com/ziyifast/ziyifast-code_instruction/tree/main/go-demo/go-es 1 olivere 创建clie…