计算机网络——DHCP协议

前言

本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。

这篇博客是在B站掌芝士zzs这个UP主的视频的总结,讲的非常好。

可以先去看一篇视频,再来参考这篇笔记(或者说直接偷走)。

一条视频讲清楚什么是DHCP协议-电脑是如何自动获取IP的_哔哩哔哩_bilibili

前篇

  1. 计算机网络------MAC地址和IP地址-CSDN博客
  2. 计算机网络------交换机和路由器-CSDN博客
  3. 计算机网络------网络地址转换(NAT)技术-CSDN博客
  4. 计算机网络------TCP和UDP协议-CSDN博客

引言

我们每天都在使用手机、电脑、pad或者是智能电视、游戏机等一系列电子设备连接到网络中。想必大家都知道,网络中的每一个设备都拥有一个子网络中独一无二的IP地址,以用来作为网络中通信的唯一标识。那么你知道每个设备的IP地址是如何得到的吗?他们又是如何保证不冲突的呢?也许有的同学已经知道了是通过DHCP协议得到的,那么DHCP协议又是如何工作的呢?

设置IP地址的两种方式

第一种方式就是手动设置自己指定IP地址、子网掩码、网关等信息。

这种方式的好处就是可以根据自己的规划配置每台设备的固定。IP有利于对网络的统一管理。比如对于一个拥有1000台服务器的集群,网络管理员需要根据设备编号对每台设备设置固定IP。

第二种方式,动态获取的方式。使用手机或者个人电脑的用户根本不需要关心自己的IP地址是什么,自动帮我分配一个可用的IP就好了。

DHCP协议流程

我们就以家庭网络为例,你的电脑通过网线连接到了路由器上当电脑开机进入操作系统后,此时其还没有IP地址。

操作系统会使用UDP协议,通过68端口将67端口广播一包DHCP discover数据包,用来寻找DHCP服务器。

由于这是一个广播数据包,所以网络中的所有设备都会收到这一包数据。但是只有DHCP服务器才会做出响应。

在家庭网络中,路由器就是DHCP服务器的角色。

他收到DHCP discover数据包后,知道网络中有设备需要分配IP地址。所以他需要在自己的IP地址池中拿到一个空闲IP,比如192.168.10,并决定把这个IP地址分配给PC路由器,会把此IP封装成一包DHCP offer包,回复给我们的PC。

PC收到DHCP offer包后,要决定用不用这个IP地址。因为假设网络中有多个DHCP服务器,他们有可能会同时收到多个DHCP discover包,各自分配IP地址后回复DHCP offer包。

此时PC会收到多个Offer包,他要决定用哪一个IP地址。一般情况下都是用收到的第一个IP地址。

决定好后,PC会向网络中广播自己的决定,通知路由器接受了其分配的IP地址。这一包称为DHCP request包,路由器收到request包后会回复给PC一包DHCP ACK包,表示已经接受了PC的选择,可以使用此IP地址。此时PC拥有了自己的IP地址。

以上四步就是DHCP获取IP地址的完整流程。

不过前两步并不是必须的当PC重启后,PC无需重新获取IP地址,只需要再次确认就可以了。

就是从第三步开始发送DHCP request包,直接请求使用此IP。

DHCP服务器需要检查此IP是否可用,若可以使用,则直接回复DHCP ack包,确认PC可以继续使用此IP地址。

若不可用,比如此IP已被其他设备占用,则回复DHCP nack(否定应答(Negative Acknowledgement))包拒绝申请。此时PC需要从DHCP discover开始再来一次完整的申请流程。

家庭网络中的其他设备,包括通过网线连接路由器的电脑,以及通过wifi连接的手机、电视、游戏机等,都是通过以上的步骤获取IP地址的。

获取IP地址后,他们就可以在网络中互相通信了。

相关推荐
喜欢吃豆36 分钟前
使用 OpenAI Responses API 构建生产级应用的终极指南—— 状态、流式、异步与文件处理
网络·人工智能·自然语言处理·大模型
xixixi777771 小时前
解析一下存储安全——“它是什么”,更是关于“它为何存在”、“如何实现”以及“面临何种挑战与未来”
网络·安全·通信
运维有小邓@1 小时前
实时日志关联分析工具:智能检测潜在安全威胁
运维·网络·安全
j***57682 小时前
电脑可以连接wifi,但是连接后仍然显示没有网络
网络·电脑·php
brave and determined2 小时前
接口通讯学习(day04):RS-232与RS-485:通信接口全解析
网络·uart·通讯·emc·rs232·rs485·嵌入式设计
檀越剑指大厂2 小时前
在家也能远程调代码?WSL+cpolar 的实用技巧分享
网络
秋邱2 小时前
价值升维!公益赋能 + 绿色技术 + 终身学习,构建可持续教育 AI 生态
网络·数据库·人工智能·redis·python·学习·docker
爱学习的大牛1233 小时前
如何系统学习网络渗透测试:从入门到精通的完整指南
网络·学习
程序猿编码3 小时前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
飞行增长手记4 小时前
什么是高匿代理IP?安全吗?怎么选?
网络协议·tcp/ip·安全