网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

news2024/12/23 13:07:21

网际协议(Internet Protocol,IP),又称互联网协议。是OSI中的网络层通信协议,用于跨网络边界分组交换。它的路由功能实现了互联互通,并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之一,也是最重要的互联网标准协议之一。网际协议IP 又称为 Kahn-Cerf 协议,因为这个重要协议正是 Robert Kahn 和 Vint Cerf二人共同研发的。

一、网际协议第4版(Internet Protocol version 4,IPv4)

一般来说的IP协议指的是第4个版本,应记为IPv4(Internet Protocol version 4)。但在讲述IP协议的各种原理时,往往不在后面加上版本号。除IPv4之外还有一种新版本IPv6(Internet Protocol version 6),并且已经被提议来取代IPv4。而版本1、版本2、版本3和版本5都未曾使用过。

1. IPv4 报文结构

在这里插入图片描述

其中首部部分的具体字段如下:

在这里插入图片描述

  • 版本 (Version):占4位,IP协议的版本,IPv4的版本号即为4, IPv6的版本号即为6
  • 首部长度(Internet Header Length, IHL):占4位,最小为5。
  • 区分服务(Differentiated Services,DS):占8位,指示期望获得哪种类型的服务。
  • 总长度(Total Length):占16位,首部+数据,单位是1位。
  • 标识符(Identification):占16位,唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文。
  • 标志 (Flags):占3位,这个3位字段用于控制和识别分片;
    • 位0:保留,必须为0;
    • 位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片;
    • 位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。
  • 分片偏移 (Fragment Offset):13位,指明每个分片相对于原始报文开头的偏移量,以8字节作单位。
  • 生存时间(Time To Live,TTL):占8位,IP分组的保质期。经过一个路由器-1,变成0则丢弃。
  • 协议(Protocol):占8位,数据部分的协议。
  • 首部检验和(Header Checksum):占16位,只检验首部。
  • 源IP地址(Source address):占32位,表示发送端IP地址。
  • 目标IP地址(Destination address):占32位,表示接收端IP地址。
  • 可选字段(Options):长度可变,占0~40位, 用来支持排错、测量以及安全等措施。
  • 填充(Padding):长度可变,全部为0,把首部补成4位的整数倍。

2. IPv4 地址

在 TCP/IP 网络通信的过程中,为了确保通信的顺畅,每个连入互联网的设备或域(如计算机、服务器、路由器等)都被分配一个 IP 地址(Internet Protocol address),作为唯一标识符。每个 IP 地址都是一个字符序列,如 192.168.1.1(IPv4)、2001:0db8:85a3:0000:0000:8a2e:0370:7334(IPv6) 。

网际协议版本4(英语:Internet Protocol version 4,IPv4) 地址是全世界唯一的32位(4字节)标识符,标识路由器主机的接口。在计算机内部,这一地址是以二进制的形式进行处理。

IP地址={<网络号>,<主机号>}

‌网络号(Network Number)‌和‌主机号(Host Number)‌是IP地址的两个重要组成部分,它们在计算机网络中起着标识和通信的关键作用。

  • 网络号(Network Number)‌用于标识一个网络。在IP地址中,网络号通常是地址的前几部分
  • 主机号(Host Number)‌用于标识同一网络中的不同设备。在IP地址中,主机号是除了网络号之后的部分。

然而,为了便于人类的记忆与识别,我们采用了一种称为点分十进制的表示方法,也就是将32位的 IP 地址分割为4个部分,每个部分包含8位,这4个部分之间用点(.)进行分隔,并且把每一部分都转换成十进制数来表示。
在这里插入图片描述

3.IP 数据报分片与重组

每种数据链路的最大传输单元(MTU)都是不同的,例如FDDI数据链路的MTU为4352字节,以太网的MTU为1500字节等。这些不同的MTU值反映了各种数据链路在设计和用途上的差异。

当IP数据包的大小超过了某个特定数据链路的MTU时,该IP数据包就会被分片。经过分片后,这些小数据报只能由目标主机进行重组,中间的路由器不会对其进行重组操作。

