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

计算机网络——DHCP协议详解由浅入深理解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.net/142559.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 定积分的应用之 柱壳法求旋转体体积

    定积分的应用之 柱壳法求旋转体体积

    2022年6月8日
    41
  • oc深坑測试题及其答案[通俗易懂]

    oc深坑測试题及其答案

    2022年1月22日
    35
  • chmod命令用法举例「建议收藏」

    chmod命令用法举例「建议收藏」chmod命令用于改变linux系统文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。 chmod命令详细情况如下:1.命令格式:chmod[-cfvR][–help][–version]modefile  …

    2022年6月28日
    40
  • Linux pstack命令[通俗易懂]

    Linux pstack命令[通俗易懂]概要打印运行进程的栈信息(快照),包括一个进程下的所有线程的栈信息。语法pstackpid解释pstack是封装了gdb功能的shell脚本,通过”threadapplyallbt”的命令获得输出所有的线程堆栈信息,再用sed进行替换和过滤#RunGDB,stripoutunwantednoise.$GDB–quiet$readnever-nx/proc/$1/exe$1<<EOF2>&1|

    2022年9月14日
    2
  • 资源网站(电驴替代方案)

    资源网站(电驴替代方案) 0、http://www.emule-project.net/这个不用说了,emule官方,没有它就没有下面的所有一切,德国人开的。只提供官方版emule软件,没有资源下载。秉承理念“eMule是完全免费的,它也决不包含广告软件、间谍和流氓软件。我们之所以创造eMule是为了快乐和知识,而不是为了金钱。”eMule的作者是一个德国人Merkur,本名Hendrik.Breitk…

    2022年7月15日
    19
  • js判断是否是数字——isNaN()函数

    js判断是否是数字——isNaN()函数isNaN  返回一个Boolean值,指明提供的值是否是保留值NaN(不是数字)。  NaN即NotaNumber  isNaN(numValue)  必选项numvalue参数为要检查是否为NAN的值。  说明  假如值是NaN,那么isNaN函数返回true,否则返回false。使用这个函数的典型情况是检查parseInt

    2022年6月18日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号