最近在工做中遇到了链接外网的交换机在IPv6
地址条件下从运营商自动获取的DNS
地址与本机手动输入配置的IPv4
地址下的DNS
发生冲突的问题,这个问题在实际的生产网上会带来业务的中断和不稳定,在进入到生产环境中的本地终端发送给数据中心的网络流量会由于IPv4
和 IPv6
下的DNS
冲突而致使没法正确的发送流量。算法
在终端中,默认的IPv6
的优先级会大于IPv4
的优先级,这样就会带来冲突问题,解决的问题就是将链接外网的网络线从与链接内网的交换机中断开便可以解决。下边的图片说明了该问题的发生的场景:windows
从上边的图看出,业务终端链接着“本地业务网核心交换机”来获取和转发网络流量到数据中心生产网络中的服务器,在正常的条件下,“本地业务网核心交换机”和“本地运营商交换机”是不能经过网络跳线链接在一块儿并配置到同一个Vlan
中的。在本次问题中,由于“本地运营商交换机”和“本地业务网核心交换机”链接在了同一个Vlan
,致使了业务终端的业务流量从数据中心生产网络来源的不稳定,而形成了业务不稳定。服务器
在这个解决问题的过程当中,有DHCP
和ARP
在实际网络环境下的运用场景和背景模糊不清的问题,故而撰写这篇博客来复习和巩固DHCP
协议。网络
网络是很是复杂且抽象的,网络中的硬件设备好比 路由器、交换机、集线器、网线、网卡、网桥共同组成了核心网络,在硬件设备上流通的网络流量,作到怎么去引导网络流量正确得流向到正确的网络设备上,须要TCP/IP
协议做为网络流量的核心协议。设计
可是若是一个网络管理员想要正确地让TCP/IP
协议正确运行,须要给网络中的主机和路由器配置一些关键信息,好比说接口的IP
地址。咱们能够轻易地在电脑上输入 ipconfig
命令去显示当前网络设备的网络地址信息,那么这个地址究竟是怎么被分配到当前的设备上的?3d
对于一个网络设备(终端)的核心IP
信息主要有: IP地址
、子网掩码
和 DNS服务器地址
。code
而获取网络设备的 TCP/IP
信息主要有这几个方面:blog
windows
上的手动配置选项上的动态获取选项。通常来讲,对于服务器端的采用手动配置方式
来适应业务的核心需求,对于客户端好比链接网络拓扑上的我的终端那么采用动态获取方式
来获取相关信息。继承
缘由有如下几个方面:接口
在这个场景下,客户端须要从服务器端动态地获取服务器端的信息并配置到本地中,这个时候 DHCP
就派上了用场。在本文中,主机 == 客户端,即任何须要从网络中获取地址的设备( 不包括 网络中的路由器),请区别开这个方面的概念。服务器 = 服务端,有时候并不必定是一个独立的设备,而是一个应用程序(在大多数条件下),但愿能将这些方面的概念区别出来。
DHCP,从英文的含义来讲,Dynamic Host Configuration Protocol,是用来动态地配置主机的相关状态,从DHCP
的发展来讲,DHCP
是继承于BOOTP
协议 ( Bootstrap Protocol ),后者在设计协议的过程当中仅仅提供了有限的主机信息配置,而且主机的信息一旦从远程服务器端分配以后,就很难再被修改;DHCP
的出现改变了这种局面,DHCP
几乎提供了全部的主机配追信息,而且引入了租约
的概念,使得主机信息可以动态地产生变化和进行更改。此外,做为能够动态地更改主机的配置的协议,
DHCP
是一个基于 Client/Server
模式的网络协议。
DHCP
是基于UDP/IP
协议进行传输,服务器端使用端口 67
, DHCP
客户端使用端口号 68
。
DHCP
主要分为两个部分: 网络IP地址的管理
和 配置信息的传递
IP
地址的动态分配, 而且为每个主机 (Host) 提供地址的租约地址池 与 地址租约
若是用户在客户端中申请配置一个 动态网络地址配置
,那么 DHCP客户端(Host)
会向 DHCP服务器 发送一个 IP地址请求。 这个时候在远程的 DHCP服务器
就会维护一个 IP地址池
,而且从这个地址池来取出一个IP
回应给 DHCP客户端。 在地址分配的过程当中,DHCP服务器
也会指定回应给 DHCP客户端
的IP地址的租约期,在租约期中,这个地址能够被客户端使用,租约期到以后这个IP地址被 DHCP服务器自动收回。客户端能够在租约期内请求延长租约。
DHCP 报文内容
DHCP的组成从网上有不少解释,下图来自网络:
Request(1)
和 Reply(2)
DHCP Option 内容
以前介绍过,由于DHCP
是从Bootp
协议继承和拓展过来的,所以不少不能在Bootp
实现的内容都放到了Option
来实现。通俗来讲,DHCP
协议其实就是携带许多Option
的Bootp
。
报文中的Option
遵循如下的形式:
常见的Option
类型情参照下图:
DHCP 将一台从未分配过的主机加入到网络须要经历四个阶段: 1. 发现阶段,2.提供阶段,3.请求阶段,4.确认阶段。
发现阶段
新的Client
加入网络时,会使用0.0.0.0
做为源地址,发送discover广播报文
,查询网络上有哪些DHCP Server
,以及这些DHCP Server
能Offer
哪些IP地址
。这个广播帧的MAC地址
为新的Client
的MAC地址
,类型字段为 0x0800
,载荷数据为一个广播 IP 报文,该报文的目的IP地址
为有限的广播地址: 255.255.255.255
, 协议字段值为 0x11
, 载荷数据是一个 UDP报文,消息为 DHCPDISCOVER
。
在该阶段中,与客户端所在二层网络中的全部设备都会接收到这个广播帧,并将这个广播帧洪泛出去,在其余设备接收到这个数据帧的时候会将相关的载荷按照网络分层逐层上传。在设备的传输层UDP模块在接收网络层上传的数据包以后会解析数据包的端口号。 对于一个DHCP服务器来讲,67 做为独特的端口号,会被打开,而对于其余的设备来讲这个端口不被打开,那么这个数据包就被丢弃。
在华为的数通教材中,给出的例子是路由器上运行了 DHCP
服务器 , 可是链路中可能有多个设备也运行了DHCP
服务器,这个时候全部收到该请求包的服务器都会给请求客户端回复一个数据包来证实本身已经接收到了请求信息。
对于DHCP的传输模式 - UDP协议,是一种面向无链接的、不须要可靠传输的通讯方式,所以 DHCP 须要依赖本身的一种可靠的传输传输方式,其中包括:什么状况下须要重复发送已经发送过的请求,重复请求的间隔时间是多少,最大重复次数是多少等等...
提供阶段
DHCP Server
接收到DHCP Discover
报文后,回应Offer
报文,提供IP地址
(可能包含DNS等其余信息)给Client
。这个阶段中,不涉及客户端是否接受服务端给出的 IP 地址,只是服务器端给客户端的一个响应。 每一个接收到 DHCPDISCOVER
消息的服务器,都从本身维护的 IP 地址池分配出一个有效的且未被使用的 IP地址,并经过 DHCPOFFER
消息将这个IP地址分配发送给客户端。
对于一个 DHCPOFFER
消息来说,消息被封装在客户端预留端口号为68,源端口号67的一个UDP报文中,该UDP报文又是被上层封装到一个被广播的IP报文中。 这个IP报文的目的地址是一个有限广播地址:255.255.255.255
,源地址为DHCP服务器端所对应的单播地址,其中协议字段为0x11
,该IP报文又被上层封装到了一个广播帧中,这个广播帧的源MAC地址为 DHCP Server 所对应的单播MAC地址,类型字段的值为 0x0800
。
在传输的过程当中,与请求客户端所在同一个二层网络中的全部设备都会接收到这个请求数据包,只有开启了 DHCP Client
服务的客户端才会接收到这个数据包的载荷数据(DHCPOFFER),并上传至应用层上的 DHCP Client
中。
可是在同一个二层网络中可能存在着其余一样打开 DHCP Client
服务的客户端,终端如何区分是否是本身发出的DHCPDISCOVER
请求呢?其实可会断在发送 DHCPDISCOVER
请求的时候就已经建立了一个用于区别请求且独一无二的交易号(Transaction ID
) ,这个交易号会在服务端向客户端发送DHCPOFFER
回执的时候
3.Client
根据收到的Offer报文
,选择一个DHCP Server
,并选择它提供的IP地址
。而后广播Request
报文,向DHCP Server
请求该IP地址
,同时向本地网络
(尤为是其余DHCP Server
)公告本身已经选择了某个DHCP Server
的某个IP地址。
4.DHCP Server
回应ACK报文
,将IP地址
分配给client端
(特殊状况:DHCP Server
在发送Offer
报文和接收到Request
的短暂时间内把IP
分配给了其余主机)。
5.DHCP Client
收到ACK报文
后,会针对得到的IP地址
发送ARP Request
,进行IP地址冲突检测
。
6.若是IP地址
已经被其余主机使用,则Client
放弃该IP地址,向Server
发送DHCP DECLINE报文
告诉Server
该地址不能使用。而后一段时间后(通常10s)再此尝试获取该IP地址
7.若是Client
仍然没法使用该IP地址
,则发送DHCP RELEASE报文
,放弃该地址。
1.此时能够跳过DHCP Discover报文
和DHCP Offer报文
。
2.Client
发送携带当前IP地址
的Request报文
。
3.若是Server
赞成Client
续约,则发送DHCP ACK报文
。若是拒绝续约,则发送DHCPNAK报文
。
下边有一个图来具体的说明 DHCP
的工做原理以及创建相关网络联系的流程和原理:
【未完待续.... 下一部分将加上华为模拟设备上的】