举例来说,如果发送方要传输一个3800字节的大数据包,在以太网链路上传输时,这个数据包将被分成3个小数据包进行传输,然后再由接收方将这些小数据包重组成原始的大数据包。这样的处理方式保证了数据在不同MTU的网络链路上传输时的连通性和完整性。
在这里插入图片描述

4.分类的IP地址

互联网诞生之初,IP 地址显得很充裕,于是计算机科学家们设计了分类地址

IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。
在这里插入图片描述

A、B、C 分类对应的地址范围、最大主机个数如下。

网络类别IP地址范围最大可用网络数第一个可以用的网络号最后一个可用的网络号最大主机数
A0.0.0.0 ~ 127.255.255.255 2 7 − 2 2^7 -2 2721126 2 24 − 2 = 16777214 2^{24} -2=16777214 2242=16777214
B128.0.0.0 ~ 191.255.255.255 2 14 − 1 2^{14 -1} 2141128.1191.255 2 16 − 2 = 65534 2^{16} -2=65534 2162=65534
C192.0.0.0 ~ 255.255.255.255 2 21 − 1 2^{21 -1} 2211192.0.1223.255.255 2 8 − 2 = 254 2^8 -2=254 282=254

计算最大主机个数时,减2的原因:

因为在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址。

  • 主机号全为 1 指定某个网络下的所有主机,用于广播;
  • 主机号全为 0 指定某个网络。

广播地址是同时向网络中所有工作站进行发送的一个地址,即用于网络中的一对所有通信‌

而 D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。

多播用于将包发送给特定组内的所有主机,即用于网络中的一对多通信‌
多播地址是一种特殊的IP地址,用于允许多个发送者发送单一数据包到多个接收者,而不需要分别发送每个数据包。
故多播地址适用于在线直播视频、文件分发、群组通信、多人网游等场景

特殊 IP 地址

NetID网络号HostID 主机号作 为 IP 分组源地址作 为 IP 分组目标地址用 途
全0全0可以不可以本网范围内表示主机,路由表中用于表示默认路由(表示整个Internet网络)
全0特定值可以不可以表示本网内某个特定主机
全1全1不可以可以本网广播地址(路由器不转发)
特定值全0不可以不可以网络地址,表示一个网络
特定值全1不可以可以直接广播地址,对特定网络上的所有主机进行广播
127任何数(非全0/1)可以可以用于本地软件环回测试,称为环回地址

IP 分类的特点

  • 优点
    • 简单、选路方便‌:路由器或主机解析到一个 IP 地址时,根据前四位就可以判断出IP分类,这使得网络管理和路由选择相对容易‌。
  • 缺点
    • 灵活性差‌:两级IP地址结构不够灵活。
    • 地址分配不合理‌:A、B、C类地址的分配与实际使用场景不匹配。C类地址包含的主机数量太少,不够用;而B类地址包含的最大主机数量太多,导致浪费‌

5.划分子网和构造超网

(1)子网划分

为了解决IP 分类灵活性差‌和地址分配不合理‌的缺陷,从 1985年起在P地址中又增加了一个“子网号字段”,使两级IP地址变成为三级IP地址,它能够较好地解决上述问题,并且使用起来也很灵活。这种做法叫做子网划分(subneting),或子网寻址或子网路由选择。子网划分已成为互联网的正式标准协议(RFC950)。

子网划分的基本思路如下:

  • 子网划分主要是单位内部的一项操作,对外则维持着未划分子网的网络形象。这一过程中,会从原本的主机号中借用一定数量的比特来充当子网号,相应地,主机号的比特数会减少相同的量。
  • 三级IP地址的结构可以表述为:IP地址 = {<网络号>, <子网号>, <主机号>}。
  • 当来自其他网络的IP数据报要发送给本单位内的某一台主机时,首先会根据数据报中目标主机的网络号找到连接至本单位网络的路由器。随后,该路由器在接收到数据报后,会依据目标主机的网络号和子网号来确定目标子网。最终,数据报会被直接传送到指定的主机上。

在这里插入图片描述

注意:

1)划分子网只是把 IP 地址的主机号这部分进行再划分,而不改变 IP 地址原来的网络号。因此,从一个I 地址本身或 IP数据报的首部,无法判断源主机或目标主机所连接的网络是否进行了子网划分。

