Wireshark抓包分析交换机工作原理

2023-11-13

实验名称

交换机工作原理

实验目的

1、熟悉Linux虚拟网络环境;

2、熟悉Linux中network namespace的基本操作;

3、熟悉Linux中虚拟以太网设备Tap和veth pair的基本操作;

4、熟悉Linux中Bridge设备的基本操作;

5、熟悉Linux中网络分析软件Wireshark的基本操作;

6、观察交换机(Bridge)的工作过程,分析并掌握交换机的工作原理;

7、观察交换机中交换表的变化,分析并掌握交换机的自学习功能和原理;

8、观察Wireshark截获的以太网数据帧,分析并理解以太网的帧格式。

实验要求

1、根据实验需要,搭建实验环境;建立或修改虚拟实验网络;

2、按照实验步骤,认真完成实验;采取截图、拍照等形式记录实验结果;

3、依据课本和课堂讲解,详细分析实验结果、验证理论知识;

4、认真完成实验报告,按时提交实验指导老师。

实验环境

1、操作系统:Linux操作系统,要求内核支持Tun模块、Vlan模块等,本实验在CentOS7操作系统中测试通过;

2、操作权限:部分操作需具有root权限;

3、应用软件:需安装命令行工具:tunctl、vconfig等;需安装编辑工具gedit或其它文本编辑工具;需安装网络分析软件Wireshark及其依赖软件;其它常用必备的应用软件;

4、实验网络拓扑:利用Linux命令或编辑执行脚本,构建虚拟实验网络拓扑如图所示:


5、搭建网络拓扑结构的脚本如下:

#!/bin/sh

#创建veth pair
ip link add tap1 type veth peer name tap1_peer
ip link add tap2 type veth peer name tap2_peer
ip link add tap3 type veth peer name tap3_peer
ip link add tap4 type veth peer name tap4_peer
#创建namespace
ip netns add ns1
ip netns add ns2
ip netns add ns3
ip netns add ns4
#把tap迁移到namespace
ip link set tap1 netns ns1
ip link set tap2 netns ns2
ip link set tap3 netns ns3
ip link set tap4 netns ns4
#创建Bridge
brctl addbr br1
#把相应tap添加到Bridge中
brctl addif br1 tap1_peer
brctl addif br1 tap2_peer
brctl addif br1 tap3_peer
brctl addif br1 tap4_peer
#配置相应tap的IP地址
ip netns exec ns1 ip addr add local 192.168.50.1/24 dev tap1
ip netns exec ns2 ip addr add local 192.168.50.2/24 dev tap2
ip netns exec ns3 ip addr add local 192.168.50.3/24 dev tap3
ip netns exec ns4 ip addr add local 192.168.50.4/24 dev tap4
#将Bridge及所有tap状态设置为up
ip link set br1 up
ip link set tap1_peer up
ip link set tap2_peer up
ip link set tap3_peer up
ip link set tap4_peer up
ip netns exec ns1 ip link set tap1 up
ip netns exec ns2 ip link set tap2 up
ip netns exec ns3 ip link set tap3 up
ip netns exec ns4 ip link set tap4 up

实验结果及分析

预备工作:

1、tun/tap模块验证

①使用modinfo tun命令验证是否安装了tun/tap模块。安装后的提示信息如下:

 

 如果没有安装tun模块,需要先安装tun模块。

②加载tun模块:首先使用 lsmod | grep tun 命令验证是否已经加载tun模块,如果没有显示信息,说明tun未加载,需要使用modprobe tun命令加载模块。

tun模块已经加载。

2、tunctl命令工具的安装

①图形界面安装

②命令行安装

首先,添加tunctl的yum源文件

[willy@localhost ~]$ vim /etc/yum.repos.d/nux-misc.repo

