DHCP抓包分析流程

DHCP

http://note.youdao.com/noteshare?id=19663f40525f26571c224d5f21cf1029

概要

动态主机设置协议Dynamic Host Configuration Protocol,DHCP

​ 局域网的网络协议

​ DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口(DHCP server),DHCP服务器回应应答消息给主机的68号端口(DHCP client)。

​ DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。

​ DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。

DHCP报文格式

avatar

  • OP: client 到 server ,设为 1 ,反向为 2 [Message type]

  • htype: 硬件类型, Ethernet 为 1 [Hardware type]

  • hlen: 硬件地址长度, Ethernet 为 6 [Hardware address length]

  • hops: 若封包需经过router传送, 每站加 1 , 若在同一网内, 为 0 [Hopes]

  • Xid :随机生成的一段字符串,两个数据包拥有相同的xid说明他们属于同一次会话 [Transaction ID]

  • secs: client端启动时间 (秒) [Seconds elapsed]

  • flags : 最低位bit 为 1 时表示 server 将以广播方式传送封包给 client ,其余尚未使用 [Bootp flags]

  • Ciaddr :客户端会在发送请求时将自己的ip地址放在此处 [Client IP address]

  • Yiaddr :服务器会将想要分配给客户端的ip地址放在此处 [Your (client) IP address]

  • Siaddr :一般来说是服务器的ip地址.但是注意!根据openwrt源码给出的注释,当报文的源地址、siaddr、option­>server_id字段不一致(有经过跨子网转发)时,通常认为option­>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip (wireshark抓包中标明siaddr为Next server ip address

  • Giaddr :如果需要跨子网进行DHCP地址发放,则在此处填入经过的路由器的ip地址 [relay agent IP address] DHCP中继代理

  • Chaddr :客户端的mac地址 [Client MAC address]

  • Sname :服务器主域名

  • file : 若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送

  • Options :可以自由添加的部分,用于存放客户端向服务器请求信息和服务器的应答信息

DHCP详细交互流程

  1. DHCP Client以广播的方式发出**DHCP Discover**报文。

    ​ Client sends a UDP datagram with a BOOTP_Request. The
    destination UDP port number is 67. Since the client does not
    know its own IP address it sets the source IP address to 0.0.0.0.
    In many cases the client does not know the IP address of the
    server, so it sets the destination IP address to broadcast

    (255.255.255.255).

    avatar

  2. 所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个**DHCP Offer**报文。

    ​ DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。

    avatar

  3. DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。

    ​ DHCP Client会发出一个广播的**DHCP Request**报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。

    ![avatar][FRMCTRL3]

  4. DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
    ![avatar][FRMCTRL4]

  5. DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。

  6. DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到**DHCP Release**报文后,会回收相应的IP地址并重新分配。

你可能感兴趣的:(net)