计算机网络实验全链路:从Boson Netsim拓扑到SOCKET编程实战
简介这份华中科技大学计算机学院《计算机网络》实验报告面向高校计算机专业学生及网络工程初学者帮助读者系统掌握网络组建与协议配置的实践方法。报告围绕IP协议、网络层与数据链路层协议、子网划分、RIP与OSPF路由协议、路由器及二/三层交换机配置、VLAN划分和访问控制列表等核心知识点展开并借助Boson Netsim仿真软件完成组网、路由器配置等多项实验操作。资源包内含1个docx文档大小约215KB内容涵盖实验目的、拓扑结构、IP地址规划表、路由器命令行配置过程及连通性测试分析结构完整、步骤清晰。目前已有83人学习下载。读者可从中获得完整的实验流程参考、子网地址规划范例、RIP与OSPF配置命令以及网络设备调试思路适合作为课程实验报告撰写模板与网络配置实操的对照资料。1. 从一份实验报告拆起网络组建与 SOCKET 编程到底练什么很多人拿到《计算机网络》实验报告这类资源第一反应是“这不就是学生作业”。但如果你真在带新人、准备面试、或者想快速把网络基础捡回来这份东西的价值恰恰在于它把网络组建、IP 地址规划、RIP/OSPF 路由配置、VLAN 划分、ACL 访问控制、SOCKET 编程串成了一条完整的动手链路。它不是零散的知识点罗列而是一个从仿真拓扑到真实代码的闭环。这份资源适合三类人刚学完理论但没碰过命令行的学生、需要快速复习网络配置的初级工程师、以及想用 Boson Netsim 做实验验证的从业者。下面我按“先能跑起来、再搞懂为什么、最后避开坑”的顺序把这份报告里真正能复现的部分拆开讲。2. 实验环境与拓扑搭建Boson Netsim 5.31 的安装与 IP 规划2.1 为什么选 Boson Netsim 而不是 Packet Tracer这份报告明确写了仿真软件是 Boson Netsim 5.31操作系统 Windows 7。Boson 和 Packet Tracer 最大的区别在于Boson 的命令行更接近真实 Cisco IOS尤其是子接口、VTP 域、trunk 封装这些细节它不会像 Packet Tracer 那样帮你“自动补全”或“智能提示”。换句话说用 Boson 练出来的手感换到真机上翻车概率更低。但它的坑也很明显——版本老、界面丑、对 Windows 7 之后的系统兼容性一般。我一般会建议在虚拟机里装一个干净的 Windows 7 环境或者用兼容模式运行否则 Net Designer 画完拓扑转 Boson 的时候容易卡死。安装步骤不复杂但有几个参数必须注意# 安装前先确认系统已安装 .NET Framework 3.5 # Windows 7 默认自带Win10/11 需要手动开启 # 控制面板 - 程序 - 启用或关闭 Windows 功能 - 勾选 .NET Framework 3.5 # 安装 Boson Netsim 5.31 时安装路径不要带中文和空格 # 默认路径C:\Program Files\Boson Software\Boson NetSim for CCNP\ # 如果路径有中文Net Designer 保存的拓扑文件会无法加载逻辑说明Boson 的拓扑文件本质上是 XML 描述路径里的中文会导致解析失败这是血泪经验。参数上安装完成后先别急着画图进File - Preferences把Auto Save关掉否则你改错一个接口配置它自动保存后想回退都找不到后悔药。2.2 第一项实验的 IP 地址规划与子接口配置报告里第一项实验要求把 PC1、PC2 放在 192.168.0.0/24PC3~PC8 放在 192.168.1.0/24然后通过路由器子接口让三个网段互通。这里的关键不是“配通”而是理解为什么用子接口。路由器物理接口 fa0/1 只有一个但你要让它同时充当 192.168.1.1 和 192.168.2.1 两个网关就必须划子接口也就是单臂路由。具体配置我整理成可直接抄的版本# 进入路由器配置模式 Router enable Router# configure terminal # 配置 fa0/0 物理接口作为 192.168.0.0/24 的网关 Router(config)# interface fa0/0 Router(config-if)# ip address 192.168.0.1 255.255.255.0 Router(config-if)# no shutdown Router(config-if)# exit # 配置 fa0/1 物理接口不配 IP只用来承载子接口 Router(config)# interface fa0/1 Router(config-if)# no shutdown Router(config-if)# exit # 子接口 fa0/1.1 对应 VLAN 1网关 192.168.1.1 Router(config)# interface fa0/1.1 Router(config-subif)# ip address 192.168.1.1 255.255.255.0 Router(config-subif)# no shutdown Router(config-subif)# exit # 子接口 fa0/1.2 对应 VLAN 2网关 192.168.2.1 Router(config)# interface fa0/1.2 Router(config-subif)# ip address 192.168.2.1 255.255.255.0 Router(config-subif)# no shutdown Router(config-subif)# end逻辑说明no shutdown在物理接口和子接口上都要敲少一个都不通。参数上子接口编号.1和.2只是逻辑标识不要求与 VLAN ID 一致但为了排错方便我习惯让子接口号等于 VLAN 号。PC 端的默认网关必须指向对应子接口的 IP比如 PC3 的网关是 192.168.1.1PC4 的网关是 192.168.2.1。如果配完发现同网段能通、跨网段不通先show ip interface brief看子接口是不是 up再show running-config确认 IP 没敲错。提示Boson 里 PC 的 IP 配置在PC - Configure里手动填子网掩码和网关一个都不能漏。很多人只填 IP 不填网关然后抱怨跨网段不通这是最常见的翻车点。3. RIP 与 OSPF 路由协议配置从四台路由器到全网互通3.1 RIP 配置的 network 语句到底写什么第二项实验用了四台路由器通过串口两两相连要求配置 RIP 使各 PC 互通。报告里给的配置是network 192.168.0.0、network 192.168.4.0这种写法。这里有个容易混淆的地方RIP 的network命令后面跟的是主类网络号不是子网号。192.168.0.0/24 的主类网络是 192.168.0.0所以写network 192.168.0.0没问题但如果你写network 192.168.0.2Boson 会直接报错。四台路由器的 RIP 配置我按报告整理如下# Router1 的 RIP 配置 Router1 enable Router1# configure terminal 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 # Router2 的 RIP 配置 Router2 enable Router2# configure terminal Router2(config)# router rip Router2(config-router)# network 192.168.1.0 Router2(config-router)# network 192.168.4.0 Router2(config-router)# network 192.168.6.0 Router2(config-router)# end # Router3 的 RIP 配置 Router3 enable Router3# configure terminal Router3(config)# router rip Router3(config-router)# network 192.168.2.0 Router3(config-router)# network 192.168.5.0 Router3(config-router)# network 192.168.6.0 Router3(config-router)# network 192.168.7.0 Router3(config-router)# end # Router4 的 RIP 配置 Router4 enable Router4# configure terminal Router4(config)# router rip Router4(config-router)# network 192.168.3.0 Router4(config-router)# network 192.168.7.0 Router4(config-router)# end逻辑说明每台路由器只需要宣告自己直连的网段RIP 会自动交换路由信息。参数上串口时钟频率clock rate 64000必须在 DCE 端配置报告里四台路由器的 s0、s1 都配了cl ra 64000说明实验拓扑里每台路由器都承担了 DCE 角色。如果你不配时钟频率串口协议状态会一直是 down这是思考题里问的“不设置时钟频率会怎样”的标准答案。3.2 OSPF 配置与 RIP 的差异报告思考题要求把 RIP 重配置为 OSPF。OSPF 的配置逻辑和 RIP 不同它用network命令时反掩码是必须的而且可以精确到接口。我一般会这样写# Router1 的 OSPF 配置 Router1(config)# router ospf 1 Router1(config-router)# network 192.168.0.0 0.0.0.255 area 0 Router1(config-router)# network 192.168.4.0 0.0.0.255 area 0 Router1(config-router)# network 192.168.5.0 0.0.0.255 area 0 Router1(config-router)# end逻辑说明router ospf 1里的 1 是进程号只在本机有效不同路由器可以用不同进程号。area 0是骨干区域所有非骨干区域必须与它相连。反掩码0.0.0.255对应255.255.255.0别写反了。OSPF 收敛比 RIP 快但在 Boson 5.31 里OSPF 的邻居建立有时候需要手动clear ip ospf process才能生效这是仿真软件的老毛病真机上一般不会遇到。注意RIP 和 OSPF 不要同时在一台路由器上配除非你在做重分发实验。报告里是分开做的先 RIP 后 OSPF每次切换前建议no router rip清掉旧配置否则路由表里会出现冲突条目。4. VLAN 划分与 Trunk 配置单臂路由让两个 VLAN 互通4.1 VTP 域与 VLAN 创建第三项实验要求把交换机 2、3、4 组成的网络划分成两个 VLANPC3、PC5、PC7 在 VLAN 2PC4、PC6、PC8 在 VLAN 3。报告里用的是 VTP 域来统一管理 VLAN 信息。VTP 的好处是你只需要在一台交换机上创建 VLAN同域的其他交换机会自动学习。但坑也在这里——VTP 有服务器模式、客户端模式、透明模式如果角色配错VLAN 信息同步不过去。# 在 switch2、switch3、switch4 上统一配置 VTP 域 Switch# vlan database Switch(vlan)# vtp domain class Switch(vlan)# vlan 2 name Class1 Switch(vlan)# vlan 3 name Class2 Switch(vlan)# exit # 将端口划分到对应 VLAN Switch# configure terminal Switch(config)# interface fa0/4 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 2 Switch(config-if)# exit Switch(config)# interface fa0/5 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 3 Switch(config-if)# end # 验证 VLAN 配置 Switch# show vlan逻辑说明vtp domain class里的class是域名三台交换机必须完全一致大小写敏感。vlan database模式在 Boson 里是独立的退出时要用exit而不是end否则配置不保存。show vlan可以看端口和 VLAN 的对应关系如果端口没出现在 VLAN 列表里说明switchport access vlan没生效。4.2 Trunk 链路与单臂路由的 dot1q 封装交换机之间需要配 Trunk 才能传递多个 VLAN 的流量。报告里 switch2 的 fa0/2 和 fa0/3 配了 trunk封装 dot1q。这里的关键参数是switchport trunk encap dot1q如果不敲Boson 默认可能是 ISL而路由器子接口的encap dot1q必须和交换机侧一致否则 VLAN 流量过不去。# switch2 的 Trunk 配置 Switch# configure terminal Switch(config)# interface fa0/2 Switch(config-if)# switchport mode trunk Switch(config-if)# switchport trunk encap dot1q Switch(config-if)# exit Switch(config)# interface fa0/3 Switch(config-if)# switchport mode trunk Switch(config-if)# switchport trunk encap dot1q Switch(config-if)# end # 路由器子接口封装 dot1q Router(config)# interface fa0/1.1 Router(config-subif)# encapsulation dot1q 1 Router(config-subif)# ip address 192.168.1.1 255.255.255.0 Router(config-subif)# exit Router(config)# interface fa0/1.2 Router(config-subif)# encapsulation dot1q 2 Router(config-subif)# ip address 192.168.2.1 255.255.255.0 Router(config-subif)# end逻辑说明encapsulation dot1q后面的数字是 VLAN ID必须和交换机上创建的 VLAN 号对应。报告里写的是encap dot1q 1和encap dot1q 2但前面 VLAN 创建时用的是 VLAN 2 和 VLAN 3这里存在不一致。实际配置时子接口的 dot1q 编号要和端口所属 VLAN 一致否则流量会被丢弃。我一般会先用show vlan确认 VLAN ID再配子接口。提示单臂路由的带宽瓶颈在路由器物理接口因为所有 VLAN 间流量都走这一条线。实验环境无所谓真机上如果 VLAN 间流量大建议用三层交换机做 SVI而不是单臂路由。5. ACL 访问控制与 SOCKET 编程从命令行到代码的跨越5.1 标准 ACL 的 in 和 out 方向第四项实验要求用 ACL 让 PC1 无法访问其他 PC也不能被其他 PC 访问。报告里用了access-list 10 deny host 192.168.0.0 0.0.0.255和access-list 10 permit any然后应用在interface e0的in方向。这里有两个坑第一host 192.168.0.0后面跟0.0.0.255是通配符掩码不是子网掩码第二标准 ACL 应该尽量应用在靠近源的地方in方向表示从 PC1 进入路由器的流量被过滤。# 在 Router1 上创建标准 ACL Router1# configure terminal Router1(config)# access-list 10 deny 192.168.0.0 0.0.0.255 Router1(config)# access-list 10 permit any # 应用到接口 Router1(config)# interface e0 Router1(config-if)# ip access-group 10 in Router1(config-if)# end # 验证 ACL Router1# show access-lists逻辑说明deny 192.168.0.0 0.0.0.255匹配整个 192.168.0.0/24 网段permit any放行其他所有流量。ACL 末尾默认隐含deny any所以如果你只写 deny 不写 permit所有流量都会被阻断。ip access-group 10 in表示在接口入方向应用 ACL 10。如果 PC1 还是能 ping 通其他 PC检查 ACL 是否应用在了正确的接口和方向。5.2 SOCKET 编程的 FTP 客户端实现要点实验二的 SOCKET 编程要求用 C 写一个 FTP 客户端支持主动/被动模式、匿名/用户名登录、目录浏览、上传下载。报告里提到用了 Visual Studio 和 Xlight FTP 服务器。这部分没有给完整源码但根据实验要求我补全一个最小可用的连接和登录流程// FTP 客户端连接与登录核心逻辑简化版 #include winsock2.h #include ws2tcpip.h #include iostream #include string #pragma comment(lib, ws2_32.lib) int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), wsaData); // 1. 创建控制连接 socket SOCKET ctrlSock socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in serverAddr; serverAddr.sin_family AF_INET; serverAddr.sin_port htons(21); // FTP 默认端口 inet_pton(AF_INET, 192.168.1.100, serverAddr.sin_addr); // 2. 连接 FTP 服务器 if (connect(ctrlSock, (sockaddr*)serverAddr, sizeof(serverAddr)) SOCKET_ERROR) { std::cerr 连接失败错误码 WSAGetLastError() std::endl; return -1; } // 3. 接收欢迎信息 char buf[1024]; recv(ctrlSock, buf, sizeof(buf), 0); std::cout 服务器响应 buf std::endl; // 4. 发送用户名 std::string user USER 12345\r\n; send(ctrlSock, user.c_str(), user.length(), 0); recv(ctrlSock, buf, sizeof(buf), 0); // 5. 发送密码 std::string pass PASS 12345\r\n; send(ctrlSock, pass.c_str(), pass.length(), 0); recv(ctrlSock, buf, sizeof(buf), 0); std::cout 登录响应 buf std::endl; // 6. 进入被动模式PASV std::string pasv PASV\r\n; send(ctrlSock, pasv.c_str(), pasv.length(), 0); recv(ctrlSock, buf, sizeof(buf), 0); std::cout PASV 响应 buf std::endl; // 后续解析 PASV 返回的 IP 和端口建立数据连接... closesocket(ctrlSock); WSACleanup(); return 0; }逻辑说明FTP 协议用两个连接——控制连接端口 21传命令数据连接传文件。USER和PASS命令后面必须跟\r\n这是 FTP 协议的硬性要求少一个字符服务器就不认。PASV命令让服务器返回一个临时端口客户端再连过去传数据。参数上htons(21)把端口转成网络字节序inet_pton把 IP 字符串转成二进制。如果连接失败先检查 FTP 服务器是否启动、防火墙是否放行 21 端口。注意主动模式PORT下是服务器主动连客户端的数据端口如果客户端在 NAT 后面服务器连不进来。被动模式PASV由客户端发起数据连接更适合有 NAT 的场景。报告里两种模式都要求支持实际写代码时建议默认用 PASV。6. 避坑与排查那些实验报告里没写但一定会遇到的问题6.1 现象PC 能 ping 通网关但 ping 不通其他网段原因路由器的子接口没有配encapsulation dot1q或者 dot1q 编号和交换机 VLAN ID 不一致。Boson 里子接口如果不封装 dot1q物理接口收到的带标签帧会被直接丢弃。解决进子接口show running-config确认encapsulation dot1q后面的数字然后show vlan看交换机侧 VLAN ID两边必须一致。改完后no shutdown再shutdown一次子接口让配置重新生效。6.2 现象RIP 配完了路由表里没有学到对方网段原因network命令宣告的网段写错了或者串口时钟频率没配导致链路 down。RIP 只宣告主类网络如果你写network 192.168.4.1Boson 会报错。解决show ip route看路由表show interface s0看串口状态。如果串口是 down检查 DCE 端有没有clock rate 64000。如果路由表里只有直连网段检查network命令是否覆盖了所有直连网段。6.3 现象VLAN 间 PC 不能互通但同 VLAN 内可以原因单臂路由的子接口没配 IP或者 Trunk 链路没放行对应 VLAN。报告里 switch2 的 fa0/2 和 fa0/3 配了 trunk但如果你漏了switchport trunk encap dot1qVLAN 流量过不去。解决show interface fa0/2 switchport看 trunk 状态show vlan看端口是否在正确的 VLAN 里。路由器侧show ip interface brief确认子接口 up。6.4 现象ACL 配了但没生效原因ACL 应用在了错误的接口或方向或者 ACL 编号和协议不匹配。标准 ACL 编号范围是 1-99扩展 ACL 是 100-199。报告里用的是 10属于标准 ACL。解决show access-lists看匹配计数show ip interface e0看ip access-group是否应用。如果计数一直是 0说明流量没经过这个接口或者方向反了。6.5 现象SOCKET 程序连接 FTP 服务器超时原因FTP 服务器没启动、端口被占用、或者客户端和服务器不在同一网段。报告里用的是 Xlight FTP 服务器默认端口 21。解决先在服务器本机用telnet 127.0.0.1 21测试端口是否开放。如果本机通、远程不通检查防火墙。如果connect返回SOCKET_ERROR用WSAGetLastError()拿错误码10061 表示连接被拒绝10060 表示超时。7. 进阶技巧用 Wireshark 抓包验证 FTP 主动与被动模式实验报告里只要求“实现”主动和被动模式但没要求验证。我一般会加一步用 Wireshark 抓包看PORT和PASV命令的实际交互过程。这是把黑匣子打开的最快方式。具体操作在运行 FTP 客户端的机器上打开 Wireshark选择正确的网卡过滤条件写ftp。然后分别用主动模式和被动模式连接一次观察控制连接的命令序列。模式客户端命令服务器响应数据连接方向主动 PORTPORT 192,168,1,100,10,10200 PORT command successful服务器 - 客户端被动 PASVPASV227 Entering Passive Mode (192,168,1,100,10,10)客户端 - 服务器主动模式下客户端用PORT命令告诉服务器“你来连我”后面跟的 6 个数字是 IP 和端口。被动模式下服务器用227响应告诉客户端“你来连我”括号里的 6 个数字同样是 IP 和端口。Wireshark 里能看到PORT命令发出后服务器立刻发起一个 SYN 包到客户端指定的端口这就是主动模式的数据连接。我还会在代码里加一个校验步骤下载完成后计算文件的 MD5和服务器端对比。报告里第三级要求“具备对已下载完的文件进行校验的能力”MD5 是最简单的实现方式。C 里可以用 Windows CryptoAPI或者直接调certutil -hashfile 文件名 MD5。# 下载完成后校验文件完整性 certutil -hashfile downloaded_file.zip MD5 # 对比服务器端生成的 MD5 值从那以后我每次做网络实验都会在配完路由协议后先show ip route确认路由表再ping验证连通性最后才去配 ACL 和 VLAN。顺序反了排错成本会翻倍。希望帮到你。本文还有配套的精品资源点击获取