Wireshark for IEC 61850 MMS: How to Capture and Decode Client/Server Traffic

By | April 9, 2026

MMS (Manufacturing Message Specification) is the client/server protocol used by IEC 61850 for SCADA communication, reporting, control commands, and engineering access. It runs over TCP port 102.

When an IED stops reporting to SCADA, when a control command fails, or when an MMS association does not establish — Wireshark is the first tool you reach for.

But decoding IEC 61850 MMS in Wireshark is not as simple as capturing on port 502 for Modbus. MMS sits on top of several protocol layers (TCP → TPKT → COTP → Session → Presentation → MMS). If Wireshark misses the initial association request, it cannot decode the presentation layer — and you see “Dissector is not available” instead of readable MMS data.

This guide covers everything: how to capture MMS traffic correctly, how to fix the dissector problem, the most useful display filters, how to decode common MMS operations (read, write, report, control), and how to troubleshoot real IEC 61850 communication problems using Wireshark.

1. IEC 61850 MMS Protocol Stack in Wireshark

MMS does not sit directly on TCP. It uses the full OSI stack:

LayerProtocolWhat Wireshark Shows
7 — ApplicationMMSMMS PDU: Read, Write, InformationReport, etc.
6 — PresentationISO 8823 (PRES)Presentation context, ASN.1 encoding
5 — SessionISO 8327 (SES)Session connection, data transfer
4 — TransportCOTP (ISO 8073)Connection-oriented transport over TCP
4 — TransportTPKT (RFC 1006)Maps COTP onto TCP — adds a 4-byte header
4 — TransportTCPPort 102
3 — NetworkIPIP addresses
2 — Data LinkEthernetMAC addresses

This layered stack is why MMS decoding can fail — Wireshark must see the full association setup (Presentation layer negotiation) to decode subsequent MMS messages.

2. How to Capture MMS Traffic

Capture Filter (Before Capture Starts)

Use this to capture only MMS traffic and reduce file size:

tcp port 102

Start Wireshark Before the IED Connects

This is critical. Wireshark must capture the MMS Initiate-Request and Initiate-Response (the association setup). If you start Wireshark after the MMS connection is already established, the presentation context is unknown and MMS decoding fails.

Best practice: Start Wireshark first, then start (or restart) the SCADA client or IED communication.

If you cannot restart communication, see Section 3 for the manual fix.

Where to Capture

LocationHow
On the SCADA serverRun Wireshark on the SCADA PC itself
On a network switchConfigure port mirroring (SPAN) and connect a laptop to the mirror port
On the IED (if supported)Some IEDs have built-in packet capture — export as .pcap
On a network TAPInsert a passive TAP between the switch and the IED

3. Fixing “Dissector Is Not Available” for MMS

The Problem

You see TCP traffic on port 102, but the MMS payload shows “Dissector is not available” or decodes only as raw ASN.1 data without MMS field names.

Why It Happens

Wireshark decodes MMS based on the Presentation Context negotiated during the MMS association (Initiate-Request). If Wireshark missed the association (because capture started after the connection was already up), it does not know which presentation context maps to MMS.

The Fix: Manual Presentation Context Configuration

  1. Go to Edit → Preferences → Protocols → PRES
  2. Click Users Context List
  3. Add a new entry:
FieldValue
Context Id3
Syntax Name OID1.0.9506.2.1
  1. Click OK and apply.

This tells Wireshark: “Presentation Context 3 uses the MMS syntax.” Now all MMS messages will decode correctly, even without the initial association.

💡 Tip: The Context Id may differ per implementation. If context 3 does not work, open a packet, expand the ISO 8823 PRES layer, and check the “Context-list” field in the association to find the correct context ID and OID.

Alternative Fix: Decode As

  1. Right-click on a packet that shows undecoded data on port 102
  2. Select Decode As…
  3. Set: Field = TCP Port, Value = 102, Current = TPKT
  4. Click OK

This forces Wireshark to decode the TCP payload as TPKT → COTP → Session → Presentation → MMS.

