计算机网络——DHCP协议详解

2022-08-25 13:57:50 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。 本文将针对以下问题逐条进行解答:

01 DHCP协议是什么?

02 客户端与服务端处于同一广播域内,DHCP协议如何工作的?

03 客户端和服务端不在同一网段,客户端如何通过广播发现服务器?

04 客户端和服务端不在同一网段时,服务器为什么能给客户端分配到所属网段的IP地址

05 DHCP有哪些安全漏洞

06 如何解决DHCP的安全漏洞呢?

  • 01 DHCP协议简介
  • 02 客户端与服务端处于同一广播域内,DHCP协议工作机制
  • 03 客户端和服务端不在同一网段时,客户端通过广播发现服务器的机制
  • 04 客户端和服务端不在同一网段时,服务器给客户端分配到所属网段的IP地址的方法
  • 05 DHCP协议存在的安全漏洞
  • 06 解决DHCP的安全漏洞的方法

01 DHCP协议简介

一台电脑,需要被分配到IP地址、网络掩码、缺省网关、DNS服务器IP才算获得了完整的IP参数。那么这些IP参数,是不是需要我们一个个去用户电脑里手动配置呢?

答案是不用的,TCP/IP协议的发明者,为了让TCP/IP协议简单易用,发明了一个自动化配置工具,这就是DHCP(动态主机配置协议)。

这相当于,人类最初想要点火,需要手动钻木取火,而现在只需要一个简单的打火机,按钮一按便可以点火一样。

02 客户端与服务端处于同一广播域内,DHCP协议工作机制

1、客户端发现服务端 ( 客户端:亲爱的,我的礼物在哪里?)

电脑的操作系统安装了TCP/IP协议栈,这个协议栈其中包含了DHCP客户端进程,这个客户端会广播发送一个发现服务器的报文,格式为UDP封装,目的端口号为68,源端口号为67

2、服务端回复客户端 ( 服务端:亲爱的,这个礼物你要嘛)

服务端接收到客户端的发现报文,会从IP地址池中选择一个空闲的IP地址、对应的子网掩码、缺省网关、DNS服务器IP地址,并以单播的方式发给客户端,目的端口是67,源端口号为68

3、客户端请求IP参数 ( 客户端:亲爱的,我要我要)

客户端接收到服务器的回应,接受服务器分配的IP参数,以单播的方式请求服务器提供的IP参数,发给服务器。

4、服务端确认请求 ( 服务端:亲爱的,给你,你喜欢就好 )

服务器最终确认客户端的请求,以单播方式发送给客户端。

5、客户端ARP广播确认 ( 客户端接过礼物,看看自己的周围有没有一样的礼物,如果没有的话,就说:亲爱的,这个礼物好独特啊,我接受了;如果发现其他人也有这个礼物,就说,你给我的其他人也有了,我不要)

客户端接收到服务端的确认后,会尝试ARP请求自己IP所对应的MAC地址,看看有没有回复。如果没有回复,那就说明自己现在这个IP地址是该广播域内独一无二的,不会引起IP地址冲突。于是将自己获得IP参数配置到TCP/IP协议栈

03 客户端和服务端不在同一网段时,客户端通过广播发现服务器的机制

在02 里说到了同一个网段里面DHCP协议的过程,我们会发现一个网段需要一个DHCP服务器。 但是,对于有成千上万个网段的大型网段中,是不是需要巨大数量的DHCP服务器呢?这显然是不现实的。

那么,当客户端和服务端不在同一个网段的时候,广播包跨越不过不同网段的时候,客户端如何通过广播发现服务端呢?其实也简单,你找个帮手,帮你喊话就得了,这个帮手就是DHCP中继代理

简单来说,DHCP中继代理就是让客户端和服务端互相发现彼此的中介结构。 就是我们所谓的中介,帮我们传话的。

具体是这样的,每个网段都配置一个DHCP中继代理,DHCP中继代理先静态配置DHCP服务器的IP地址,DHCP中继代理,自然可以接收到本网段的客户端DHCP广播报文,然后广播报文修改成单播报文,目的IP地址为DHCP服务器,源IP地址代理为自己的,然后单播发送给服务器,服务器的回复自然也是单播发给代理,代理再将服务器的回复单播发给客户端。

04 客户端和服务端不在同一网段时,服务器给客户端分配到所属网段的IP地址的方法

有DHCP中继代理的情况下,接收到客户端广播的DHCP发现包时,会在DHCP报文内部填写一个字段【中继代理:10.1.1.1

这样服务器接受到DHCP中继代理发过来的包时,就会根据中继代理的地址,找到网段10.1.1.0地址池,然后找出空闲的地址分配会客户端。

05 DHCP协议存在的安全漏洞

服务器会依据DHCP报文来唯一分配一个IP地址,这就是最大的安全漏洞。

设想一下, 一台恶意电脑,伪造了成千上万的MAC地址,用这些MAC地址分别发送DHCP消息报文。

而如果没有防护机制的话,DHCP就会分配出去IP地址,造成的结果是:IP地址池耗尽了,同一网段的其他用户无法自动拿到地址上网了。 这不就相当于,你占着茅坑不拉屎,浪费了资源嘛。

06 解决DHCP的安全漏洞的方法

这里我们需要引入一个配置,叫 DHCP Snooping(DHCP 窥探)

通过在网络的入口,最靠近用户的二层交换机上配置 DHCP Snooping,让二层交换机偷窥主机与DHCP服务器信息交换,当看到主机信息途经交换机时,交换机修改报文,在原报文的基础上添加一个安全选项【Option 82】,这个选项具体有哪些内容呢?

交换机名称、交换机端口名称,即这条消息是从哪个交换机、哪个端口接收到的。

交换机把这个定位主机的位置消息,添加到【Option 82】字段里。服务器不仅要看客户端MAC地址,还要参考主机的位置消息。 如果设定一个交换机/端口最多只能分配两个IP地址,那么来自同一个交换机/端口的伪造DHCP报文都会被拒绝分配IP地址,因为超出了2个IP地址。

除此之外,交换机还偷窥到服务器给主机分配的IP地址,还知道主机连接的端口号、主机的硬件地址MAC地址,生成一张表,用于记录交换机端口、MAC地址、IP地址的绑定关系

扩展:其实DHCP Snooping不仅可以解决DHCP欺骗问题,还可以解决ARP欺骗问题

ARP欺骗

当同网段进行通信的时候,需要使用ARP广播来发现彼此的MAC地址。 但是如果小A和小B进行通信的时候,小A问小B的MAC地址,而小C听到了,用自己的MAC地址来回应。让小A信以为真,觉得小C是小B,原来发给小B的流量都发给小C了。如何小C看完内容后,再用小B的MAC地址作为目的MAC发给小B。这就是网络流量的劫持

而如果小C冒充网关的话,则网段里面访问其他网段的流量都会被小C劫持。这很危险

而使用了DHCP Snooping后,二层交换机有了一份绑定表,当小C试图欺骗小A,自称小B时。交换机因为已经有了小B的MAC、IP、端口号,所以就会发现这个欺诈行为,如何直接丢弃,并在日志文件里记录这个欺骗行为。

以上文章,作为自己的学习笔记,仅供参考

本文完,感谢你的阅读!!!

最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142559.html原文链接:https://javaforall.cn

0 人点赞