《TCP/IP详解 卷一》第6章 DHCP

目录

[6.1 引言](#6.1 引言)

[6.2 DHCP](#6.2 DHCP)

[6.2.1 地址池和租用](#6.2.1 地址池和租用)

[6.2.2 DHCP和BOOTP消息格式](#6.2.2 DHCP和BOOTP消息格式)

[6.2.3 DHCP和BOOTP选项](#6.2.3 DHCP和BOOTP选项)

[6.2.4 DHCP协议操作](#6.2.4 DHCP协议操作)

[6.2.5 DHCPv6](#6.2.5 DHCPv6)

[6.2.6 DCHP中继](#6.2.6 DCHP中继)

[6.2.7 DHCP认证](#6.2.7 DHCP认证)

[6.2.8 重新配置扩展](#6.2.8 重新配置扩展)

[6.2.9 快速确认](#6.2.9 快速确认)

[6.2.10 位置信息(LCI和LoST)](#6.2.10 位置信息(LCI和LoST))

[6.2.11 移动和切换信息(MoS和ANDSF)](#6.2.11 移动和切换信息(MoS和ANDSF))

[6.2.12 DHCP嗅探](#6.2.12 DHCP嗅探)

[6.3 无状态地址自动配置](#6.3 无状态地址自动配置)

[6.4 DHCP 和 DNS 交互](#6.4 DHCP 和 DNS 交互)

[6.5 以太网上的PPP](#6.5 以太网上的PPP)

[6.6 与系统配置相关的攻击](#6.6 与系统配置相关的攻击)

[6.7 总结](#6.7 总结)


6.1 引言

获取IP方式:

DHCP

IPv6无状态地址自动配置(SLAAC,Stateless Address Autoconfiguration)

ISP+PPPoE拨号

VoIP(Voice over Internet Protocol):

一种通信技术。

将语音转换数字,并通过IP网络传输的技术。

用途:各种即时通讯应用程序。如Skype、WhatsApp、Zoom、微信电话等。

SIP(Session Initiation Protocol):

一种通信协议。

SIP定义了一套信令,用于终端之间会话控制和协商,包括会话建立、维护和结束会话。

SIP通常用于VoIP系统中作为信令协议,负责处理呼叫建立、呼叫转移、状态更新等任务。

使用SIP地址标识终端设备。类似于电子邮件地址。

VoIP和SIP总结:

VoIP技术使用SIP协议进行会话控制和信令交换。

6.2 DHCP

DHCP:分配IPv4地址,源于BOOTP,客户端端口68,服务器端口67。

DHCPv6:分配IPv6地址。

DHCP分配方式:

自动分配:从地址池中分配,IP地址根据客户端MAC绑定关系来分配。

动态分配:从地址池中分配,客户端每次分配的IP可能不一样。

手动分配:不从地址池中分配。

6.2.1 地址池和租用

DHCP服务器将租用信息保存在持久性存储器中。即使重启DHCP服务器,租约完好。

6.2.2 DHCP和BOOTP消息格式

BOOTP是DHCP的前身。

DHCP报文格式:

Op(op code):表示报文类型。

值为1:客户端请求报文。

值为2:服务器响应报文。

htype:硬件类型,以太网时值为1。

hlen:硬件地址长度,以太网时值为6。

hops:跳数,DHCP报文经过的中继数量。每经过一个路由器,值加1。若同网段则不经过路由器,值为0。

xid:事务ID。DHC客户端发起请求时设置的随机数,服务器响应报文复制该值,用于匹配请求和响应报文。

secs:DHCP客户端从获取到IP地址或续约开始到现在的时间,单位秒。获得IP地址之前均为0。

flags:只使用bit0,用来标识DHCP服务器应答报文是单播还是广播发送。0:单播,1:广播。

ciaddr:DHCP客户端的IP地址。仅用于DHCP服务器发送的ACK报文,在其他报文为0。因为DHCP服务器确认前,DHCP客户端还没有分配到IP。

yiaddr:DHCP服务器分配给客户端的IP地址。仅用于DHCP服务器发送的Offer和ACK报文,其他报文为0。

siaddr:为DHCP客户端分配IP地址等信息的其他DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。

Giaddr:DHCP客户端请求报文后经过的第一个DHCP中继IP(跨网段)。如果不经过DHCP中继, 则为0。

Chaddr:DHCP客户端的MAC地址。

Sname:为DHCP客户端分配IP的DHCP服务器名称。在Offer和ACK报文中显示,其他报文为0。

File:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径。仅在DHCP Offer报文中显示,其他报文为空。

Options:可选项字段,长度可变,格式为"代码+长度+数据"。

详细在下节结束。

6.2.3 DHCP和BOOTP选项

子网掩码:Option Code 1

用于指定客户端设备所在子网的掩码。

网关:Option Code 3

给提供客户端网关IP。

域名服务器:Option Code 6

给客户端提供一个或多个 DNS 服务器的IP。

主机名:Option Code 12

客户端向DHCP服务器提供其主机名。

域名:Option Code 15

指定DHCP客户端的DNS域名。

IP地址租用时间 (Lease Time) :Option Code 51

指定为客户端分配的IP的租用时间,以秒为单位。

DHCP消息类型:Option Code 53

指定DHCP消息类型,如Discover、Offer、Request、Decline等。

DHCP服务器标识:Option Code 54

用于给DHCP客户端分配IP的服务器的IP地址。

参数请求列表:Option Code 55

客户端使用该选项告知DHCP服务器请求的配置参数,如子网掩码、网关、DNS 服务器等。

更新服务器 (Renewal Time Value) - Option Code 58

指定客户端应尝试更新其租用的IP地址的时间,以秒为单位。

其中DHCP消息类型选项(Option Code 53):

每个DHCP消息都需要使用,可能值:

DHCPDISCOVER(1)、DHCPOFFER(2)、DHCPREQUEST(3)、

DHCPDECLINE(4)、 DHCPACK(5)、DHCPNAK(6)、DHCPRELEASE(7)

DHCPINFORM(8)、DHCPFORCE- RENEW(9),DHCPLEASEQUERY(10)

DHCPLEASEUNASSIGNED(11),DHCPLEASEUNKNOWN(12),DHCPLEASEACTIVE(13)

6.2.4 DHCP协议操作

DHCPOFFER报文中Your IP address字段是DHCP服务器提供的IP地址。

DHCPOFFER消息中包含租约时间(T),更新时间(T1),重新绑定时间(T2)。

租约时间:Lease Time,值为定时器T,即不更新租约情况下IP地址可使用时间上限。

更新时间:Renewal Time,值为定时器T1,即客户机经过多久尝试向服务器请求更新租约时间。

重新绑定时间:Rebinding Tim,值为定时器T2,即客户机当前地址租约即将过期,向服务器请求更新地址。

默认时,T1 =(T/2),T2=(7T/8)

客户端分配到IP地址后,可向该IP发送ARP请求,来检测IP是否冲突,若发现冲突则向服务器发送DHCP DECLINE,拒绝该IP。

DHCP INFORM:用于向DHCP服务器请求特定的配置信息,但并不请求分配IP地址。

FQDN:Fully Qualified Domain Name ,完全限定域名。互联网上唯一标识设备的域名。

包含完整域名层级结构,从右到左依次表示主机名、子域名、顶级域名和根域名。

如:www.example.com

windows命令:

释放当前IP:ipconfig /release

重新获取IP:ipconfig /renew

可触发DHCP分配IP的流程,方便抓包学习。

DHCP客户端状态机:

6.2.5 DHCPv6

IPv6四种IP分置方式:

静态

SLAAC: 无状态地址自动配置,无法分配DNS

无状态DHCPv6: 分配地址前缀,网关,DNS

有状态DHCPv6: 分配IP,网关,DNS

SLAAC:

Stateless Address Autoconfiguration,无状态地址自动配置。

特点:简单,无需DHCPv6服务器。

工作原理:

IPv6路由器周期向本地链路所有主机发送路由器通告RA消息,其中包含网络前缀和其他网络配置。

主机根据RA消息中的网络前缀和接口标识符Interface ID(即MAC地址)生成一个唯一的IPv6地址。

然后进行IPv6地址冲突检测。

SLAAC本身不提供其他网络参数(如DNS服务器、默认网关等),但是路由器通告RA中通常会包含该配置。此外主机还可用DHCPv6获取额外参数。

接口标识符:由EUI-64生成,即根据MAC或者随机(windows)生成,MAC 中插入FFFE,最后从左到右的第七位翻转。

无状态DHCPv6:

此时DHCPv6服务器不用于提供IPv6地址,而是提供其他网络配置信息,如 DNS、域名、NTP服务器等。

因为常与SLAAC协同使用,SLAAC为客户端分配IPv6地址,而无状态DHCPv6提供其他网络配置参数。

Radvd(Router Advertisement Daemon):。一个周期发送IPv6路由通告RA报文的守护程序,RA报文中包含网络前缀、默认路由,其他配置(如MTU、邻居发现信息)。

ICMPv6报文类型包括:

回显请求/响应: Echo Request/Reply

作用:ping

邻居请求/邻居通告: Neighbor Solicitation/Advertisement

作用:查询邻居的IPv6地址,类似ARP。

确认其可达性

地址冲突检测

路由器请求/路由器通告:Router Solicitation/Advertisement

作用:请求/发送路由器的配置信息

重定向: Redirect

作用:用于通知主机将包路由到更优路径,优化包传输。

参数问题: Parameter Problem

作用:用于通知发送方包中某些字段或选项存在问题。

报文过大:Packet Too Big

作用:用于通知发送方包过大,无法传输。

超时:Time Exceeded

作用:TTL为0时,用于通知源主机。

目的地不可达:Destination Unreachable

作用:用于通知源主机目的地不可达,包括网络不可达、端口不可达等。

两种DHCPv6消息格式:

  1. 常规:客户端/服务器使用。

  2. 中继代理使用。

DUID:DHCP唯一标识符,用于标识客户端或服务器,全球唯一。通常基于设备硬件地址、时间戳、随机数等生成。

DHCPv6分配流程

DAD:重复地址检测,通过向该地址发送IPv6邻居请求NS实现。

客户机获得IPv6地址方式是DHCP还是SLACC?

取决于客户机接收的ICMPv6路由器通告RA中配置选项。

即根据RA消息中M位,O位字段:

M位:即Managed Address Configuration Flag,表示通过DHCPv6获得IPv6地址。

O位:即Other Configuration Flag。

表示除IPv6地址外的配置可使用DHCPv6获得。

M和O组合方式:

M=1,O=1:使用DHCPv6分配地址和其他配置信息。

M=1,O=0:使用DHCPv6分配地址,但其他配置通过其他方式获取。

M=0,O=1:不使用DHCPv6分配地址,但其他配置信息通过DHCPv6获取。

M=0,O=0:不使用DHCPv6分配地址和其他配置信息,通过其他方式获取。

DHCPv6 SOLICIT

作用:用于DHCPv6客户端向服务器请求地址分配或前缀分配。

DHCPv6 ADVERTISE

作用:用于DHCPv6服务器向客户端分配IPv6地址和网络配置信息。

6.2.6 DCHP中继

DHCP中继代理:

使用场景:跨网段时分配IP地址。

流程:

  1. DHCP客户端向DHCP中继发送DHCP请求包,而 DHCP中继收到广播包后,再以单播形式发给DHCP服务器。

  2. 服务器端再向DHCP中继返回应答,并由DHCP中继将此包广播给DHCP客户端。

DHCP中继:仅中继IPv4广播或IPv6组播流量。

如何实现DHCP中继功能?

开启DHCP Option 82选项,即RAIO选项。

RAIO:Relay Agent Information Option,中继代理信息选项。

6.2.7 DHCP认证

使用较少。

认证选项:用于确定DHCP消息来自授权的发送方。

6.2.8 重新配置扩展

允许服务器主动触发客户端更新租约。

作用:当网络状态改变时,使客户端重新获得地址或丢弃原来地址。

6.2.9 快速确认

允许DHCP服务器通过DHCP ACK响应DHCP DISCOVER消息,跳过标准流程中的DHCP OFFER和REQUEST消息。

目的:用于加快DHCP客户端获取IP地址和配置的过程。

使用场景:

移动网络中设备频繁切换网络,用于减少IP地址分配延迟。

大规模网络中,大量设备请求IP。减少DHCP消息数量和交换时间,提高网络性能。

降低延迟,如VoIP或视频流。

Linux如何开启DHCP快速确认:

客户端:如dhclient,配置文件/etc/dhcp/dhclient.conf中添加:

send dhcp-requested-address 1;

request dhcp6 rapid-commit;

服务器:如dhcpcd,配置文件/etc/dhcpcd.conf中添加:

option rapid_commit;

6.2.10 位置信息(LCI和LoST)

LCI(Location Configuration Information):位置配置信息

一种DHCPv6选项。

用于在DHCPv6中传递客户端位置信息。如地理坐标、楼层号、建筑物名称、部门名等。

这样便服务器可根据位置信息为客户端分配适当的 IP 地址和配置参数。

LoST(Location-to-Service Translation):位置到服务转换。

一种协议。

用于根据位置信息确定最近的服务节点的地址。

使用场景:

紧急呼叫:移动网络中,当用户拨打救急电话是,可根据用户位置信息确定最近的紧急呼叫中心地址,从而将呼叫路由到最近接收方。

广告投送:LoST帮助广告商根据用户位置向其传递相关广告。

网络管理:LoST帮助网络管理员根据设备位置动态调整访问控制策略。

6.2.11 移动和切换信息(MoS和ANDSF)

用于移动蜂窝网络中的两个DHCP选项。

MoS (Mobile Operator Service):

作用:用于指定移动运营商提供的服务信息。

ANDSF (Access Network Discovery and Selection Function):

即接入网发现和选择功能。

作用:允许移动设备发现和选择最佳的接入网络。

6.2.12 DHCP嗅探

即DHCP Snooping,一种交换机功能。

作用:检查DHCP消息内容,实现ACL管理DHCP流量,防攻击。

6.3 无状态地址自动配置

IPv4:从链路本地范围169.254.1.1至169.254.254.254使用16位子网,掩码255.255.0.0随机选择IPv4地址,并使用IPv4 ACD检测冲突

IPv6 SLAAC:自动配置的地址可以是链路本地IPv6地址,但主要还是全球单播地址。

IPv6 SLAAC自动配置链路本地地址

前缀fe80::0+随机数,或前缀fe80::0+接口标识符(MAC地址)

下面重点讲SLAAC如何自动配置全球单播地址。

IPv6 SLAAC配置流程:

设备发送路由器请求消息RS到本地链路多播地址FF02::。

路由器收到RS消息后,向本地链路多播地址FF02::回复路由器通告消息RA。

设备收到RA消息后,获取其中IPv6网络前缀。

设备将网络前缀和其接口标识符(通常是MAC地址)结合生成IPv6地址。

设备通常还需要DHCPv6获取默认网关,DNS服务器等信息。

所以常见部署:SLAAC + DHCPv6 = 无状态DHCPv6,此时DHCPv6来获得配置信息,不用来获得IP。

配置好IPv6地址后,还需进行DAD(重复地址检测):

DAD方法:向该地址发送邻居请求NS消息,如果没有收到邻居通告NA消息。则说明IPv6地址没有冲突。

小结:

全球单播地址的IPv6 SLAAC

路由器发送ICMPv6 RA,其中提供前缀,首选/有效生命周期,DNS服务器等。

IPv6地址=前缀+接口标识符(MAC)。

无状态的DHCPv6

不提供地址,只用于提供配置信息。

所以SLAAC和DHCPv6结合即可,完成IP地址+配置信息。

Linux、Windows 可以设置禁止系统给自己分配169.254/16的IP,因为这个IP没用。

IPv6全局地址禁用SLAAC两种方法:

  1. 在本地路由器RA消息的前缀选项中关闭自动标志,即之前说的M/O标志。

  2. 命令禁止全局地址自动配置。如sysctl -w net.ipv6.conf.all.autoconf=0

6.4 DHCP 和 DNS 交互

dnsmasq程序同时实现了DHCP,DNS服务器功能。

6.5 以太网上的PPP

PPP over Ethernet:PPPoE

下图可知,DSL调制解调器起到了网桥作用。

DSL调制解调器作用:数字信号转与模拟信号互相转换。

PPPoE优点:PPP协议提供了比DHCP更细致的配置控制和审计日志,方便计费。

DSL提供点到点数字链路,可与传统模拟电话线同时工作。

PPPoE通信:

  1. 发现阶段 以太网类型为0x8863

PADI(PPPoE Active Discovery Initiation)初始化

PADO(PPPoE Active Discovery Offer)提供

PADR(PPPoE Active Discovery Request)请求

PADS(PPPoE Active Discovery Session-confirmation)会话确认

PADT(PPPoE Active Discovery Terminate)会话终止

  1. PPP会话阶段 以太网类型为0x8864

PPPoE具体流程可看我的文章

PPP & PPPoE & L2TP & PPTP 一文全介绍_冫。。。ptptppp-CSDN博客

6.6 与系统配置相关的攻击

6.7 总结

相关推荐
suifen_2 小时前
RK3229_Android9.0_Box 4G模块EC200A调试
网络
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
衍生星球7 小时前
【网络安全】对称密码体制
网络·安全·网络安全·密码学·对称密码
掘根7 小时前
【网络】高级IO——poll版本TCP服务器
网络·数据库·sql·网络协议·tcp/ip·mysql·网络安全
友友马8 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
2401_872514978 小时前
深入探究HTTP网络协议栈:互联网通信的基石
网络·网络协议·http
chenjingming6669 小时前
windows使用tcpdump.exe工具进行抓包教程
网络·测试工具·tcpdump
初黑子zzz9 小时前
rsync
网络
蜗牛学苑_武汉10 小时前
设计模式之代理模式
java·网络·java-ee·代理模式