4. Essential Display Filters for MMS

All filter field names below use the _element suffix verified against the official Wireshark MMS Display Filter Reference. The _element filters match the presence of a specific PDU or service in a packet.

PDU Type Filters

FilterWhat It Shows
mmsAll MMS traffic
tcp.port == 102All traffic on MMS port
mms.confirmed_RequestPDU_elementConfirmed requests (client → server)
mms.confirmed_ResponsePDU_elementConfirmed responses (server → client)
mms.confirmed_ErrorPDU_elementError responses (server rejects a request)
mms.initiate_RequestPDU_elementAssociation setup request
mms.initiate_ResponsePDU_elementAssociation setup response
mms.initiate_ErrorPDU_elementAssociation rejected
mms.conclude_RequestPDU_elementAssociation close request
mms.conclude_ResponsePDU_elementAssociation close response

Service Filters

FilterWhat It Shows
mms.informationReport_elementInformation reports (IEC 61850 reports)
mms.read_RequestMMS read requests (Wireshark 3.6+)
mms.read_ResponseMMS read responses (Wireshark 3.6+)
mms.write_RequestMMS write requests (Wireshark 3.6+)
mms.write_ResponseMMS write responses (Wireshark 3.6+)
mms.getNameList_elementGetNameList (directory browse)
mms.getVariableAccessAttributes_elementGetVariableAccessAttributes (data model discovery)
mms.getNamedVariableListAttributes_elementGetNamedVariableListAttributes (read dataset definition)
mms.DataMMS data values in requests and responses

Data Reference Filters

FilterWhat It Shows
mms.domainIdLogical Device name
mms.invokeIDInvoke ID — match request to response

Combination Examples

Reports from a specific IED:

mms.informationReport_element && ip.src == 192.168.1.100

Error responses to a specific IED:

mms.confirmed_ErrorPDU_element && ip.dst == 192.168.1.100

Only association setup packets:

mms.initiate_RequestPDU_element || mms.initiate_ResponsePDU_element

Slow MMS responses (> 2 second gap):

mms && frame.time_delta > 2

💡 Tip: Click on any field in Wireshark’s packet detail pane — the status bar at the bottom shows the exact filter field name. Use Analyze → Display Filter Expression and search “mms” to browse all available fields.

5. Decoding an MMS Association (Connection Setup)

The MMS association is the first exchange after the TCP handshake. It establishes the application-level connection between the MMS client (SCADA) and the MMS server (IED).

What You See in Wireshark

PacketDirectionProtocolInfo
1Client → ServerTCPSYN
2Server → ClientTCPSYN-ACK
3Client → ServerTCPACK
4Client → ServerMMSInitiate-Request
5Server → ClientMMSInitiate-Response

What to Check in the Initiate-Request

Expand the MMS layer to see:

  • Proposed Max Serv Outstanding Calling — how many simultaneous requests the client can send
  • Proposed Max Serv Outstanding Called — how many the server can handle
  • Proposed Max PDU Size — maximum MMS message size
  • Service Supported Calling — which MMS services the client supports (read, write, report, control, etc.)

What to Check in the Initiate-Response

  • Negotiated values — the server may reduce the proposed values
  • If the server rejects the association, you will see an Initiate-ErrorPDU instead of a response

6. Decoding MMS Read Requests and Responses

MMS Read is used by SCADA to poll data from IEDs. In IEC 61850 terms, this is a GetDataValues service.

Read Request

Filter: mms.read_Request

  • Example: IED1PROT/MMXU1$MX$TotW$mag$f = read total active power from MMXU1

Read Response

Filter: mms.read_Response

  • listOfAccessResult → contains the returned data values
  • Each value shows the data type (boolean, integer, float, etc.) and the actual value

What to Look For

  • If the response contains a data-access-error, the requested object does not exist on the IED. Check the object reference against the IED’s SCL file.
  • If the response is empty or missing, the IED may have rejected the request. Check for mms.confirmed_ErrorPDU_element.