2)RFC 950 规定,对分类的IPv4 地址进行子网划分时,子网号不能为全1或全 0。但随着CIDR的广泛使用,现在全1和全0的子网号也可使用,但一定要谨慎使用,要弄清你的路由器所用的路由选择软件是否支持全0或全1的子网号。

3)不论是分类的 IPv4 地址还是 CIDR,其子网中的主机号为全0或全1的地址都不能被指派。子网中主机号全0的地址为子网的网络号,主机号全1的地址为子网的广播地址。

在这里插入图片描述

(2)子网掩码

一个数据报该如何确定哪部分是子网号呢?

子网掩码(network mask)用于指示一个IP地址中哪些部分代表网络号、子网号和主机号。它与IP地址结合使用,帮助设备确定在一个网络中哪些部分是网络地址,哪些部分是主机地址。

子网掩码是一个与IP地址对应的32位二进制串,由一串1和随后的一串0组成。其中,1代表IP地址中的网络号和子网号0代表主机号。计算机只需将IP地址和相应的子网掩码进行逐位的 “” 运算,便可得出所在子网的网络地址。

根据当前因特网标准规定,所有网络都必须采用子网掩码。如果某个网络未进行子网划分,则使用默认的子网掩码。A、B、C类地址的默认子网掩码分别为255.0.0.0、255.255.0.0、255.255.255.0。

例如,若某主机的IP地址为192.168.5.56,子网掩码为255.255.255.0,经过逐位“与”运算后,该主机所在子网的网络号为192.168.5.0。
在这里插入图片描述
具体计算过程如下:
在这里插入图片描述

(3)无类别域间路由(CIDR)

划分子网在一定程度上缓解了互联网在发展中遇到的困难。然而在1992年B类地址已分配了近一半,即将全部分配完毕。因此 IETF 很快就在变长子网掩码(Variable Length Subnet Mask,VLSM)的基础上,提出采用 无类别域间路由(Classless Interdomain Routing,CIDR) 的方法来解决此问题,此方法于 RFC 4632 中提出。

CIDR 把32位的 IP 地址划分为前后两个部分。前面部分是“网络前缀”(network-prefix),用来指明网络,后面部分则用来指明主机。
其记法是: IP 地址 ::= {<网络前缀>,<主机号>}
在这里插入图片描述
当使用子网寻址时,CIDR 还使用“斜线记法”(slash notation),或称为CIDR 记法。 即 a.b.c.d/x, 其中a.b.c.d是32为IP地址的点分十进制,x为网络前缀所占比特数。

例:128.14.32.5/20这个地址,它的掩码是20个连续的1和后续12个连续的0,通过逐位相“与”的方法可以得到该地址的网络前缀,即前20位是网络前缀,后12为位主机号。
在这里插入图片描述
最终网络前缀点分十进制为 128.14.32.0

CIDR的两个主要特点

  1. CIDR 消除了传统的 A类、B类和 C类地址以及划分子网的概念,因而能更加有效地分配 IPv4 的地址空间。

  2. CIDR 融合子 网地址与子网掩码, 方便子网划分。把网络前缀都相同的连续的IP地址组成一个“CIDR 地址块”。CIDR 地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。

例:192.199.170.82/27这个地址。它的IP地址个数、可用地址个数、掩码、最小和最大可用地址、网络号如下:
它的掩码是27个连续的1和后续5个连续的0,通过逐位相“与”的方法可以得到该地址的网络前缀,即前27位是网络前缀,后5为位主机号。

在这里插入图片描述

6. 私有 IP 地址与网络地址转换(NAT)

(1)私有IP地址

在 A、B、C 分类地址,实际上有分公有 IP 地址和私有 IP 地址。

私有 IP 地址范围如下:

地址类别IP地址范围私有 IP地址范围网段个数最大主机数
A类0.0.0.0 ~ 127.255.255.25510.0.0.0~10.255.255.2551 2 24 − 2 = 16777214 2^{24} -2=16777214 2242=16777214
B类128.0.0.0 ~ 191.255.255.255172.16.0.0~172.31.255.25516 2 16 − 2 = 65534 2^{16} -2=65534 2162=65534
C类192.0.0.0 ~ 255.255.255.255192.168.0.0~192.168.255.255256 2 8 − 2 = 254 2^8 -2=254 282=254