[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

然后,用 yum repolist 加载yum源,使用yum --enablerepo=nux-misc install tunctl命令安装tunctl,需要使用root权限。使用su命令切换root权限。

3、wireshark安装

Wireshark是网络封包分析软件。

图形界面安装:

yum命令安装:

搭建网络拓扑结构并验证:

1、执行脚本文件,创建网络拓扑

2、验证网桥br1、ns1、ns2、ns3、ns4的接口状态:

(1)使用brctl show命令查看br1接口状态:

(2)使用ifconfig -a命令查看ns1、ns2、ns3、ns4的接口状态,ifconfig -a命令需要在ns内执行,用ip netns exec [namespace名]完成。

① ns1接口状态:

② ns2接口状态:

③ ns3接口状态:

④ ns4接口状态:

3、ARP缓存表的管理

①在ns1中执行arp -a命令查看ARP缓存表,由于ns1没有发过arp请求,所以缓存表为空。

②在ns1中ping ns2,在查看ARP缓存表,发现ns1缓存表多了一行ip地址与MAC地址的映射记录。

同样,ns2也会记录ns1的ip地址和MAC地址的映射。

③在ns中执行arp -d ip地址删除对应的arp记录。

4、在ns中启动wireshark抓包分析软件,监听ns中的网络接口。以ns1为例:

①执行ip netns exec ns1 wireshark &命令启动wireshark。

②在wireshark图形界面启动对tap网络接口的监听。

5、使用brctl showmacs br1命令查看交换机(即网桥br1)的表目。

上面的四个端口对应tap_peer所在端口。

Wireshark抓包分析交换机工作原理

1、在ns1中ping ns2的ip地址(192.168.50.2),如图:

2、查看wireshark在各个ns中的抓包情况

① ns1抓包情况:

② ns2抓包情况:

③ ns3抓包情况:

④ ns4抓包情况:

3、观察交换机表目变化情况

①ns1 ping ns2后尽快查看交换机表目的情况,如下:

②大约过5分钟后,再查看交换机表目,发现tap1和tap2的MAC地址消失了,表示交换机支持逆学习,也支持老化时间,一段时间后,交换机会自动清除最近未使用的MAC地址映射,为新的MAC地址映射腾出空间。

4、ns1 ping ns2过程分析

(1)首先ns1封装了MAC帧数据部分,tap1将数据部分加上MAC帧的首部封装成了ARP帧,从tap1端口发出,被wireshark软件抓取。

(2)然后,数据帧通过tap1_peer端口进入交换机(网桥),交换机发现表目中没有记录tap1的MAC地址,就将tap1的MAC地址记录下来,端口为1。(记录源地址)

(3)之后,交换机表目中也没有tap2的MAC地址,就需要向所有端口广播ARP请求。所以ns3、ns4的tap3和tap4也收到了广播帧,被wireshark抓取。但是tap3、tap4并不符合目的MAC地址,广播帧被丢弃。

(4)而ns2的tap2收到广播帧后,被wireshark抓取,且发现目的MAC就是自己,即响应该请求。由于ns2也不知道tap1的MAC地址,也需要发送广播帧,被wireshark抓取。之后用过tap2_peer端口进入交换机,交换机随即记录tap2的MAC地址,端口为2。

(5)交换机收到广播帧后,查找交换表目,发现tap1的MAC地址端口为1,就从端口1转发给tap1,不再进行广播,所以tap3、tap4并不会收到该响应帧,wireshark也抓取不到响应帧。

(6)tap1收到回应的ARP请求后,给予tap2回应,双方确认后各自的ip地址和对应的MAC地址后开始通信。

5、以ns1中的ARP协议的数据包为例,分析数据包封装的内容:

①前14字节:

②后28字节:

③根据MAC帧结构,数据部分后面应该还有4字节的帧校验序列(FCS),但是wireshark在抓取包后将这4字节的FCS去掉了,所以没有显示。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wireshark抓包分析交换机工作原理 的相关文章

  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • NUMA 在虚拟内存中是如何表示的?

    有许多资源 https en wikipedia org wiki Non uniform memory access从硬件角度描述NUMA的架构性能影响 http practical tech com infrastructure num
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 为什么我可以在 /proc/pid/maps 输出中看到几个相同的段?

    测试在32位Linux上进行 代码如下 int foo int a int b int c a b return c int main int e 0 int d foo 1 2 printf d n d scanf d e return
  • 无法在 Perl 中找到 DBI.pm 模块

    我使用的是 CentOS 并且已经安装了 Perl 5 20 并且默认情况下存在 Perl 5 10 我正在使用 Perl 5 20 版本来执行 Perl 代码 我尝试使用 DBI 模块并收到此错误 root localhost perl
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • 后台分叉无法正常工作[重复]

    这个问题在这里已经有答案了 我运行这个程序 在前景和背景中 int main int pid printf App Start pid d n getpid while 1 pid fork if pid 0 printf Child n
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen

随机推荐

  • 文件的读写基本操作

    一 文件是计算机中数据持久化存储的表现形式 读写文件标准操作格式1 1 打开文件 file1 open 文件名 读写模式 2 操作文件 3 关闭文件 file1 close 文件操作完毕后必须关闭 否则长期保持对文件的连接状态 造成内存溢出
  • 龙书笔记(13)

    chap 13 地形绘制基础 主要是创建一个 地形类 Terrain 1 高度图 其实是一个数组 每个元素都指定了地形方格中某一顶点的高度值 每个元素只分配了1个字节的存储空间 当加载到程序时 重新分配 浮点型 或 整型 数据来存储这些高度
  • CentOS7开机时的菜单选项及时间的修改

    转载记录 以防丢失 一 在CentOS更新后 并不会自动删除旧内核 所以在启动选项中会有多个内核选项 可以手动使用以下命令删除多余的内核 正常下 第一个选项正常启动 第二个选项急救模式启动 系统出项问题不能正常启动时使用并修复系统 1 查看
  • 记录一下树莓派打内核补丁cjktty的天坑

    首先cjktty的下载地址在此 大家根据自己的linux内核去选择 https github com zhmars cjktty patches 下载好了补丁文件之后 需要下载完整的linux内核 是的完整的 https github co
  • ahut 月赛1

    心得 一点一点理解 对于一段要学习的代码 跟着写下来 理解一点写一点 对于一道题目 用记事本 看题目 看一句题目 用自己的话概括一句 写在记事本上 并将自己的 想法一并写下来 这样做下来 心会很平静 你会发现 理解一段代码并不费力 解决一道
  • Cookie、cookie与session区别

    Cookie Cookie 有时也用其复数形式 Cookies 类型为 小型文本文件 是某些网站为了辨别用户身份 进行Session跟踪而储存在用户本地终端上的数据 通常经过加密 由用户客户端计算机暂时或永久保存的信息 Cookie有什么用
  • 一个字节造成的巨大性能差异——SQL Server存储结构

    今天同事问了我一个SQL的问题 关于SQL Server内部存储结构的 我觉得挺有意思 所以写下这篇博客讨论并归纳了一下 问题是这样的 首先我们创建两张表 一张表的列长度是4039字节 另一张表的长度是4040字节 他们就只有一个字节的差距
  • 阿里巴巴 cola设计架构

    https github com alibaba COLA
  • leetcode 21 合并两个有序链表 (c++和python)

    目录 题目描述 解题思路 C 代码 python代码 题目描述 将两个有序链表合并为一个新的有序链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 示例 输入 1 gt 2 gt 4 1 gt 3 gt 4 输出 1 gt 1 gt
  • golang的chan(管道)

    golang的chan翻译成中文就是管道 顾名思义 就是管道的一端用来读 另一端用来写 这与write和read函数的性质是非常相似的 比如说管道中没数据 就会发生读阻塞 管道中数据是满的 就会发生写阻塞 又类似生产者和消费者 也就是必须有
  • 大学生python实验心得体会_大学生实训心得体会3篇

    转眼间为期两个星期的实训就结束了 但是安利公司的物流配送 黄埔港 益邦物流公司 南沙港以及学校里面的航海模拟实验中心 轮机实训实验楼这些实训过程仍历历在目 以下是小编整理的大学生实训心得体会 欢迎阅读 大学生实训心得体会1 通过实训中心老师
  • 微信小程序-flex布局:垂直、水平方向-自动填充满剩余空间

    在微信小程序项目中经常需要将水平或垂直方向分成两大部分 一部分内容宽度或高度固定 剩余的一部分需填充满剩余空间 那么 该怎么快速解决这类布局 效果图如下 垂直方向 水平方向 我个人比较喜欢使用flex布局 面对此类布局 最先想到的也是fle
  • 【HDLBits 刷题 12】Circuits(8)Finite State Manchines 27-34

    目录 写在前面 Finite State Manchines 2014 q3c m2014 q6b m2014 q6c m2014 q6 2012 q2fsm 2012 q2b 2013 q2afsm 2013 q2bfsm 写在前面 HD
  • 类和对象笔记(1.类和对象的关系,类基本架构)

    梳理C 基础 纯干货或许会很干燥 gt gt gt gt gt 分界线 类 指对象的类型 类代表了一批对象的共性和特征 抽象的 不占用内存 对象 类的具体实例 具体的 占用储存空间 类是对象的抽象 对象是类的具体实例 可以同结构体进行比较学
  • eclipse常用插件之FindBugs

    1 简介 FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具 FindBugs通过检查类文件或 JAR文件 将字节码与一组缺陷模式进行对比从而发现代码缺陷 完成静态代码分析 FindBugs既提供可视化 UI 界面 同
  • 打印金字塔代码

    Description 输入n值 打印下列形状的金字塔 其中n代表金字塔的层数 Input 输入只有一个正整数n Output 打印金字塔图形 其中每个数字之间有一个空格 include
  • JsonMap对象的获取与前台浏览器报错Uncaught TypeError: Cannot read property '0' of undefined

    JsonMap对象的获取与前台浏览器报错Uncaught TypeError Cannot read property 0 of undefined 后台问题在浏览器报错 很多时候在我们遇到浏览器报错的时候都会去前端js里去找错 但有时候确
  • 一起学nRF51xx 15 - spis

    前言 SPIS是一个从SPI 它与EasyDMA一起支持与外部的主SPI超低功耗串行通信 EasyDMA使得SPIS交互无需CPU的介入 在提高数据传输效率的同时还减轻了CPU的负担 SPIS即是SPI从模式 但它比stm32中直接将spi
  • Android开发:最全面、最易懂的Android屏幕适配解决方案

    前言 Android的屏幕适配一直以来都在折磨着我们Android开发者 本文将结合 Google的官方权威适配文档 郭霖 Android官方提供的支持不同屏幕大小的全部方法 Stormzhang Android 屏幕适配 鸿洋 Andro
  • Wireshark抓包分析交换机工作原理

    实验名称 交换机工作原理 实验目的 1 熟悉Linux虚拟网络环境 2 熟悉Linux中network namespace的基本操作 3 熟悉Linux中虚拟以太网设备Tap和veth pair的基本操作 4 熟悉Linux中Bridge设