【计算机网络】实验6:IPV4地址的构造超网及IP数据报

news2025/2/5 15:47:04

实验 6:IPV4地址的构造超网及IP数据报

一、 实验目的

  1. 加深对IPV4地址的构造超网(无分类编制)的了解。

  2. 加深对IP数据包的发送和转发流程的了解。

二、 实验环境

• Cisco Packet Tracer 模拟器

三、 实验内容

1、了解IPV4地址的构造超网(无分类编制)

(1) 第一步:构建网络拓扑:拖动五个主机,两个路由器,一个交换机,使用自动连接类型将其连接起来。其中路由器使用2911。如图1所示。

img

图 1 构建网络拓扑

(2) 第二步:设置各个主机的IP地址,以及子网掩码,需要按照下图给出的要求来设计,题目要求如图2所示。

img

图2 配置IP及子网掩码的要求

(3) 第三步:先来分析一下最上面的网络,后面的25表示前面25个bit表示网络前缀,所以就可以得出最小的地址,也就是192.168.16.0,这个作为网络地址,而最大的地址就是192.168.16.127,这个最大的地址就作为广播地址。同理我们也可以由此原理得出各个网络的可分配给主机或路由器的地址的范围,以及求出对应的子网掩码。如图3所示。

img

图3 计算各个网络IP以及子网掩码

(4) 第四步:开始为各个主机以及路由器分配IP地址以及子网掩码。IP地址可以从可选范围任选一个,子网掩码使用上面计算出来的,填写一个如图4所示。全部设置完并且写好注释,如图5所示。

img

图4 填写主机IP地址以及子网掩码

img

图5 配置IP及子网掩码和路由器

(5) 第五步:此时处于同一个网络中的各个主机应该是可以互相进行通信的,因为都设置为了正确的IP地址以及子网掩码。使用左上角的主机ping一下IP地址为192.168.0.2的主机。如图6所示。如果不指定默认网关的话,那么左上角的主机不可以与最下方的网络中的其中任何一个主机进行通信,因为不知道该怎么从路由器转发出去。

img

图6 处于同一网络中的主机可以ping通

(6) 第六步:为主机配置好了默认网关之后,在使用左上角的主机去ping一下下面的任何主机中的一个。比如说ping 192.168.16.129。如图7所示。之所以第一次请求超时,是因为上面的主机首先判断发送过去的目的地址和自己是不是在同一个网络,所以上方主机就会把数据包交给自己网络的默认路由器(也就是默认网关所指向的那个路由器),但是找不到这个IP地址对应的MAC地址,所以就会发送一个ARP的广播请求来获得这个MAC地址,而路由器在收到这个请求之后,发现是传给自己的某一个端口的,然后路由器发回去一个单波响应把自己的MAC地址发送回去,同理路由器转发的时候,也是这个原理。

img

图7 配置完默认网关之后可以通信

(7) 第七步:在配置好了默认网关之后,使用ping指令,让左边的主机去ping一下最右边的主机,ping 192.168.16.198。如图8所示。

img

图8 此时计算机之间不能互通

(8) 第八步:可以看到上图收到的响应是来自IP地址为192.168.16.126的路由器,也就是说原主机发送的数据包先是转发到了路由器,然后路由器向原主机报告说目的主机不可以到达。之所以说路由器不知道如何转发,是因为路由器的路由表里面并没有存储相关信息。

(9) 第九步:查看路由器的路由表。如图9所示。这里面的6条数据,分别是和路由器直接相连的三个网络,以及记录了自己的三个接口的IP地址,之所以原主机发送请求给最右边的主机不成功,正是因为左边的路由器根本就不知道最右边的网络的存在,所以不知道如何转发。

img

图9 路由器的路由表

(10) 第十步:给最左边的路由器添加一个静态路由。如图10所示。

img

图9 为路由器添加静态路由

(11) 第十一步:此时再查看路由的路由表,如图10所示。就可以发现多了一条记录,此时路由器就知道当目的主机在另一个网络时,就知道下一跳该往哪里走了。

img

图10 路由器知道了另一个网络的路线

(12) 同理给右侧的路由也添加两条静态路由,添加的具体数据信息,上面的图片中已经给出,其中上面的那个静态路由告诉这个路由器怎么到达左上方的那个网络,而下面哪一个的静态路由是告诉怎么去左下方的网络。添加如图11所示。

img

图11 为右侧的路由器添加静态路由

(13) 为路由器添加好了所有的静态路由之后,理论上这个网络拓扑中的所有主机之间都是可以正常通信的,下面就来测试一下,使用左上角的主机ping一下最右边的主机,即ping 192.168.16.198,如图12所示。之所以会有两次超时的请求,也是因为ARP广播请求以及接收到的单波响应导致的。如果相同的指令在执行一次的话,就不会出现超时的情况。

