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抓包分析交换机工作原理 的相关文章

  • 在 execl 在输出中不可见之前打印

    include
  • 内核驱动程序从用户空间读取正常,但写回始终为 0

    因此 我正在努力完成内核驱动程序编程 目前我正在尝试在应用程序和内核驱动程序之间构建简单的数据传输 我使用简单的字符设备作为这两者之间的链接 并且我已成功将数据传输到驱动程序 但我无法将有意义的数据返回到用户空间 内核驱动程序如下所示 in
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win

随机推荐

  • 文件的读写基本操作

    一 文件是计算机中数据持久化存储的表现形式 读写文件标准操作格式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设