网络层
IPv4协议介绍
概述
IPv4(Internet Protocol version 4)是互联网协议的第四版,也是广泛使用的网络层协议。它定义了数据包的格式和地址方案,负责将数据从源主机传输到目的主机。IPv4协议自1983年发布以来,一直是互联网的核心协议。
IPv4地址
-
格式:IPv4地址是32位的二进制数,通常表示为点分十进制格式,例如
192.168.0.1
。 -
地址分类:IPv4地址分为A、B、C、D和E五类:
- A类:0.0.0.0 - 127.255.255.255,适用于大型网络。
- B类:128.0.0.0 - 191.255.255.255,适用于中型网络。
- C类:192.0.0.0 - 223.255.255.255,适用于小型网络。
- D类:224.0.0.0 - 239.255.255.255,用于多播。
- E类:240.0.0.0 - 255.255.255.255,保留用于实验目的。
-
私有地址:以下地址块用于私有网络,不在公共互联网中使用:
- 10.0.0.0 - 10.255.255.255
- 172.16.0.0 - 172.31.255.255
- 192.168.0.0 - 192.168.255.255
-
子网掩码:用于区分网络部分和主机部分,例如子网掩码
255.255.255.0
对应的网络前缀为/24
。
IPv4报文格式
IPv4报文由头部和数据部分组成。头部长度为20到60字节,包含以下字段:
- 版本 (Version):4位,表示IP协议的版本号,为4。
- 头部长度 (IHL, Internet Header Length):4位,表示IP头部的长度,以32位字(4字节)为单位。
- 服务类型 (Type of Service, TOS):8位,用于指定数据包的优先级和QoS参数。
- 总长度 (Total Length):16位,表示整个IP报文的长度,以字节为单位。
- 标识 (Identification):16位,用于唯一标识发送的报文,可以在分片重组时使用。
- 标志 (Flags):3位,控制和标识分片。包括:
- 保留位 (Reserved bit)
- 不分片 (Don’t Fragment, DF)
- 更多分片 (More Fragments, MF)
- 片偏移 (Fragment Offset):13位,指示分片数据在原始数据中的相对位置,以8字节为单位。
- 生存时间 (Time to Live, TTL):8位,指定数据包的生存时间,每经过一个路由器,TTL减1,TTL为0时,数据包被丢弃。
- 协议 (Protocol):8位,指示上层协议类型(如TCP为6,UDP为17)。
- 头部校验和 (Header Checksum):16位,计算头部的校验和,用于校验头部数据的完整性。
- 源地址 (Source Address):32位,发送数据包的源IP地址。
- 目的地址 (Destination Address):32位,接收数据包的目的IP地址。
- 选项 (Options):可变长度,用于携带控制信息,如时间戳、安全等。
IPv4报文格式图示:
在IPv4协议头部中,“协议 (Protocol)”字段用于指示数据包中封装的上层协议类型。该字段是8位长,以下是一些常见协议的值及其对应的协议名称:
- 1 - ICMP (Internet Control Message Protocol)
- 2 - IGMP (Internet Group Management Protocol)
- 6 - TCP (Transmission Control Protocol)
- 17 - UDP (User Datagram Protocol)
- 41 - IPv6 encapsulation
- 47 - GRE (Generic Routing Encapsulation)
- 50 - ESP (Encapsulating Security Payload) in IPsec
- 51 - AH (Authentication Header) in IPsec
- 58 - ICMPv6 (Internet Control Message Protocol for IPv6)
- 89 - OSPF (Open Shortest Path First)
- 132 - SCTP (Stream Control Transmission Protocol)
这是一个更详细的列表,包括一些其他常见协议:
值 | 协议名称 | 描述 |
---|---|---|
1 | ICMP (Internet Control Message Protocol) | 用于发送控制消息和错误报告,如ping命令。 |
2 | IGMP (Internet Group Management Protocol) | 用于管理多播组成员。 |
6 | TCP (Transmission Control Protocol) | 提供面向连接的、可靠的数据传输。 |
17 | UDP (User Datagram Protocol) | 提供无连接的、不可靠的数据传输。 |
41 | IPv6 encapsulation | 用于IPv6的封装。 |
47 | GRE (Generic Routing Encapsulation) | 用于封装各种网络层协议的数据包。 |
50 | ESP (Encapsulating Security Payload) | IPsec的一部分,用于提供加密和身份验证。 |
51 | AH (Authentication Header) | IPsec的一部分,用于提供数据包的完整性和身份验证。 |
58 | ICMPv6 (Internet Control Message Protocol for IPv6) | 用于IPv6的控制消息和错误报告。 |
89 | OSPF (Open Shortest Path First) | 用于路由信息的交换。 |
132 | SCTP (Stream Control Transmission Protocol) | 提供消息传递协议,适用于电话通信。 |
工作原理
- 数据封装:上层协议(如TCP或UDP)生成的数据被封装在IP报文中。
- 路由和转发:路由器根据目的IP地址和路由表,选择最佳路径将数据包从源节点传输到目的节点。
- 分片和重组:如果数据包大小超过网络的最大传输单元(MTU),则进行分片;接收端负责重组分片。
- 错误检测和处理:头部校验和用于错误检测,TTL字段防止数据包在网络中无限循环。
地址分配方式
IPv4地址的分配方式主要分为以下几种,每种方式根据不同的需求和应用场景,确保网络地址的合理使用和管理:
1. 静态分配 (Static Allocation)
在静态分配方式中,IPv4地址手动分配给设备,并且地址不会改变。这种方法通常用于需要固定地址的设备,如服务器、打印机和网络设备。
优点:
- 地址稳定,适合需要固定地址的设备。
- 便于管理网络设备的访问权限。
缺点:
- 手动配置麻烦,易出错。
- 不灵活,难以应对设备的增加或变动。
2. 动态主机配置协议 (DHCP, Dynamic Host Configuration Protocol)
DHCP是一种自动分配IP地址的协议,设备连接到网络时,会向DHCP服务器请求一个IP地址,服务器从预定义的地址池中分配一个可用地址给设备。
优点:
- 自动化,减少手动配置错误。
- 灵活,应对设备的增加和变动。
- 可以动态回收和重新分配地址,提高地址利用率。
缺点:
- DHCP服务器需要维护。
- 每次设备重启可能会获得不同的IP地址,不适合需要固定IP地址的设备。
3. 自动私有IP地址分配 (APIPA, Automatic Private IP Addressing)
APIPA是一种当DHCP服务器不可用时自动分配IP地址的机制,设备会自动分配一个169.254.x.x范围内的地址,使得设备在本地网络中可以互相通信。
优点:
- 无需DHCP服务器,提供基础网络连接。
- 自动化,无需配置。
缺点:
- 仅适用于本地网络,不能与外部网络通信。
- 地址范围有限,不适合大规模网络。
4. 基于地址分配协议 (BOOTP, Bootstrap Protocol)
BOOTP是DHCP的前身,主要用于无盘工作站从网络引导。BOOTP服务器存储客户端的IP地址和引导文件信息,设备启动时请求这些信息。
优点:
- 支持网络引导,适用于无盘工作站。
缺点:
- 功能较简单,逐渐被DHCP取代。
DHCP配置ipv4地址
DHCPv4(Dynamic Host Configuration Protocol for IPv4)是一种网络管理协议,用于动态分配IP地址和其他网络配置参数。通过udp协议传输数据, 服务端监听端口67
, 客服端监听端口68
, 通过广播地址255.255.255.255
通信, 以下是DHCPv4分配IP地址的过程,包含各个步骤和相关数据包的交互。
1. DHCP Discover
客户端通过广播发送DHCP Discover消息,寻找可用的DHCP服务器。Discover消息中不包含任何IP地址,目的是让网络中的所有DHCP服务器都能接收到请求。
2. DHCP Offer
所有接收到Discover消息的DHCP服务器都会发送DHCP Offer消息作为响应。Offer消息中包含服务器可以为客户端分配的IP地址、租约时间以及其他配置信息。
3. DHCP Request
客户端选择一个DHCP服务器的Offer,并通过广播发送DHCP Request消息,明确表示选择的服务器及其提供的IP地址。Request消息中还包含客户端的请求参数。
4. DHCP Acknowledgment (ACK)
所选的DHCP服务器收到Request消息后,发送DHCP Acknowledgment(ACK)消息,确认IP地址的分配。ACK消息中包含确认的IP地址、租约时间及其他配置信息。
DHCPv4消息格式
每个DHCPv4消息包含固定格式的头部和选项字段。以下是DHCPv4消息的基本格式:
DHCPv4报文格式
- op: 1字节,消息类型(1 = 请求,2 = 回复)。
- htype: 1字节,硬件类型(如以太网为1)。
- hlen: 1字节,硬件地址长度(如MAC地址为6)。
- hops: 1字节,跳数(通常为0)。
- xid: 4字节,事务ID,用于匹配请求和响应。
- secs: 2字节,客户端启动后经过的时间。
- flags: 2字节,标志字段。
- ciaddr: 4字节,客户端的当前IP地址(如果已知)。
- yiaddr: 4字节,服务器为客户端分配的IP地址。
- siaddr: 4字节,下一跳服务器的IP地址。
- giaddr: 4字节,中继代理的IP地址。
- chaddr: 16字节,客户端的硬件地址。
- sname: 64字节,可选的服务器主机名。
- file: 128字节,可选的引导文件名。
- options: 可变长度,包含DHCP选项。
详细交互过程
以下是DHCPv4分配过程的详细交互示意图:
选项字段
DHCPv4的选项字段用于传递额外的配置信息。常见选项包括:
- Option 1: 子网掩码。
- Option 3: 默认网关。
- Option 6: DNS服务器。
- Option 51: IP地址租约时间。
- Option 53: DHCP消息类型(如Discover、Offer、Request、ACK)。
- Option 54: DHCP服务器标识符。
- Option 55: 参数请求列表。
在Linux上配置DHCP客户端
-
安装DHCP客户端软件:
-
启动DHCP客户端:
-
查看分配的IP地址:
BOOTP配置ipv4地址
概述
BOOTP(Bootstrap Protocol)是一种用于网络设备自动获取IP地址和引导信息的协议,特别是在无盘工作站和网络设备初始化时使用。BOOTP是DHCP的前身,后来被DHCP(Dynamic Host Configuration Protocol)取代,尽管如此,BOOTP在某些嵌入式系统和设备中仍然有使用, 使用udp传输数据, 服务端监听端口67, 客服端监听端口68
。
主要功能
- IP地址分配:为网络设备动态分配IP地址。
- 引导文件名提供:为无盘工作站提供引导文件的名称和服务器地址。
- 其他配置信息:提供子网掩码、默认网关等网络配置信息。
BOOTP报文格式
BOOTP报文的格式与DHCP相似,由一个固定长度的头部和可选的扩展选项部分组成。以下是BOOTP报文的详细结构:
字段详细描述
-
op (操作码): 1字节
- 指定消息类型:
- 1 = BOOTREQUEST(客户端请求)
- 2 = BOOTREPLY(服务器响应)
- 指定消息类型:
-
htype (硬件类型): 1字节
- 指定网络硬件类型,例如以太网为1。
-
hlen (硬件地址长度): 1字节
- 指定硬件地址的长度,例如MAC地址长度为6字节。
-
hops (跳数): 1字节
- 指定跨越的中继代理数,通常为0。
-
xid (事务ID): 4字节
- 随机生成的事务ID,用于匹配请求和响应。
-
secs (秒数): 2字节
- 指定客户端从启动开始经过的时间(以秒为单位)。
-
flags (标志): 2字节
- 标志字段:
- 最左边的一位(高位)为广播标志位,0表示单播,1表示广播。
- 标志字段:
-
ciaddr (客户端IP地址): 4字节
- 客户端的当前IP地址,仅在客户端已知其IP地址时使用。
-
yiaddr (客户端’你的’IP地址): 4字节
- 服务器为客户端分配的IP地址。
-
siaddr (下一个服务器IP地址): 4字节
- 引导文件服务器的IP地址。
-
giaddr (中继代理IP地址): 4字节
- 中继代理的IP地址。
-
chaddr (客户端硬件地址): 16字节
- 客户端的硬件地址。
-
sname (服务器名称): 64字节
- 可选的服务器主机名,NUL结尾字符串。
-
file (引导文件名): 128字节
- 可选的引导文件名称,NUL结尾字符串。
-
options (选项): 可变长度
- 用于传递额外的配置信息和参数。
BOOTP的工作流程
BOOTP的工作流程包括以下步骤:
-
客户端请求 (BOOTREQUEST)
- 客户端发送一个BOOTP请求消息(BOOTREQUEST),请求IP地址和引导文件信息。
-
服务器响应 (BOOTREPLY)
- BOOTP服务器接收到请求后,发送一个BOOTP响应消息(BOOTREPLY),提供IP地址、引导文件名和其他配置信息。
BOOTP和DHCP的区别
虽然BOOTP和DHCP有许多相似之处,但它们在功能和灵活性方面有所不同:
-
自动配置
- BOOTP:需要手动配置服务器上的所有客户端信息,较为静态。
- DHCP:支持动态分配和自动配置,更加灵活。
-
地址租期
- BOOTP:IP地址分配是永久的,没有租期概念。
- DHCP:IP地址有租期,可以动态回收和重新分配,提高地址利用率。
-
选项支持
- BOOTP:选项支持有限,功能较为简单。
- DHCP:支持丰富的选项,提供更多的配置信息(如DNS服务器、默认网关等)。
示例配置
在Linux上配置BOOTP服务器
-
安装BOOTP服务器软件(如
isc-dhcp-server
,它支持BOOTP)。 -
编辑
/etc/dhcp/dhcpd.conf
文件,添加BOOTP配置: -
启动BOOTP服务器:
IPv4的局限性
- 地址枯竭:IPv4地址空间有限,无法满足日益增长的网络设备需求。
- 安全性:IPv4本身缺乏内置的安全机制,需依赖其他协议(如IPsec)进行保护。
- 效率:分片和重组过程复杂,影响网络性能。
过渡到IPv6
为了应对IPv4的局限性,IPv6协议应运而生。IPv6具有128位地址空间,提供了更大的地址容量和改进的功能,如内置安全性和更高效的路由。但IPv4和IPv6的共存和过渡仍是一个长期的过程。
IPv6协议介绍
概述
IPv6(Internet Protocol version 6)是互联网协议的第六版,设计为IPv4的继任者,以应对IPv4地址耗尽的问题。IPv6引入了更大的地址空间和多项改进,提升了网络性能、安全性和管理灵活性。
IPv6不同地址的作用
IPv6地址空间大幅扩展,提供了多种类型的地址,每种类型有其特定的用途。以下是IPv6不同地址类型及其作用的详细说明:
1. 单播地址(Unicast Address)
单播地址用于标识单个接口,一个数据包发送到单播地址后会被传递到唯一的目标接口。
常见的单播地址类型:
-
全球单播地址(Global Unicast Address)
- 前缀:2000::/3
- 描述:用于全球范围内的唯一标识,类似于IPv4的公共地址。
- 作用:用于在全球互联网中的通信。
-
链路本地地址(Link-Local Address)
- 前缀:fe80::/10
- 描述:用于链路本地通信,仅在同一链路内有效。
- 作用:主要用于邻居发现、无状态地址自动配置(SLAAC)等局部网络通信。
-
站点本地地址(Site-Local Address,已弃用)
- 前缀:fec0::/10
- 描述:原本用于站点内通信,但已被弃用,现建议使用唯一本地地址替代。
-
唯一本地地址(Unique Local Address, ULA)
- 前缀:fc00::/7
- 描述:用于本地网络或站点内部通信,类似于IPv4的私有地址。
- 作用:用于内部网络通信,避免与全球单播地址冲突。
2. 多播地址(Multicast Address)
多播地址用于标识一组接口,一个数据包发送到多播地址后会被传递到所有属于该多播组的接口。
- 前缀:ff00::/8
- 描述:用于组播通信,数据包会被发送到多播组中的所有成员。
- 作用:用于IPv6邻居发现、路由协议等需要组播通信的场景。
多播地址范围:
- ff02::1: 所有节点多播地址(链路本地范围)
- ff02::2: 所有路由器多播地址(链路本地范围)
3. 任播地址(Anycast Address)
任播地址分配给一组接口,一个数据包发送到任播地址后会被传递到距离最近的一个接口。
- 描述:在多个接口上共享的地址,数据包将被传递到离源最近的一个接口。
- 作用:用于服务冗余和负载均衡,例如DNS服务器、内容分发网络(CDN)等。
IPv6地址的结构
IPv6地址由128位组成,通常表示为八组十六进制数,每组由冒号分隔,例如:
各类IPv6地址的用途示例
全球单播地址
- 用途:全球唯一的地址,用于互联网通信。
- 示例:
2001:0db8:85a3::8a2e:0370:7334
- 应用场景:主机、服务器、路由器等需要与互联网通信的设备。
链路本地地址
- 用途:链路本地通信,不可跨路由器。
- 示例:
fe80::1
- 应用场景:邻居发现、自动配置、局域网内通信等。
唯一本地地址
- 用途:站点内部或本地网络通信,类似于IPv4的私有地址。
- 示例:
fd00::/8
- 应用场景:企业内部网络、家庭网络等不与互联网直接通信的场景。
多播地址
- 用途:组播通信,数据包发送到多播组中的所有成员。
- 示例:
ff02::1
(所有节点)、ff02::2
(所有路由器) - 应用场景:邻居发现协议、路由协议、视频会议等需要组播的应用。
任播地址
- 用途:一组接口共享的地址,数据包被传递到最近的一个接口。
- 示例:没有具体前缀,分配时与单播地址相同。
- 应用场景:服务冗余、负载均衡,如多个DNS服务器或CDN节点。
IPv6报文格式
IPv6报文由固定头部和可选的扩展头部组成,头部固定长度为40字节。以下是IPv6头部的字段及其说明:
- 版本 (Version):4位,表示IP协议的版本号,为6。
- 流量类别 (Traffic Class):8位,用于区分不同的流量类型和服务质量(QoS)。
- 流标签 (Flow Label):20位,用于标识数据流,便于路由器快速处理。
- 有效载荷长度 (Payload Length):16位,表示除基本头部外的有效载荷长度,以字节为单位。
- 下一个头部 (Next Header):8位,指示扩展头部的类型或上层协议类型(如TCP、UDP)。
- 跳数限制 (Hop Limit):8位,类似于IPv4的TTL字段,指定数据包的生存时间。
- 源地址 (Source Address):128位,发送数据包的源IPv6地址。
- 目的地址 (Destination Address):128位,接收数据包的目的IPv6地址。
IPv6报文格式图示:
IPv6 Next Header值及其对应协议或扩展头部类型
以下是IPv6 Next Header字段常见值及其对应的协议或扩展头部类型的表格展示:
Next Header 值 | 协议/扩展头部类型 | 描述 |
---|---|---|
0 | Hop-by-Hop Options Header | 用于在每一跳的路由器进行处理的选项 |
1 | ICMPv4 | IPv4中的ICMP协议,IPv6中不常用 |
2 | IGMP | IPv4中的IGMP协议,IPv6中不常用 |
6 | TCP (Transmission Control Protocol) | 传输层的TCP协议 |
17 | UDP (User Datagram Protocol) | 传输层的UDP协议 |
41 | IPv6 encapsulation | 封装IPv6数据包 |
43 | Routing Header | 源路由的选项,指定数据包通过的中间节点列表 |
44 | Fragment Header | 数据包分片信息 |
46 | Resource Reservation Protocol (RSVP) | 资源预留协议 |
47 | GRE (Generic Routing Encapsulation) | 通用路由封装协议 |
50 | ESP (Encapsulating Security Payload) | IPsec中的加密和身份验证 |
51 | AH (Authentication Header) | IPsec中的数据包完整性和认证 |
58 | ICMPv6 | IPv6的ICMP协议,支持错误报告和诊断 |
59 | No Next Header | 没有后续头部,即数据包结束 |
60 | Destination Options Header | 为最终目的地或中间节点指定选项 |
IPv6扩展头部链示例
以下是一个包含多个扩展头部的IPv6头部链的示例表格:
IPv6头部类型 | 描述 | Next Header 值 |
---|---|---|
IPv6 Basic Header | 基本IPv6头部,包含源地址和目的地址 | 0 |
Hop-by-Hop Options Header | 在每一跳处理的选项 | 43 |
Routing Header | 源路由选项,指定数据包通过的中间节点列表 | 44 |
Fragment Header | 数据包分片信息 | 6 |
TCP Header | 传输层的TCP协议头部,包含传输控制信息 | - |
Payload | 实际传输的数据 | - |
示例IPv6头部链
在这个示例中:
- IPv6基本头部的Next Header字段值为0,表示后续是Hop-by-Hop Options Header。
- Hop-by-Hop Options Header的Next Header字段值为43,表示后续是Routing Header。
- Routing Header的Next Header字段值为44,表示后续是Fragment Header。
- Fragment Header的Next Header字段值为6,表示后续是TCP头部。
IPv6的改进
- 更大的地址空间:IPv6提供了128位地址空间,可以容纳约3.4×10^38个地址,远远超过IPv4的地址容量。
- 简化的头部格式:IPv6头部格式较IPv4简化,固定长度40字节,减少了处理开销。
- 无须NAT (Network Address Translation):IPv6的巨大地址空间消除了对NAT的需求,简化了网络配置和管理。
- 内置IPsec:IPv6原生支持IPsec,增强了网络安全性。
- 改进的多播支持:IPv6改进了多播通信,提供更高效的多播路由。
- 自动配置:支持无状态地址自动配置(SLAAC),简化了设备的IP地址分配。
- 扩展头部和可选项:IPv6使用扩展头部机制,灵活支持新功能和改进。
NDP(Neighbor Discovery Protocol)
概述
IPv6的Neighbor Discovery Protocol(邻居发现协议,简称NDP)是IPv6协议套件中的一个关键协议,用于在IPv6网络中执行多个重要的网络功能。NDP在IPv6中的作用类似于IPv4中的ARP(地址解析协议)、ICMP路由器发现和ICMP重定向功能的综合。
NDP使用ICMPv6消息来执行其功能,主要包括邻居发现、地址自动配置、重定向、邻居不可达检测、重复地址检测等。
NDP的主要功能
- 地址解析:将IPv6地址解析为链路层地址。
- 邻居不可达检测(NUD):检测邻居是否可达。
- 重复地址检测(DAD):确保IPv6地址在网络中的唯一性。
- 自动地址配置:无状态自动配置(SLAAC),用于自动配置IPv6地址。
- 路由器发现:主机发现IPv6路由器。
- 重定向:路由器通知主机更好的下一跳路由。
NDP使用的ICMPv6消息类型
NDP使用的ICMPv6消息类型如下:
-
Router Solicitation(路由器请求)
- 类型:133
- 用途:主机发送RS消息,询问是否有可用的路由器。
-
Router Advertisement(路由器通告)
- 类型:134
- 用途:路由器响应RS消息,或定期发送RA消息,通告自身信息和网络前缀。
-
Neighbor Solicitation(邻居请求)
- 类型:135
- 用途:设备发送NS消息,请求邻居的链路层地址或检测邻居是否可达。
-
Neighbor Advertisement(邻居通告)
- 类型:136
- 用途:设备响应NS消息,通告自身的链路层地址。
-
Redirect(重定向)
- 类型:137
- 用途:路由器发送重定向消息,通知主机更优的路由路径。
NDP消息格式
Router Solicitation(路由器请求)
- Type:133
- Code:0
- Checksum:ICMPv6校验和
- Reserved:保留字段,设置为0
- Options:可选字段,例如源链路层地址
Router Advertisement(路由器通告)
- Type:134
- Code:0
- Checksum:ICMPv6校验和
- Cur Hop Limit:当前跳数限制
- M:管理地址配置标志
- O:其他配置标志
- H:高速移动性标志
- Prf:默认路由器优先级
- Router Lifetime:路由器生存时间
- Reachable Time:邻居可达时间
- Retrans Timer:重传时间
- Options:可选字段,例如源链路层地址、前缀信息等
Neighbor Solicitation(邻居请求)
- Type:135
- Code:0
- Checksum:ICMPv6校验和
- Reserved:保留字段,设置为0
- Target Address:目标地址
- Options:可选字段,例如源链路层地址
Neighbor Advertisement(邻居通告)
- Type:136
- Code:0
- Checksum:ICMPv6校验和
- R:路由器标志
- S:重定向可达标志
- O:覆盖标志
- Reserved:保留字段
- Target Address:目标地址
- Options:可选字段,例如源链路层地址
Redirect(重定向)
- Type:137
- Code:0
- Checksum:ICMPv6校验和
- Reserved:保留字段
- Target Address:目标地址
- Destination Address:目标地址
- Options:可选字段,例如源链路层地址
NDP操作示例
-
地址解析
主机A需要与主机B通信,首先需要解析主机B的IPv6地址到MAC地址。
-
主机A发送NS请求:
-
主机B发送NA应答:
-
-
自动地址配置
主机首次连接到网络时,需要自动配置自己的IPv6地址。
-
主机发送RS请求:
-
路由器发送RA通告:
-
-
重定向
路由器通知主机更优的路由路径。
- 路由器发送Redirect消息:
PD(Prefix Delegation)
IPv6的前缀代理(Prefix Delegation)是动态主机配置协议(DHCPv6)的一部分,主要用于将网络前缀从一个路由器(通常是ISP的路由器)动态分配给另一个路由器(通常是家庭或企业的边界路由器)。这种机制允许下游路由器(客户网络中的路由器)为其内部网络自动配置IPv6地址。
前缀代理的主要功能
- 前缀分配:ISP路由器将一个或多个IPv6前缀分配给客户的边界路由器。
- 地址自动配置:客户的边界路由器使用分配的前缀为其内部网络中的设备自动配置IPv6地址。
- 地址发布:边界路由器通过路由通告(Router Advertisement,RA)在其内部网络中发布分配的前缀,使内部设备能够自动配置IPv6地址。
前缀代理的工作流程
-
请求前缀(Prefix Request)
客户边界路由器发送一个DHCPv6请求消息(Request),请求上游ISP路由器分配一个或多个IPv6前缀。
-
分配前缀(Prefix Delegation)
ISP路由器接收到请求后,分配一个或多个IPv6前缀,并通过DHCPv6应答消息(Reply)将这些前缀发送回客户边界路由器。
-
发布前缀(Prefix Advertisement)
客户边界路由器接收到前缀后,通过RA消息在其内部网络中发布这些前缀,使内部设备能够使用这些前缀进行地址自动配置。
DHCPv6前缀代理消息类型
-
Solicit(请求)
- 客户边界路由器发送Solicit消息,寻找可用的DHCPv6服务器。
-
Advertise(通告)
- ISP路由器发送Advertise消息,响应Solicit消息,表明自己可用并提供前缀。
-
Request(请求)
- 客户边界路由器发送Request消息,请求分配具体的前缀。
-
Reply(应答)
- ISP路由器发送Reply消息,分配前缀并将其发送给客户边界路由器。
DHCPv6前缀代理报文格式
Solicit、Advertise、Request和Reply消息格式
这些消息的基本格式如下:
- msg-type:8位,表示DHCPv6消息类型。
- Solicit:1
- Advertise:2
- Request:3
- Reply:7
- transaction-id:24位,事务ID,用于匹配请求和响应。
- options:可变长度,用于携带各种选项和配置参数。
IA_PD(Identity Association for Prefix Delegation)选项格式
用于携带前缀代理信息的IA_PD选项格式如下:
- option-code:16位,选项代码,表示IA_PD选项(25)。
- option-len:16位,选项长度,以字节为单位。
- IAID:32位,标识IA_PD的标识符。
- T1:32位,表示客户端应尝试续租的时间。
- T2:32位,表示客户端应尝试重新绑定的时间。
- IA_PD-options:可变长度,包含前缀信息选项。
Prefix Information Option(前缀信息选项)格式
前缀信息选项用于在Reply消息中携带分配的前缀:
- option-code:16位,选项代码,表示前缀信息选项(26)。
- option-len:16位,选项长度,以字节为单位。
- prefix-length:8位,表示前缀长度。
- reserved1:8位,保留字段。
- valid-lifetime:32位,前缀的有效生存时间。
- preferred-lifetime:32位,前缀的首选生存时间。
- reserved2:32位,保留字段。
- prefix:可变长度,分配的前缀。
前缀代理操作示例
假设客户的边界路由器请求ISP路由器分配一个前缀:
-
客户边界路由器发送Solicit消息
-
ISP路由器发送Advertise消息
-
客户边界路由器发送Request消息
-
ISP路由器发送Reply消息,分配前缀
-
客户边界路由器在内部网络发布前缀
客户边界路由器通过RA消息在其内部网络中发布分配的前缀:
DHCPv4的6RD(6rd)介绍
概述
6RD(IPv6 Rapid Deployment)是一个机制,用于在现有的IPv4基础设施上快速部署IPv6。它允许服务提供商通过现有的IPv4网络传输IPv6数据包,从而无需对现有网络进行重大更改即可提供IPv6连接。DHCPv4可以用于分配6RD配置参数,使客户端能够自动配置6RD隧道。
6RD的主要功能
- 快速部署IPv6:利用现有的IPv4基础设施快速部署IPv6,减少网络升级的复杂性和成本。
- 隧道机制:在IPv4网络中创建IPv6隧道,允许IPv6数据包在IPv4网络上传输。
- 自动配置:通过DHCPv4分配6RD配置参数,使客户端能够自动配置6RD隧道。
6RD配置参数
6RD配置参数通常通过DHCPv4分配给客户端。主要参数包括:
- 6RD前缀(6RD Prefix):IPv6前缀,用于生成客户端的IPv6地址。
- 6RD前缀长度(6RD Prefix Length):指定6RD前缀的长度。
- 6RD边界路由器地址(6RD Border Relay IPv4 Address):IPv4地址,用于6RD隧道的远端地址。
DHCPv4中的6RD选项
DHCPv4协议通过选项212(6RD)来传递6RD配置参数。以下是选项212的格式:
- Option Code:8位,表示DHCP选项212。
- Option Length:8位,表示选项数据的长度。
- 6RD Prefix Length:8位,表示6RD前缀的长度。
- 6RD Prefix:可变长度,表示6RD前缀。
- 6RD BR IPv4 Address:32位,表示6RD边界路由器的IPv4地址。
6RD的工作流程
-
DHCPv4服务器配置
DHCPv4服务器配置6RD选项(选项212),包含6RD前缀、前缀长度和边界路由器的IPv4地址。
-
客户端请求
客户端通过DHCPv4请求配置参数。
-
DHCPv4服务器响应
DHCPv4服务器响应请求,提供6RD配置参数。
-
客户端配置6RD隧道
客户端接收到6RD配置参数后,自动配置6RD隧道,生成IPv6地址,并能够通过IPv4网络进行IPv6通信。
示例配置
DHCPv4服务器配置6RD选项
假设6RD前缀为2001:db8::/32,前缀长度为32,边界路由器的IPv4地址为192.0.2.1。
在DHCPv4服务器的配置文件中添加6RD选项:
客户端配置6RD隧道
客户端通过DHCPv4获取6RD配置参数后,自动配置6RD隧道。假设客户端的IPv4地址为192.168.1.100,生成的6RD隧道的IPv6地址为2001:db8:c0a8:164::1。
配置6RD隧道:
IPv6自动配置
- 无状态地址自动配置 (SLAAC, Stateless Address Autoconfiguration):设备根据网络前缀自动生成IPv6地址,无需手动配置或DHCP服务器。
- 有状态地址配置 (DHCPv6):类似于IPv4的DHCP,通过DHCPv6服务器分配IPv6地址和其他网络配置。
SLAAC配置IPv6地址
概述
无状态地址自动配置(SLAAC, Stateless Address Autoconfiguration)是IPv6的一种自动配置机制,它允许设备在无需手动配置或DHCP服务器的情况下自动生成IPv6地址。SLAAC利用路由器广告(Router Advertisement, RA)消息来提供网络前缀信息,并基于此生成全局唯一的IPv6地址。
SLAAC配置步骤
- 链接本地地址生成
- 路由器发现
- 全局地址生成
- 重复地址检测
步骤详解
-
链接本地地址生成
当IPv6设备首次连接到网络时,它会生成一个链路本地地址。链路本地地址的前缀为
fe80::/10
,其后部分通常基于设备的MAC地址生成。链接本地地址的格式如下:
接口标识符通常是64位长,可以通过将设备的48位MAC地址转换为64位扩展唯一标识符(EUI-64)来生成。
-
路由器发现
设备生成链路本地地址后,会发送一个路由器请求(Router Solicitation, RS)消息到本地链路,询问是否有可用的路由器。路由器会通过发送路由器广告(Router Advertisement, RA)消息来响应。
RA消息中包含网络前缀、前缀长度、路由器生存时间和其他配置参数。设备使用这些信息来配置自己的全局单播地址。
-
全局地址生成
设备根据RA消息中的前缀信息,结合自身的接口标识符生成全局单播地址。地址格式如下:
例如,如果路由器广告的前缀是
2001:db8:abcd::/64
,设备的接口标识符是eui-64
,那么生成的全局地址可能是: -
重复地址检测(DAD, Duplicate Address Detection)
设备生成全局地址后,会进行重复地址检测,以确保地址在本地链路上是唯一的。设备会发送邻居请求(Neighbor Solicitation, NS)消息,查询网络中是否存在同样的地址。
- 如果没有响应,表示地址唯一,可以使用。
- 如果收到响应,表示地址已被占用,需要重新生成一个新的接口标识符,再进行检测。
示例配置
以下示例展示了如何在Linux系统上启用SLAAC并自动配置IPv6地址。
-
检查网络接口
首先,检查可用的网络接口:
-
启用IPv6
确保IPv6在网络接口上启用:
-
配置网络接口
使用
ip
命令手动触发路由器请求消息:启用自动配置:
检查配置:
SLAAC中的报文格式
在SLAAC(Stateless Address Autoconfiguration)过程中,主要使用ICMPv6报文,包括路由器请求(Router Solicitation, RS)和路由器广告(Router Advertisement, RA)。以下是这些报文的格式详解:
1. 路由器请求(RS)报文格式
路由器请求报文用于请求邻居设备(尤其是路由器)发送路由器广告消息。其格式如下:
- Type: 133 (表示Router Solicitation)
- Code: 0
- Checksum: 16位的ICMP校验和
- Reserved: 32位保留字段,设置为0
- Options: 可选字段,例如源链路层地址(Source Link-Layer Address),用于提供发送设备的链路层地址。
2. 路由器广告(RA)报文格式
路由器广告报文由路由器发送,用于提供前缀信息和其他配置参数。其格式如下:
- Type: 134 (表示Router Advertisement)
- Code: 0
- Checksum: 16位的ICMP校验和
- Cur Hop Limit: 当前跳数限制,用于设置IPv6报文的跳数限制
- M: 管理地址配置标志(Managed Address Configuration Flag)
- O: 其他配置标志(Other Configuration Flag)
- H: 高速移动性标志(Home Agent Flag)
- Prf: 默认路由器优先级(Default Router Preference)
- Resvd: 保留字段
- Router Lifetime: 16位,表示路由器作为默认路由器的生存时间,以秒为单位
- Reachable Time: 32位,表示邻居可达时间,以毫秒为单位
- Retrans Timer: 32位,表示重传时间,以毫秒为单位
- Options: 可选字段,包括:
- Source Link-Layer Address: 源链路层地址
- MTU: 最大传输单元
- Prefix Information: 前缀信息,用于生成IPv6地址
- Route Information: 路由信息
- Recursive DNS Server: 递归DNS服务器地址
- DNS Search List: DNS搜索列表
M标志(Managed address configuration flag)
- M标志用于指示是否应该使用DHCPv6获取IPv6地址。
- M = 1:设备应使用DHCPv6来获取其IPv6地址。这意味着网络中的DHCPv6服务器将分配IPv6地址给设备。
- M = 0:设备不需要使用DHCPv6来获取IPv6地址,可以使用SLAAC(无状态地址自动配置)来生成IPv6地址。
O标志(Other configuration flag)
- O标志用于指示是否应该使用DHCPv6获取其他配置信息(例如,DNS服务器地址、NTP服务器地址等)。
- O = 1:设备应使用DHCPv6来获取其他配置信息,即使它已经通过SLAAC获得了IPv6地址。
- O = 0:设备不需要使用DHCPv6来获取其他配置信息。
示例组合
-
M = 0, O = 0
- 设备通过SLAAC生成IPv6地址,不使用DHCPv6。
- 设备不会尝试通过DHCPv6获取其他配置信息。
-
M = 0, O = 1
- 设备通过SLAAC生成IPv6地址。
- 设备使用DHCPv6获取其他配置信息(如DNS服务器地址)。
-
M = 1, O = 0
- 设备使用DHCPv6获取IPv6地址。
- 设备不会尝试通过DHCPv6获取其他配置信息。
-
M = 1, O = 1
- 设备使用DHCPv6获取IPv6地址。
- 设备使用DHCPv6获取其他配置信息。
Prefix Information Option(前缀信息选项)
前缀信息选项用于在RA报文中传递前缀信息,其格式如下:
- Type: 3 (表示Prefix Information)
- Length: 4(表示选项的长度,以8字节为单位)
- Prefix Length: 前缀长度,以位为单位
- L: 有效时间标志(On-link Flag)
- A: 自动配置标志(Autonomous Address-Configuration Flag)
- Reserved1: 保留字段
- Valid Lifetime: 前缀的有效生存时间,以秒为单位
- Preferred Lifetime: 前缀的首选生存时间,以秒为单位
- Reserved2: 保留字段
- Prefix: IPv6前缀
DHCPv6配置IPv6地址
概述
DHCPv6(Dynamic Host Configuration Protocol for IPv6)是一种用于IPv6网络的动态主机配置协议。它提供了一种集中化的、自动化的方式来分配IPv6地址和其他网络配置参数。DHCPv6主要用于需要更精细控制和管理的网络环境。
DHCPv6工作原理
DHCPv6客户端和服务器之间通过udp协议通信,服务器、中继代理侦听的UDP端口号是547, 客户端侦听的UDP目的端口号是546。
DHCPv6使用的组播地址
ff02::1:2
客户端与服务端或中继代理之间的通信ff05::1:3
中继代理与服务端之间的通信
以下是DHCPv6配置IPv6地址的主要步骤和相关报文格式:
1. DHCPv6消息类型
DHCPv6协议定义了多种消息类型,常见的包括:
- Solicit (1): 客户端请求服务器的消息。
- Advertise (2): 服务器响应Solicit消息的广告消息。
- Request (3): 客户端请求具体配置的消息。
- Confirm (4): 客户端确认其地址是否仍然有效的消息。
- Renew (5): 客户端请求续租其地址的消息。
- Rebind (6): 客户端在无法联系到服务器时请求续租的消息。
- Reply (7): 服务器响应请求、确认等消息。
- Release (8): 客户端释放其租用的地址。
- Decline (9): 客户端拒绝服务器提供的地址。
- Reconfigure (10): 服务器通知客户端需要重新配置。
2. DHCPv6报文格式
DHCPv6报文由以下字段组成:
- option-code:16位,表示选项类型。
- option-len:16位,表示选项数据的长度(以字节为单位)。
- option-data:可变长度,包含选项的实际数据。
常见DHCPv6选项
以下是一些常见的DHCPv6选项及其格式:
-
Client Identifier Option (Option 1)
客户端标识符,用于唯一标识DHCPv6客户端。
-
Server Identifier Option (Option 2)
服务器标识符,用于唯一标识DHCPv6服务器。
-
IA_NA Option (Option 3)
非临时地址(Non-temporary Address)标识符。
-
IA Address Option (Option 5)
IP地址分配信息。
-
DNS Recursive Name Server Option (Option 23)
递归DNS服务器地址。
示例消息
以下是一些常见的DHCPv6消息及其组成:
Solicit消息
客户端发送Solicit消息,寻找可用的DHCPv6服务器。
Advertise消息
服务器响应Solicit消息,发送Advertise消息,告知客户端可用的配置选项。
Request消息
客户端选择一个服务器,并发送Request消息,请求具体的配置参数和地址。
Reply消息
服务器响应Request消息,发送Reply消息,分配IPv6地址和其他配置参数。
3. 常见的DHCPv6选项
DHCPv6选项用于在客户端和服务器之间传递各种配置信息,常见选项包括:
- Client Identifier (Option 1): 客户端标识符,用于唯一标识客户端。
- Server Identifier (Option 2): 服务器标识符,用于唯一标识服务器。
- IA_NA (Option 3): 非临时地址(Non-temporary Address)标识符。
- IA_TA (Option 4): 临时地址(Temporary Address)标识符。
- IA Address (Option 5): IP地址分配信息。
- Option Request (Option 6): 客户端请求的选项。
- Preference (Option 7): 服务器优先级信息。
- Elapsed Time (Option 8): 请求发送后的时间。
- Relay Message (Option 9): 中继信息。
- DNS Recursive Name Server (Option 23): 递归DNS服务器地址。
- Domain Search List (Option 24): 域名搜索列表。
4. DHCPv6配置过程
以下是典型的DHCPv6地址配置过程,包括消息交互示意:
1. Solicit消息
客户端发送Solicit消息,寻找可用的DHCPv6服务器。
2. Advertise消息
服务器响应Solicit消息,发送Advertise消息,告知客户端可用的配置选项。
3. Request消息
客户端选择一个服务器,并发送Request消息,请求具体的配置参数和地址。
4. Reply消息
服务器响应Request消息,发送Reply消息,分配IPv6地址和其他配置参数。
示例配置
在Linux上配置DHCPv6客户端
-
安装DHCPv6客户端软件(如
dhclient
)。 -
配置DHCPv6客户端。
编辑
/etc/dhcp/dhclient.conf
文件,添加以下内容: -
启动DHCPv6客户端。
在Linux上配置DHCPv6服务器
-
安装DHCPv6服务器软件(如
isc-dhcp-server
)。 -
配置DHCPv6服务器。
编辑
/etc/dhcp/dhcpd.conf
文件,添加以下内容: -
启动DHCPv6服务器。
IPv6的部署与过渡
由于IPv4和IPv6不兼容,过渡到IPv6需要以下策略:
- 双栈:设备同时运行IPv4和IPv6协议栈,逐步迁移到IPv6。
- 隧道:在IPv4网络中封装IPv6数据包,确保IPv6节点之间的通信。
- 翻译:使用NAT64/DNS64等技术实现IPv4和IPv6网络之间的互通。
ICMP协议介绍
概述
ICMP(Internet Control Message Protocol)是用于在IP网络中传输控制消息和错误报告的协议。ICMP是IP协议的一部分,主要用于报告网络通信中的错误、提供诊断和控制功能。
ICMP的主要功能
- 错误报告:当数据包无法到达目的地或路由发生变化时,ICMP用于向源设备报告错误。
- 诊断:使用ICMP的工具(如ping和traceroute)用于网络诊断和测试连接性。
- 控制信息:传递控制消息,如重定向、时间戳请求等。
ICMP报文格式
ICMP报文由固定头部和可选的数据部分组成。不同类型的ICMP报文有不同的格式,但头部的前几个字段是相同的。
ICMP头部格式(通用部分)
- Type:8位,表示ICMP消息类型。
- Code:8位,表示ICMP消息的子类型或原因。
- Checksum:16位,ICMP报文的校验和,用于检测错误。
- Rest of Header:可变,根据具体的ICMP消息类型不同而不同。
常见ICMP消息类型及格式
-
回显请求和回显应答(Echo Request and Echo Reply)
-
用途:用于ping命令,测试网络连通性。
-
Type:8(回显请求),0(回显应答)
-
Code:0
-
Rest of Header:
- Identifier:16位,标识符,用于匹配请求和应答。
- Sequence Number:16位,序列号,用于匹配请求和应答。
- Data:可变,包含测试数据。
-
-
目的不可达(Destination Unreachable)
-
用途:通知源设备数据包无法到达目的地。
-
Type:3
-
Code:
- 0:网络不可达
- 1:主机不可达
- 2:协议不可达
- 3:端口不可达
- 4:需要进行分片但设置了不分片标志
- 5:源路由失败
-
Rest of Header:
- Unused:32位,未使用,通常为0。
- Internet Header + 64 bits of Original Data Datagram:包含导致错误的原始IP数据报的前64位。
-
-
源抑制(Source Quench,已弃用)
-
用途:通知源设备降低发送速率(已弃用)。
-
Type:4
-
Code:0
-
Rest of Header:
- Unused:32位,未使用,通常为0。
- Internet Header + 64 bits of Original Data Datagram:包含导致错误的原始IP数据报的前64位。
-
-
重定向(Redirect)
-
用途:通知源设备应使用另一条路由。
-
Type:5
-
Code:
- 0:网络重定向
- 1:主机重定向
- 2:网络重定向(ToS)
- 3:主机重定向(ToS)
-
Rest of Header:
- Gateway Internet Address:32位,指示重定向到的网关地址。
- Internet Header + 64 bits of Original Data Datagram:包含导致错误的原始IP数据报的前64位。
-
ICMP报文的使用示例
-
Ping命令
Ping命令使用ICMP回显请求和回显应答消息来测试网络连接性。典型的ping流程如下:
-
客户端发送ICMP回显请求:
-
服务器发送ICMP回显应答:
-
-
Traceroute命令
Traceroute命令使用ICMP目的不可达消息来追踪数据包到达目的地的路径。典型的traceroute流程如下:
-
客户端发送带有递增TTL值的UDP数据包:
-
中间路由器返回ICMP时间超过消息:
-
客户端发送带有递增TTL值的UDP数据包,直到到达目的地:
-
目的地返回ICMP目的不可达消息(端口不可达):
-
IGMP协议介绍
概述
IGMP(Internet Group Management Protocol,互联网组管理协议)是一种用于管理IP多播组成员的网络层协议。它用于在IP网络中实现多播通信,允许多个主机加入或离开特定的多播组,进而使数据包只发送给多播组中的成员,从而提高网络效率。
IGMP的主要功能
- 管理多播组成员关系:允许主机加入或离开多播组,并通知路由器多播组成员的变化。
- 维护多播组信息:路由器使用IGMP来维护多播组成员列表,并根据此信息决定是否转发多播数据包。
- 支持多播应用:广泛应用于视频会议、实时流媒体、在线游戏等需要一对多或多对多通信的场景。
IGMP的版本
IGMP协议有多个版本,每个版本在功能和特性上有所不同:
-
IGMPv1:
- 最早的IGMP版本。
- 主机通过发送成员报告消息加入多播组。
- 路由器定期发送查询消息,主机响应报告消息以维持组成员关系。
-
IGMPv2:
- 增加了离开组消息(Leave Group),使主机能够主动通知路由器离开多播组。
- 引入了特定组查询消息,优化了查询机制。
- 改进了查询消息和报告消息的格式和处理流程。
-
IGMPv3:
- 支持源特定多播(Source-Specific Multicast,SSM)。
- 主机可以指定感兴趣的多播源和拒绝的多播源。
- 引入了新的记录类型和更复杂的查询和报告机制。
IGMP消息格式
IGMP消息通过IP数据报的形式传输,IP协议号为2。以下是IGMP消息的通用格式:
IGMPv1和IGMPv2消息格式
- Type:8位,表示IGMP消息的类型。
- 0x11:成员查询(Membership Query)
- 0x12:成员报告(Membership Report,IGMPv1)
- 0x16:成员报告(Membership Report,IGMPv2)
- 0x17:离开组(Leave Group,IGMPv2)
- Max Resp Time:8位,最大响应时间,仅在查询消息中使用。
- Checksum:16位,校验和,用于检测消息错误。
- Group Address:32位,多播组地址。
IGMPv3消息格式
- Type:8位,表示IGMP消息的类型。
- 0x11:一般查询(General Query)
- 0x22:成员报告(Membership Report,IGMPv3)
- Max Resp Code:8位,最大响应时间编码。
- Checksum:16位,校验和,用于检测消息错误。
- Group Address:32位,多播组地址。
- Resv:4位,保留位。
- S:1位,抑制码。
- QRV:3位,查询者响应值。
- QQIC:8位,查询间隔码。
- Number of Sources (N):16位,源地址数量。
- Source Address [1..N]:每个源地址为32位。
IGMP操作
-
加入多播组:
- 主机发送成员报告消息,通知本地路由器其加入多播组。
-
查询和报告:
- 路由器定期发送查询消息,询问是否有主机仍然是多播组成员。
- 主机在收到查询消息后,响应成员报告消息,以维持其在多播组中的成员身份。
-
离开多播组:
- 主机发送离开组消息,通知本地路由器其离开多播组(仅IGMPv2和IGMPv3)。
-
源特定多播(IGMPv3):
- 主机可以指定其感兴趣的多播源,进一步优化多播流量的传递。
IGMP消息示例
-
IGMPv2加入多播组
主机发送成员报告消息:
-
IGMPv2离开多播组
主机发送离开组消息:
-
IGMPv3源特定多播
主机发送成员报告消息,指定源地址:
ARP协议介绍
概述
ARP(Address Resolution Protocol,地址解析协议)是用于解析网络层地址(如IPv4地址)和链路层地址(如MAC地址)之间映射关系的协议。ARP在IPv4网络中尤为重要,它使得设备能够在同一局域网(LAN)内通过IP地址找到对应的物理MAC地址,从而实现数据帧的正确传输。
ARP的主要功能
- 地址解析:将目标设备的IP地址解析为对应的MAC地址。
- 缓存管理:维护一个ARP缓存,用于存储最近解析的IP-MAC地址对,以减少频繁的ARP请求。
- 逆地址解析(RARP):通过RARP协议(Reverse ARP)实现MAC地址到IP地址的解析,但RARP现已基本被DHCP取代。
ARP报文格式
ARP报文包含请求报文和应答报文。以下是ARP报文的通用格式:
字段详细描述
-
硬件类型 (HTYPE): 16位
- 表示网络硬件类型,例如以太网为1。
-
协议类型 (PTYPE): 16位
- 表示要解析的协议地址类型,例如IPv4为0x0800, IPv6为0x86DD, ARP不直接用于IPv6,IPv6使用Neighbor Discovery Protocol(NDP)代替ARP。
-
硬件地址长度 (HLEN): 8位
- 表示硬件地址的长度(以字节为单位),例如以太网地址长度为6。
-
协议地址长度 (PLEN): 8位
- 表示协议地址的长度(以字节为单位),例如IPv4地址长度为4。
-
操作 (OPER): 16位
- 表示操作类型:
- 1:ARP请求
- 2:ARP应答
- 3:RARP请求
- 4:RARP应答
- 表示操作类型:
-
发送方硬件地址 (SHA): 可变长度
- 发送方的硬件地址(MAC地址)。
-
发送方协议地址 (SPA): 可变长度
- 发送方的协议地址(IP地址)。
-
目标硬件地址 (THA): 可变长度
- 目标的硬件地址(MAC地址),在ARP请求中为0。
-
目标协议地址 (TPA): 可变长度
- 目标的协议地址(IP地址)。
ARP操作
-
ARP请求
当一个设备需要发送数据到另一个设备时,首先会检查本地ARP缓存是否有目标IP地址对应的MAC地址。如果没有,它会广播一个ARP请求消息,询问网络中的其他设备目标IP地址的MAC地址。
-
ARP应答
接收到ARP请求的设备如果匹配请求中的目标IP地址,它会发送一个ARP应答消息,包含自己的MAC地址,回应请求设备。
-
更新ARP缓存
收到ARP应答后,请求设备会将目标设备的IP-MAC地址对存储在本地的ARP缓存中,以便下次通信时直接使用。
ARP通信示例
假设主机A(IP地址:192.168.1.1,MAC地址:00:0a:95:9d:68:16)需要与主机B(IP地址:192.168.1.2,MAC地址:00:0b:46:fe:91:22)通信,但A没有B的MAC地址。
-
主机A发送ARP请求
-
主机B发送ARP应答
ARP缓存示例
主机A在收到主机B的ARP应答后,会将其存储在ARP缓存中,以便快速访问。
RARP协议介绍
概述
RARP(Reverse Address Resolution Protocol,逆地址解析协议)是一种网络协议,用于在局域网(LAN)中将物理地址(MAC地址)映射为IP地址。RARP是ARP(Address Resolution Protocol)的逆操作,主要用于无盘工作站或网络设备,这些设备在启动时没有IP地址,只知道自己的MAC地址。
RARP的主要功能
- 逆地址解析:将设备的MAC地址解析为对应的IP地址。
- 支持无盘工作站:在无盘工作站启动时,通过RARP获取IP地址,便于后续网络通信和引导操作系统。
RARP报文格式
RARP报文格式与ARP报文类似,包含以下字段:
字段详细描述
-
硬件类型 (HTYPE): 16位
- 表示网络硬件类型,例如以太网为1。
-
协议类型 (PTYPE): 16位
- 表示要解析的协议地址类型,例如IPv4为0x0800。
-
硬件地址长度 (HLEN): 8位
- 表示硬件地址的长度(以字节为单位),例如MAC地址长度为6。
-
协议地址长度 (PLEN): 8位
- 表示协议地址的长度(以字节为单位),例如IPv4地址长度为4。
-
操作 (OPER): 16位
- 表示操作类型:
- 3:RARP请求
- 4:RARP应答
- 表示操作类型:
-
发送方硬件地址 (SHA): 可变长度
- 发送方的硬件地址(MAC地址)。
-
发送方协议地址 (SPA): 可变长度
- 发送方的协议地址(IP地址)。
-
目标硬件地址 (THA): 可变长度
- 目标的硬件地址(MAC地址),在RARP请求中为0。
-
目标协议地址 (TPA): 可变长度
- 目标的协议地址(IP地址)。
RARP操作
-
RARP请求
当一个设备(如无盘工作站)启动时,它会发送一个RARP请求消息,广播其MAC地址,请求网络中的RARP服务器返回对应的IP地址。
-
RARP应答
网络中的RARP服务器收到请求后,会查询本地的映射表,并返回包含对应IP地址的RARP应答消息。
RARP通信示例
假设一个无盘工作站(MAC地址:00:0a:95:9d:68:16)启动时没有IP地址,需要通过RARP获取IP地址。
-
无盘工作站发送RARP请求
-
RARP服务器发送RARP应答
RARP的限制和替代
-
限制
- 静态配置:RARP服务器需要预先配置静态的MAC到IP地址映射表。
- 局限性:RARP仅提供IP地址,不提供其他配置信息(如网关、子网掩码、DNS服务器等)。
-
替代协议
- BOOTP:提供更丰富的配置选项,能够动态分配IP地址,并提供引导文件名等信息。
- DHCP:基于BOOTP,提供更多的动态配置选项,成为最广泛使用的地址分配和配置协议。