私有 IP 地址一般都是指在 局域网(Local Area Network,LAN)或内部网络(如公司、学校等)用的 IP 地址。私有 IP 地址允许组织内部的 IT 人员自己管理、自己分配。私有 IP 地址可以重复

公共IP地址则是可以在公共互联网上唯一标识设备的IP地址,用于在全球范围内进行 广域网(Wide Area Network,WAN)或公共互联网通信。这些地址可以被路由器、防火墙等设备直接访问,并且可以在互联网上进行路由和传输数据。公共IP地址通常由互联网服务提供商(ISP)分配给客户设备,以确保它们可以通过互联网进行通信。公有 IP 地址基本上要在整个互联网范围内保持唯一

(2)网络地址转换(NAT)

IPv4 的地址是非常紧缺的,虽然可以通过**无类别域间路由(CIDR)**来减缓 IPv4 地址耗尽的速度,但是 IPv4 地址仍然不足以使用。(2011年1月31日互联网分配与分配机构(IANA)正式宣布IPv4地址用尽)

网络地址转换(Network Address Translation,NAT)于1994年被提出,是指通过将专用网络地址(如Intranet)转换为公用地址(如Intranet),从而对外隐藏内部管理的 IP 地址。它使得整个专用网 只需要一个全球P地址就可以与因特网连通,由于专用网本地 IP 地址是可重用的,所以 NAT 大大节省了 IP 地址的消耗。同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。

简单的来说 NAT 就是局域网内的主机对外部通信时,将私有网络内部的IP地址转换为公共网络可识别的IP地址,从而实现局域网内部设备与外部网络进行通信。

NAT工作原理如下:

NAT 需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT 路由器,它至少有一个有效的外部全球 IP 地址。这样,所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。

NAT路由器工作原理如下:

  1. 当内部设备发送数据包到NAT路由器时,路由器会检查数据包中的目标IP地址。如果目标IP地址是外部公共IP地址,则数据包直接发送到外部网络;如果是内部私有IP地址,NAT路由器会使用 NAT 转换表源IP地址和端口号转换为路由器的公共IP地址和端口号,并记录这种转换关系在转换表中。转换后的数据包被发送到外部网络。
  2. 在返回响应数据包时,NAT 路由器会根据 NAT转换表 将响应数据包进行反向 NAT转换,将公共IP地址和端口号映射回对应的内部私有IP地址和端口号,然后再发送给内部设备。

在这里插入图片描述

以上图为例:

假设某个宿舍办理了宽带,那么这个宿舍就获得了一个全球IP地址(如172.38.1.5)。而宿舍内2台主机使用私有地址(如192.168.0.0网段)。宿舍的网关路由器应该开启 NAT 功能,并且宿舍的网关路由器上的 NAT转换表。
那么,当跆由器从 LAN 端口收到 源 IP 及源端口号 为 192.168.0.3:30000 的数据报时,就将其映射成 172.38.1.5:40001,然后从WAN端口发送到因特网上。当路由器从 WAN 端口收到 目标 IP 及目标端口号 为 172.38.1.5:40002 的数据报时,就将其映射成 192.168.0.3:30001,然后从LAN端口发送给相应的本地主机。这样,只需要一个全球公共IP地址,就可以让多台主机同时访问因特网。

二、IP 协议的三个配套协议

与IP协议配套使用的还有三个协议:

  • 地址解析协议(Address Resolution Protocol, ARP)
  • 网际控制报文协议(Internet Control Message Protocol,ICMP)
  • 网际组管理协议 (Internet Group Management Protocol,IGMP)

除此之外还有一个协议叫做逆地址解析协议(Reverse Address Resolution Protocol,RARP),是和ARP 协议配合使用的。但现在已被淘汰不使用了。
在这里插入图片描述

1.地址解析协议(ARP)

在实际应用中,无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终必须使用硬件地址,所以需要一种方法来完成IP地址到MAC地址的映射。

地址解析协议(Address Resolution Protocol, ARP)是这一种通过IP地址来寻找硬件MAC地址的协议。ARP协议的核心原理就是每台主机都设有一个 ARP高速缓存(ARP Cache),用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,称 ARP表。使用ARP来动态维护此ARP表。

ARP协议工作原理:

检查ARP高速缓存 ,有对应表项则写入MAC帧,没有则用目标主机MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组, 同一局域网中所有主机都能收到该请求。目标主机收到请求后就会向源主机单播一个ARP响应分组,分组包含目标主机的IP地址与MAC地址映射关系,源主机收到后将此映射 写入ARP缓存 (10-20min更新一次)。

ARP协议4种典型情况:

  1. 主机A发给 本网络 上的主机B:用ARP找到主机B的硬件地址;
  2. 主机A发给 另一网络 上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址;
  3. 路由器发给 本网络 的主机A:用ARP找到主机A的硬件地址;
  4. 路由器发给 另一网络 的主机B:用ARP找到本网络上的一个路由器的硬件地址

2.网际控制报文协议(ICMP)

网际控制报文协议(Internet Control Message Protocol,ICMP)被收录在 “RFC 792”中,是互联网的标准协议。此协议可以更有效地转发 IP 数据报和提高交付成功的机会。

ICMP 的功能包括:差错报告、网络探询。

  1. 差错报告:当路由器或主机在处理IP数据包时遇到问题(如目标不可达、超时等),会生成ICMP错误报文并返回给源主机,告知问题的具体原因。

  2. 网络探询:ICMP可以用于发送请求消息并等待目标主机的响应,从而确认 IP 包是否成功送达⽬标地址。

ICMP 工作原理:

当路由器或主机发现IP包无法正确处理时,会生成相应类型的ICMP消息,并将其封装在一个ICMP数据包中,然后发送给源主机或目标主机。源主机或目标主机收到ICMP消息后,根据消息类型采取相应的措施(如重新发送数据包、调整路由等)。
ICMP 报文格式:

ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
在这里插入图片描述

ICMP报文的种类有两种,即通知出错原因的错误消息ICMP差错报告报文 和 用于诊断的查询消息ICMP询问报文

ICMP报文的种类

类型值ICMP消息类型用途说明报文类型
0回显请求(Echo Reply)Echo响应 (被程序ping使用)查询
3目的不可达(Destination Unreachable)当路由器或主机不能交付数据报时就向源点发送终点不可达报文差错
4源点抑制(Source Quench)当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文差错
5重定向(Redirect)路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器差错
8请求回显(Echo Request)Echo请求查询
11ICMP 超时(Time Exceeded)当路由器收到生存时间TTL=0的数据报或终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就丢弃该数据报并向源点发送时间超过报文差错
12参数问题(Parameter Problem)当路由器或目标主机收到的数据报首部中有字段值错误时,就丢弃该数据报并向源点发送参数问题报文差错

类型值6为备用主机地址,已经弃用;类型值为1、2、7为保留类型值,未被分配。

不应发送ICMP差错报文的情况

  1. 对ICMP差错报告报文不再发送ICMP差错报告报文。
  2. 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
  3. 对具有组播地址的数据报都不发送ICMP差错报告报文。
  4. 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。

ICMP 的常见应用
ICMP 的两个常见应用是分组网间探测 PING和 Traceroute 。

  1. 分组网间探测PING (Packet InterNet Groper)用来测试两台主机之间的连通性。PING 使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层 ICMP 的一个例子。它没有通过运输层的TCP 或 UDP。
    在这里插入图片描述

  2. Traceroute (UNIX 中的名字,在 Windows 中是 tracert)可以跟踪一个分组从源点到终点的路径,Traceroute(Tracert)使用了ICMP 时间超过报文。Traceroute是一种网络诊断工具,通过发送数据包并逐步增加TTL字段的值,来确定数据包从源主机到目标主机所经过的路由路径。通过接收目标主机和中间路由器传回的ICMP消息,Traceroute可以显示整个数据包的路径信息,帮助用户追踪网络连接和定位问题。

3.网际组管理协议(IGMP)

