简介这份华中科技大学计算机学院《计算机网络》实验报告面向正在学习网络课程、需要完成组网与路由配置实验的高校学生及自学者。内容围绕IP协议、网络层与数据链路层协议、子网划分、RIP与OSPF路由协议、路由器及二/三层交换机配置、VLAN划分和访问控制列表等核心知识点展开结合Boson Netsim仿真软件完整呈现了从拓扑搭建、IP地址规划到路由协议配置与连通性测试的全过程适合作为课程实验参考与期末复习材料。资源包内含1个docx文档约215KB结构紧凑便于直接查阅与整理。目前已有83人学习下载。读者可借此了解实验目的、操作步骤与配置命令掌握子网地址规划、路由器端口及子接口配置、RIP与OSPF动态路由实现等实践技能并对照思考题深化对网络协议工作机制的理解提升网络工程与管理的动手能力。1. 从一份华科计院实验报告说起网络组建与 SOCKET 编程到底练什么如果你正在搜「华中科技大学计算机学院实验报告」大概率不是想抄一份交差而是想找一份能把网络组建、路由配置、VLAN 划分、ACL 访问控制、SOCKET 编程串起来的完整参考。这份《计算机网络》实验报告来自华中科技大学计算机学院作者是姚富品和刘华涧学号 U202213625班级 Cs1105两人奉献占比 40% 和 60%。报告分两大部分试验一用 Boson Netsim 5.31 在 Windows 7 下做网络组建与实施试验二用 Visual Studio 写 C FTP 客户端。它最大的价值不是「答案」而是一条从 IP 规划到路由协议、从 VLAN 隔离到 ACL 过滤、再到应用层 Socket 通信的完整链路。适合正在做课设、准备网络实验答辩、或者想补网络实操经验的人。下面我按「资源是什么 → 怎么用 → 坑在哪」拆开讲。2. 试验一网络组建IP 规划、子网划分与 Boson Netsim 拓扑落地2.1 为什么先用 Boson Netsim 而不是直接上真机这份报告选的是 Boson Netsim 5.31 仿真软件跑在 Windows 7 上。很多人第一反应是「为什么不用 Packet Tracer 或 eNSP」其实在当年高校网络实验里Boson Netsim 的命令行还原度更接近真实 Cisco IOS尤其是int fa0/1.1这种子接口配置、cl ra 64000时钟频率设置语法和真机几乎一致。它的拓扑设计器叫 Net Designer先画图再转到 NetSim 里配命令这个流程和实际工程里「先出拓扑图再上架配置」的习惯是对得上的。选仿真而不是真机的理由很直接真机做 VLAN 和 ACL 实验配错一条access-group就可能把自己 Telnet 通道断掉恢复得去机房插 Console 线。仿真里最坏就是重启拓扑试错成本几乎为零。但仿真也有边界——它不模拟真实流量拥塞、不模拟硬件故障所以报告里反复强调「测试连通性」这一步不能省因为仿真里通不代表真机一定通。2.2 第一项试验同网段与跨网段 IP 规划的具体配法报告里第一项试验要求把 PC1、PC2 放在 192.168.0.0/24PC3~PC8 放在 192.168.1.0/24同时给路由器配端口地址让两个子网互通。后来要求变更为三个网段PC1/PC2 在 192.168.0.0PC3/PC5/PC7 在 192.168.1.0PC4/PC6/PC8 在 192.168.2.0。这里的关键是路由器 fa0/1 要配子接口也就是单臂路由的雏形。具体 IP 规划如下表设备IP 地址子网掩码默认网关PC1192.168.0.2255.255.255.0192.168.0.1PC2192.168.0.3255.255.255.0192.168.0.1PC3192.168.1.2255.255.255.0192.168.1.1PC4192.168.2.2255.255.255.0192.168.2.1PC5192.168.1.3255.255.255.0192.168.1.1PC6192.168.2.3255.255.255.0192.168.2.1PC7192.168.1.3255.255.255.0192.168.1.1PC8192.168.2.3255.255.255.0192.168.2.1路由器配置命令如下Routerenable Router#conf t Router(config)#int fa0/0 Router(config-if)#ip addr 192.168.0.1 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#exit Router(config)#int fa0/1 Router(config-if)#no shutdown Router(config-if)#exit Router(config)#int fa0/1.1 Router(config-subif)#ip addr 192.168.1.1 255.255.255.0 Router(config-subif)#no shutdown Router(config-subif)#exit Router(config)#int fa0/1.2 Router(config-subif)#ip addr 192.168.2.1 255.255.255.0 Router(config-subif)#no shutdown Router(config-subif)#end逻辑说明fa0/0 是物理接口直接配 192.168.0.1 作为 PC1/PC2 的网关。fa0/1 本身不配 IP只no shutdown激活然后在其下建两个子接口 fa0/1.1 和 fa0/1.2分别对应 VLAN 场景下的两个网段。参数上子接口号.1和.2只是逻辑标识真正决定网段的是ip addr后面的地址。这里有个容易翻车的点如果 fa0/1 主接口没no shutdown子接口即使配了 IP 也不通因为物理层没起来。2.3 第二项试验RIP 与 OSPF 配置及时钟频率的坑第二项试验要求四台路由器互联PC1~PC4 分别处于 192.168.1.0 到 192.168.4.0 四个网段先配 RIP 再配 OSPF。报告里 Router1 到 Router4 的串口配置都带了cl ra 64000也就是 clock rate 64000。思考题专门问「不设置时钟频率会出什么现象」——答案是 DCE 端不提供时钟DTE 端链路起不来串口状态会停在 down路由协议邻居关系根本建立不了。RIP 配置以 Router1 为例Router1enable Router1#conf t Router1(config)#router rip Router1(config-router)#network 192.168.0.0 Router1(config-router)#network 192.168.4.0 Router1(config-router)#network 192.168.5.0 Router1(config-router)#end逻辑说明router rip进入 RIP 配置模式network后面跟的是主类网络号不是子网号。比如 192.168.4.0/24 要写成network 192.168.4.0不能写成network 192.168.4.0 255.255.255.0因为 RIP v1 不支持变长子网掩码。参数上Router1 连接了 192.168.0.0fa0/0、192.168.4.0s0、192.168.5.0s1所以三个都要宣告。如果漏掉一个对端路由器就学不到那条路由ping 不通是必然的。OSPF 配置思路类似但命令是router ospf 1加network 192.168.x.0 0.0.0.255 area 0反掩码写法是新手最容易写错的地方。常见做法是先用 RIP 跑通再换 OSPF 对比收敛速度报告里也是这个顺序。3. 试验一进阶VLAN 划分、Trunk 链路与单臂路由互通3.1 VLAN 数据库模式与 VTP 域配置第三项试验在第二项基础上做 VLAN 划分要求把交换机 2、3、4 组成的网络分成两个 VLANPC3/PC5/PC7 在一个 VLANPC4/PC6/PC8 在另一个 VLAN。报告里用的是vlan database模式这是 Boson Netsim 和旧版 Cisco 交换机的写法新版本 IOS 已经改成全局配置模式下的vlan 2直接创建。Switch#vlan database Switch(vlan)#vtp domain class Switch(vlan)#vlan 2 name Class1 Switch(vlan)#vlan 3 name Class2 Switch(vlan)#ctrl-z逻辑说明vtp domain class把三台交换机划到同一个 VTP 管理域这样在 switch2 上创建的 VLAN 会自动同步到 switch3 和 switch4。参数上VLAN 2 命名为 Class1VLAN 3 命名为 Class2注意 VLAN 1 是默认存在的不能删除也不能改名。这里有个血泪经验如果 VTP 域名字大小写不一致比如一台写class另一台写ClassVLAN 信息同步会失败而且不会报错只能靠show vtp status去查。3.2 端口划分与 Trunk 链路配置端口划分到 VLAN 的命令Switch#conf t Switch(config)#int fa0/4 Switch(config-if)#switchport mode access Switch(config-if)#switchport access vlan 2 Switch(config)#exit Switch(config)#int fa0/5 Switch(config-if)#switchport mode access Switch(config-if)#switchport access vlan 3 Switch(config)#ctrl-z Switch#show vlan逻辑说明switchport mode access把端口设为接入模式switchport access vlan 2把该端口划入 VLAN 2。fa0/4 接 PC3/PC5/PC7 所在网段fa0/5 接 PC4/PC6/PC8。show vlan用来验证划分结果重点看端口有没有出现在正确的 VLAN 行里。Trunk 链路配置Switch#en Switch#conf t Switch(config)#int fa0/2 Switch(config-if)#switchport mode trunk Switch(config-if)#switchport trunk encap dot1q Switch(config)#exit Switch(config)#int fa0/3 Switch(config-if)#switchport mode trunk Switch(config-if)#switchport trunk encap dot1q Switch(config)#ctrl-z逻辑说明交换机之间互联的端口必须配成 trunk否则 VLAN 信息过不去。switchport trunk encap dot1q指定 802.1Q 封装这是 VLAN 标签的标准协议。参数上fa0/2 和 fa0/3 分别连向相邻交换机switch3 和 switch4 的对应端口也要做同样配置。如果 trunk 两端封装不一致比如一端 dot1q 一端 isl链路会起不来show interface trunk能看到状态是 not-trunking。3.3 单臂路由让两个 VLAN 互通VLAN 划分完后两个 VLAN 之间默认隔离。要让它们互通需要在路由器上配子接口并封装 dot1qRouter(config)#int fa0/1 Router(config-if)#no shutdown Router(config-if)#exit Router(config)#int fa0/1.1 Router(config-subif)#encap dot1q 1 Router(config-subif)#ip addr 192.168.1.1 255.255.255.0 Router(config-subif)#no shutdown Router(config-subif)#exit Router(config)#int fa0/1.2 Router(config-subif)#encap dot1q 2 Router(config-subif)#ip addr 192.168.2.1 255.255.255.0 Router(config-subif)#no shutdown Router(config-subif)#end逻辑说明encap dot1q 1和encap dot1q 2里的数字是 VLAN ID必须和交换机上创建的 VLAN 号对应。子接口 fa0/1.1 对应 VLAN 1fa0/1.2 对应 VLAN 2。参数上IP 地址分别作为两个 VLAN 的网关。这里注意报告里 VLAN 编号和子接口编号有交叉实际配置时以encap dot1q后面的 VLAN ID 为准子接口号只是本地标识。4. 试验二 SOCKET 编程FTP 客户端从一级到五级的实现路径4.1 为什么选 FTP 客户端而不是简单的 TCP Echo试验二要求用 C 在 Visual Studio 里写一个 FTP 客户端分五级要求。第一级只要求指定 IP 和端口、支持 PORT/PASV 两种模式、匿名和用户名登录、目录浏览切换、单线程上传下载、主动断开。第五级要求多线程同时下载多个文件、每个线程有进度指示、GUI 友好。这个梯度设计很合理FTP 协议本身覆盖了控制连接和数据连接分离、主动被动模式切换、文件传输完整性校验比写一个 Echo 服务器能练到的 Socket 知识点多得多。报告里用的 FTP 服务器是 Xlight FTP 服务器测试账号用户名 12345、密码 12345。这个组合在局域网实验里够用但要注意 Xlight 默认被动模式端口范围可能和防火墙冲突如果 PASV 连不上先检查服务器端的被动端口设置。4.2 控制连接与数据连接的 Socket 建立流程FTP 客户端最核心的逻辑是两条连接控制连接走 21 端口发命令收响应数据连接在 PORT 或 PASV 模式下动态建立。以 PASV 模式为例客户端先发PASV服务器返回一个 IP 和端口客户端再向那个端口发起数据连接。// 控制连接建立 SOCKET ctrlSock socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in serverAddr; serverAddr.sin_family AF_INET; serverAddr.sin_port htons(21); serverAddr.sin_addr.s_addr inet_addr(192.168.1.100); connect(ctrlSock, (sockaddr*)serverAddr, sizeof(serverAddr)); // 接收服务器欢迎信息 char recvBuf[1024]; recv(ctrlSock, recvBuf, sizeof(recvBuf), 0); // 发送用户名 send(ctrlSock, USER 12345\r\n, strlen(USER 12345\r\n), 0); recv(ctrlSock, recvBuf, sizeof(recvBuf), 0); // 发送密码 send(ctrlSock, PASS 12345\r\n, strlen(PASS 12345\r\n), 0); recv(ctrlSock, recvBuf, sizeof(recvBuf), 0);逻辑说明socket创建 TCP 套接字connect连接服务器 21 端口。FTP 命令必须以\r\n结尾这是协议规定少一个字符服务器就不解析。recv接收响应实际工程里要循环读到\r\n结尾才算一条完整响应这里简化成一次接收。参数上htons(21)把主机字节序转网络字节序inet_addr把点分十进制 IP 转成网络地址结构。PASV 模式数据连接// 发送 PASV 命令 send(ctrlSock, PASV\r\n, strlen(PASV\r\n), 0); recv(ctrlSock, recvBuf, sizeof(recvBuf), 0); // 解析响应格式如 227 Entering Passive Mode (192,168,1,100,10,20) // 提取 IP 和端口端口 10*256 20 int dataPort 10 * 256 20; SOCKET dataSock socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in dataAddr; dataAddr.sin_family AF_INET; dataAddr.sin_port htons(dataPort); dataAddr.sin_addr.s_addr inet_addr(192.168.1.100); connect(dataSock, (sockaddr*)dataAddr, sizeof(dataAddr)); // 发送 RETR 命令下载文件 send(ctrlSock, RETR test.txt\r\n, strlen(RETR test.txt\r\n), 0); // 从 dataSock 接收文件内容逻辑说明PASV 响应里的括号内六个数字前四个是 IP后两个是端口的高字节和低字节。端口计算公式是高字节 * 256 低字节。参数上RETR是下载命令STOR是上传命令。数据连接建立后文件内容从 dataSock 读写控制连接继续用来发命令和收响应。这里最容易翻车的是 PASV 响应解析不同服务器返回格式略有差异有的带括号有的不带解析时要容错。4.3 断点续传与文件校验的实现思路第四级要求断点续传第五级要求多线程。断点续传的核心是REST命令告诉服务器从文件的第几个字节开始传// 获取本地已下载文件大小 long long localSize getFileSize(local_test.txt); // 发送 REST 命令 char restCmd[64]; sprintf(restCmd, REST %lld\r\n, localSize); send(ctrlSock, restCmd, strlen(restCmd), 0); recv(ctrlSock, recvBuf, sizeof(recvBuf), 0); // 再发 RETR send(ctrlSock, RETR test.txt\r\n, strlen(RETR test.txt\r\n), 0); // 以追加模式打开本地文件从 localSize 处继续写入逻辑说明REST命令的参数是字节偏移量服务器收到后会把下次数据传输的起始位置设到该偏移。参数上localSize通过stat或fseek/ftell获取。文件校验常见做法是下载完后算 MD5 或 SHA1和服务器端提供的校验值对比。报告里第三级提到「对已下载完的文件进行校验」但没给具体算法我一般会用 MD5因为 C 有现成的 OpenSSL 库可以调。多线程下载的思路是每个文件一个线程每个线程独立建立控制连接和数据连接。但要注意 FTP 服务器通常限制同一 IP 的并发连接数Xlight 默认可能只允许几个线程开太多会被拒绝。常见做法是控制在 3~5 个线程并且每个线程用独立的控制连接不要共用。5. 避坑与排查从 IP 配错到 Socket 阻塞的 5 个真实翻车点5.1 现象PC 之间 ping 不通但 IP 配置看起来没问题原因最常见的是子网掩码写错比如 192.168.1.2 配了 255.255.255.0 但网关写成 192.168.0.1跨网段时 ARP 请求发不出去。另一个原因是路由器接口没no shutdown物理层没起来。解决先用ipconfig确认 IP、掩码、网关三项一致再在路由器上show ip interface brief看接口状态是不是 up/up。如果是单臂路由检查子接口的encap dot1qVLAN ID 和交换机端口 VLAN 是否匹配。5.2 现象RIP 配了但路由表里学不到对端网段原因network命令后面跟的是主类网络号如果写了子网号或者漏宣告了某个直连网段对端就学不到。另一个原因是串口时钟频率没设链路协议 down。解决show ip route看有没有 R 开头的路由条目show ip protocols看 RIP 宣告了哪些网络。串口两端确认一端配clock rate 64000另一端不用配。5.3 现象VLAN 划分后同一 VLAN 内能通跨 VLAN 不通原因这是正常现象VLAN 本来就是隔离广播域的。如果要求互通但没配单臂路由或者路由器子接口的encap dot1qVLAN ID 和交换机上不一致就会不通。解决在路由器上show ip interface brief确认子接口状态在交换机上show interface trunk确认 trunk 链路是 trunking 状态。show vlan确认端口划到了正确的 VLAN。5.4 现象FTP 客户端 PASV 模式连不上数据连接原因服务器被动模式返回的 IP 可能是内网地址如果客户端和服务器不在同一网段或者服务器防火墙没放行被动端口范围数据连接就建不起来。解决先用 PORT 模式测试如果 PORT 能通说明控制连接没问题问题在 PASV 端口。检查 Xlight 的被动模式端口设置确保防火墙放行。代码里解析 PASV 响应时打印出 IP 和端口确认解析正确。5.5 现象Socket 的 recv 一直阻塞程序卡死原因FTP 响应可能分多次到达一次recv读不全如果代码里只调一次recv就等下一句可能读到不完整响应。另一个原因是数据连接没关闭recv在等对端发数据。解决控制连接的recv要循环读到\r\n结尾或者用select设超时。数据连接读完文件后服务器会关闭连接recv返回 0 表示传输结束。如果一直不返回检查是不是命令发错了服务器在等后续命令。6. 进阶技巧用 Wireshark 抓包验证 FTP 主动被动模式差异报告里没提抓包但这是验证 Socket 编程最直接的手段。我一般会在客户端和服务器之间跑 Wireshark过滤ftp或tcp.port 21然后对比 PORT 和 PASV 两种模式的报文差异。主动模式下客户端发PORT 192,168,1,100,10,20服务器从 20 端口主动连客户端的 10*25620 端口。抓包能看到服务器发起的 SYN 包方向是服务器→客户端。被动模式下客户端发PASV服务器回227 Entering Passive Mode然后客户端发 SYN 连服务器指定端口方向是客户端→服务器。这个方向差异就是「主动」和「被动」名字的由来——主动是服务器主动连客户端被动是客户端主动连服务器。验证断点续传时抓包看REST命令后面的偏移量再对比RETR之后数据包的序列号确认是从指定偏移开始传的。如果序列号从 0 开始说明 REST 没生效常见原因是服务器不支持 REST 或者偏移量格式不对。还有一个技巧用ftp命令行客户端做对照测试。Windows 自带的ftp命令支持literal子命令发原始 FTP 命令比如literal PASV、literal REST 1024可以快速验证服务器端行为排除自己代码的问题。我每次写 FTP 客户端卡住的时候都会先用系统 ftp 跑一遍同样的命令序列确认服务器端没问题再回头查代码。从那以后我每次做网络实验都强制先画拓扑图、标好 IP 和 VLAN 规划再动手配命令配完先show一遍再测试连通性。Socket 编程也是先抓包确认协议交互正确再调代码逻辑。希望帮到你。本文还有配套的精品资源点击获取