img

图12 左上角主机成功ping通右边主机

(14) 可以发现右边的路由器的两个静态路由的下一跳地址是相同的,因此就可以实现路由聚会,也就是构造超网,路由聚合就是找到两个目的网络的共同前缀,路由聚合之后,如图13所示。此时路由器转发相当于是到达了一个更大的地址块,而不是到达两个分散的地址块。

img

图13 两个静态路由进行路由聚合

(15) 此时使用最右边的主机去ping一下左边的两台主机中的一个,如图14所示。成功ping通说明此次路由聚合是成功的。

img

图14 主机之间成功通信

2、IP数据报的发送和转发过程

(1) 第一步:构建网络拓扑:在逻辑工作空间上,拖动六个普通计算机和三个交换机以及两个路由器,选择自动连接把设备连接起来,并设置好IP,并在计算机旁边写好IP注释。并写好MAC地址注释。如图15所示。

img

图 15 构建网络拓扑并写好注释

(2) 第二步:切换到仿真模式,并且过滤协议,只保留ARP协议和ICMP协议。并且让左上角的主机去给左下角的主机发送一个ICMP的报文,发送之前,将原主机以及经过的路由器和目的主机的三个ARP高速缓存表给打开,另外还需要调整三个ARP高速缓存表的列的位置,还需要打开路由器的路由表,如图16所示。之所以路由器的ARP表不是空的,是因为存放着三个端口的IP地址以及对应的MAC地址,所以不是空的。路由表的里的类型C表示直接连接,L表示自己接口的IP地址,S表示的是静态路由。

img

图16 查看ARP高速缓存表及路由表

(3) 第三步:为左上角的主机添加一个简单的PDU,让其发送给左下角的主机。并打开ICMP的数据报。如图17所示。

img

图17 ICMP数据报里面的内容

(4) 第四步:原主机要发送一个ICMP的数据报给目的主机,首先需要封装成IP数据报,源地址就填原主机的IP,目的地址就填目的主机的IP,然后还需要封装成以太网的帧才可以发送走,以太网帧的首部的原MAC地址填的是原IP地址对应的MAC地址,但是目的MAC地址是不可以直接填写目的主机的MAC地址,因为并不知道。原主机将目的主机的IP地址和自己的子网掩码相与,得到一个网络地址,然后查看自己的网络地址和自己的是不是一样,若是一样,则可以直接交付,如是不一样,则原主机需要通过自己网络中的一台路由器来帮助自己转发。所以以太网帧的首部的目的MAC地址就应该填写的是路由器的某个接口的MAC地址,此时原主机就会去自己的ARP高速缓存表里面查找,若是空的,就会发送一个ARP的广播请求,通过已知的路由器的某个接口的IP地址去找对应的MAC地址,找到了,才可以将真正的数据报传送过去。

(5) 第五步:点击捕获前进,路由器收到广播请求,路由器的ARP表多出来一条记录,如图18所示。这条记录了原主机的IP地址以及MAC地址的对应关系。

img

图18 路由器的ARP表多出来一条记录

(6) 第六步:再次点击捕获前进,发现路由器将单波响应明确的经过交换机发回给了原主机,这样原主机就得到了与自己所在网络相连的路由器的端口的IP地址以及MAC地址。如图19所示。此时原主机的封装成帧的以太网的首部的目的MAC地址就可以填写了。此时就可以发送ICMP数据报,打开ICMP数据报如图20所示。

img

图19 原主机ARP表多了一条记录

img图20 以太网帧封装成功

(7) 第七步:点击捕获前进,当ICMP报文到达路由器之后,开始解封装,主要目的是为了提取IP数据报中的目的IP地址,然后根据自己的路由表中所指向的下一跳进行转发,如果下一跳的地址为空,说明此时这个接口和目的主机属于同一个网络,可以直接交付,此时路由器将这个数据重新封装成帧,此时帧的原MAC地址就应该填写当前转发的这个端口的MAC地址,而目的MAC地址也是需要路由器去自己的ARP高速缓存表里查找的,若是没有,那么路由器就会把封装的数据帧(其中带有ICMP报文)丢弃。紧接着就会发送ARP广播请求来获取。

(8) 第八步:点击捕获前进,目的主机收到广播请求,目的主机的ARP表多出来一条记录,如图21所示。这条记录了路由器的某个端口的IP地址以及MAC地址的对应关系,以备之后需要使用。

img

图21 目的主机的ARP表多了一条记录

(9) 第九步:点击捕获前进,路由器收到目的主机发回来的单波响应,路由器的ARP表多出来一条记录,如图22所示。这条记录了目的主机的IP地址以及MAC地址的对应关系。但是最终目的主机还是没有收到ICMP报,因为路由器将其丢弃了。