网际组管理协议 (Internet Group Management Protocol,IGMP)是用于管理网路协议多播组成员的一种通信协议。目前已经有了三个版本:IGMPv1、IGMPv2和IGMPv3。

  • IGMPv1是在1989年公布的,通过RFC1112进行规范,被广泛应用于早期的互联网多播组管理。

  • IGMPv2是IGMPv1的改进版本,通过RFC2236进行规范,并在1998年发布。IGMPv2在组播组管理方面有了一些改进和优化,例如引入了"组查询"功能,以减少对网络资源的消耗。

  • IGMPv3是最新版本,于2002年10月通过RFC3376进行规范。IGMPv3在处理源特定多播(SSM)等方面有了显著的改进,能够更加有效地管理多播组。此外,IGMPv3还提供了更精细的过滤能力,可以根据源地址和组地址来过滤流量,实现更灵活的策略。

IGMP 工作原理:

  • IGMPv1:IGMPv1是较早的版本,主要用于简单的多播组管理。

    • 当主机希望加入一个多播组时,该主机会向本地路由器发送一个IGMP报文至该多播组的地址,本地多播路由器在接收到报文后,通过多播路由选择协议将IGMP报文传达至其他多播路由器,以建立正确的多播树结构;
    • 本地多播路由器接收到主机发送的成员报告消息后,会记录该主机加入了特定的多播组,路由器会在自己的表中维护这些成员关系。
  • IGMPv2:IGMPv2相比于IGMPv1引入了更多功能,如组查询(Group Query)和"组离开"报告(Leave Group Report)。

    • 组查询(Group Query):组成员关系是动态变化的,本地多播路由器会周期性向局域网内主机发送 IGMP 常规查询报文,以确认哪些主机仍属于该组成员;若主机响应,多播路由器将认定该组仍处于活跃状态。若经多次查询仍未收到响应,则多播路由器将判定本地网络内所有主机已退出该组,停向其他多播路由器传递该组成员信息。
    • “组离开”报告(Leave Group Report):“组离开”报告是主机发送给本地多播路由器的消息,用于通知路由器该主机希望离开该组,当主机发送“组离开”报告后,本地多播路由器会更新成员关系信息,并停止向该主机转发该多播组的数据流。
  • IGMPv3:IGMPv3是最新版本,提供了更多高级功能,如源特定多播(SSM)支持和过滤能力。

    • IGMPv3可以处理源特定多播,允许主机订阅特定数据流而不是整个多播组;
    • 同时IGMPv3提供更精细的过滤能力,可以根据源地址和组地址来进行流量过滤,实现更灵活的策略。

随着版本的更新迭代,IGMP协议不断完善和优化,使得多播组管理更加高效和灵活。

三、网际协议第6版(Internet Protocol version 6,IPv6)

32 位的 IPv4 大约可以提供 42 亿个地址,但是2011年1月31日互联网分配与分配机构(IANA)正式宣布IPv4地址用尽。
虽然采用无类别域间路由(CIDR)和网络地址转换(NAT)可以适当地解决IP地址耗尽的问题,但是治标不治本。解决 IP地址耗尽的根本措施就是采用具有更大地址空间的新版本的IP,即IPv6。

网际协议第6版(Internet Protocol version 6,IPv6)的地址是 128 位的,这可分配的地址数量是大的惊人,说个段子 IPv6 可以保证地球上的每粒沙子都能被分配到一个 IP 地址。 但 IPv6 除了有更多的地址之外,还有更好的安全性和扩展性,说简单点就是 IPv6 相比于 IPv4 能带来更好的网络体验。 但是因为 IPv4 和 IPv6 不能相互兼容,所以不但要我们电脑、手机之类的设备支持,还需要网络运营商对现有的设备进行升级,所以这可能是 IPv6 普及率比较慢的一个原因。

1. IPv6 报文结构

在这里插入图片描述

  • 版本(Version):占4位。指明了协议版本,IPv6中总是6。
  • 优先级(Traffic Class):占8位。区分数据报的类别和 优 先级 。
  • 流标签(Flow Label):占20位。“流”是互联网络上从特定源点到特定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签。
  • 有效载荷长度(Payload Length):占16位。它指明IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内)。这个字段的最大值是64KB(65535字节)。
  • 下一个首部(Next Header):占8位。它用来指明报头后接的报文头部的类型,若存在扩展头,表示第一个扩展头的类型,否则表示其上层协议的类型,它是IPv6各种功能的核心实现方法。
  • 跳数限制(Hop Limit):占8位。用来防止数据报在网络中无限期地存在。源点在每个数据报发出时即设定某个跳数限制(最大为255跳)。每个路由器在转发数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为零时,就要把这个数据报丢弃。
  • 源地址(Source Address):占128位。是数据报的发送端的IP地址。
  • 目标地址(Destination Address):占128位。是数据报的接收端的IP地址。

