本学期除了承担《专用集成电路设计》课程之外,还承担了《交换原理与技术》的课程,两门课程结合了一下,主推实用化和工程化,课堂上强调实际应用。但感觉大家还是比较关注“这个知识点考不考”,而从不问“学这个有什么用,为什么要学这个?”。抽空了解了一下情况,倍感同学们基本动手能力的严重缺乏及主动想动手意识的淡漠,于是狠心抽时间普及一些常识性的内容。但愿能起到抛砖引玉的作用。
一、教材及部分历史
本教材是我校通信工程学院老院长、ISN国家重点实验室创始人之一的刘增基教授牵头编著。作者里面还有著名的网络交换专家邱智亮教授。团队从事相关研究工作几十年如一日,踏踏实实,兢兢业业的从事工程应用的开发工作。详细内容可以查看公众号分类项目“联系我”部分。
里面重点介绍了电路交换和分组交换的内容。其中分组交换部分还涉及了面向连接的ATM分组交换技术。(课堂上也啰嗦了很多ATM与IP纠结的历史以及我校做出来了国内第一台带有信令功能的ATM交换机的历史,在此不再赘述)
《交换原理与技术》教材
二、互联网与分组交换
真的很感激CCTV,拍出来了《互联网时代》这么精彩的纪录片。第一集就非常煽情的介绍了互联网的诞生历程。而其中,我比较关注的就是分组交换之父“Kleinrock”。强烈推荐通信工程专业的同学一定要看一下这部纪录片。我每年反正都偷偷的在课堂上给大家播放其中比较精彩的片段,集成课上也播放,哈哈。
分组交换之父“Kleinrock”
三、抓包
言归正传,本文的目的就是通过用FPGA抓取网络上的数据包的简单历程,来给大家介绍几种入门级的工具,教会给大家开启互联网大门的钥匙。
1、实验场景
借助实验室简陋的场地,搭建了一个简单的实验平台,该平台由两台笔记本和一块Zedboard FPGA开发板及两根网线组成,两台笔记本各通过一根网线连接到了Zedboard FPGA开发板的两个网口上。FPGA上简单的例化了两个直连的千兆GMII接口的以太网控制器(可以在opencores网站上下载),用来抓取物理层的以太网数据帧。FPGA开发板的作用仅仅就是来抓取物理层的以太网数据帧,因为这件事情,只能由FPGA来完成,在两台笔记本上是无法看到物理层的以太网帧的!原因见下文。
实验场景
2、原理
课本上第五章介绍了五层经典的模型,应用程序产生的数据层层叠加打包到物理层,在物理层变成可以用来在物理信道上传输的比特流,经物理信道传输到对端。如下图。
物理层比特流数据来源
所以,在物理层,已经包含了上述各层的所有信息。我们可以用X-CAP发包软件来产生一个数据报文,然后用抓包工具(Wireshark、科莱等)抓取后进行分析。发数据包过程如下面几张图所示。
X-CAP软件配置数据链路层如MAC地址等信息
X-CAP软件配置网络层如IP地址等信息
X-CAP软件配置其它信息
X-CAP软件已经产生一个自定义的数据包
在接收端,通过包分析工具分析的结果
注意:大家是否发现了一种可以分析具体网络数据包的方法呢?上课讲的ARP攻击或者PPPOE攻击其实都可以这样子去实现。而基于FPGA的快速包分类算法(各种改进BV算法)则可以提供各种非常实用的攻击检测、病毒检测等处理,也可以在数据中心或者网络中心实现一些预处理操作等。
通过上图可以看出,接收端收到的数据包是完整的包括各个层数据信息的数据包,有二层的MAC地址,三层的IPV4数据包头,以及高层的ICMP数据包的头部,以及还有一些携带的数据信息如0-9十个阿拉伯数字及二十六个英文小写字母,还有FCS校验数据等等。
但上图分析结果不包括物理层信息,如下图802.3以太网帧格式,物理层封装的以太网数据帧还有前导码和帧定界符。
802.3以太网帧格式
在网络数据传输的过程中,终端设备产生可以物理层传输的比特流会涉及到所有的层,但对于交换机而言,仅涉及最下面两层(数据链路层和物理层)或者三层(网络层、链路层及物理层)。如下图是二层以太网交换机模型示意图。
二层以太网交换机七层模型示例
3、实现
为实现最终在线实时获取物理层以太网帧结构的目的,顺便介绍一下硬件上通过RJ45接口传输以太网数据包的流程。如下图,通过RJ45接口进来的物理层比特流数据进入到PHY芯片内部,进行编解码等操作后,在FPGA与PHY芯片一侧转变为标准的GMII接口信号并行传输给FPGA芯片的管脚。进入到FPGA内部后便可以用opencores网站上下载的IP核(ethernet_tri_mode)进行接收处理。
RJ45接口、PHY芯片、FPGA连接图
在实验过程中,我们可以用X-CAP软件产生下面的以太网数据帧(网络层看是IPV6数据报文),从一台笔记本电脑经过FPGA开发板传输到另外一台笔记本电脑上,在接收端笔记本电脑上用包分析软件捕获到数据帧并进行分析,如下图。
接收端笔记本包分析软件对该IPV6数据包的分析结果
同时,用Chipscope软件在FPGA内部以GMII接口中的dv信号上升沿为触发条件来捕获该IPV6报文,得到的结果如下图中的波形。
FPGA上捕获到的以太网数据帧(IPV6报文)
让我们放大后再仔细看一下!
在上图中可以明显的看到了七个字节的前导码0x55和一个字节的帧定界符0xd5,这就是本文最终要获取到的物理层数据帧头!物理层的以太网帧就是长的这个样子!也就是说,物理层的以太网帧只是固定的在每个抓包软件分析出来的二层帧头即目的MAC地址的前面加上了固定的八个字节而已!
这八个字节是固定的七个字节的0x55和一个字节的0xd5!
这就是你想看到的物理层数据帧的样子!
不信?可以继续往后看波形,后面的数据就是二层的目的MAC地址,跟前面接收端笔记本包分析软件对数据包的分析结果中的二层目的MAC地址完全一样!如下图所示。
知道了物理层的前导码和帧定界符又能咋?
(1)、 你可以类比其它通信接口的物理层啊。如ROCKET IO、RAPID IO、10G MAC接口等,是否用于同步,是否传递时钟,是否用于判别一个帧的起始等等,都大同小异。但凡通信接口类的物理层,都是类似的这些功能。是不是举一反三了?
(2)、最起码,有了这个平台,可以让两台笔记本电脑联网传递信息了。也可以Ping通了,还可以传各种文件了。
,