跳转到内容

HARD-1:计算机网络基础

计算机系统Banner

引言:小明是成电软院的一名学生,小明爱打瓦。小明发现,在瓦的选服务器时,明明他处在成都,但是天津服的延迟是最低的,只有40ms,而重庆服理应延迟最低,却有80ms的延迟。X更奇怪的是,有时小明用手机热点选择重庆服进入游戏,在游戏内再将电脑连的wifi切回宿舍wifi,这时游戏内延迟会变为20ms。但是此时,游戏内语音会出现卡顿,但游戏内容流畅运行。小明的宿舍在欣五,有两个网口和两个开学时一起买的相同的路由器,他连这两个路由器时都会出现上述问题。并且,**只有小明的宿舍出现了这样的问题,别的宿舍没有问题,且小明的舍友也有相同的问题。**通过上述引例,你是否对网络知识产生了兴趣?现在让我们先学习基本的网络知识,尝试回答上面的问题。另:这一层的实验题不限制语言。

请你根据下面的题目,有针对性地学习计网的底层知识。在这道题以外,如果你想系统的学习计网的知识,可以看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/ (这个网课设计较多硬件部分,文档则比较概括)

  1. 127.0.0.1 的作用 解释 127.0.0.1 的含义及用途,并说明它与 localhost 的关系。
  2. 常见特殊网段 除了 127.0.0.1,还有哪些保留地址和特殊网段?请至少举出 3 类并说明用途,例如:
    1. 私有地址(Private IP)
    2. 回环地址(Loopback)
    3. 链路本地地址(Link-local)
    4. 多播地址(Multicast)
    5. 广播地址(Broadcast)
  1. 各层协议与作用 简述 OSI 七层模型TCP/IP 四层模型,并说明每一层的主要功能和常见协议。

提示: 例如 HTTP 属于应用层,TCP 属于传输层

  1. DNS 的作用 简述 DNS 在网络通信中的作用。
  2. DNS 查询流程 描述从浏览器输入 www.example.com 到最终获取 IP 地址的 DNS 解析过程,包含以下内容:
    1. 浏览器缓存、本地缓存、hosts 文件
    2. 递归查询与迭代查询的区别
    3. 根域名服务器、顶级域名服务器、权威 DNS 服务器的作用
  3. 实际操作 使用 nslookupdig 命令,查询任意一个域名的解析过程,并截图结果。
  1. ARP 的作用 简述 ARP(地址解析协议)的工作原理,以及它在局域网通信中的地位。
  2. ARP 报文结构 了解 ARP 请求与 ARP 响应的报文格式(硬件类型、协议类型、MAC 地址、IP 地址等字段)。
  3. ARP 与安全 简述 ARP 协议存在的安全隐患,以及常见的防护手段(例如静态 ARP 表、ARP 防护软件等)。
  4. 动手实验(可选加分) 使用抓包工具(如 Wireshark)捕获一次正常的 ARP 请求与响应报文,并分析字段含义。

为什么需要 IPv6? 简述 IPv6 出现的背景,以及相比 IPv4 的主要改进之处。

获取运营商分配的 IPv6 地址 尝试在自己的设备上查看并获取运营商提供的 IPv6 地址,并截图记录。

实验:Nginx IPv6 配置 配置 Nginx 使其可以通过 IPv6 对外提供服务,并在外网进行访问测试。(简单输出一个helloworld即可)

请你分析引言中的情景,指出小明为什么会出现这样的问题。

  1. 为什么会出现重庆服的延迟高于天津服? 从网口和路由器两个角度分析。
  2. 为什么切换手机热点再切回宿舍wifi延迟降低? 这其中不同的wifi选择主要体现哪些协议的哪些功能?
  3. 为什么会出现语音卡顿但游戏不卡顿的问题?
  4. 小明发现,他连使用uu加速器连接到成都节点后,延迟变为20ms, 这个信息可以排除哪些原因?你认为最可能的原因是什么?

学习并掌握Socket编程的基础知识,实现一个简单的客户端与服务端通信程序。

如果你用c语言,请你学习socket库。使用python时,使用socket和thread模块,在这一部分不要用flask/fastapi等包。

  1. 实现基本的C-S端通信,即客户端向服务端发送信息,服务器接收到信息后,向客户端反馈发送内容和结果。
  2. 实现通信日志记录功能。以每次通信的时间和端口号命名日志文件,记录通信的成功与否及通信内容。日志文件应存放在log文件夹内。每次新连接创建一个新文件,连续对话记录在同一文件中,下一次连接则创建新的日志文件。
  3. 实现客户端用户的注册和登录功能,并将通信内容格式化为:用户名—通信内容。
  4. 使用readline库记录历史对话内容。
  5. 在代码中加入完整的错误处理机制,确保程序在异常情况下(如网络中断、错误输入等)不会崩溃,并能够给出相应提示。
  6. 提供客户端与服务器通信的运行结果及日志记录的截图,本地虚拟机中自己与自己通信即可。

写在前面: 浏览器只能渲染html/css/js等文件,不能使用渲染client文件中的tkinter语句。 因此如果你完全没有学过前端知识,让ai给你跑整个客户端然后部署在服务器上意义不大。你只需要把这个项目部署在本地虚拟机上,然后创建多个客户端并上传成功运行的截图即可。

题目: 使用 TCP Socket 编程,实现一个简单的 多人聊天室

  • 服务器端:接收多个客户端连接,将收到的消息广播给所有已连接客户端。
  • 客户端:连接到服务器,能发送和接收消息。

到这里就是笔试要求范围内所有的招新题了,接下来的部分如果你感兴趣可以自行学习。

扩展内容: 上线服务器,用前后端不分离的方式,搭建一个聊天网站。这里推荐使用python等语言,c实现起来会很难。

  1. 购买一个服务器,并实现ssh登录,下载docker和数据库。注:这里推荐买香港服务器,国内服务器上线聊天室要备案。
  2. 学习前端知识,重构你之前所写的文件。用js完成前端和客户端的内容,服务端只提供前端html和处理客户端信息。
  3. 将完成的文件上传到服务器当中。

优化内容:

  • 实现主机与服务器断开连接后,服务器持续运行聊天室服务。
  • 增加支持表情符号、文件传输的消息格式,使用简单的二进制协议来传输这些数据。
  • 增加私聊功能。
  • 连接数据库存储用户信息,增加用户注册功能,增加管理员设置,允许管理员禁言普通用户。
  • 处理多人同时聊天的并发问题。
  • 使用json传递用户的对话消息。

请根据以下要求,把五子棋集成到上面的网络聊天室当中,在私聊功能中加入“发起五子棋对战”。

  1. 在对战开始时跳出一个对战弹窗,所有功能在一个页面中即可。(思考如果有多个页面应该怎样做?)
  2. 五子棋对局信息保存在内存中,不进入数据库。
  3. 使用css渲染棋子和棋盘,具体下棋规则和设置参考简单题04(把提示词喂给ai就行,这道题的重点是多进程控制和网站部署)。
  4. 加入防对战干扰,同一用户处于对战状态时,其他用户不许对其发起私聊和对战邀请。

可以参考http://47.242.56.191:8000/ ,我用ai跑的前端,使用fastapi写的后端,可以私信找我要源码。

写在后面:因为我学的内容偏后端,很多底层的内容我没有学过,这个招新题也比去年的更偏应用,少了一些网络实验。如果你需要往年的招新题,加入工作室后找我要即可。

提交点这里

出题人:出题人头像  taaaakoooo

QQ:1748798371

邮箱:1748798371@qq.com