分析以太网帧结构_基于电力数据通信网的MTU值分析研究

2024-02-29 05:50

本文主要是介绍分析以太网帧结构_基于电力数据通信网的MTU值分析研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

电力数据通信网是以保障电网安全生产为目的,采用路由器、光端机等设备搭建而成,用于传输电网生产控制信号、电网公司办公内网、视频会议等综合业务的通信网络。

电力数据通信网网络结构与公司运维范围内变电站的地理位置息息相关,基本采用三级组网结构,核心层位于公司总部,由多台高性能路由器组成,汇聚层由距离公司较近的几个高电压等级变电站组成,站内路由器既担当汇聚路由器的功能,同时满足本站内的通信业务接入。接入层主要由低电压等级变电站内路由器构成,由于站内路由器仅需要完成业务接入功能,所以对路由器性能要求不高。由于各个变电站之间距离较远,为保证业务质量,路由器之间的互联一般通过光端机承载。如图1所示。

8e1a74071c78a61f9e5c8fdb12cc1c5b.gif

2 电力数据通信网业务传递模型

根据电力数据通信网业务特性,电网公司多采用BGP MPLS VPN跨域技术进行业务之间的互通,网络中公司总部核心层和各个地市公司接入层分别为BGP的不同自治域(AS)。为保证业务的安全性以及数据包的快速转发,全网采用MPLS VPN技术。

由于电力数据通信网中业务流量一般是总分结构,核心位于公司总部区域,接入位于各个地市区域,故业务访问一般会跨越不同的BGP自治域,且业务数据包在传递过程中会被各种协议的报头进行封装。

以电力数据通信网调度提票业务为例,结构示意图如图2 所示。末端站点提票终端发送提票请求,业务数据包通过VPN隧道发送至BGP AS-2内的数据通信网路由器上,数据通信网业务在光端机的承载下,通过BGP自治域边界ASBR路由器,最终传输至BGP核心区域AS-1的总部路由器上,路由器通过与提票服务器建立的VPN隧道,将信息传递到提票服务器,完成业务的传递。

87e46e93afafa14e5497f41d5e2d328f.gif

3 数据封装与MTU值

3.1 数据封装过程概述

根据TCP/IP四层协议模型,由下至上分为数据链路层、网络层、传输层、应用层。以提票业务为例,由于数据是从应用程序发出,应用层的应用程序数据首先进行TCP封装,封装完毕后,变成可在传输层传递的数据段(segment),传输层的数据段再进行IP封装,增加IP头部信息,称为网络层的IP数据包,最后将数据包增加帧头等信息,变为可以通过数据链路层传输的以太网帧。当信息传输到目的地时,在进行以上封装的解封装工作,将应用程序信息传递至目标应用程序。

3.2 MTU值简介

MTU为最大传输单元(Maximum Transmission Unit)的简称,一般是指以太网帧结构中数据Data字段最大的长度(单位为byte)。

以太网帧(Ethernet II)由帧头、数据部分及校验位构成。其中以太网帧的帧头大小为14 bytes(DMAC目的MAC地址6 bytes,SMAC源MAC地址6 bytes,Type域2 bytes),CRC校验部分4 bytes,剩下承载上层协议(IP数据包)的字段叫做数据载荷,数据载荷部分大小为46-1 500 bytes,数据载荷的最大长度称之为MTU,即MTU值最大为1 500 bytes,以太网帧最大为1 518 bytes。[1]

MTU值为数据链路层中对最大数据载荷的定义,不考虑帧头以及校验位,即为网络层中的IP数据包长度。如果网络层IP数据包长度超过MTU值,就会被分片处理,保证每一片IP包不超过MTU值。但如果业务通信是基于TCP连接的,那么一般情况下IP数据包不允许分片,如果数据包大小超过MTU那么数据包将会被丢弃,本文中的提票业务就是基于TCP连接的业务。

此外,在电力数据通信网中,为保证业务远距离传输的可靠性,一般情况下路由器间的远距离互联需要借助光端机,由光端机来承载数据通信网业务,例如图1 所示。光端机可以设置链路上允许通过的最大帧长度,从而影响网络层MTU值及传输层的数据分片。

3.3 MSS简介

数据链路层有MTU的概念,传输层也有类似MTU的概念,这就是MSS,全称为Maximum Segment Size,可以直译为最大分段长度。MSS就是TCP段每次能够传输的最大数据载荷。即TCP数据段中除去TCP包头后的数据载荷部分最大长度。在建立TCP连接过程中,首先要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值减去IP数据包包头的大小(20 bytes)和TCP数据段的包头(20 bytes),由于MTU值一般为1 500,所以往往MSS为1 460,默认情况下,二者的长度相差40 bytes。通信双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。如果双方的MSS值设定不一致,则协商结果以小的为准。在实际业务传输过程中,部分型号的路由器可以调整MSS值,从而影响网络层IP数据包大小及数据链路层MTU。而光端机可以设置链路上允许通过的最大帧长度,从而影响网络层MTU值及传输层的MSS值。[2]

4 业务网络仿真

针对电力数据通信网中的数据包大小进行仿真分析,仿真研究业务数据报文在路由器间传递过程中的大小,由此得出数据在传递过程中的封装过程,了解MTU值对数据传输大小的限制作用,下一步利用研究结果解决电力数据通信网中业务数据大包不通的问题。

4.1 ICMP数据包仿真研究

通过eNSP搭建仿真环境,如图3所示,PC4和PC5分别模拟为两个站点的PC客户端,通过ping命令来研究icmp协议在数据网路由器中的传递过程中的数据包大小变化。

c84f1bc7766981c8109b8e0b02c7ab71.gif

