- 应用层
- BOOTP
- 报文
- 工作原理
- BOOTP中继代理
- DHCP
- 报文
- 工作原理
- DHCP中继代理
- VRP相关指令
- 示例
- 配置基于接口地址池的DHCP
- 配置基于全局地址池的DHCP
- 配置DHCP中继
- DNS
- 域名
- 域名服务器
- 应用
- 概况
- 场景
- 实践
- 示例
- BOOTP(Bootstrap Protocol,引导程序协议):引导程序协议。BOOTP用于无盘工作站的局域网中,可以让无盘工作站从一个中心服务器上获得IP地址。通过BOOTP协议可以为局域网中的无盘工作站分配动态IP,这样就不需要管理员去为每个用户去设置静态IP地址。一个无盘系统需要下列协议才能在只读存储器中完成:BOOTP、TFTP、UDP、IP和一个局域网的驱动程序。BOOTP使用UDP,通常与TFTP协同工作。
- BOOTP vs RARP
- 无盘系统用RARP获取IP
- IP地址是返回的唯一结果,没有其他信息返回。
- RARP使用链路层广播,路由器不会转发该请求,使得在每个实际网络中得设置一个RARP服务器。
- 无盘系统用BOOTP获取IP
- BOOTP使用UDP,它为引导无盘系统获得它的IP地址提供了除RARP外的另外一种选择,BOOTP还能返回其他的信息,如路由器的IP地址、客户的子网掩码和名字服务器的IP地址。
- BOOTP服务器比RARP服务器更易于实现,因为BOOTP请求和应答是在UDP数据报中,而不是特殊的数据链路层帧。一个路由器还能作为真正BOOTP服务器的代理,向位于不同网络的真正BOOTP服务器转发客户的BOOTP请求。
- 一个无盘系统需要下列协议才能在只读存储器中完成:BOOTP、TFTP、UDP、IP和一个局域网的驱动程序。
- 无盘系统用RARP获取IP
- BOOTP vs DHCP
- DHCP可以说是BOOTP的增强版本,比较起BOOTP,DHCP透过"租约"的概念,有效且动态的分配客户端的IP设定,而且作为兼容考虑,DHCP也完全照顾了BOOTP Client的需求。
- 必须至少有一台DHCP工作在网络上面,它会监听网络的DHCP请求。
- 它提供两种IP定位方式:
- 自动分配:一旦DHCP客户端第一次成功的从DHCP服务器租用到IP地址之后,就永远使用这个地址;
- 动态分配:当DHCP第一次从HDCP服务器端租用到IP地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放。
- 它提供两种IP定位方式:
- DHCP除了可以动态的进行设定IP地址之外,还能够直接将一些IP保留下来给一些特殊用途的机器进行使用。另外一个方面,它能够直接按照硬件地址来固定的分配IP地址。
- DHCP与BOOTP的不同点在于:BOOTP也可以完成给主机分配IP地址的任务,但它要求主机的硬件地址必须被手工输入到BOOTP表中。可以讲DHCP看成一个动态的BOOTP。但是,BOOTP还可以将用来引导主机的操作系统发送给主机。而DHCP不可以。
- BOOTP vs RARP
- UDP数据报文(含BOOTP报文):BOOTP请求和应答均被封装在UDP数据报中,如图16-1所示。
- BOOTP有两个熟知端口:BOOTP服务器为67,BOOTP客户为68。
- 这意味着BOOTP客户不会选择未用的临时端口,而只用端口68:如果客户选择未用的临时端口作为它的端口,服务器的应答可以进行广播(但通常是不用广播的),如果服务器的应答是通过广播传送的,同时客户又选择未用的临时端口,那么这些广播也能被其他的主机中碰巧使用相同临时端口的应用进程接收到,因此,采用随机端口(即临时端口)对广播来说是一个不好的选择。
- 选择两个端口而不是仅选择一个端口为BOOTP服务器用的原因是:如果客户也使用服务器的熟知端口(67)作为它的端口,那么网络内的所有服务器会被唤醒来查看每个广播应答(如果所有的服务器都被唤醒,它们将检查操作码,如果是一个应答而不是请求,就不作处理)。因此可以让所有的客户使用与服务器知名端口不同的同一知名端口。
- BOOTP有两个熟知端口:BOOTP服务器为67,BOOTP客户为68。
- BOOTP报文:图16-2显示了长度为300字节的BOOTP请求和应答的格式。
- 操作码:1(请求)、2(应答)。
- 硬件类型:1(10Mb/s的以太网),和ARP请求或应答中“硬件类型”字段表示的含义相同。
- 硬件地址长度:6(以太网)。
- 跳数:由客户设置为0,但也能被一个代理服务器设置。
- 事务标识:是一个由客户设置并由服务器返回的32bit整数,客户用它对请求和应答进行匹配。对每个请求,客户应该将该字段设置为一个随机数。如果多个客户同时进行系统引导,并且服务器广播所有应答,这样每个客户都会收到其他客户的应答,客户可以通过BOOTP首部中的事务标识字段来确认应答是否与请求匹配。事务标识为 0表示该客户忽略这个字段,因为如果打算对返回响应进行验证,它将把这个字段设置为一个随机数值。
- 秒数:客户开始进行引导时设置一个时间值,备用服务器在等待时间超过这个时间值后才会响应,作为处理主服务器没有启动的备用方案。
- 客户IP地址:如果客户知道自己IP地址,填入实际IP,否则填0。
- 你的IP地址:如果服务器接收到的报文发现“客户IP地址”字段为0,由服务器填入客户的IP地址到该“你的IP地址字段”。
- 服务器IP地址:服务器填写。如果使用了某个代理服务器,则该代理服务器就填写“网关IP地址”字段。
- 网关IP地址:代理服务器填写自己的IP。
- 客户主机硬件地址:客户填写,与以太网帧中的相关表示客户的MAC地址字段相同。一个进程通过查看UDP数据报来确定以太网帧首部中的该字段通常是很困难的(或者说是不可能的),因此尽管这个值与以太网数据帧头中的值相同,UDP数据报中也设置这个字段,这样任何接收这个数据报的用户进程(例如一个BOOTP服务器)能很容易地获得它。如果多个客户同时进行系统引导,并且服务器广播所有应答,这样每个客户都会收到其他客户的应答,可以通过检查返回的客户硬件地址加以区分。
- 服务器主机名:是一个空值终止串,由服务器填写。
- 引导文件名:用于引导的文件名和所在路径。
- 特定厂商信息区域:64字节,用于扩展BOOTP,这个区域含有服务器返回客户的可选信息。特定厂商信息区域的大小被限制为64字节,这对某些应用是个约束,动态主机配置协议DHCP(Dynamic Host Configuration Protocol)将这个区域的长度扩展到312字节,可以作为补充,但不是替代BOOTP。
- 区域的前4个字节:IP地址99.130.83.99,表示该区域内包含信息。
- 条目表:每个条目的开始是1字节标志字段。
- 第一个条目:总长1字节,表示填充条目,只包含一个标志字段。标志字段为0,作为填充字节(为使后面的条目有更好的字节边界)。
- 其它条目:其他的条目包含一个字节的标志字段和一个字节的长度字段(表示信息字段的长度),后面是相应的信息长度。
- 子网掩码条目:标志字段tag=1,长度字段len=4,信息字段为子网掩码(4个字节)。推荐使用BOOTP来获悉它的子网掩码(客户所在网络的子网掩码在返回的BOOTP应答的特定厂商信息区域内),而不是采用ICMP协议获取。
- 时间偏移条目:标志字段tag=2,长度字段len=4,信息字段为时间偏移值(4个字节),表示从1900年1月1日0时以来的秒数(UTC)。
- 网关条目:标志字段tag=3,长度字段len=N(不定长,通常是4的倍数),信息字段为一个或多个供客户使用的网关(路由器)的IP地址,第一个必须是首选的网关IP地址。
- 14个其它条目:tag=4~17,其中最重要的可能是DNS名字服务器的IP地址条目,条目的标志tag=6。其他的条目包括打印服务器、时间服务器等的IP地址。
- 最后一个条目:总长1字节,表示结尾条目,只包含一个标志字段。标志字段为255,作为结尾条目。该结尾条目后剩余的字节都应设置为这个数值(255),直至特定厂商信息区域总长度为64字节。
- 工作原理
- 由BOOTP启动代码来启动BOOTP客户端,这个时候BOOTP客户端还没有IP地址。
- BOOTP客户端使用广播,源IP地址为0.0.0.0,目的IP地址为255.255.255.255,向网络中发出IP地址查询要求。当一个客户使用BOOTP(操作码为1)进行系统引导时,引导请求通常是采用链路层广播,IP首部中的目的IP地址为255.255.255.255,源IP地址通常是0.0.0.0,因为此时客户还不知道它本身的IP地址。
- 运行BOOTP协议的服务器接收到这个请求,会根据请求中提供的MAC地址找到BOOTP客户端,并发送一个含有IP地址、服务器IP地址、网关等信息的回应帧。
- BOOTP应答方式
- Unix服务器:发一个ioctl(2)请求给内核,为该客户在ARP高速缓存中设置一个条目(这就是命令arp-s所做的工作),直到客户收到应答分配了IP地址(即报文中“客户IP地址”被写入)。这意味着当服务器发送UDP数据报(即BOOTP应答)时,服务器的ARP将在ARP高速缓存中找到该客户的IP地址。通常只有拥有超级用户权限才能在ARP高速缓存设置一个条目,如果没有这种权限就只能广播BOOTP应答。
- 广播BOOTP应答:服务器广播这个BOOTP应答而不直接将应答发回该客户。既然通常期望网络广播越少越好,因此这种解决方案应该只在服务器无法在它的ARP高速缓存设置一个条目的情况下使用。
- BOOTP应答方式
- BOOTP客户端会根据该回应帧来获得自己的IP地址并通过专用文件服务器(如TFTP服务器)下载启动镜像文件,模拟成磁盘来完成启动。
- 示例:如图16-3所示。
- 让我们看一个用BOOTP引导一个X终端的例子。图16-3显示了tcpdump的输出结果(例中客户名为proteus,服务器名为mercury。这个tcpdump的输出是在不同的网络上获得的)。
- 在第1行中,我们看到客户请求来自0.0.0.0.68,发送目的站是255.255.255.255.67。该客户已经填写的字段是秒数和自身的以太网地址。我们看到客户通常将秒数设置为100。tcpdump没有显示跳数和事务标识,因为它们均为0(事务标识为0表示该客户忽略这个字段,因为如果打算对返回响应进行验证,它将把这个字段设置为一个随机数值)。
- 第2行是服务器返回的应答。由服务器填写的字段是该客户的IP地址(tcpdump显示为名字proteus)、服务器的IP地址(显示为名字mercury)、网关的IP地址(显示为名字mercury)和引导文件名。
- 在收到BOOTP应答后,该客户立即发送一个ARP请求来了解网络中其他主机是否有IP地址。跟在who-has后的名字proteus对应目的IP地址,发送者的IP地址被设置为0.0.0.0。
- 它在0.5秒后再发一个相同的ARP请求,之后再过0.5秒又发一个,在第3个ARP请求中,它将发送者的IP地址改变为它自己的IP地址,这是一个没有意义的ARP请求。
- 第6行显示该客户在等待另一个0.5秒后,广播另一个BOOTP请求。这个请求与第1行的唯一不同是此时客户将它的IP地址写入IP首部中。
- 该客户它收到来自同一个服务器的相同应答
- 该客户在等待2秒后,又广播一个BOOTP请求(第8行),同样收到来自同一服务器的相同应答(第9行)。
- 该客户等待2秒后,向它的服务器mercury发送一个ARP请求(第10行)。
- 该客户收到这个ARP应答后,它立即发送一个TFTP读请求,请求读取它的引导文件(第12行)。文件传送过程包括2464个TFTP数据分组和确认,传送的数据量为512×2463+224=1261280字节。这将操作系统调入X终端。
- 我们已在图16-3中删除了大多数TFTP行。
- 客户在整个传输过程中使用TFTP的熟知端口(69)。既然通信双方中的一方使用了端口69,tcpdump就知道这些分组是TFTP报文,因此它能用TFTP协议来解释每个分组。
- 由于TFTP服务器作为一个多用户系统,且使用TFTP的知名端口,因此通常TFTP客户不能使用那个端口69。但这里的系统处于正被引导的过程中,无法提供一个TFTP服务器,因此允许该客户在传输期间使用TFTP的熟知端口。这也暗示在mercury上的TFTP服务器并不关心客户的端口号是什么,它只将数据传送到客户的端口上,而不管发生了什么。
- 在9秒内共传送了1261280字节。数据速率大约为140000bps。这比大多数以FTP文件传送形式访问一个以太网要慢,但对于一个简单的停止等待协议如TFTP来说已经很好了。
- X终端系统引导后,还需使用TFTP传送终端的字体文件、某些DNS名字服务器查询,然后进行X协议的初始化。所有步骤大概需要15秒钟,其余的步骤需要6秒钟,这样无盘X终端系统引导的总时间是21秒。
- BOOTP中继代理:RARP的一个缺点就是它使用链路层广播,这种广播通常不会由路由器转发。这就需要在每个物理网络内设置一个RARP服务器。如果路由器支持BOOTP协议,那么BOOTP能够由路由器转发(绝大多数路由器厂商的产品都支持这个功能)。这个功能主要用于无盘路由器,因为如果在磁盘的多用户系统被用作路由器,它就能够自己运行BOOTP服务器。此外,常用的Unix BOOTP服务器支持这种中继模式(relaymode)。但如果在这个物理网络内运行一个BOOTP服务器,通常没有必要将BOOTP请求转发到在另外网络中的另一个服务器。
- 工作原理
- 当路由器(也称作“BOOTP中继代理”)在服务器的熟知端口(67)接收到BOOTP请求时,中继代理将它的IP地址填入收到BOOTP请求中的“网关IP地址字段”,然后将该请求发送到真正的BOOTP服务器(由中继代理填入网关字段的地址是收到的BOOTP请求的路由器接口的IP地址)。该代理中继还将跳数字段值加1(这是为防止请求被无限地在网络内转发。RFC951认为如果跳数值到达3就可以丢弃该请求)。
- 既然发出的请求是一个单播的数据报,它能按照一定的路由通过其他的路由器到达真正的BOOTP服务器。
- 真正的BOOTP服务器收到这个请求后,产生BOOTP应答,并将它发回中继代理,而不是请求的客户。既然请求网关字段不为零,真正的BOOTP服务器知道这个请求是经过转发的。
- 中继代理收到应答后将它发给请求的客户。
- 工作原理
IETF制定了BOOTP(Bootstrap Protocol)协议,专门用来解决IP地址等网络参数的配置问题。后来,针对BOOTP协议的各种缺陷和不足,IETF又制定了一个新的协议,称为DHCP(Dynamic Host Configuration Protocol),即动态主机配置协议。该协议提供了一种动态分配网络配置参数的机制,并且可以后向兼容BOOTP协议。
DHCP可以说是BOOTP的增强版本,学习DHCP协议之前建议阅读BOOTP协议的相关内容。
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):动态主机配置协议。DHCP采用C/S(客户端/服务器)模式,可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等,并能够提升地址的使用率。DHCP可以分配的配置参数是多种多样的,包括主机IP地址的分配过程。通常情况下,路由器是不适合通过DHCP来自动获取它的IP地址的。对于路由器,我们一般应该根据它所处的网络环境及其他一些原则来手工配置它的IP地址等参数。DHCP缺陷是每当节点连接到一个新子网,要从DHCP重新获取IP,当移动节点在子网与子网之间移动时,就不能维持IP与远程应用之间的TCP连接。
- UDP报文(包含DHCP报文)
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)使用UDP协议工作,采用67(DHCP服务器)和68(DHCP客户端)两个端口号。546号端口用于DHCPv6 Client,而不用于DHCPv4,主要作用于DHCP failover服务。
- DHCP报文:DHCP服务的8种报文的格式是相同的,不同类型的报文只是报文中的某些字段取值不同,DHCP报文格式基于BOOTP的报文格式。DHCP客户端向DHCP服务器发送的报文称之为DHCP请求报文,而DHCP服务器向DHCP客户端发送的报文称之为DHCP应答报文。
- OP:操作类型,分为请求报文和响应报文。
- 1:请求报文,包含DHCPDISCOVER、DHCPREQUEST、DHCP Release、DHCP Inform和DHCP Decline。
- 2:应答报文,包含DHCP Offer、DHCPACK和DHCP NAK。
- Htype:DHCP客户端的MAC地址类型。MAC地址类型其实是指明网络类型,Htype值为1时表示为最常见的以太网MAC地址类型。
- Hlen:DHCP客户端的MAC地址长度。以太网MAC地址长度为6个字节,即以太网时Hlen值为6。
- Hops:跳数,DHCP报文经过的DHCP中继的数目,默认为0。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。没有经过DHCP中继时值为0。(若数据包需经过router传送,每站加1,若在同一网内,为0。)
- Xid:事务标识,客户端通过DHCPDiscover报文发起一次IP地址请求时选择的随机数,相当于请求标识。用来标识一次IP地址请求过程。在一次请求中所有报文的Xid都是一样的。
- Secs:DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0。(DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用,固定为0。)
- Flags:标志位,只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,0表示采用单播发送方式,1表示采用广播发送方式。其余位尚未使用。(即从0-15bits,最左1bit为1时表示server将以广播方式传送封包给client。)
- 注意:在客户端正式分配了IP地址之前的第一次IP地址请求过程中,所有DHCP报文都是以广播方式发送的,包括客户端发送的DHCPDISCOVER和DHCPREQUEST报文,以及DHCP服务器发送的DHCP Offer、DHCPACK和DHCP NAK报文。当然,如果是由DHCP中继器转的报文,则都是以单播方式发送的。另外,IP地址续约、IP地址释放的相关报文都是采用单播方式进行发送的。
- Ciaddr:DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0,因为在得到DHCP服务器确认前,DHCP客户端是还没有分配到IP地址的。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。
- Yiaddr:DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
- Siaddr:下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP Offer、DHCPACK报文中显示,其他报文中显示为0。(用于bootstrap过程中的IP地址)
- Giaddr:DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继,则显示为0。(转发代理(网关)IP地址)
- Chaddr:DHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址。
- Sname:为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式)。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。
- File:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCPOffer报文中显示,其他报文中显示为空。
- Options:可选项字段,长度可变,格式为"代码+长度+数据"。如图所示,列出部分可选的选项。
- OP:操作类型,分为请求报文和响应报文。
- DHCP报文类型:DHCP一共有8种报文,分别为DHCPDISCOVER、DHCP Offer、DHCPREQUEST、DHCPACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。
- DHCPDISCOVER:DHCP客户端在请求IP地址时并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送Discover请求报文,以发现网络中的DHCP服务器。所有收到Discover报文的DHCP服务器都会发送应答报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。
- DHCP Offer:DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户本服务器可以为其提供IP地址。但这个报文只是告诉DHCP客户端可以提供IP地址,最终还需要客户端通过ARP来检测该IP地址是否重复。
- DHCPREQUEST:DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送广播的Request请求报文以请求续延租约。
- DHCPACK:DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。
- DHCPNACK:如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。否定应答(称为NAK;或称为NACK;或称为Negative-Acknowledgment)翻译为否定应答或者非应答。
- DHCP Release:当DHCP客户端不再需要使用分配IP地址时,就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址。
- DHCP Decline:DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。
- DHCP Inform:DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。
- 工作原理:如图11-1所示,DHCP是一种Client/Server模式的网络协议,Server是一个应用程序,可以运行在个人电脑上,也可以运行在服务器(高性能计算机)上,还可以运行在路由器等其他设备上,Client也是一个应用程序。电脑上电之后,会自动运行DHCP Client,与运行在公司其他设备上的DHCP Server进行交互请求获取自己的IP地址,DHCP Server在收到DHCP Client的请求后,会根据某种规则在自己的地址池中选择一个IP地址,然后将它分配给DHCP Client,最后,你的电脑就会把DHCP Client得到的IP地址作为你的电脑网络接口卡的IP地址。
- 主机首次获取IP地址:如图11-2所示,主机首次获取IP地址的DHCP的基本工作流程分为4个阶段,即发现阶段,提供阶段,请求阶段,确认阶段。
- 发现阶段:发现阶段也就是PC1上的DHCP Client寻找DHCP Server的阶段。
- PC1上的DHCP Client开始运行后,会发送一个广播帧。
- 该广播帧的源MAC地址为PC 1的MAC地址,类型字段的值为0x0800,载荷数据为一个广播IP报文。
- 该IP报文的目的IP地址为有限广播地址255.255.255.255,源IP地址为0.0.0.0,协议字段的值为0x11,载荷数据是一个UDP报文。
- 该UDP报文的目的端口号为67,源端口号为68,载荷数据是一个DHCPDISCOVER报文。
- 注意:DHCP的传输层协议是UDP,而UDP通信方式是一种无连接的、不那么可靠的通信方式,所以DHCP必须依靠自己的协议机制来提供传输的可靠性,DHCP协议定义了一套消息重传机制,规定了在什么情况下需要重复发送已经发送过的消息,重复的间隔时间是多少,最大重复次数是多少,如此等等。
- 与PC1处于同一个二层网络中的所有设备(包括路由器R1)都会收到这个广播帧。
- 交换机收到这个广播帧后,只会将它泛洪出去。
- 其他设备(如服务器、路由器、其他的PC等)收到这个广播帧后,会将相关的载荷数据逐层上送。
- 传输层的UDP模块接收到网络层上送的UDP报文后,会检查UDP报文的目的端口号。
- 显然,只有运行了DHCP Server的设备才会识别出目的端口号67,并将其载荷数据(DHCPDISCOVER消息)上送至应用层的DHCP Server。
- 如果设备上没有运行DHCPServer,则目的端口号为67的UDP报文会在传输层被直接丢弃。
- 需要说明的是,二层网络中除了路由器R1上运行了DHCP Server外,可能还有其他设备也运行了DHCPServer。如果是这样,那么所有这些DHCP Server都会接收到PC1发送的DHCPDISCOVER消息,也都会对所收到的DHCPDISCOVER消息做出回应。
- 传输层的UDP模块接收到网络层上送的UDP报文后,会检查UDP报文的目的端口号。
- PC1上的DHCP Client开始运行后,会发送一个广播帧。
- 提供阶段:提供阶段也就是DHCP Server向DHCP Client提供IP地址的阶段。注意,DHCP Client是否愿意接受DHCP Server所提供的IP地址,这个阶段还反映不出来。
- 每个接收到DHCPDISCOVER消息的DHCP Server(包括路由器R1上运行的DHCP Server)都会从自己维护的地址池中选择一个合适的IP地址,并通过DHCP OFFER消息将这个IP地址发送给DHCP Client。
- DHCP OFFER消息是封装在目的端口号为68、源端口号为67的UDP报文中的,该UDP报文又是封装在一个单播IP报文中的。
- IP报文的目的IP地址为单播地址DHCP Client所对应的单播IP地址,源IP地址为DHCP Server所对应的单播IP地址,协议字段的值为0x11。该IP报文又是封装在一个单播帧里的。
- 这个帧的源MAC地址为DHCP Server所对应的单播MAC地址,类型字段的值为0x0800。
- 与PC1处于同一个二层网络中的所有设备都会收到这个单播帧。
- 交换机收到这个单播帧后,只会将它泛洪出去。
- 其他设备(如服务器、PC等)收到这个单播帧后,会将相关的载荷数据逐层上送。
- 传输层的UDP模块接收到网络层上送的UDP报文后,会检查UDP报文的目的端口号。
- 显然,只有运行了DHCP Client的设备才会识别出目的端口号68,并将其载荷数据(DHCP OFFER消息)上送至应用层的DHCP Client。
- 如果设备上没有运行DHCP Client,则目的端口号为68的UDP报文会在传输层被直接丢弃。
- 每个DHCP Client在发送DHCPDISCOVER消息的时候,都会在DHCPDISCOVER消息中设定一个交易号即报文的事务标识(TransactionID),DHCP Server在回应DHCPDISCOVER消息的时候,会将这个交易号拷贝至DHCP OFFER消息中。这样一来,一个DHCP Client在收到一个DHCP OFFER消息后,只要检查其中的交易号是不是自己当初设定的交易号,就能判断出这个Offer是不是给自己的。
- 传输层的UDP模块接收到网络层上送的UDP报文后,会检查UDP报文的目的端口号。
- 每个接收到DHCPDISCOVER消息的DHCP Server(包括路由器R1上运行的DHCP Server)都会从自己维护的地址池中选择一个合适的IP地址,并通过DHCP OFFER消息将这个IP地址发送给DHCP Client。
- 请求阶段:在请求阶段中,PC1的DHCP Client会在若干个收到的Offer(即若干个收到的DHCP OFFER消息)中根据某种原则来确定出自己将要接受哪一个Offer。通常情况下,DHCPClient会接受它所收到的第一个Offer(即最先收到的那个DHCP OFFER消息)。
- 假设PC1最先收到的DHCP OFFER消息是来自路由器R1。于是,PC1的DHCP Client会发送一个广播帧,这个广播帧的意图就是向路由器R1上的DHCP Server提出请求,希望获取到该DHCP Server发送给自己的DHCP OFFER消息中所提供的那个IP地址。
- PC1的DHCP Client发送的广播帧的源MAC地址为PC1的MAC地址,类型字段的值为0x0800,载荷数据是一个广播IP报文。
- 该IP报文的目的IP地址为有限广播地址255.255.255.255,源IP地址为0.0.0.0,协议字段的值为0x11,载荷数据是一个UDP报文。
- 该UDP报文的目的端口号为67,源端口号为68,载荷数据是一个DHCPREQUEST消息。注意,这个DHCPREQUEST消息中携带有R1上的DHCP Server的标识(称为Server Identifier),表示PC1的DHCP Client只愿意接受R1上的DHCP Server所给出的Offer。
- 显然,该二层网络上所有的DHCP Server都会接收到PC1上的DHCP Client发送的DHCPREQUEST消息。
- R1上的DHCP Server收到并分析了该DHCP REOUEST消息后,会明白PC1已经愿意接受自己的Offer了。
- 其他的DHCP Server收到并分析了该DHCPREQUEST消息后,会明白PC1拒绝了自己的Offer。于是,这些DHCP Server就会收回自己当初给予PC1的Offer。也就是说,当初准备提供给PC1使用的IP地址现在可以用来分配给别的设备使用了。
- 假设PC1最先收到的DHCP OFFER消息是来自路由器R1。于是,PC1的DHCP Client会发送一个广播帧,这个广播帧的意图就是向路由器R1上的DHCP Server提出请求,希望获取到该DHCP Server发送给自己的DHCP OFFER消息中所提供的那个IP地址。
- 确认阶段:R1上的DHCP Server会向PC1上的DHCP Client发送一个DHCPACK或者DHCPNACK消息。
- DHCPACK消息
- R1上的DHCP Server会向PC1上的DHCP Client发送一个DHCPACK。
- DHCPACK消息是封装在目的端口号为68、源端口号为67的UDP报文中的,该UDP报文又是封装在一个单播IP报文中的。
- IP报文的目的IP地址为单播地址DHCP Client所对应的单播IP地址,源IP地址为DHCP Server所对应的单播IP地址,协议字段的值为0x11。注意,该IP报文是封装在一个单播帧里的。
- 这个帧的源MAC地址为DHCP Server所对应的单播MAC地址,目的MAC地址为PC1的MAC地址,类型字段的值为0x0800。
- PC1上的DHCP Client接收到R1上的DHCP Server发送的DHCPACK消息后,就意味着PC1首次获得了DHCP Server分配给自己IP地址。实际上,PC1还会立即通过Gratuitous ARP机制来检验所获得的IP地址的唯一性。
- R1上的DHCP Server会向PC1上的DHCP Client发送一个DHCPACK。
- DHCPNACK消息:R1上的DHCP Server会向PC1上的DHCP Client发送一个DHCPNACK消息。
- 注意,由于种种原因,R1上的DHCP Server也可能会向PC1上的DHCP Client发送一个DHCPNACK消息。如果PC1接收到了DHCPNACK消息,就说明这次获取IP地址的尝试失败了。在这种情况下,PC1只能重新回到发现阶段来开始新一轮的IP地址申请过程。
- DHCPACK消息
- 发现阶段:发现阶段也就是PC1上的DHCP Client寻找DHCP Server的阶段。
- 主机非首次获取IP地址
- 租约期未到进行续租:如图11-3所示,PC1上是有磁盘等存储设备的,因此PC1是能够记住自己上次所获得的IP地址的,并且也能记住当初分配这个IP地址的那个DHCP Server的Server Identifier(也就是R1上的DHCP Server的Server Identifier),还能记住这个DHCP Server所对应的单播IP地址和单播MAC地址等信息。所以,PC1重新启动的时候,只需要直接进入第3个阶段(请求阶段)。
- 请求阶段:如图11-4所示,从DHCP协议的角度来看,IP地址的所有权是属于DHCP Server的,而不是DHCP Client的;DHCP Client所拥有的只是IP地址的使用权。事实上,DHCP Server每次给DHCP Client分配一个IP地址时,只是跟DHCP Client订立了一个关干这个IP地址的租约(Lease)。每个租约都有一个租约期(Duration of Lease),DHCP协议规定租约期的缺省值不得小于1个小时,而实际部署DHCP时,租约期的缺省值通常都是24小时。在租约期内,DHCP Client才能使用相应的IP地址。当租约期到期之后,DHCP Client是不被允许继续使用这个IP地址的。当然了,在租约期还没有到期的时候,DHCP Client是可以申请续租这个IP地址的,申请的流程如图11-4所示。通常在DHCP客户端启动、IP地址租约期限达到一半或87.5%时,DHCP客户端会自动向DHCP服务器申请,以完成IP租约的更新。
- 按照DHCP协议的规定,在缺省情况下,图11-4中的T1时刻是租约期到了一半的时刻,而T2时刻则是租约期到了87.5%的时刻。DHCP协议是允许先以单播帧及单播IP报文的方式来发送DHCPREQUEST消息的(T1时刻),如果发送之后接收不到回应(例如,R1的GE1/0/0接口的IP地址或MAC地址发生了改变),那么就再以广播帧及广播IP报文的方式发送DHCPREQUEST消息(T2时刻)。
- DHCPREOUEST单播:在T1时刻,PC1上的 DHCP Client会以单播方式向R1上的DHCP Server发送一个DHCPREOUEST消息,请求续租IP地址(也就是请求重新开始租约期的计时)。如果在T2时刻之前,PC1上的DHCP Client收到了回应的DHCPACK消息,则说明续租已经成功。
- DHCPREOUEST广播:如果直到T2时刻,PC1上的DHCP Client都未收到回应的DHCPACK消息,那么在T2时刻,PC1上的DHCP Client会以广播IP报文的方式发送一个DHCPREQUEST消息(该消息中携带有R1上的DHCP Server的Server Identifier),继续请求续租IP地址。如果在租约期到期之前,PC1上的DHCP Client 收到了回应的DHCPACK消息,则说明续租成功。
- 如果直到租约期到期时,PC1上的DHCP Client仍未收到回应的DHCPACK消息,那么PC1就必须停止使用原来的IP地址,也就是说,PC1只能重新从发现阶段开始来重新申请一个IP 地址。
- 按照DHCP协议的规定,在缺省情况下,图11-4中的T1时刻是租约期到了一半的时刻,而T2时刻则是租约期到了87.5%的时刻。DHCP协议是允许先以单播帧及单播IP报文的方式来发送DHCPREQUEST消息的(T1时刻),如果发送之后接收不到回应(例如,R1的GE1/0/0接口的IP地址或MAC地址发生了改变),那么就再以广播帧及广播IP报文的方式发送DHCPREQUEST消息(T2时刻)。
- 确认阶段
- DHCPACK消息:PC1在收到来自R1上的DHCP Server的DHCPACK消息后,就又可以开始继续使用原来的那个IP地址了。
- DHCPNACK消息:如果由于种种原因,R1上的DHCP Server不能让PC1继续使用这个IP地址,那么R1上的DHCP Server就会回应一个DHCPNACK消息。PC1如果收到了DHCPNACK消息,就必须放弃使用原来的IP地址,而必须重新从发现阶段开始来重新申请一个IP地址。
- 请求阶段:如图11-4所示,从DHCP协议的角度来看,IP地址的所有权是属于DHCP Server的,而不是DHCP Client的;DHCP Client所拥有的只是IP地址的使用权。事实上,DHCP Server每次给DHCP Client分配一个IP地址时,只是跟DHCP Client订立了一个关干这个IP地址的租约(Lease)。每个租约都有一个租约期(Duration of Lease),DHCP协议规定租约期的缺省值不得小于1个小时,而实际部署DHCP时,租约期的缺省值通常都是24小时。在租约期内,DHCP Client才能使用相应的IP地址。当租约期到期之后,DHCP Client是不被允许继续使用这个IP地址的。当然了,在租约期还没有到期的时候,DHCP Client是可以申请续租这个IP地址的,申请的流程如图11-4所示。通常在DHCP客户端启动、IP地址租约期限达到一半或87.5%时,DHCP客户端会自动向DHCP服务器申请,以完成IP租约的更新。
- 租约期未到进行续租:如图11-3所示,PC1上是有磁盘等存储设备的,因此PC1是能够记住自己上次所获得的IP地址的,并且也能记住当初分配这个IP地址的那个DHCP Server的Server Identifier(也就是R1上的DHCP Server的Server Identifier),还能记住这个DHCP Server所对应的单播IP地址和单播MAC地址等信息。所以,PC1重新启动的时候,只需要直接进入第3个阶段(请求阶段)。
- 主机首次获取IP地址:如图11-2所示,主机首次获取IP地址的DHCP的基本工作流程分为4个阶段,即发现阶段,提供阶段,请求阶段,确认阶段。
- DHCP中继代理:如图11-5所示,如果DHCP Server和DHCP Client不在同一个二层网络(二层广播域)中,那么DHCP Server根本就不可能接收到这些DHCPDISCOVER消息和DHCPREQUEST消息。DHCP协议除了定义了DHCP Client和DHCP Server这两种角色之外,还定义了DHCP Relay Agent(DHCP中继代理)这种角色。DHCP Relay Agent的基本作用就是专门在DHCP Client和DHCP Server之间进行DHCP消息的中转。
- DHCP Client利用DHCP Relay Agent来从DHCP Server那里获取IP地址等配置参数时,DHCP Relay Agent必须与DHCP Client位于同一个二层网络,DHCP Client与DHCP Relay Agent之间是以广播方式交换DHCP消息的。
- DHCP Server可以与DHCP Relay Agent位于同一个二层网络,也可以与DHCP Relay Agent位于不同的二层网络,DHCP Relay Agent与DHCP Server之间是以单播方式交换DHCP消息的(这就意味着,DHCP RelayAgent必须事先知道DHCP Server的IP地址)。DHCP Relay Agent通常是部署在路由器上或三层交换机上。
- dhcp enable:开启DHCP功能。
- dhcp select interface:开启接口采用接口地址池的DHCP Server功能。
- dhcp server lease { day day [ hour hour [ minute minute ] ] | unlimited }:配置DHCP服务器接口地址池中IP地址的租用有效期限功能。
- dhcp server excluded-ip-address start-ip-address [ end-ip-address ]:配置接口地址池中不参与自动分配的IP地址范围。
- dhcp server dns-list { ip-address &<1-8> | unnumbered interface interface-type interface-number }:指定接口地址池下的DNS服务器地址。
- display ip pool:查看已配置的IP地址池信息。
- ip pool ip-pool-name:创建全局地址池。
- network ip-address [ mask { mask | mask-length } ]:配置全局地址池下可分配的网段地址。
- lease { day day [ hour hour [ minute minute ] ] | unlimited }:配置地址池下的地址租期。
- gateway-list ip-address &<1-8>:为DHCP Client配置出口网关地址。
- excluded-ip-address start-ip-address [ end-ip-address ]:配置IP地址池中不参与自动分配的IP地址范围。
- dns-list { ip-address &<1-8> | unnumbered interface interface-type interface-number }:为DHCP Client配置DNS Server地址。
- dhcp select global:开启接口采用全局地址池的DHCP Server功能。
- dhcp select relay:命令用来使能DHCP中继功能。
- dhcp relay server-ip ip-address:命令用来配置DHCP中继所代理的DHCP服务器的IP地址。
- undo dhcp relay server-ip { ip-address | all }:删除DHCP中继所代理的DHCP服务器的IP地址。
- dhcp server group group-name:创建一个DHCP服务器组并进入DHCP服务器组视图,或者进入已经创建的DHCP服务器组视图。
- dhcp-server ip-address [ ip-address-index ]:配置在DHCP服务器组中添加DHCP服务器成员地址。
- dhcp select relay:命令用来使能DHCP中继功能。
- dhcp relay server-select group-name:配置DHCP中继所对应的DHCP服务器组。
# R1基本设置配置基于全局地址池的DHCPsystem-view [Huawei]sysname R1 # R1设置接口设置 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.254 24 [R1-GigabitEthernet0/0/0]quit [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]ip address 192.168.2.254 24 [R1-GigabitEthernet0/0/1]quit # R1设置DHCP [R1]dhcp enable [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]dhcp select interface [R1-GigabitEthernet0/0/0]quit [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]dhcp select interface [R1-GigabitEthernet0/0/1]quit # R1的GE0/0/0设置IP地址租用有效期为2天,默认为1天,即未单独设置的GE0/0/1的IP地址租用有效期为1天 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]dhcp server lease day 2 # R1的GE0/0/0设置不参与自动分配的IP地址范围 [R1-GigabitEthernet0/0/0]dhcp server excluded-ip-address 192.168.1.1 192.168.1.10 [R1-GigabitEthernet0/0/0]quit # R1设置GE0/0/1通过DHCP自动分配的DNS服务器地址 [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]dhcp server dns-list 8.8.8.8 [R1-GigabitEthernet0/0/1]quit # R1查看DHCP地址池中的地址分配情况 [R1]display ip pool ----------------------------------------------------------------------- Pool-name : GigabitEthernet0/0/0 Pool-No : 0 Position : Interface Status : Unlocked Gateway-0 : 192.168.1.254 Mask : 255.255.255.0 VPN instance : -- ----------------------------------------------------------------------- Pool-name : GigabitEthernet0/0/1 Pool-No : 1 Position : Interface Status : Unlocked Gateway-0 : 192.168.2.254 Mask : 255.255.255.0 VPN instance : -- IP address Statistic Total :506 Used :1 Idle :495 Expired :0 Conflict :0 Disable :10 # PC1和PC2设置DHCP动态获取IP,同时PC2设置DNS自动获取,抓取GE0/0/1报文如图所示 # PC1查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fea9:33a4 IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 192.168.1.253 Subnet mask.......................: 255.255.255.0 Gateway...........................: 192.168.1.254 Physical address..................: 54-89-98-A9-33-A4 DNS server........................: # PC2查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fe07:4994 IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 192.168.2.253 Subnet mask.......................: 255.255.255.0 Gateway...........................: 192.168.2.254 Physical address..................: 54-89-98-07-49-94 DNS server........................: 8.8.8.8 # PC1 ping PC2 PC>ping 192.168.2.253 Ping 192.168.2.253: 32 data bytes, Press Ctrl_C to break Request timeout! From 192.168.2.253: bytes=32 seq=2 ttl=127 time=62 ms From 192.168.2.253: bytes=32 seq=3 ttl=127 time=63 ms From 192.168.2.253: bytes=32 seq=4 ttl=127 time=78 ms From 192.168.2.253: bytes=32 seq=5 ttl=127 time=47 ms --- 192.168.2.253 ping statistics --- 5 packet(s) transmitted 4 packet(s) received 20.00% packet loss round-trip min/avg/max = 0/62/78 ms # 保存R1配置
# R1基础设置配置DHCP中继system-view [Huawei]sysname R1 # R1接口设置 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.254 24 [R1-GigabitEthernet0/0/0]quit [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]ip address 192.168.2.254 24 [R1-GigabitEthernet0/0/1]quit # R1的DHCP设置 [R1]dhcp enable [R1]ip pool huawei1 [R1-ip-pool-huawei1]network 192.168.1.0 [R1-ip-pool-huawei1]lease day 1 [R1-ip-pool-huawei1]gateway-list 192.168.1.254 [R1-ip-pool-huawei1]excluded-ip-address 192.168.1.250 192.168.1.253 [R1-ip-pool-huawei1]dns-list 8.8.8.8 [R1-ip-pool-huawei1]quit [R1]ip pool huawei2 [R1-ip-pool-huawei2]network 192.168.2.0 [R1-ip-pool-huawei2]lease day 1 [R1-ip-pool-huawei2]gateway-list 192.168.2.254 [R1-ip-pool-huawei2]dns-list 8.8.8.8 [R1-ip-pool-huawei2]quit # R1设置接口采用全局地址池为客户端分配地址 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]dhcp select global [R1-GigabitEthernet0/0/0]quit [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]dhcp select global [R1-GigabitEthernet0/0/1]quit # 查看R1地址池信息 [R1]display ip pool ----------------------------------------------------------------------- Pool-name : huawei1 Pool-No : 0 Position : Local Status : Unlocked Gateway-0 : 192.168.1.254 Mask : 255.255.255.0 VPN instance : -- ----------------------------------------------------------------------- Pool-name : huawei2 Pool-No : 1 Position : Local Status : Unlocked Gateway-0 : 192.168.2.254 Mask : 255.255.255.0 VPN instance : -- IP address Statistic Total :506 Used :2 Idle :500 Expired :0 Conflict :0 Disable :4 # PC1和PC2打开DHCP自动获取IP地址 # PC1查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fe4e:32ec IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 192.168.1.249 Subnet mask.......................: 255.255.255.0 Gateway...........................: 192.168.1.254 Physical address..................: 54-89-98-4E-32-EC DNS server........................: 8.8.8.8 # PC2查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fe7b:5322 IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 192.168.2.253 Subnet mask.......................: 255.255.255.0 Gateway...........................: 192.168.2.254 Physical address..................: 54-89-98-7B-53-22 DNS server........................: 8.8.8.8 # 测试PC1和网关,PC1和PC2的连通性 PC>ping 192.168.1.254 -c 1 Ping 192.168.1.254: 32 data bytes, Press Ctrl_C to break From 192.168.1.254: bytes=32 seq=1 ttl=255 time=62 ms --- 192.168.1.254 ping statistics --- 1 packet(s) transmitted 1 packet(s) received 0.00% packet loss round-trip min/avg/max = 62/62/62 ms PC>ping 192.168.2.253 -c 1 Ping 192.168.2.253: 32 data bytes, Press Ctrl_C to break From 192.168.2.253: bytes=32 seq=1 ttl=127 time=62 ms --- 192.168.2.253 ping statistics --- 1 packet(s) transmitted 1 packet(s) received 0.00% packet loss round-trip min/avg/max = 62/62/62 ms # 保存R1配置
# R1、R2、R3基础设置DNSsystem-view [Huawei]sysname R1 [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]ip address 10.1.1.254 24 [R1-GigabitEthernet0/0/1]quit [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.1.1.1 24 [R1-GigabitEthernet0/0/0]quit system-view [Huawei]sysname R2 [R2]interface GigabitEthernet 0/0/0 [R2-GigabitEthernet0/0/0]ip address 200.1.1.2 24 [R2-GigabitEthernet0/0/0]quit [R2]interface GigabitEthernet 0/0/1 [R2-GigabitEthernet0/0/1]ip address 100.1.1.2 24 [R2-GigabitEthernet0/0/1]quit system-view [Huawei]sysname R3 [R3]interface GigabitEthernet 0/0/1 [R3-GigabitEthernet0/0/1]ip address 100.1.1.1 24 [R3-GigabitEthernet0/0/1]quit # 测试R1和R2的连通性 [R1]ping 200.1.1.2 PING 200.1.1.2: 56 data bytes, press CTRL_C to break Reply from 200.1.1.2: bytes=56 Sequence=1 ttl=255 time=110 ms Reply from 200.1.1.2: bytes=56 Sequence=2 ttl=255 time=10 ms Reply from 200.1.1.2: bytes=56 Sequence=3 ttl=255 time=20 ms Reply from 200.1.1.2: bytes=56 Sequence=4 ttl=255 time=20 ms Reply from 200.1.1.2: bytes=56 Sequence=5 ttl=255 time=20 ms --- 200.1.1.2 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 10/36/110 ms # R1、R2、R3搭建RIP网络 [R1]rip 1 [R1-rip-1]version 2 [R1-rip-1]network 10.0.0.0 [R1-rip-1]network 200.1.1.0 [R1-rip-1]quit [R2]rip 1 [R2-rip-1]version 2 [R2-rip-1]network 200.1.1.0 [R2-rip-1]network 100.0.0.0 [R2-rip-1]quit [R3]rip 1 [R3-rip-1]version 2 [R3-rip-1]network 100.0.0.0 [R3-rip-1]quit # R1查看路由表和RIP数据库 [R1]display ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 11 Routes : 11 Destination/Mask Proto Pre Cost Flags NextHop Interface 10.1.1.0/24 Direct 0 0 D 10.1.1.254 GigabitEthernet0/0/1 10.1.1.254/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 10.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1 100.1.1.0/24 RIP 100 1 D 200.1.1.2 GigabitEthernet0/0/0 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 200.1.1.0/24 Direct 0 0 D 200.1.1.1 GigabitEthernet0/0/0 200.1.1.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 200.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0 [R1]display rip 1 database --------------------------------------------------- Advertisement State : [A] - Advertised [I] - Not Advertised/Withdraw --------------------------------------------------- 10.0.0.0/8, cost 0, ClassfulSumm 10.1.1.0/24, cost 0, [A], Rip-interface 100.0.0.0/8, cost 1, ClassfulSumm 100.1.1.0/24, cost 1, [A], nexthop 200.1.1.2 200.1.1.0/24, cost 0, ClassfulSumm 200.1.1.0/24, cost 0, [A], Rip-interface # R3配置DHCP服务器 [R3]dhcp enable [R3]ip pool dhcp-pool [R3-ip-pool-dhcp-pool]network 10.1.1.0 mask 255.255.255.0 [R3-ip-pool-dhcp-pool]gateway-list 10.1.1.254 [R3-ip-pool-dhcp-pool]quit [R3]interface GigabitEthernet 0/0/1 [R3-GigabitEthernet0/0/1]dhcp select global [R3-GigabitEthernet0/0/1]quit # R3查看地址池的配置情况 [R3]display ip pool ----------------------------------------------------------------------- Pool-name : dhcp-pool Pool-No : 0 Position : Local Status : Unlocked Gateway-0 : 10.1.1.254 Mask : 255.255.255.0 VPN instance : -- IP address Statistic Total :253 Used :0 Idle :253 Expired :0 Conflict :0 Disable :0 # R1设置DHCP中继,有两种方式,一种是在面向PC的接口下直接设置DHCP服务器IP地址;另一种是在面向PC的接口下调用全局定义的DHCP服务器组 # R1设置第一种方式,面向PC的接口下直接设置DHCP服务器IP地址 [R1]dhcp enable [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]dhcp select relay [R1-GigabitEthernet0/0/1]dhcp relay server-ip 100.1.1.1 [R1-GigabitEthernet0/0/1]quit # 配置PC1获取地址方式为DHCP,抓取R1的GE0/0/0和GE0/0/1的报文如图所示 # 配置PC2获取地址方式为DHCP # PC1查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fe91:c0e IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 10.1.1.253 Subnet mask.......................: 255.255.255.0 Gateway...........................: 10.1.1.254 Physical address..................: 54-89-98-91-0C-0E DNS server........................: # PC2查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fe04:2946 IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 10.1.1.252 Subnet mask.......................: 255.255.255.0 Gateway...........................: 10.1.1.254 Physical address..................: 54-89-98-04-29-46 DNS server........................: # PC1 ping PC2 PC>ping 10.1.1.252 Ping 10.1.1.252: 32 data bytes, Press Ctrl_C to break From 10.1.1.252: bytes=32 seq=1 ttl=128 time=31 ms From 10.1.1.252: bytes=32 seq=2 ttl=128 time=47 ms From 10.1.1.252: bytes=32 seq=3 ttl=128 time=31 ms From 10.1.1.252: bytes=32 seq=4 ttl=128 time=31 ms From 10.1.1.252: bytes=32 seq=5 ttl=128 time=31 ms --- 10.1.1.252 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 31/34/47 ms # R1设置第二种方式,面向PC的接口下调用全局定义的DHCP服务器组 [R1]undo dhcp relay server-ip 100.1.1.1 [R1]dhcp server group dhcp-group [R1-dhcp-server-group-dhcp-group]dhcp-server 100.1.1.1 [R1-dhcp-server-group-dhcp-group]quit [R1]interface GigabitEthernet 0/0/1 [R1-GigabitEthernet0/0/1]dhcp select relay [R1-GigabitEthernet0/0/1]dhcp relay server-select dhcp-group [R1-GigabitEthernet0/0/1]quit # 重启PC1、PC2,并重新设置获取地址方式为DHCP # PC1查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fe91:c0e IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 10.1.1.253 Subnet mask.......................: 255.255.255.0 Gateway...........................: 10.1.1.254 Physical address..................: 54-89-98-91-0C-0E DNS server........................: # PC2查看IP地址 PC>ipconfig Link local IPv6 address...........: fe80::5689:98ff:fe04:2946 IPv6 address......................: :: / 128 IPv6 gateway......................: :: IPv4 address......................: 10.1.1.252 Subnet mask.......................: 255.255.255.0 Gateway...........................: 10.1.1.254 Physical address..................: 54-89-98-04-29-46 DNS server........................: # PC1 ping PC2 PC>ping 10.1.1.252 Ping 10.1.1.252: 32 data bytes, Press Ctrl_C to break From 10.1.1.252: bytes=32 seq=1 ttl=128 time=31 ms From 10.1.1.252: bytes=32 seq=2 ttl=128 time=32 ms From 10.1.1.252: bytes=32 seq=3 ttl=128 time=31 ms From 10.1.1.252: bytes=32 seq=4 ttl=128 time=47 ms From 10.1.1.252: bytes=32 seq=5 ttl=128 time=15 ms --- 10.1.1.252 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 15/31/47 ms # 保存R1、R2、R3配置
- DNS(Domain Name System,域名系统):是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址,即域名系统DNS能够把互联网上的主机名字转换为IP地址。域名到IP地址的解析是由分布在互联网上的许多域名服务器程序共同完成的。
- 域名到IP地址的解析过程
- 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。
- 本地域名服务器查找域名
- 若查找到对应的IP地址,则放在回答报文中返回,应用进程获得目的主机的IP地址后即可进行通信。
- 若查找不到对应的IP地址,本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
- 域名到IP地址的解析过程
- 域名(domain name):由多个标号组成的完整域名总共不超过255个字符。
- 标号:DNS规定,每一个域名都由标号(label)序列组成,而各标号之间用点隔开。域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符(但为了记忆方便,最好不要超过12个字符),也不区分大小写字母(例如,CCTV或cctv在域名中是等效的),标号中除连字符(-)外不能使用其他的标点符号。
- 域名树:如图6-1所示,用域名树来表示互联网的域名系统是最清楚的,域名树的树叶就是单台计算机的名字,它不能再继续往下划分子域了。
- 根:没有对应的名字,根下面一级的节点就是顶级域名(由于根没有名字,所以在根下面一级的域名就叫做顶级域名)。
- 子域:域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。级别从右到左区分等级的高到低,级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。DNS既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由ICANN进行管理,用这种方法可使每一个域名在整个互联网范围内是唯一的,并且也容易设计出一种查找域名的机制。
- 顶级域名
- 国家顶级域名nTLD:采用ISO 3166的规定。国家顶级域名又常记为ccTLD(cc 表示国家代码 country-code)。
- en:中国
- us:美国
- uk:英国
- 通用顶级域名gTLD
- corn(公司企业)
- net(网络服务机构)
- org(非营利性组织)
- int(国际组织
- edu(美国专用的教育机构)
- gov(美国的政府部门)
- mil(美国的军事部门)
- aero(航空运输企业)
- asia(亚太地区)
- biz(公司和企业)
- cat(使用加泰隆人的语言和文化团体)
- coop(合作团体)
- info(各种情况)
- jobs(人力资源管理者)
- rnobi(移动产品与服务的用户和提供者)
- museum(博物馆)
- name(个人)
- pro(有证书的专业人员)
- tel(Telnic 股份有限公司)
- travel(旅游业)
- 基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此又称为反向域名。
- 新顶级域名(NewgTLD):ICANN于2011年6月20日在新加坡会议上正式批准,任何公司、机构都有权向ICANN申请新的顶级域。
- 国家顶级域名nTLD:采用ISO 3166的规定。国家顶级域名又常记为ccTLD(cc 表示国家代码 country-code)。
- 二级域名
- 国家顶级域名下注册的二级域名均由该国家自行确定。
- 例如,顶级域名为jp的日本,将其教育和企业机构的二级域名定为ac和co,而不用edu和com。
- 我国把二级域名划分为“类别域名”和“行政区域名”两大类。
- 类别域名:共7个。
- ac(科研机构)
- corn(工、商、金融等企业)
- edu(中国的教育机构)
- gov(中国的政府机构)
- mil(中国的国防机构)
- net(提供互联网络服务的机构)
- org(非营利性的组织)
- 行政区域名:共34个,适用于我国的各省、自治区、直辖市。例如:bj(北京市),js (江苏省),等等。
- 类别域名:共7个。
- 国家顶级域名下注册的二级域名均由该国家自行确定。
- 三级域名
- …
- 主机名称:域名树的树叶就是单台计算机的名字,它不能再继续往下划分子域了。虽然中央电视台和清华大学都各有一台计算机取名为mail,但它们的域名并不一样,因为前者是mail.cctv.com,而后者是mail.tsinghua.edu.cn。因此,即使在世界上还有很多单位的计算机取名为mail,但是它们在互联网中的域名都必须是唯一的。
- 顶级域名
- 示例
- mail.cctv.com:就是中央电视台用于收发电子邮件的计算机(即邮件服务器)的域名,它由三个标号组成,其中标号com是顶级域名,标号cctv是二级域名,标号mail是三级域名。
域名服务器
- 关于我国的互联网络发展现状以及各种规定(如申请域名的手续),均可在中国互联网网络信息中心CNNIC的网址上找到[W-CNNIC]。
- 互联网的名字空间是按照机构的组织来划分的,与物理的网络无关,与IP地址中的“子网”也没有关系。
- 域名服务器:具体实现域名系统则是使用分布在各地的域名服务器。从理论上讲,可以让每一级的域名都有一个相对应的域名服务器,使所有的域名服务器构成和图6-1相对应的“域名服务器树”的结构。但这样做会使域名服务器的数量太多,使域名系统的运行效率降低。因此DNS就采用划分区的办法来解决这个问题。DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围,区可能等于或小于域,但一定不能大于域。
- 区(zone):一个服务器所负责管辖的(或有权限的)范围叫做区。
- 示例:如图6-2所示,假定abc公司有下属部门x和y,部门x下面又分三个分部门u,v和w,而y下面还有其下属部门t。图6-2(a)表示abc公司只设一个区abc.com,这时区abc.com和域abc.com指的是同一件事。但图6-2(b)表示abc公司划分了两个区(大的公司可能要划分多个区)abc.com和y.abc.com,这两个区都隶属于域abc.com,都各设置了相应的权限域名服务器,不难看出,区是“域”的子集。
- 域名服务器类型:如图6-3所示,以图6-2(b)中公司abc划分的两个区为例,给出了DNS域名服务器树状结构图,每一个域名服务器都能够进行部分域名到IP地址的解析,当某个DNS服务器不能进行域名到IP地址的转换时,它就设法找互联网上别的域名服务器进行解析。
- 根域名服务器(root name server):最高层次的域名服务器,也是最重要的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。若要对互联网上任何一个域名进行解析(即转换为IP地址),只要自己无法解析,就首先要求助于根域名服务器。在许多情况下,根域名服务器并不直接把待查询的域名直接转换成IP地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
- 据统计,到2016年2月,全世界已经在588个地点(地点数值还在不断增加)安装了根域名服务器,但这么多的根域名服务器却只使用13个不同IP地址的域名,即a.rootservers.net,b.rootservers.net,…,m.rootservers.net。虽然互联网的根域名服务器总共只有13个域名,但这不表明根域名服务器是由 13 台机器所组成(如果仅仅依靠这13台机器,根本不可能为全世界的互联网用户提供令人满意的服务)。
- 实际上,在互联网中是由13套装置(13installations)构成这13组根域名服务器[W-ROOT]。每一套装置在很多地点安装根域名服务器(也可称为镜像根服务器),但都使用同一个域名。负责运营根域名服务器的公司大多在美国,但所有的根域名服务器却分布在全世界。为了提供更可靠的服务,在每一个地点的根域名服务器往往由多台机器组成(为了安全起见,有些根域名服务器的具体地点还是保密的)。
- 现在世界上大部分DNS域名服务器,都能就近找到一个根域名服务器查询IP地址(现在这些根域名服务器都已增加了IPv6地址)。
- 为了方便,人们常用从A到M的前13个英文字母中的一个,来表示某组根域名服务器。
- 如图6-4所示,覆盖范围很大的一组根域名服务器L在世界上150个地点的分布图(在中国有3个,位置都在北京)。由于根域名服务器采用了任播(anycast)技术,因此当DNS客户向某个根域名服务器的IP地址发出查询报文时,互联网上的路由器就能找到离这个DNS客户最近的一个根域名服务器。这样做不仅加快了DNS的查询过程,也更加合理地利用了互联网的资源。
- 顶级域名服务器(即TLD服务器):这些域名服务器负责管理在该顶级域名服务器,注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。
- 权限域名服务器(authoritative name server):每一个区设置相应的权限域名服务器用来保存该区中的所有主机的域名到IP地址的映射。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。例如在图6-2(b)中,区abc.com和区y.abc.com各设有一个权限域名服务器。
- 本地域名服务器(local name server):每一个互联网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。当一台主机发出DNS查询请求时,当所要查询的主机也属于同一个本地ISP时,这个查询请求报文就发送给本地域名服务器,该本地域名服务器立即就能将所查询的主机名转换为它的IP地址,而不需要再去询问其他的域名服务器。
- 根域名服务器(root name server):最高层次的域名服务器,也是最重要的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。若要对互联网上任何一个域名进行解析(即转换为IP地址),只要自己无法解析,就首先要求助于根域名服务器。在许多情况下,根域名服务器并不直接把待查询的域名直接转换成IP地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
- 域名的解析过程:当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。
- 递归查询(recursivequery):主机向本地域名服务器的查询一般都是采用递归查询。
- 如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自已进行下一步的查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错表示无法查询到所需的IP地址。在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的。
- 迭代查询(iterativequery):本地域名服务器向根域名服务器的查询通常是采用迭代查询。
- 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时。
- 要么给出所要查询的IP地址。
- 要么告诉本地域名服务器下一步应当向哪一个域名服务器进行查询。
- 然后本地域名服务器进行后续的查询(而不是让根服务器替本地域名服务器进行后续的查询)。根域名服务器通常是把自已知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。
- 顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。
- 最后,知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。
- 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时。
- 示例:如图6-5所示,主机m.xyz.com打算发送邮件给主机y.abc.com,这时就必须知道主机y.abc.com的IP地址。
- 迭代查询:如图6-5(a)所示。
- 主机m.xyz.com先向其本地域名服务器dns.xyz.com进行递归查询。
- 本地域名服务器采用迭代查询,它先向一个根域名服务器查询。
- 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
- 本地域名服务器向顶级域名服务器dns.com进行查询。
- 顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址。
- 本地域名服务器向权限域名服务器dns.abc.com进行查询。
- 权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
- 本地域名服务器最后把查询结果告诉主机m.xyz.com。
- 递归查询:如图6-5(b)所示,在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的。
- 迭代查询:如图6-5(a)所示。
- 递归查询(recursivequery):主机向本地域名服务器的查询一般都是采用递归查询。
- 区(zone):一个服务器所负责管辖的(或有权限的)范围叫做区。
应用 概况
- 域名服务器缓存
- 为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存(有时也称为高速缓存域名服务器),高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如,每个项目只存放两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息, 就必须重新到授权管理该项的域名服务器获取绑定信息。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。
- 不但在本地域名服务器中需要高速缓存,在主机中也很需要。许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机自然应该定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删掉无效的项。由于域名改动并不频繁,大多数网点不需花太多精力就能维护数据库的一致性。
- BOOTP(Bootstrap Protocol,引导程序协议)
- BOOTP报文
- 工作原理
- BOOTP中继代理
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)
- DHCP报文
- 工作原理
- 主机首次获取IP地址
- 发现阶段
- 提供阶段
- 请求阶段
- 确认阶段
- 主机非首次获取IP地址
- 租约期未到进行续租
- 请求阶段
- 确认阶段
- 租约期未到进行续租
- 主机首次获取IP地址
- DHCP中继代理
- DNS(Domain Name System,域名系统)
- 域名(domain name)
- 标号
- 域名树
- 根
- 子域
- 顶级域名
- 国家顶级域名nTLD
- 通用顶级域名gTLD
- 基础结构域名(infrastructure domain)
- 新顶级域名(NewgTLD)
- 二级域名
- 三级域名
- …
- 主机名称
- 顶级域名
- 域名服务器
- 区(zone)
- 域名服务器类型
- 根域名服务器(root name server)
- 顶级域名服务器(即TLD服务器)
- 权限域名服务器(authoritative name server)
- 本地域名服务器(local name server)
- 域名的解析过程
- 递归查询(recursivequery)
- 迭代查询(iterativequery)
- 域名(domain name)



