baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • 计算机网络

    • 字节网络问题
    • https详解
    • 三次握手四次挥手
    • HTTP相应状态码
    • cookie、session、token
    • ICMP
    • 什么是网桥
    • ARP协议
    • DHCP协议
      • 1. 介绍
      • 2. 电脑通过DHCP获取IP的四个步骤
      • 3. 特点
      • 4. DHCP 中继代理
      • 5. 我们自己的电脑有设置相应的DHCP服务器吗?我们自己的电脑是怎么获取ip地址的
      • 6. 家庭中的DHCP
      • . 抓包实战
        • ①明确网卡
        • ②抓包
        • ③释放DHCP 分配的ip
        • ④重新DHCP分配
        • ⑤wireshark条件过滤
        • ⑥逐条分析
    • NAT协议
    • 代理服务器
    • TCP特性
    • 什么是SDN
    • 负载均衡
    • CDN
    • DNS详细过程
    • HTTP3
    • http如何实现长链接
    • 家用路由器原理
  • 操作系统

  • 算法

  • 计算机基础
  • 计算机网络
xugaoyi
2023-04-04
目录

DHCP协议

# 1. 介绍

电脑通常都是通过 DHCP 动态获取 IP 地址,大大省去了配 IP 信息繁琐的过程。

# 2. 电脑通过DHCP获取IP的四个步骤

image-20230404115924101

DHCP 客户端进程监听的是 68 端口号,DHCP 服务端进程监听的是 67 端口号。

  • 客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
  • DHCP 服务器收到 DHCP 发现报文时,用 DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
  • 客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST进行响应,回显配置的参数。
  • 最后,服务端用 DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。

一旦客户端收到 DHCP ACK 后,交互便完成了,并且客户端能够在租用期内使用 DHCP 服务器分配的 IP 地址。

如果租约的 DHCP IP 地址快期后,客户端会向服务器发送 DHCP 请求报文:

  • 服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。
  • 服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。

# 3. 特点

DHCP 交互中,全程都是使用 UDP 广播通信。

但是广播的话,只能在某个网段中进行传播,如果DHCP不在同一个网段该怎么办呢?

这个时候就会使用 DHCP 中继代理

# 4. DHCP 中继代理

有了 DHCP 中继代理以后,对不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。

image-20230405233331613

  • DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包以后,再以单播的形式发给 DHCP 服务器。
  • 服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包广播给 DHCP 客户端 。

因此,DHCP 服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。

# 5. 我们自己的电脑有设置相应的DHCP服务器吗?我们自己的电脑是怎么获取ip地址的

电脑不需要自己手动设置DHCP服务器,电脑会先通过DHCP DISCOVERY去当前网络内广播DHCP发现包,所以电脑会自动根据上面的协议去获取DHCP的服务器,并从DHCP那里去获取对应的数据。

# 6. 家庭中的DHCP

其实我们连接的路由器就包含了DHCP服务,我们可以在路由器上配置相应的ip地址池、子网等,如图所示,是家用路由器的一个配置页面:

image-20230923204343288

参考:https://cloud.tencent.com/developer/article/1443040 (opens new window)

# . 抓包实战

抓包需要明确的几个点:

  1. 在哪个网卡上抓包。
  2. 抓什么包?DHCP。

# ①明确网卡

一般我们电脑连接wifi,会有一个专门的网卡

image-20230923204923975

网卡为en0

# ②抓包

方法一:使用wireshark监控

image-20230923205724709

方法二: 使用命令监控

tcpdump -i en0 -w capture.pcap

# ③释放DHCP 分配的ip

window: ifconfig /release

linux: sudo ipconfig set en0 DHCP

# ④重新DHCP分配

window: ifconfig /renew

linux: sudo ipconfig set en0 BOOTP

# ⑤wireshark条件过滤

image-20230923211556220

# ⑥逐条分析

  • DHCP Discovery

image-20230923212122952

DHCP使用的是UDP协议,目标地址为广播地址,本地地址为0.0.0.0,向该网络内发送discovery包

  • DHCP offer

image-20230923212617767

注意上面的Dst应该为255.255.255.255 ,这里应该是网卡地址没有释放掉,或者做了优化

  • DHCP request

image-20230923213015159

  • DHCP Ack

image-20230923213153253

编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19
ARP协议
NAT协议

← ARP协议 NAT协议→

最近更新
01
spark基础
02-22
02
mysql读写分离和分库分表
02-22
03
数据库迁移
02-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式