264 lines
16 KiB
Typst
264 lines
16 KiB
Typst
#import "labtemplate.typ": *
|
||
#show: nudtlabpaper.with(title: "DHCP与DNS配置",
|
||
author: "程景愉",
|
||
id: "202302723005",
|
||
training_type: "无军籍",
|
||
grade: "2023",
|
||
major: "网络工程",
|
||
department: "计算机学院",
|
||
advisor: "张军",
|
||
jobtitle: "工程师",
|
||
lab: "306-707",
|
||
date: "2025.09.28",
|
||
header_str: "《网络工程》实验报告",
|
||
)
|
||
#set page(header: [
|
||
#set par(spacing: 6pt)
|
||
#align(center)[#text(size: 11pt)[《网络工程》实验报告]]
|
||
#v(-0.3em)
|
||
#line(length: 100%, stroke: (thickness: 1pt))
|
||
],)
|
||
|
||
#show heading: it => box(width: 100%)[
|
||
#v(0.50em)
|
||
#set text(font: hei)
|
||
#it.body
|
||
]
|
||
|
||
#outline(title: "目录",depth: 3, indent: 1em)
|
||
#pagebreak()
|
||
#outline(
|
||
title: [图目录],
|
||
target: figure.where(kind: image),
|
||
)
|
||
|
||
#show heading: it => box(width: 100%)[
|
||
#v(0.50em)
|
||
#set text(font: hei)
|
||
#counter(heading).display()
|
||
// #h(0.5em)
|
||
#it.body
|
||
]
|
||
#set enum(indent: 0.5em,body-indent: 0.5em,)
|
||
#pagebreak()
|
||
|
||
= 实验目的
|
||
#para[
|
||
本实验旨在配置DHCP服务器,以确保客户端能够自动获取合法的IP地址、网关和DNS服务器信息,避免受到非法DHCP服务器的干扰。同时,通过配置DNS服务器,实现IP地址与主机名称的有效映射,从而提升网络管理的便捷性和安全性。
|
||
]
|
||
= 实验原理
|
||
== DHCP
|
||
#para[
|
||
DHCP,即动态主机配置协议(Dynamic Host Configuration Protocol),是一种网络管理协议,它允许主机从DHCP服务器动态获取IP地址,实现“即插即用”的网络连接方式。这一特性使得网络管理更加便捷,用户无需手动配置IP地址,即可快速接入网络,享受无缝的网络体验。
|
||
]
|
||
=== DHCP工作原理
|
||
#para[
|
||
假定DHCP 客户端进程监听的是 68 端口号,DHCP 服务端进程监听的是 67 端口号,主机通过下面介绍的4个步骤来获取到IP。
|
||
]
|
||
#figure(image("DHCP.jpg",format:"png",width: 44%),caption:"DHCP工作原理")
|
||
+ *DHCP发现:*
|
||
客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是 255.255.255.255(端口 67)并且使用 0.0.0.0(端口 68)作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
|
||
|
||
+ *DHCP提供:*
|
||
DHCP 服务器收到 DHCP 发现报文时,用 DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
|
||
|
||
+ *DHCP请求:*
|
||
客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST进行响应,回显配置的参数。
|
||
+ *DHCP确认:*
|
||
最后,服务端用 DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。一旦客户端收到 DHCP ACK 后,交互便完成了,并且客户端能够在租用期内使用 DHCP 服务器分配的 IP 地址。
|
||
|
||
=== DHCP续约
|
||
#para[
|
||
在租用期内,客户端可以选择续约,即向 DHCP 服务器发送 DHCP REQUEST 报文,以延长租用期:
|
||
]
|
||
- 服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。
|
||
- 服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。
|
||
=== DHCP中继代理
|
||
#para[
|
||
DHCP 交互中,全程都是使用 UDP 广播通信。如果 DHCP 服务器和客户端不在同一个局域网内,加之路由器不会转发广播包,那么每个网络都需要配置一个 DHCP 服务器。为了解决这一问题,引入了 DHCP 中继代理。有了 DHCP 中继代理以后,对不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。如@dhcp_relay 所示:
|
||
]
|
||
#figure(image("DHCP_relay.png",format:"png",width: 48%),caption:"DHCP中继代理工作原理")<dhcp_relay>
|
||
- DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包以后,再以单播的形式发给 DHCP 服务器。
|
||
- 服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包广播给 DHCP 客户端。
|
||
#para[
|
||
因此,DHCP 服务器即使不在同一个链路上也可以实现统一分配和管理 IP 地址。
|
||
]
|
||
|
||
== DNS
|
||
#para[
|
||
DNS,即域名系统(Domain Name System),是互联网中的一种命名系统,用于将域名与IP地址相互映射。在互联网中,每个主机都有一个唯一的IP地址,但是IP地址不便于人们记忆,因此需要一个更易记的域名来代替。DNS系统通过将域名映射到IP地址,实现了域名与IP地址之间的转换,使得用户可以通过域名访问互联网上的各种服务。
|
||
]
|
||
=== 域名的层级关系
|
||
#para[
|
||
在DNS系统中,域名采用句点(.)进行分隔,例如www.server.com,句点用于标识不同层级之间的界限。域名的层级结构从右至左依次递增,右侧的层级高于左侧。这种命名方式源于域名的发明者为外国人,其思维方式与中国人有所不同。在描述地理位置时,外国人习惯从小范围到大范围依次描述(如XX街道 XX区 XX市 XX省),而中国人则倾向于从大范围到小范围(如XX省 XX市 XX区 XX街道)。
|
||
]
|
||
#para[
|
||
在域名体系中,根域位于最顶层,其下为顶级域(如com),再往下为二级域(如server.com)。这种层级关系类似于树状结构,具体表现为:
|
||
]
|
||
#figure(image("DNS_hierarchy.png",format:"png",width: 62%),caption:"域名的层级关系")<dns_hierarchy>
|
||
- 根DNS服务器
|
||
|
||
- 顶级域DNS服务器(如com)
|
||
|
||
- 权威DNS服务器(如server.com)
|
||
#para[
|
||
根域的DNS服务器信息被存储在互联网中的所有DNS服务器中。这一机制确保了任何DNS服务器都能够定位并访问根域DNS服务器。因此,客户端只需能够连接到任意一台DNS服务器,即可通过该服务器找到根域DNS服务器,并沿着层级结构逐步查询,最终定位到目标DNS服务器。
|
||
]
|
||
=== 域名解析的工作流程
|
||
#para[
|
||
浏览器在进行域名解析时,首先会检查自身的缓存,若未找到对应的IP地址,则会查询操作系统的缓存。如果仍未找到,浏览器会进一步检查本机的hosts文件。若在这些地方均未找到目标域名的IP地址,浏览器将向本地DNS服务器发起查询请求。查询过程如下:
|
||
]
|
||
#figure(image("DNS_resolution.png",format:"png",width: 100%),caption:"域名解析的工作流程")<dns_resolution>
|
||
1. 客户端首先发送一个DNS请求,询问www.server.com的IP地址,并将请求发送至本地DNS服务器(即客户端TCP/IP设置中指定的DNS服务器地址)。本地DNS服务器接收到请求后,会先在其缓存中查找是否存在www.server.com的记录。若缓存中存在该记录,则直接返回对应的IP地址;若不存在,本地DNS服务器将向根域名服务器发起查询。
|
||
|
||
2. 根域名服务器是DNS层次结构中的最高层级,虽然它不直接解析域名,但能够指示查询方向。根域名服务器接收到本地DNS的请求后,发现域名后缀为.com,因此回应:“www.server.com的域名由.com区域管理,你可以向.com顶级域名服务器查询。”随后,根域名服务器提供.com顶级域名服务器的地址。
|
||
|
||
3. 本地DNS服务器根据根域名服务器提供的地址,向.com顶级域名服务器发起请求,询问www.server.com的IP地址。顶级域名服务器接收到请求后,回应:“www.server.com的域名由server.com区域的权威DNS服务器管理,你可以向该服务器查询。”同时,顶级域名服务器提供server.com权威DNS服务器的地址。
|
||
|
||
4. 本地DNS服务器根据顶级域名服务器提供的地址,向server.com的权威DNS服务器发起请求,询问www.server.com的IP地址。权威DNS服务器是域名解析结果的最终来源,负责管理该域名的解析。权威DNS服务器查询后,将对应的IP地址(如X.X.X.X)返回给本地DNS服务器。
|
||
|
||
5. 最后,本地DNS服务器将查询到的IP地址返回给客户端,客户端据此与目标服务器建立连接。
|
||
|
||
#para[
|
||
整个DNS域名解析过程类似于日常生活中向他人问路的过程,通过层层指引最终找到目标地址。
|
||
]
|
||
= 实验环境
|
||
== 实验背景
|
||
#para[
|
||
本实验将路由器 R1 模拟成公司 DHCP Server,配置全局地址池,该公司市场部和财务部下的 PC 通过 DHCP 的方式自动配置 IP 地址。
|
||
]
|
||
== 实验设备
|
||
#align(center)[#table(
|
||
columns: (auto, auto,auto),
|
||
rows:(1.5em,1.5em,2.8em),
|
||
inset: 10pt,
|
||
align: horizon+center,
|
||
table.header(
|
||
[*设备名称*], [*设备型号*], [*设备数量*]
|
||
),
|
||
"路由器", "华为AR6120-S", "1",
|
||
"交换机", "华为S5735", "2",
|
||
"PC", "联想启天M410\nWindows 10", "2",
|
||
)]
|
||
|
||
= 实验步骤及结果
|
||
== 实验拓扑
|
||
#para[
|
||
按实验背景,绘制拓扑图如下:
|
||
]
|
||
#figure(image("拓扑图.png",format: "png",fit:"stretch",width: 64%),caption: "实验拓扑图")
|
||
== 按照拓扑图接线
|
||
#para[
|
||
按照拓扑图接线。
|
||
]
|
||
#figure(image("front.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "机柜正面接线图")
|
||
#figure(image("back.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "机柜背面接线图")
|
||
== 配置基本网络
|
||
=== 启用DHCP
|
||
#para[
|
||
首先,在路由器开启DHCP功能:
|
||
]
|
||
#figure(image("step1.jpg",format: "jpg",fit:"stretch",width: 40%),caption: "启用DHCP功能")
|
||
=== 配置路由器IP地址
|
||
#para[
|
||
按照拓扑图配置路由器的IP地址。
|
||
]
|
||
#figure(image("step2.jpg",format: "jpg",fit:"stretch",width: 60%),caption: "配置路由器接口GE0/0/0和GE0/0/1的IP地址")
|
||
|
||
=== 配置市场部和财务部的地址池
|
||
#para[
|
||
先创建地址池:
|
||
]
|
||
#figure(image("step3.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "创建市场部地址池 (huawei)")
|
||
#figure(image("step4.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "创建财务部地址池 (huawei2)")
|
||
== 配置地址池
|
||
#para[
|
||
配置地址池的可分配网段,租期,网关及DNS服务器地址:
|
||
]
|
||
#figure(image("step5.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "配置财务部地址池 (huawei)")
|
||
#figure(image("step4.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "配置市场部地址池 (huawei2)")
|
||
#figure(image("step7.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "配置保留地址 (huawei)")
|
||
== 在接口下启用DHCP功能
|
||
#para[
|
||
配置市场部和财务部接口使用全局地址池模式
|
||
]
|
||
#figure(image("step8.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "使用全局地址池模式")
|
||
== 验证DHCP服务器配置
|
||
#para[
|
||
执行`display ip pool`命令,查看地址池配置情况:
|
||
]
|
||
#figure(image("step9.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "查看地址池配置情况")
|
||
#para[
|
||
在台式机 (PC-1, PC-2) 上验证DHCP服务器配置是否成功,注意确保 PC-1 连接在 S1 上,PC-2 连接在 S2 上。具体验证步骤如下:
|
||
]
|
||
1. 设置PC为自动获取IP地址:
|
||
- 打开 “控制面板” \> “网络和共享中心” \> “更改适配器设置”。
|
||
- 右键点击你的有线网卡,选择 “属性”。
|
||
- 双击 “Internet 协议版本 4 (TCP/IPv4)”。
|
||
- 选择 “自动获得IP地址” 和 “自动获得DNS服务器地址”,然后点击“确定”。
|
||
|
||
2. 查看获取到的IP地址:
|
||
|
||
- 在PC的命令提示符(CMD)中输入 `ipconfig /all`。
|
||
- PC-1 (市场部) 应该获取到类似 `192.168.1.1` 的IP地址,网关是 `192.168.1.254`,DNS是 `8.8.8.8`。
|
||
- PC-2 (财务部) 应该获取到类似 `192.168.2.1` 的IP地址,网关是 `192.168.2.254`,DNS是 `8.8.8.8`。
|
||
|
||
3. 测试网络连通性:
|
||
|
||
- 在PC-1上 `ping 192.168.1.254` (ping自己的网关)。
|
||
- 在PC-2上 `ping 192.168.2.254` (ping自己的网关)。
|
||
- 都应该能ping通。
|
||
|
||
4. 释放和重新获取IP:
|
||
|
||
- 在CMD中执行 `ipconfig /release` 来释放IP地址。
|
||
- 再执行 `ipconfig /renew` 来重新获取。
|
||
- 观察获取到的IP地址是否与之前相同或发生变化。通常情况下会优先获取到之前使用过的地址。
|
||
|
||
#figure(image("step10.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "验证DHCP服务器配置生效(1)")
|
||
#figure(image("step11.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "验证DHCP服务器配置生效(2)")
|
||
#figure(image("step12.jpg",format: "jpg",fit:"stretch",width: 70%),caption: "验证DHCP服务器配置生效(3)")
|
||
#para[
|
||
如上图所示,DHCP服务正常工作。至此,DHCP服务器配置完成,PC能够成功通过DHCP获取IP地址。
|
||
]
|
||
= 思考题
|
||
|
||
#para[
|
||
DHCP服务器在分配地址时是从该网段中最小的地址还是最大地址进行分配?这样做的好处是什么?
|
||
]
|
||
分配顺序: 华为设备和其他大多数网络设备一样,默认情况下是\\从网段中可用的最小地址开始(正序)\\进行分配。例如,在`192.168.1.0/24`网段,它会从`192.168.1.1`开始依次分配。
|
||
好处:
|
||
1. 可预测性: 使得IP地址的分配非常有规律,管理员可以很容易地预测新加入网络的设备会获得哪个范围的IP地址,便于网络管理和故障排查。
|
||
2. 简化管理: 网络管理员通常会将网段中靠前或靠后的IP地址保留用于静态分配给服务器、打印机、网关等重要设备。从最小地址开始分配,可以清晰地将动态和静态地址区域分开。
|
||
|
||
由于...客户端采用广播方式发送请求...因此DHCP只适用于客户端和服务器处于同一个网段内的情况。当多个网段都需要进行动态IP地址分配时,就需要...都设置一个DHCP服务器,这种情况下该如何配置?
|
||
|
||
这个问题实际上引出了一个比“在每个网段都部署服务器”更优的解决方案:DHCP中继(DHCP Relay)。
|
||
|
||
虽然可以在每个网段都部署一台DHCP服务器,但这会导致管理复杂且成本高昂。一个更好的方法是:
|
||
|
||
1. 集中部署DHCP服务器: 在网络中只部署一台(或为了冗余部署两台)功能强大的DHCP服务器,并在上面配置好所有网段的地址池。
|
||
2. 在网关上配置DHCP中继: 在每个客户端所在网段的网关(通常是路由器或三层交换机)接口上,配置DHCP中继功能。
|
||
3. 工作原理:
|
||
客户端在本网段发送DHCP请求的广播报文。
|
||
网关接口(DHCP中继代理)收到这个广播报文后,会将其转换成单播报文。
|
||
中继代理将这个单播报文发送给远端的、集中的DHCP服务器。报文中会包含中继代理自身的IP地址(giaddr字段),这样服务器就知道这个请求来自哪个网段。
|
||
DHCP服务器根据这个来源信息,从对应的地址池中选择一个IP地址,并将响应报文(单播)发回给中继代理。
|
||
中继代理再将响应报文(广播)转发给客户端。
|
||
|
||
配置方法: 在客户端所在网段的网关接口上,使用类似 `dhcp relay server-ip <DHCP服务器的IP地址>` 的命令来启用中继功能。这样,仅用一台服务器就能为所有网段提供服务,实现了集中管理,大大降低了维护成本。
|
||
#pagebreak()
|
||
= 实验总结
|
||
#para[
|
||
本次实验通过配置DHCP服务器和DNS服务器,实现了客户端自动获取IP地址和域名解析的功能。在实验过程中,我们了解了DHCP和DNS的工作原理,掌握了DHCP服务器和DNS服务器的配置方法,提升了网络管理的便捷性和安全性。
|
||
]
|
||
|
||
// #pagebreak()
|
||
#show heading: it => box(width: 100%)[
|
||
#v(0.50em)
|
||
#set text(font: hei)
|
||
// #counter(heading).display()
|
||
// #h(0.5em)
|
||
#it.body
|
||
]
|
||
#bibliography("ref.yml",full: true,title: "参考文献",style:"gb-7714-2015-numeric") |