7. Decoding MMS Write Requests

MMS Write is used for SetDataValues — writing setpoints and configuration parameters.

Filter: mms.write_Request

The packet shows:

  • The target object reference (e.g., IED1PROT/PTOC1$SP$StrVal$setMag$f)
  • The value being written
  • The data type

The response contains either success or a data-access-error with the failure reason.

8. Decoding MMS Reports (BRCB and URCB)

Reports are the primary way IEDs send data to SCADA in IEC 61850. They are unconfirmed MMS messages (InformationReport).

Filter: mms.informationReport_element

What You See

Each report packet contains:

  • RptID — Report ID identifying which report control block sent it
  • OptFlds — which optional fields are included (sequence number, timestamp, reason, dataset reference, etc.)
  • SqNum — sequence number (increments with each report)
  • TimeOfEntry — when the report was generated
  • DataSet — reference to the dataset being reported
  • Inclusion bit string — which data objects in the dataset have changed
  • Data values — the actual changed values

What to Look For

  • Missing reports: Compare SqNum values. If numbers are skipped, reports were lost.
  • No reports at all: The report control block may not be enabled. Check if SCADA sent a write to enable the RCB.
  • Stale data: Check TimeOfEntry. If timestamps are old, the IED may not be generating events.

9. Decoding MMS Control Commands (SBO, Direct, Enhanced)

Control commands (open/close breaker, raise/lower tap changer) appear as MMS Write requests targeting control objects.

Direct Control

One write request to the Oper (operate) data attribute:

mms.write_Request → IED1PROT/CSWI1$CO$Pos$Oper

Select-Before-Operate (SBO)

Two-step sequence:

  1. Select: MMS Read of IED1PROT/CSWI1$CO$Pos$SBOw
  2. Operate: MMS Write to IED1PROT/CSWI1$CO$Pos$Oper

SBO with Enhanced Security (SBOwES)

Three-step sequence:

  1. Select: Write to SBOw
  2. Operate: Write to Oper
  3. CommandTermination: Unconfirmed report confirming execution

Common Control Errors

Error in WiresharkIEC 61850 MeaningCause
“object-access-denied”Access deniedNo permission to control this object
“object-non-existent”Wrong object referenceCheck the LN and DO name
“temporarily-unavailable”IED not readyIED in test mode or local mode (Mod ≠ on)
“type-inconsistent”Wrong data type in commandCheck the ctlModel matches the command type

The “Not Selected” error means you sent an Operate without first sending a Select — the IED uses SBO control model but the client tried Direct control.

10. Decoding MMS File Operations

MMS supports file transfer for disturbance recordings (COMTRADE files), logs, and IED configuration.

Filter: mms and then look for file-related services in the packet detail pane (fileOpen, fileRead, fileDirectory).

You will see file names, directory listings, and file data in Wireshark. This is useful for verifying that disturbance recorders are accessible from SCADA.

11. Identifying MMS Errors in Wireshark

Filter: mms.confirmed_ErrorPDU_element

MMS errors contain:

  • Error class — vmd-state, application-reference, definition, resource, service, access, etc.
  • Error code — specific error within the class
Error ClassCommon CodeMeaning
accessobject-non-existentRequested object not found on IED
accessobject-access-deniedNo permission
accessobject-access-unsupportedIED does not support this service for this object
serviceotherGeneral service failure
vmd-stateotherIED in wrong state (e.g., local mode)

12. The IEC 61850 Dissector Plugin

Wireshark’s built-in MMS dissector decodes the MMS layer but does not understand IEC 61850 semantics. It shows MMS-level operations (Read, Write, InformationReport) but not IEC 61850 concepts (GetDataValues, Reports, Control).

An open-source IEC 61850 dissector plugin adds this context:

  • Source: github.com/robidev/iec61850-dissector
  • Adds an IEC 61850 layer below MMS in the protocol tree
  • Decodes reports, command terminations, and AddCause fields
  • Replaces generic MMS Info column with IEC 61850 service names
  • Available as .dll (Windows) or .so (Linux)