img

图 22 路由器记录目的主机IP及MAC地址

(10) 第十步:当高速缓存表以及路由表里面都有相关的信息之后,此时再发送简单的PDU,就可以很顺利的到达目的主机了。

(11) 第十一步:至使用IP地址为192.168.16.2的主机ping一下IP地址为192.168.16.193的主机,如图23所示。总共ping了四次,相当于是发送了四个简单的PDU,前两次超时是因为经过了两个路由器,每个路由器的高速缓存表里面都没有相关信息,所以就丢了两次数据报,丢弃原理上面说了,所以就超时了两次。此时如果再ping一次的话,就不会出现超时的情况了。

img

图 23 前两次超时,后两次成功

(12) 第十二步:对于主机而言,使用命令arp -d就可以成功清除自己的ARP高速缓存表,如果是交换机的话,就进入命令行界面,然后输入enable进入特权指令,然后输入指令clear mac-a可以清除交换机的MAC地址表,路由器也可以使用指令enable首先进入特权模式,然后输入指令clear arp,此时清除了高速缓存表和MAC地址表之后,就可以在仿真模式下再做一遍,以便更好地查看转发流程。

四、 实验体会

1. 这两个实验的步骤都遵循构建网络拓扑、配置网络环境、跟踪数据包和查看数据包这四个规则。

2. Cisco Packet Tracer 模拟器可以清晰地展示 PDU 在传送过程,设备是如何处理 PDU 的。通过仿真传送过程,有助于我们理解有关的知识。

3. 在学习IPv4地址的构造与超网(无分类编制)时,我深刻体会到其灵活性和高效性。超网技术通过将多个小网络合并为一个更大的网络,从而减少路由表的大小,提高路由效率。这种方法打破了传统的类A、类B、类C的限制,使得IP地址的分配更加灵活,能够根据实际需求进行合理划分,我了解到,超网的关键在于CIDR(无类别域间路由选择),它允许使用任意长度的前缀,而不是固定的类划分。这种灵活性使得网络管理员能够根据流量需求动态调整网络结构,优化资源利用。此外,超网还可以有效减少IP地址的浪费,特别是在IP地址资源紧张的情况下,显得尤为重要。

4. 在学习IP数据包的发送和转发流程时,我对网络通信的复杂性和高效性有了更深刻的理解。数据包的发送始于源主机,通过协议栈逐层封装,最终形成IP数据包。这一过程中,数据包携带了源地址和目标地址,确保信息能够准确传递,转发流程则涉及路由器的关键作用。当数据包到达路由器时,路由器根据目标地址查找路由表,决定最佳转发路径。这一过程不仅依赖于静态路由配置,还可能涉及动态路由协议,确保网络在变化时依然高效运作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[CSP-J 2024] 小木棍

题目传送门 P11229 [CSP-J 2024] 小木棍 题解思路: 1、首先想到的是搜索,全排列填盒子的思想,小木棍数够组成某个数,把某个数放到盒子里,这里就是累加到sum上,还做了个剪枝,中间如果已经大于…

AI运用落地思考:如何用AI进行物料条码的识别及异常检测?

一、AI进行物料条码识别 (一)基于深度学习的方法 图像预处理 首先需要对包含物料条码的图像进行预处理。这包括调整图像的大小、对比度、亮度等操作,以便提高条码图像的清晰度和可识别性。例如,如果图像较暗,可以通过…

基于STM32的电能监控系统设计:ModBus协议、RS-485存储和分析电能数据(代码示例)

一、项目概述 随着智能电网的发展,电能管理的科学性与有效性变得越来越重要。本项目旨在设计并实现一个基于STM32103C8T6单片机的电能监控系统,该系统可以实时采集、存储和分析电能数据,帮助用户实现对电能的高效管理。 项目目标 实时监控&…

从数据库模型设计到字段设计,用自然语言实现数据库开发,颠覆传统的数据库开发模式

前言 在数据库开发过程中,开发者经常面临以下困扰: 1. 焦头烂额的数据库设计阶段 在设计数据库阶段,开发者需要全面考虑表结构、关系模型、字段定义等,稍有不慎就会影响后续的开发与维护,常常让人感到无从下手。 2…

51c自动驾驶~合集39

我自己的原文哦~ https://blog.51cto.com/whaosoft/12707676 #DiffusionDrive 大幅超越所有SOTA!地平线DiffusionDrive:生成式方案或将重塑端到端格局? 近年来,由于感知模型的性能持续进步,端到端自动驾驶受到了来…

docker安装hadoop环境