第一步,在PC4上运行ping命令,目的地址是PC5的IP地址,其中-l命令是规定数据包大小为1 472 bytes,如图4所示:

8e9607b55e6b91db5797176d2d0be017.gif

第二步,使用Wireshark抓包工具,在PC4的Ethernet0/0/1端口进行抓包,得到结果如图5所示。

4f4d99681082d5fd4dfb2ee114fcb063.gif

可以看到,数据包原始数据大小为1 472 bytes,通过icmp协议封装后,数据包大小变为1 480 bytes,通过IP协议封装后,数据包大小变为1 500 bytes,通过帧封装后,数据包大小最终变为1 514 bytes(Wireshark工具不计算帧尾的4 btyes的FCS校验位,加上帧尾的校验位,数据总长度为1 518)。由此可以得出本案例数据包在传输过程中不同协议或帧封装所需要增加的报文长度如表1 所示:

我们知道,在以太网帧最大长度为1 518 bytes,由此可以推断,当我们在PC上可以ping的最大数据长度为1 518-18-20-8=1 472 bytes,仿真软件验证的结果如下,与预先的推断一致,如图6所示:

529fa592a26abb6808534f1301d00eb6.gif

4.2 电力数据网中ICMP数据包仿真研究

由于电力数据网的网络结构特点,全网采用BGP MPLS VPN技术进行组网,该组网方式在使用ICMP协议进行ping测试时,需要考虑在网络层与数据链路层之间再封装两层mpls标签(一层为用于查找公网路由的公网标签,一层是用来查找VPN路由的私网标签),每层标签大小为4 bytes。所以仿真结果如图7、图8所示:

dfc22374fc6c11877ebe4076efa801c3.gif 3c815479542187e4dcb80d8aa0548896.gif

此时,使用Wireshark工具抓到的以太网帧长度为1 472+8+20+4+4+14=1 522,加上校验位,实际帧长度为1 526 bytes,其中网络层封装后的数据包大小为1 472+8+20=1 500 bytes,正好为MTU值,故1 472为ping命令可以携带的最大数据载荷长度。由此可以得出本案例数据包在电力数据通信网实际传输过程中不同协议或帧封装所需要增加的报文长度表2所示:

948d0cc5380be92e594f76c689b068ce.gif

上述仿真结果表明,当业务在电力数据通信网传输过程中,数据先后会经过传输层封装、网络层封装以及数据链路层封装,最终通过光端机进行远距离传输。由于本文中的提票业务是基于TCP连接的,在网络层不允许分片,所以网络层封装后的IP数据包长度必须小于等于1500 bytes,才能保证数据包的有效传递,否则数据包将会被丢弃,导致业务无法联通。

5 利用MTU值解决业务大包不通问题

5.1 问题描述

在电力数据通信网实际运行过程中,在某次大型网络结构调整后,出现了提票业务不通问题,如图2所示,末端站点1的工作人员反馈提票客户端可以ping通总部服务器,但是客户端浏览器无法打开提票页面,提票工作无法完成。

5.2 问题分析

通过测试发现,提票终端可以ping通总部服务器,但当限定数据包长度时,大包无法ping通,经测试,最大可以ping通的数据包大小为1 468 bytes,根据本文中的结论,可以得出此时在网络层的IP数据包大小为1 496 bytes,在数据链路层的以太网帧大小为1 496+4+4+18=1 522 bytes。

通过检查路由器的配置,发现路由器MTU值设置为1 500 bytes,1 496小于1 500,所以网络层MTU值满足条件。

此时,我们考虑传输层以及数据链路层的两个参数,一个是传输层MSS,另一个是数据链路层最大帧长度。通过查看路由器配置,发现MSS为默认值1 460 bytes,根据3.3章节,得出业务数据的实际TCP数据载荷大小为1 496-20=1 476 bytes,小于MSS值,故传输层参数满足条件。通过查看光端机配置,我们发现,光端机最大帧长度设置为1 518 bytes,而本案例中实际传输的以太网帧大小为1 522 bytes,所以导致以太网帧被光端机丢弃,造成业务不通。

5.3 问题处理

通过前面章节的分析,问题可以从两个方面解决,一方面可以调整MSS值(默认为1 460),通过在路由器上配置ip tcp adjust-mss 1 456,可以使数据的MSS值调整为1 456,这样数据封装成以太网帧后的大小为1 518,满足最大帧长度要求,可以通过光端机进行传输。另一方面可以通过修改光端机最大帧长度,如图9所示,以马可尼光端机为例,将最大帧长度上调为1 600,同样可以使数据通过光端机进行传输。实际测试显示,通过两种方法均能解决提票业务大包不通问题。

726fde95bcf1866a07ce5a34c2df77d9.gif

本文通过分析数据包的帧结构以及封装过程,了解了MSS值、MTU值及最大帧长度在数据传输过程中的功能及作用,学会了通过调整MSS值及最大帧长度参数解决业务大包不通问题,为今后电力数据通信网业务大包不通故障的分析处理提供了新的思路,积累了宝贵经验。

参考文献

[1]FALL K R,STEVENS W R,TCP/IP 详解 卷1:协议[M].北京:机械工业出版社,2016.

[2]Jeff Doyle,Jennifer Carroll,TCP/IP 路由技术(第一卷)(第二版)[M].北京:人民邮电出版社,2007.

作者信息:

段寒硕1,叶 青1,金 燊1,杨广涛2

(1.国网冀北电力有限公司信息通信分公司,北京100053;

2.国网冀北电力有限公司承德供电公司信息通信分公司,河北 承德067000)

这篇关于分析以太网帧结构_基于电力数据通信网的MTU值分析研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757763

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用