HARD-1:计算机网络基础
引言:小明是成电软院的一名学生,小明爱打瓦。小明发现,在瓦的选服务器时,明明他处在成都,但是天津服的延迟是最低的,只有40ms,而重庆服理应延迟最低,却有80ms的延迟。X更奇怪的是,有时小明用手机热点选择重庆服进入游戏,在游戏内再将电脑连的wifi切回宿舍wifi,这时游戏内延迟会变为20ms。但是此时,游戏内语音会出现卡顿,但游戏内容流畅运行。小明的宿舍在欣五,有两个网口和两个开学时一起买的相同的路由器,他连这两个路由器时都会出现上述问题。并且,**只有小明的宿舍出现了这样的问题,别的宿舍没有问题,且小明的舍友也有相同的问题。**通过上述引例,你是否对网络知识产生了兴趣?现在让我们先学习基本的网络知识,尝试回答上面的问题。另:这一层的实验题不限制语言。
step1_网络知识基础
Section titled “step1_网络知识基础”请你根据下面的题目,有针对性地学习计网的底层知识。在这道题以外,如果你想系统的学习计网的知识,可以看https://www.runoob.com/w3cnote/summary-of-network.html 以及https://csdiy.wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/topdown_ustc/ (这个网课设计较多硬件部分,文档则比较概括)
Part 1:特殊 IP 地址与网段
Section titled “Part 1:特殊 IP 地址与网段”- 127.0.0.1 的作用 解释 127.0.0.1 的含义及用途,并说明它与 localhost 的关系。
- 常见特殊网段 除了 127.0.0.1,还有哪些保留地址和特殊网段?请至少举出 3 类并说明用途,例如:
- 私有地址(Private IP)
- 回环地址(Loopback)
- 链路本地地址(Link-local)
- 多播地址(Multicast)
- 广播地址(Broadcast)
Part 2:计算机网络分层模型
Section titled “Part 2:计算机网络分层模型”- 各层协议与作用 简述 OSI 七层模型 与 TCP/IP 四层模型,并说明每一层的主要功能和常见协议。
提示: 例如 HTTP 属于应用层,TCP 属于传输层
Part 3:DNS 的工作流程
Section titled “Part 3:DNS 的工作流程”- DNS 的作用 简述 DNS 在网络通信中的作用。
- DNS 查询流程 描述从浏览器输入 www.example.com 到最终获取 IP 地址的 DNS 解析过程,包含以下内容:
- 浏览器缓存、本地缓存、hosts 文件
- 递归查询与迭代查询的区别
- 根域名服务器、顶级域名服务器、权威 DNS 服务器的作用
- 实际操作 使用 nslookup 或 dig 命令,查询任意一个域名的解析过程,并截图结果。
Part 4:ARP 协议基础
Section titled “Part 4:ARP 协议基础”- ARP 的作用 简述 ARP(地址解析协议)的工作原理,以及它在局域网通信中的地位。
- ARP 报文结构 了解 ARP 请求与 ARP 响应的报文格式(硬件类型、协议类型、MAC 地址、IP 地址等字段)。
- ARP 与安全 简述 ARP 协议存在的安全隐患,以及常见的防护手段(例如静态 ARP 表、ARP 防护软件等)。
- 动手实验(可选加分) 使用抓包工具(如 Wireshark)捕获一次正常的 ARP 请求与响应报文,并分析字段含义。
Part 5:IPv6
Section titled “Part 5:IPv6”为什么需要 IPv6? 简述 IPv6 出现的背景,以及相比 IPv4 的主要改进之处。
获取运营商分配的 IPv6 地址 尝试在自己的设备上查看并获取运营商提供的 IPv6 地址,并截图记录。
实验:Nginx IPv6 配置 配置 Nginx 使其可以通过 IPv6 对外提供服务,并在外网进行访问测试。(简单输出一个helloworld即可)
Part6:简单应用
Section titled “Part6:简单应用”请你分析引言中的情景,指出小明为什么会出现这样的问题。
- 为什么会出现重庆服的延迟高于天津服? 从网口和路由器两个角度分析。
- 为什么切换手机热点再切回宿舍wifi延迟降低? 这其中不同的wifi选择主要体现哪些协议的哪些功能?
- 为什么会出现语音卡顿但游戏不卡顿的问题?
- 小明发现,他连使用uu加速器连接到成都节点后,延迟变为20ms, 这个信息可以排除哪些原因?你认为最可能的原因是什么?
step2_网络实验和网站搭建
Section titled “step2_网络实验和网站搭建”Part1:初识网络编程
Section titled “Part1:初识网络编程”学习并掌握Socket编程的基础知识,实现一个简单的客户端与服务端通信程序。
如果你用c语言,请你学习socket库。使用python时,使用socket和thread模块,在这一部分不要用flask/fastapi等包。
- 实现基本的C-S端通信,即客户端向服务端发送信息,服务器接收到信息后,向客户端反馈发送内容和结果。
- 实现通信日志记录功能。以每次通信的时间和端口号命名日志文件,记录通信的成功与否及通信内容。日志文件应存放在log文件夹内。每次新连接创建一个新文件,连续对话记录在同一文件中,下一次连接则创建新的日志文件。
- 实现客户端用户的注册和登录功能,并将通信内容格式化为:用户名—通信内容。
- 使用readline库记录历史对话内容。
- 在代码中加入完整的错误处理机制,确保程序在异常情况下(如网络中断、错误输入等)不会崩溃,并能够给出相应提示。
- 提供客户端与服务器通信的运行结果及日志记录的截图,本地虚拟机中自己与自己通信即可。
Part2:网络聊天室
Section titled “Part2:网络聊天室”写在前面: 浏览器只能渲染html/css/js等文件,不能使用渲染client文件中的tkinter语句。 因此如果你完全没有学过前端知识,让ai给你跑整个客户端然后部署在服务器上意义不大。你只需要把这个项目部署在本地虚拟机上,然后创建多个客户端并上传成功运行的截图即可。
题目: 使用 TCP Socket 编程,实现一个简单的 多人聊天室:
- 服务器端:接收多个客户端连接,将收到的消息广播给所有已连接客户端。
- 客户端:连接到服务器,能发送和接收消息。
到这里就是笔试要求范围内所有的招新题了,接下来的部分如果你感兴趣可以自行学习。
扩展内容: 上线服务器,用前后端不分离的方式,搭建一个聊天网站。这里推荐使用python等语言,c实现起来会很难。
- 购买一个服务器,并实现ssh登录,下载docker和数据库。注:这里推荐买香港服务器,国内服务器上线聊天室要备案。
- 学习前端知识,重构你之前所写的文件。用js完成前端和客户端的内容,服务端只提供前端html和处理客户端信息。
- 将完成的文件上传到服务器当中。
优化内容:
- 实现主机与服务器断开连接后,服务器持续运行聊天室服务。
- 增加支持表情符号、文件传输的消息格式,使用简单的二进制协议来传输这些数据。
- 增加私聊功能。
- 连接数据库存储用户信息,增加用户注册功能,增加管理员设置,允许管理员禁言普通用户。
- 处理多人同时聊天的并发问题。
- 使用json传递用户的对话消息。
Part3:五子棋对战
Section titled “Part3:五子棋对战”请根据以下要求,把五子棋集成到上面的网络聊天室当中,在私聊功能中加入“发起五子棋对战”。
- 在对战开始时跳出一个对战弹窗,所有功能在一个页面中即可。(思考如果有多个页面应该怎样做?)
- 五子棋对局信息保存在内存中,不进入数据库。
- 使用css渲染棋子和棋盘,具体下棋规则和设置参考简单题04(把提示词喂给ai就行,这道题的重点是多进程控制和网站部署)。
- 加入防对战干扰,同一用户处于对战状态时,其他用户不许对其发起私聊和对战邀请。
可以参考http://47.242.56.191:8000/ ,我用ai跑的前端,使用fastapi写的后端,可以私信找我要源码。
写在后面:因为我学的内容偏后端,很多底层的内容我没有学过,这个招新题也比去年的更偏应用,少了一些网络实验。如果你需要往年的招新题,加入工作室后找我要即可。
本题提交方式
Section titled “本题提交方式”出题人联系方式
Section titled “出题人联系方式”出题人:
taaaakoooo
QQ:1748798371