一、使用docker搭建基础镜像 1、拉取centos系统镜像 # 我这里使用centos7为例子 docker pull centos:7 2、创建一个dockerfiler文件,用来构建自定义一个有ssh功能的centos镜像 # 基础镜像 FROM centos:7 # 作者 #MAINTAINER hadoop ADD Centos-7.repo /etc/yum.re…

多级缓存设计实践

缓存是什么? 缓存技术是一种用于加速数据访问的优化策略。它通过将频繁访问的数据存储在高速存储介质(如内存)中,减少对慢速存储设备(如硬盘或远程服务器)的访问次数,从而提升系统的响应速度和…

状态模式S

状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态发生改变时改变其行为。这个对象被视为类型的有限状态机(Finite State Machine)。 在状态模式中,我们创建表示各种状态的对象和一…

数据结构 (23)并查集与等价类划分

一、并查集 并查集(Union-Find Set或Disjoint Set)是一种数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。它通常表示为森林,并用数组来实现(类似于二叉堆)。在并…

【Linux】开启你的Linux之旅:初学者指令指南

Linux相关知识点可以通过点击以下链接进行学习一起加油! 在 Linux 开发中,GDB 调试器和 Git 版本控制工具是开发者必备的利器。GDB 帮助快速定位代码问题,Git 则提供高效的版本管理与协作支持。本指南将简明介绍两者的核心功能与使用技巧&…

Python语法1

Python语法1 作者:王珂 邮箱:49186456qq.com 文章目录 Python语法1[TOC] 前言一、环境搭建1.1 安装Python解释器1.2 安装第三方包1.3 安装Pycharm1.4 虚拟环境 二、Python语法2.1 基础语法2.1.1 注释2.1.2 变量2.1.3 数据类型2.1.4 关键字和标识符 2.2…

普及组集训--图论最短路径

定义:表示顶点u到顶点v的一条边的权值(边权) 最短路径算法有常见的四种:floyd,dijkstra,Bellman-Ford,SPFA 不过Bellman-Ford并不常用,所以本文不提; 重点在于dijkstr…

蓝桥杯第 23 场 小白入门赛

一、前言 好久没打蓝桥杯官网上的比赛了,回来感受一下,这难度区分度还是挺大的 二、题目总览 三、具体题目 3.1 1. 三体时间【算法赛】 思路 额...签到题 我的代码 // Problem: 1. 三体时间【算法赛】 // Contest: Lanqiao - 第 23 场 小白入门赛 …

前缀和篇——繁星斗斗数字交织中,觅得效率明月辉光(1)

前言 在这片无边无际的数字海洋中,如何从中提取出有价值的讯息,成为了计算机科学中的一项重要课题。前缀和算法,作为一种巧妙的技术,恰如其名——通过计算序列中各个元素的前缀和,能够为我们提供一种高效的查询方式&a…

STM32 HAL库 + LM2904运算放大器 + ADC + VDO温度传感器:电路设计及代码实现

本文将详细介绍如何使用STM32F407的HAL库,实现通过单通道ADC采集VDO温度传感器的信号,并通过串口将采集到的温度值打印输出。具体流程包括:通过分压电阻将获得VDO温度传感器的分压电压,再利用运算放大器LM2904对信号进行放大&…

Python酷库之旅-第三方库Pandas(252)

目录 一、用法精讲 1191、pandas.tseries.offsets.BusinessMonthBegin.n属性 1191-1、语法 1191-2、参数 1191-3、功能 1191-4、返回值 1191-5、说明 1191-6、用法 1191-6-1、数据准备 1191-6-2、代码示例 1191-6-3、结果输出 1192、pandas.tseries.offsets.Busine…

【Linux服务器】CPU问题排查

概述 总体排查思路 总体观察,htop命令观察系统负载程度 检查CPU占用高的进程检查CPU硬件信息是否为问题根源从宏观到细节分析系统IO情况最后检查系统日志 排查思路 系统负载 通过htop命令查看系统负载,通过系统负载可以判断系统是否繁忙,主…

详解MyBatis之篇一

目录 MyBatis 定义 使用MyBatis操作数据库 创建项目 配置 演示 UserInfo.java UserInfoMapper UserInfoMapperTest 数据准备 自动生成测试类 运行结果 MyBatis 定义 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避…

编译器优化技术

方法内联 逃逸分析 公共子表达式消除 数据边界检查消除

汽车IVI中控开发入门及进阶(三十五):架构QML App Architecture Best Practices

在Qt/QML工程的架构中,架构很重要,虽然本身它有分层,比如QML调用资源文件(图片等)显示GUI界面,后面的CPP文件实现界面逻辑,但是这个分类还有点粗。在实际开发中,界面逻辑也就是基于类cpp的实现,也开始使用各种面向对象的设计模式,实现更加优秀的开发架构,这点尤其在…