Installation

  1. Download the plugin for your Wireshark version from the GitHub releases page
  2. Copy the file to Wireshark’s plugin folder (Help → About → Folders → Personal Plugins)
  3. Restart Wireshark

After installation, MMS packets that are IEC 61850 will show an additional “IEC 61850” protocol layer with decoded fields.

13. Useful Wireshark Columns for MMS Analysis

Add these custom columns for faster analysis:

Column TitleField NamePurpose
MMS PDU Typemms.confirmed_RequestPDU_element or mms.confirmed_ResponsePDU_elementShows request vs response
Domain IDmms.domainIdShows the Logical Device name
Source IPip.srcIED or SCADA address
Dest IPip.dstTarget address
Delta Timeframe.time_delta_displayedTime between displayed packets — spot slow responses
TCP Streamtcp.streamGroup packets by connection

To add: Right-click on a column header → Column Preferences → Add new column → set the field name.

14. Common MMS Problems You Can Diagnose with Wireshark

ProblemWhat You See in WiresharkSolution
MMS association failsInitiate-Request sent but no Initiate-Response (or TCP RST)Check port 102 is open on IED. Verify IP and subnet.
“Dissector not available”Traffic on port 102 but MMS not decodedConfigure PRES context manually (see Section 3)
SCADA shows no dataNo MMS InformationReport packets from IEDRCB not enabled. Check for write to RCB enable attribute.
Reports stop after a whileReports present initially, then SqNum jumps or stopsBuffer overflow on IED. Check BufferTime and EntryID.
Control command rejectedserviceError with “Not Selected” or “access-denied”Wrong ctlModel (SBO vs Direct). Check IED mode (Mod).
Slow responseLarge frame.time_delta between request and responseIED overloaded, network congestion, or too many associations.
Connection dropsTCP RST after idle periodIED closes idle connections. Enable keep-alive or reduce idle time.
Wrong data valuesRead response shows unexpected valuesVerify the correct FC (functional constraint) is used in the object reference.

15. Tips for Efficient MMS Capture in Substations

  • Start Wireshark before starting SCADA to capture the full association setup.
  • Use capture filters (tcp port 102) to keep file sizes manageable.
  • Capture on the SCADA server for the best view of all IED connections.
  • Use port mirroring on the station bus switch to capture without disrupting traffic.
  • Save captures with date/time in the filename for future reference during commissioning.
  • Create a Wireshark profile for IEC 61850 with custom columns, display filters, and coloring rules.
  • Keep a reference SCD file open alongside Wireshark to verify object references.
  • Compare SqNum across reports to detect lost messages.
  • Use Statistics → Conversations to see all MMS connections and their traffic volume.

Summary

Wireshark is the most powerful tool for diagnosing IEC 61850 MMS communication. It shows everything — association setup, data reads, reports, control commands, errors, and file transfers.

The key things to remember:

  • MMS runs on TCP port 102 through the full OSI stack (TPKT → COTP → Session → Presentation → MMS)
  • Start Wireshark before the MMS connection is established to capture the presentation context
  • If MMS does not decode, manually configure the PRES User Context (OID: 1.0.9506.2.1)
  • Use mms as the main display filter, and refine with mms.informationReport_element, mms.confirmed_ErrorPDU_element, etc.
  • Install the IEC 61850 dissector plugin for richer decoding of reports, commands, and errors
  • Always cross-reference what you see in Wireshark with the SCD file and the IED’s data model
Author: Zakaria El Intissar

I'm an automation and industrial computing engineer with 12 years of experience in power system automation, SCADA communication protocols, and electrical protection. I build tools and write guides for Modbus, DNP3, IEC 101/103/104, and IEC 61850 on ScadaProtocols.com to help engineers decode, analyze, and troubleshoot real industrial communication systems.

Leave a Reply

Your email address will not be published. Required fields are marked *