2. IPv6 地址

IPv6 地址表示

IPv6 地址占用128位,巨大的地址范围还必须使维护互联网的人易于阅读和操纵这些地址。IPv4所用的点分十进制记法现在也不够方便了。例如,一个用点分十进制记法的128位的地址为:104.230.140.100.255.255.255.255.0.0.17.128.150.10.255.255

为了使地址再稍简洁些,IPv6 使用冒号十六进制记法(colon hexadecimal notation, colon hex),它把每个16位的值用十六进制值表示,各值之间用冒号分隔。例如,如果前面所给的点分十进制数记法的值改为冒号十六进制记法,就变成了:68E6:8C64:FFFF:FFFF:0000:1180:960A:FFFF

在十六进制记法中,允许把数字前面的0省略。上面的十六进制记法IP地址可以压缩为:68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF

冒号十六进制记法可以允许零压缩(Zero Compression),即一 连串连续的 0 可以被一对冒号取代。比如FF05:0:0:0:0:0:0:B3就可以被零压缩位FF05::B3(双冒号表示法在一个地址中仅可出现一次)。

IPv6 地址类型

IPv6 数据报的目标地址可以是以下三种基本类型地址之一:

  1. 单播。单播就是传统的点对点通信。
  2. 多播。多播是一点对多点的通信,分组被交付到一组计算机的每台计算机。
  3. 任播。这是 IPv6 增加的一种类型。任播的目标站是一组计算机,但数据报在交付时只交付其中的一台计算机,通常是距离最近的一台计算机。

3. IPv6对比IPv4的提升

  1. IPv6将地址从32位(4B)扩大到128 位( 16B ) ,更大的地址空间。
  2. IPv6将校验和字段彻底移除 ,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能。
  3. IPv6将IPv4的可选字段移出首部,变成了 扩展 首部 ,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率。
  4. IPv6支持 即插即用 (即自动配置),不需要DHCP协议。

4. IPv4 向 IPv6过渡的策略

双栈协议:
双协议栈(dual stack)是指在完全过渡到IPv6前,使一部分设备上同时启用IPv4协议栈和IPv6协议栈。因此双协议栈设备既能和IPv4网络通信,又能和IPv6网络通信。双协议栈的主机(或路由器)记为IPv6/IPv4,表明它同时具备两个IP地址:IPv4和IPv6。

隧道技术:
隧道技术(tunneling)通过使用互联网络的基础设施在网络之间传递数据的方式。这种方法的要点就是在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4数据报。现在整个的 IPv6 数据报变成了IPv4 数据报的数据部分,然后通过隧道发送。

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

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

相关文章

运维工作常用Shell脚本(Commonly Used Shell Scripts for Operation and Maintenance Work)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

机器学习8-决策树CART原理与GBDT原理

Gini 系数 和Gini 系数增益 CART决策树算法流程举例 该篇文章对于CART的算法举例讲解&#xff0c;一看就懂。 决策树(Decision Tree)—CART算法 同时也可以观看视频 分类树 GBDT原理举例 可以看如下示例可以理解GBDT的计算原理 用通俗易懂的方式讲解&#xff1a; GBDT算法及…

oracle中删除指定前缀的表

近期接手做的项目&#xff0c;发觉数据库中有许多多余的表。究其原因&#xff0c;应该是同事贪图方便&#xff0c;将过去做过的项目复制粘贴&#xff0c;然后修修改改。包括数据库也是克隆过来的&#xff0c;然后又没有删除本项目多余的表&#xff0c;结果经过几个轮回&#xf…

JAVA篇10 —— 常用类WrapperStringMathArraysSystemBigIntegerBigDecimal日期

