MMS报文是在TCP报文基础上,共有TCP,TPKT,COPT,MMS ,本文主要对前三步骤解析。
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100152384-234268070.png)
MMS报文.png
后台作为 61850 客户端, 装置作为 61850 服务器。
一)建立 TCP 连接(三次握手)
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100135578-1269127706.png)
image.png
1) 后台向装置请求请求建立 TCP 连接(SYN), 源端口 Src Port 为随机生成, 目标端口 Dst Port
固定为 102(装置方端口)。
2) 装置回复 ACK 确认, 同时也向后台请求建立 TCP 连接(SYN)。
3) 后台回复 ACK 确认。
二)TPKT协议:应用程数据传输协议,介于TCP和COTP协议之间。这是一个传输服务协议,主要用来在COTP和TCP之间建立桥梁。
TPKT的结构为:
0 (Unsigned integer, 1 byte): Version,版本信息。
1 (Unsigned integer, 1 byte): Reserved,保留(值为0×00)。
2-3 (Unsigned integer, 2 bytes): Length,TPKT、COTP、MMS三层协议的总长度,也就是TCP的payload的长度。(COTP中length不包括本身长度)
示例:
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100223810-1761960514.png)
image.png
版本号: 0x03
预留: 0x00
长度: 0x0016
三)COTP协议:COTP(ISO 8073/X.224 COTP Connection-Oriented Transport Protocol)是OSI 7层协议定义的位于TCP之上的协议。COTP以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据。
COTP协议分为两种形态,分别是COTP连接包(COTP Connection Packet)和COTP功能包(COTP Fuction Packet)。
3.1 COTP连接包(COTP Connection Packet)也就是握手包,其格式如图所示。
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100253201-288907729.png)
COTP连接包的头结构为:
0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为17 bytes。
1 (Unsigned integer, 1 byte): PDU typ,类型有:
0×1: ED Expedited Data,加急数据
0×2: EA Expedited Data Acknowledgement,加急数据确认
0×4: UD,用户数据
0×5: RJ Reject,拒绝
0×6: AK Data Acknowledgement,数据确认
0×7: ER TPDU Error,TPDU错误
0×8: DR Disconnect Request,断开请求
0xC: DC Disconnect Confirm,断开确认
0xD: CC Connect Confirm,连接确认
0xE: CR Connect Request,连接请求
0xF: DT Data,数据传输
2~3 (Unsigned integer, 2 bytes): Destination reference.目标的引用,可以认为是用来唯一标识目标
4~5 (Unsigned integer, 2 bytes): Source reference.源的引用,同上
6 (1 byte): opt,其中包括Extended formats、No explicit flow control,值都是Boolean类型。前四位标识class,也就是标识类别,倒数第二位对应Extended formats,是否使用拓展样式,倒数第一位对应No explicit flow control,是否有明确的指定流控制。
7~? (length-7 bytes, 一般为11 bytes): Parameter,参数。一般参数包含Parameter code(Unsigned integer, 1 byte)、Parameter length(Unsigned integer, 1 byte)、Parameter data三部分。
code,1byte,标识类型,主要有:
0xc0,tpdu的size,tpdu即传送协议数据单元,也就是传输的数据的大小
0xc1,src-tsap,源的端到端传输。
0xc2,dst-tsap,目标的端到端传输。
Parameter length,长度
Parameter data数据。
示例:连接请求包,PDU类型为连接请求(0x0e),18字节
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100353751-58283266.png)
image.png
长度: 0x1 1
PDU类型(CRConnect Request 连接请求) : 0x0E
目标引用: 0x0000
源引用: 0x0007
扩展格式/流控制: 0x00
参数代码SRC-TASP: 0xC1
参数长度: 0x02
SourceTSAP:0x0100
参数代码DST-TASP: 0xC2
参数长度: 0x02
DestinationTSAP:0x0102
参数代码TPDU-Size: 0xC0
参数长度: 0x01
TPDU大小: 0x0A
示例:连接确认包,PDU类型为连接确认(0x0d),18字节
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100432431-2018599572.png)
image.png
长度: 0x1 1
PDU类型(CCConnect Confirm 连接确认) : 0x0D
目标引用: 0x0007
源引用: 0x0003
扩展格式/流控制: 0x00
参数代码TPDU-Size: 0xC0
参数长度: 0x01
TPDU大小: 0x0A
参数代码SRC-TASP: 0xC1
参数长度: 0x02
SourceTSAP:0x0100
参数代码DST-TASP: 0xC2
参数长度: 0x02
DestinationTSAP:0x0102
3.2 COTP Fuction Packet
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100457301-136159539.png)
image.png
COTPP功能包的头结构为:
0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为2 bytes。
1 (Unsigned integer, 1 byte): PDU type,类型有:
0×1: ED Expedited Data,加急数据
0×2: EA Expedited Data Acknowledgement,加急数据确认
0×4: UD,用户数据
0×5: RJ Reject,拒绝
0×6: AK Data Acknowledgement,数据确认
0×7: ER TPDU Error,TPDU错误
0×8: DR Disconnect Request,断开请求
0xC: DC Disconnect Confirm,断开确认
0xD: CC Connect Confirm,连接确认
0xE: CR Connect Request,连接请求
0xF: DT Data,数据传输
2 (1 byte): opt,其中包括Extended formats、No explicit flow control,值都是Boolean类型。
示例:数据传输包,PDU类型为数据传输(0x0f)
![](https://img2022.cnblogs.com/blog/1543275/202204/1543275-20220420100526558-336564933.png)
image.png
长度: 0x02
PDU类型(DT Data,数据传输) : 0x0F
目标引用: 0x80
转载:
作者:松舍问霞
链接:https://www.jianshu.com/p/5482801e2dea
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。