电子图书馆网站设计:DNS/DHCP/Web/FTP四类服务配置与子网划分实战
简介:这份资源是《计算机网络 I》课程设计的电子图书馆网站设计完整方案,面向高校计算机与网络相关专业学生及自学者,帮助解决从需求分析到网络规划、服务配置与网页发布的综合实践难题。压缩包共1个doc文件,约26KB,以课程设计报告形式呈现,涵盖设计目的与任务书、需求分析、硬件与软件选型、网络拓扑与子网划分、DNS/DHCP/WEB/FTP等服务配置过程,以及简单WEB主页的代码设计与发布说明,并附评分标准与文档规范要求。读者可据此对照完成1000M主干、100M到点、至少4个子网的站点规划,理清服务器、交换机、路由器的选型与IP分配思路,掌握报告撰写结构与常见问题解决办法。目前已有948人学习下载,适合需要按课程设计大纲系统完成网站设计类题目的学习者参考。
1. 从一份课程设计任务书说起:电子图书馆网站到底要交付什么
很多人看到“电子图书馆网站设计”第一反应是写几个 HTML 页面、放几张图书封面就完事。但这份《计算机网络 I》课程设计的任务书里,真正压分量的不是页面,而是网络本身:站点要能接入 Internet,内部 1000M 主干、100M 到桌面,至少划 4 个子网,还要把 DNS、DHCP、WEB、FTP 四类服务全部跑起来。换句话说,这是一个“网络工程 + 轻量 Web 应用”的复合型项目,页面只是门面,子网划分、地址分配、服务配置才是骨架。
它适合两类人:一类是正在做计网课设、需要一份能照着搭起来并写进报告的完整参考;另一类是已经工作、想回头把 DNS/DHCP/Web/FTP 这套经典服务链路重新捋一遍的开发者。下面按“先看清结构、再跑通服务、最后动手改”的顺序拆。
2. 整体架构与目录结构:四类服务如何落在一张拓扑图上
2.1 网络拓扑与子网划分方案
任务书要求 100 个以上站点、1000M 主干、100M 到点、至少 4 个子网。落到实际设计上,常见做法是用一台三层交换机或路由器做核心,下挂若干接入交换机,按功能把网络切成四块:服务器区、图书馆业务区、读者访问区、管理运维区。这样划分的好处是广播域隔离、故障不扩散,也方便在报告里画拓扑图。
以192.168.10.0/24为基准做变长子网划分,一个可落地的方案如下:
| 子网 | 网段 | 用途 | 网关 |
|---|---|---|---|
| VLAN 10 | 192.168.10.0/26 | 服务器区(DNS/DHCP/Web/FTP) | 192.168.10.1 |
| VLAN 20 | 192.168.10.64/26 | 图书馆业务终端 | 192.168.10.65 |
| VLAN 30 | 192.168.10.128/26 | 读者公共访问区 | 192.168.10.129 |
| VLAN 40 | 192.168.10.192/26 | 管理运维区 | 192.168.10.193 |
每个 /26 可用主机 62 个,四个子网合计 248 个地址,满足“100 个以上站点”的要求且留有余量。服务器区单独成网段是关键——DNS 和 DHCP 一旦和业务终端混在一个广播域里,排查起来就是血泪经验。
2.2 项目目录结构
Web 部分建议用最轻的组合:静态主页 + 一个简单的后端接口,避免把课设做成大型框架。目录可以这样组织:
elib-site/ ├── conf/ │ ├── named.conf # DNS 主配置 │ ├── db.elib.local # 正向解析区文件 │ ├── db.192.168.10 # 反向解析区文件 │ └── dhcpd.conf # DHCP 地址池配置 ├── web/ │ ├── index.html # 图书馆首页 │ ├── search.html # 图书检索页 │ ├── static/ │ │ ├── css/style.css │ │ └── js/search.js │ └── api/ │ └── books.json # 模拟图书数据 ├── ftp/ │ └── ebooks/ # 电子书下载目录 └── scripts/ ├── setup_dns.sh ├── setup_dhcp.sh └── setup_web_ftp.shconf/放服务端配置,web/是站点根目录,ftp/ebooks/挂电子书资源,scripts/把重复的安装配置动作脚本化。课设报告里“程序文件列表”这一项,直接照这个结构写就够清晰。
2.3 服务与端口的对应关系
四类服务各占各的端口,配置时别搞混:DNS 走 53(TCP/UDP),DHCP 走 67/68(UDP),Web 走 80/443,FTP 走 21 控制端口加被动模式的数据端口段。服务器区那台主机同时承载这四个角色时,防火墙规则要放行对应端口,否则现象就是“服务明明启动了,客户端就是连不上”——这是后面避坑章节要展开的第一个坑。
3. 核心服务配置拆解:DNS、DHCP、Web、FTP 逐个落地
3.1 DNS 正向与反向解析配置
DNS 是整个站点的入口,域名解析不通,后面 Web 和 FTP 都白搭。以 BIND 为例,主配置文件声明区:
# conf/named.conf 片段 options { directory "/var/named"; allow-query { any; }; recursion yes; }; zone "elib.local" IN { type master; file "db.elib.local"; }; zone "10.168.192.in-addr.arpa" IN { type master; file "db.192.168.10"; };区文件里至少要有 SOA、NS、A 记录和反向 PTR:
# conf/db.elib.local $TTL 86400 @ IN SOA ns.elib.local. admin.elib.local. ( 2024010101 ; serial 3600 ; refresh 1800 ; retry 604800 ; expire 86400 ) ; minimum @ IN NS ns.elib.local. ns IN A 192.168.10.10 www IN A 192.168.10.10 ftp IN A 192.168.10.10serial每次改完区文件必须递增,否则从服务器不会同步;www和ftp都指向同一台服务器 IP,是因为课设规模下四类服务常合并部署。反向区文件里写10 IN PTR www.elib.local.即可完成 192.168.10.10 的反查。配完用named-checkconf和named-checkzone先做语法校验,再systemctl restart named,能省掉大量“改了没生效”的困惑。
3.2 DHCP 地址池与保留地址
DHCP 负责给业务区和读者区自动发地址,服务器区则用静态地址。dhcpd.conf的核心是声明子网、地址池和网关:
# conf/dhcpd.conf 片段 subnet 192.168.10.64 netmask 255.255.255.192 { range 192.168.10.70 192.168.10.120; option routers 192.168.10.65; option domain-name-servers 192.168.10.10; default-lease-time 3600; max-lease-time 7200; } host lib-pc01 { hardware ethernet 00:11:22:33:44:55; fixed-address 192.168.10.66; }range要避开网关地址和保留段;option domain-name-servers指向 3.1 里配好的 DNS,这样客户端拿到地址的同时也拿到了正确的解析服务器。host段做 MAC 绑定,给需要固定地址的业务终端用。改完先dhcpd -t -cf /etc/dhcp/dhcpd.conf做配置测试,再重启服务,客户端侧用ipconfig /release加ipconfig /renew(Windows)或dhclient -r加dhclient(Linux)验证。
3.3 Web 主页与检索接口
Web 层不需要重框架,静态页加一个 JSON 数据源就能撑起“编写简单的 WEB 主页”这条要求。首页负责导航,检索页用前端脚本过滤books.json:
// web/static/js/search.js async function searchBooks(keyword) { const res = await fetch('/api/books.json'); const books = await res.json(); // 按书名或作者做不区分大小写的模糊匹配 return books.filter(b => b.title.toLowerCase().includes(keyword.toLowerCase()) || b.author.toLowerCase().includes(keyword.toLowerCase()) ); } document.getElementById('searchBtn').addEventListener('click', async () => { const kw = document.getElementById('keyword').value.trim(); const result = await searchBooks(kw); renderList(result); // renderList 负责把结果渲染到列表容器 });fetch拉取同源下的books.json,filter做书名和作者双字段匹配,renderList是渲染函数,把结果拼成 DOM 节点。数据量在课设规模下(几十到上百条)完全够用,不需要上数据库。如果想让报告里的“扩展功能”加分,可以把books.json换成后端接口,用 Python Flask 或 Node Express 包一层,前端代码几乎不用改。
3.4 FTP 电子书下载服务
FTP 用来放电子书文件,配置重点是匿名只读或账号只读,避免被随意上传。以 vsftpd 为例:
# /etc/vsftpd/vsftpd.conf 关键项 anonymous_enable=YES anon_root=/srv/ftp/ebooks anon_upload_enable=NO anon_mkdir_write_enable=NO local_enable=YES write_enable=NO pasv_enable=YES pasv_min_port=30000 pasv_max_port=30100anon_root指向电子书目录,anon_upload_enable=NO关掉匿名上传,pasv_min_port和pasv_max_port限定被动模式端口范围,方便在防火墙上只开这一段。被动模式是客户端在 NAT 后面能否连上的关键,端口段不固定的话,防火墙规则就没法写。配完用ftp命令行或浏览器ftp://ftp.elib.local验证,能列目录、能下载即算通过。
4. 避坑与排查:四个最容易翻车的点
4.1 服务启动了但客户端连不上
现象:服务器上systemctl status显示 DNS、DHCP、Web 全部 active,客户端却解析失败、拿不到地址、打不开页面。原因九成是防火墙或 SELinux 拦了端口,或者服务只监听了 127.0.0.1。解决:先ss -tulnp看监听地址是不是0.0.0.0,再检查firewall-cmd --list-ports是否放行了 53/67/68/80/21 和被动端口段,SELinux 环境下用getenforce确认状态,必要时对 FTP 目录打semanage fcontext标签。排查顺序固定为“监听地址 → 防火墙 → SELinux”,能少走很多弯路。
4.2 DHCP 发地址但客户端上不了网
现象:客户端ipconfig能看到 192.168.10.x 的地址,ping 网关通,ping 外网不通。原因通常是option routers写错,或者核心设备上没配 NAT/路由回程。解决:核对dhcpd.conf里每个 subnet 的option routers是否等于该子网网关,再在核心设备上确认去往各 VLAN 的路由和出网口的地址转换配置。课设环境里最容易漏的是“服务器区能上网、业务区没配路由”这种半通状态。
4.3 DNS 改了区文件不生效
现象:db.elib.local明明改了 A 记录,nslookup还是旧结果。原因一是serial没递增,二是客户端或本地有缓存,三是改完没 reload。解决:每次改区文件先把 SOA 里的 serial 加一,执行rndc reload或重启 named,客户端侧清缓存(Windowsipconfig /flushdns,Linux 看systemd-resolved状态)。反向解析忘了配 PTR 也是高频问题,正向通、反向查不到,报告里演示时很尴尬。
4.4 FTP 能登录但列不出目录
现象:FTP 账号登录成功,执行ls卡住或报“425 Failed to establish connection”。原因是被动模式端口段没在防火墙放行,或者pasv_address没配成服务器对外地址。解决:确认pasv_min_port/pasv_max_port与防火墙放行段一致,NAT 环境下补pasv_address=服务器公网或映射地址,客户端切主动/被动模式对比测试。这个坑在课设答辩现场演示时最容易暴露,提前用命令行客户端验证一遍比什么都稳。
5. 二次开发与验证:把课设做成能讲清楚的作品
5.1 从静态数据到可检索书库
books.json是最容易改造的入口。把静态文件换成后端接口,前端searchBooks里的fetch地址一改即可,检索逻辑可以从“前端过滤”下沉到“后端查询”,顺便把分页、分类筛选加上。验证方法很直接:构造 200 条以上测试数据,测关键词命中率、空结果提示、特殊字符输入(比如书名里带引号)是否导致脚本报错。这一步做完,报告里“扩展程序的功能”那一栏就有实打实的内容可写。
5.2 服务配置脚本化与可复现
课设最怕“当时配通了,换台机器就复现不了”。把 3.1 到 3.4 的配置动作收进scripts/下的三个脚本,每个脚本开头做环境检查、结尾做服务状态断言:
#!/bin/bash # scripts/setup_dns.sh set -e named-checkconf /etc/named.conf || { echo "配置语法错误"; exit 1; } systemctl restart named sleep 2 dig @127.0.0.1 www.elib.local +short | grep -q "192.168.10.10" \ && echo "DNS 验证通过" || { echo "DNS 解析失败"; exit 1; }set -e让脚本遇错即停,dig +short做结果断言,验证不通过直接非零退出。这样换环境重跑一遍脚本,通不通一目了然,报告里的“配置过程”也有了可复现的依据。
5.3 拓扑与地址规划的调整技巧
想扩到更多子网时,别急着改 /26,先把地址规划表拉出来重算。常见做法是保留服务器区 /26 不动,把业务区和读者区各拆成两个 /27,管理区维持 /26,这样总子网数上去了,服务器区地址不受影响。改完记得同步更新 DHCP 的 subnet 声明、核心设备的路由和 ACL,三处不一致就是新的故障源。验证时按“先 ping 网关、再 ping 跨子网、最后测服务”的顺序走一遍,比东一榔头西一棒子高效得多。
我自己的习惯是:每次动网络配置前,先把当前能通的链路用ping和traceroute记一遍基线,改完逐条对比,哪条断了立刻能定位到是哪一步引入的。这个习惯帮我省掉了无数次“改完不知道哪里坏了”的返工。希望帮到你。
本文还有配套的精品资源,点击获取