欢迎来到我的主页&#xff1a;【一只认真写代码的程序猿】 本篇文章收录于专栏【小小爪哇】 如果这篇文章对你有帮助&#xff0c;希望点赞收藏加关注啦~ 目录 1 包装类 1.1 包装类和String 1.2 int&char包装类常用方法 2 String类 3 Math 类 4 Arrays类 5 System类…

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑&#xff0c;肯定是很多人不想看到的&#xff0c;我的开源软件PakePlus是使用tauri开发的&#xff0c;PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序&#xff0c;利用Tauri轻松构建轻量级多端桌面应用和多端手机应用&#xff0c;为了实现发布的时候…

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 通义灵码走进北京大学创新课堂&#xff0c;与 400…

鸿蒙开发-HMS Kit能力集(地图服务、华为支付服务)

地图服务 Map Kit&#xff08;地图服务&#xff09;是鸿蒙生态下的一个地图服务&#xff0c;为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能&#xff0c;轻松完成地图构建工作。 Map Kit提供了千万级别的 Poi&…

【四轴】基于IIC通信读写MPU6050寄存器

1. 基本原理 在这篇【四轴】软件IIC通信的实现 – Dukis Blog博客中&#xff0c;我介绍了软件IIC的实现方式。而MPU6050&#xff0c;正是一种通过IIC进行通信的传感器外设。 1.1 什么是MPU6050 MPU6050 是 InvenSense 公司推出的一款6 轴惯性传感器模块&#xff0c;广泛应用于姿…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI&#xff1a;使用ArkUI实现用户信息的持久化管理与自动填充&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…

基于SpringBoot+Vue的美妆购物网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【SpringBoot+Vue】x-admin管理系统跟做

技术栈 前端技术说明Vue前端框架Vuex全局状态管理框架ElementUI前端UI框架Axios前端HTTP框架vue-element-admin项目脚手架 后端技术说明SpringBoot容器MVC框架MyBatisORM框架MyBatis-plusMyBatis增强工具Redis非关系型数据库 数据库准备 SET NAMES utf8mb4; SET FOREIGN_KE…

【Docker】Docker配置远程访问

配置Docker的远程访问&#xff0c;你需要按照以下步骤进行操作&#xff1a; 1. 在Docker宿主机上配置Docker守护进程监听TCP端口 Docker守护进程默认只监听UNIX套接字&#xff0c;要实现远程访问&#xff0c;需要修改配置以监听TCP端口。 ‌方法一&#xff1a;修改Docker服务…

LeetCode hot100(自用背诵、部分题目、非最优解)

点击题目可以跳转到LeetCode 哈希 两数之和 public int[] twoSum(int[] nums, int target) {int lengthnums.length;int[] ans new int[2];for (int i 0; i <length-1 ; i) {for (int j i1; j < length; j) {if(nums[i]nums[j]target){ans[0]i;ans[1]j;}}}return an…

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…

ESG研究报告白皮书与ESG治理报告合集(2020-2023年)

一.资料范围&#xff1a;&#xff08;1&#xff09;ESG白皮书及指南;&#xff08;2&#xff09;ESG研究报告,&#xff08;3&#xff09;ESG治理报告分析&#xff08;4&#xff09;上市公司ESG报告&#xff08;知名企业&#xff09; 二、资料用途&#xff1a;可以分析研究企业E…

WPF指示灯的实现方式

WPF指示灯的实现方式 样式 XAML <Button x:Name"Btn1" Width"25" Height"25" Grid.Row"0" Grid.Column"1" Margin"10 5 5 5 "><Button.Template><ControlTemplate TargetType"Button"…

初识QT第一天

思维导图 利用Qt尝试做出原神登陆界面 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit# 封装原神窗口类 class Genshin(QWidget):# 构造函数def __init__(self):# 初始化父类…

【Linux】线程池设计 + 策略模式

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 线程池 1-1 ⽇志与策略模式1-2 线程池设计1-3 线程安全的单例模式1-3-1 什么是单例模式1-3-2 单例模式的特点1-3-3 饿汉实现⽅式和懒汉实现⽅式1-3-4 饿汉…

vim插件管理器vim-plug替代vim-bundle

文章目录 vim-plug与vim-bundle对比vim-plug安装vim-plug管理安装插件相关文章 vim-plug与vim-bundle对比 vim-plug 和 vim-bundle 都是 Vim 的插件管理器&#xff0c;但它们有一些关键的区别。以下是两者的主要对比&#xff1a; 易用性和简洁性 vim-plug: 易用性: vim-plug …