百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

你见过物理层的以太网帧长什么样子吗?

toyiye 2024-06-30 10:05 21 浏览 0 评论

本学期除了承担《专用集成电路设计》课程之外,还承担了《交换原理与技术》的课程,两门课程结合了一下,主推实用化和工程化,课堂上强调实际应用。但感觉大家还是比较关注“这个知识点考不考”,而从不问“学这个有什么用,为什么要学这个?”。抽空了解了一下情况,倍感同学们基本动手能力的严重缺乏及主动想动手意识的淡漠,于是狠心抽时间普及一些常识性的内容。但愿能起到抛砖引玉的作用。

一、教材及部分历史

本教材是我校通信工程学院老院长、ISN国家重点实验室创始人之一的刘增基教授牵头编著。作者里面还有著名的网络交换专家邱智亮教授。团队从事相关研究工作几十年如一日,踏踏实实,兢兢业业的从事工程应用的开发工作。详细内容可以查看公众号分类项目“联系我”部分。

里面重点介绍了电路交换和分组交换的内容。其中分组交换部分还涉及了面向连接的ATM分组交换技术。(课堂上也啰嗦了很多ATM与IP纠结的历史以及我校做出来了国内第一台带有信令功能的ATM交换机的历史,在此不再赘述)

二、互联网与分组交换

真的很感激CCTV,拍出来了《互联网时代》这么精彩的纪录片。第一集就非常煽情的介绍了互联网的诞生历程。而其中,我比较关注的就是分组交换之父“Kleinrock”。强烈推荐通信工程专业的同学一定要看一下这部纪录片。我每年反正都偷偷的在课堂上给大家播放其中比较精彩的片段,集成课上也播放,哈哈。

三、抓包

言归正传,本文的目的就是通过用FPGA抓取网络上的数据包的简单历程,来给大家介绍几种入门级的工具,教会给大家开启互联网大门的钥匙。

1、实验场景

借助实验室简陋的场地,搭建了一个简单的实验平台,该平台由两台笔记本和一块Zedboard FPGA开发板及两根网线组成,两台笔记本各通过一根网线连接到了Zedboard FPGA开发板的两个网口上。FPGA上简单的例化了两个直连的千兆GMII接口的以太网控制器(可以在opencores网站上下载),用来抓取物理层的以太网数据帧。FPGA开发板的作用仅仅就是来抓取物理层的以太网数据帧,因为这件事情,只能由FPGA来完成,在两台笔记本上是无法看到物理层的以太网帧的!原因见下文。

2、原理

课本上第五章介绍了五层经典的模型,应用程序产生的数据层层叠加打包到物理层,在物理层变成可以用来在物理信道上传输的比特流,经物理信道传输到对端。如下图。

所以,在物理层,已经包含了上述各层的所有信息。我们可以用X-CAP发包软件来产生一个数据报文,然后用抓包工具(Wireshark、科莱等)抓取后进行分析。发数据包过程如下面几张图所示。

注意:大家是否发现了一种可以分析具体网络数据包的方法呢?上课讲的ARP攻击或者PPPOE攻击其实都可以这样子去实现。而基于FPGA的快速包分类算法(各种改进BV算法)则可以提供各种非常实用的攻击检测、病毒检测等处理,也可以在数据中心或者网络中心实现一些预处理操作等。

通过上图可以看出,接收端收到的数据包是完整的包括各个层数据信息的数据包,有二层的MAC地址,三层的IPV4数据包头,以及高层的ICMP数据包的头部,以及还有一些携带的数据信息如0-9十个阿拉伯数字及二十六个英文小写字母,还有FCS校验数据等等。

但上图分析结果不包括物理层信息,如下图802.3以太网帧格式,物理层封装的以太网数据帧还有前导码和帧定界符。

在网络数据传输的过程中,终端设备产生可以物理层传输的比特流会涉及到所有的层,但对于交换机而言,仅涉及最下面两层(数据链路层和物理层)或者三层(网络层、链路层及物理层)。如下图是二层以太网交换机模型示意图。

3、实现

为实现最终在线实时获取物理层以太网帧结构的目的,顺便介绍一下硬件上通过RJ45接口传输以太网数据包的流程。如下图,通过RJ45接口进来的物理层比特流数据进入到PHY芯片内部,进行编解码等操作后,在FPGA与PHY芯片一侧转变为标准的GMII接口信号并行传输给FPGA芯片的管脚。进入到FPGA内部后便可以用opencores网站上下载的IP核(ethernet_tri_mode)进行接收处理。

在实验过程中,我们可以用X-CAP软件产生下面的以太网数据帧(网络层看是IPV6数据报文),从一台笔记本电脑经过FPGA开发板传输到另外一台笔记本电脑上,在接收端笔记本电脑上用包分析软件捕获到数据帧并进行分析,如下图。

同时,用Chipscope软件在FPGA内部以GMII接口中的dv信号上升沿为触发条件来捕获该IPV6报文,得到的结果如下图中的波形。

让我们放大后再仔细看一下!

在上图中可以明显的看到了七个字节的前导码0x55和一个字节的帧定界符0xd5,这就是本文最终要获取到的物理层数据帧头!物理层的以太网帧就是长的这个样子!也就是说,物理层的以太网帧只是固定的在每个抓包软件分析出来的二层帧头即目的MAC地址的前面加上了固定的八个字节而已!

这八个字节是固定的七个字节的0x55和一个字节的0xd5!

这就是你想看到的物理层数据帧的样子!

不信?可以继续往后看波形,后面的数据就是二层的目的MAC地址,跟前面接收端笔记本包分析软件对数据包的分析结果中的二层目的MAC地址完全一样!如下图所示。

知道了物理层的前导码和帧定界符又能咋?

(1)、 你可以类比其它通信接口的物理层啊。如ROCKET IO、RAPID IO、10G MAC接口等,是否用于同步,是否传递时钟,是否用于判别一个帧的起始等等,都大同小异。但凡通信接口类的物理层,都是类似的这些功能。是不是举一反三了?

(2)、最起码,有了这个平台,可以让两台笔记本电脑联网传递信息了。也可以Ping通了,还可以传各种文件了。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码