CIP Forward_Open Service Explained: How Every EtherNet/IP Connection Starts

By | June 18, 2026

Every CIP I/O connection in the world starts with one service: Forward_Open. The PLC sends it to a remote drop, the drop validates it, and if everything checks out, the cyclic exchange begins. If something does not check out, the Forward_Open returns an error and the connection never opens — the device is invisible to the PLC until the cause is fixed.

Forward_Open is also the single most-Googled CIP service. “Forward_Open extended status 0x0106”, “ownership conflict CIP”, “RPI not supported”, “electronic keying mismatch” — every one of these queries lands on a Forward_Open failure. This article explains the service in depth: the full request structure, every important field, how the response works, what each error means, and how to read Forward_Open transactions in Wireshark.

For broader context on how CIP works, see our CIP Protocol Complete Guide.

What Forward_Open is in one paragraph

Forward_Open is service code 0x54 of the Connection Manager Object (class 0x06), defined in ODVA’s CIP Networks Library Volume 1, Section 3-5.5.2. It establishes a CIP connection between an originator (typically a PLC) and a target (an I/O block, drive, sensor, etc.). The request carries every parameter needed to define the connection: which assemblies to use, how fast to update, how big each message is, what to do if a packet is missed, and electronic keying information that validates the target device matches the configuration. If the target accepts, it returns a Connection ID and the cyclic exchange starts. If not, it returns General Status 0x01 with an Extended Status code explaining what failed.

Service code, reply code, and the Large variant

ServiceRequest codeReply codeMax connection size
Forward_Open0x540xD4511 bytes per direction
Large_Forward_Open0x5B0xDB65,535 bytes per direction
Forward_Close0x4E0xCE(closes either)

Forward_Open and Large_Forward_Open are functionally identical except for the size of the Network Connection Parameters field — Forward_Open uses a 16-bit WORD, Large_Forward_Open uses a 32-bit DWORD. The Large variant exists because modern PLCs exchange large structured data over single connections, and the 9-bit size field in standard Forward_Open caps at 511 bytes.

Reply codes follow the CIP convention of setting bit 7. Request 0x54 → reply 0xD4. Request 0x5B → reply 0xDB. When you see 0xD4 in Wireshark, you are looking at a Forward_Open reply.

Where Forward_Open lives in the protocol

Forward_Open is sent to the Connection Manager Object (class 0x06, instance 1) of the target device. Every CIP device that supports connections — meaning anything that exchanges I/O — implements this object and accepts Forward_Open at instance 1.

The path in a Forward_Open request typically looks like this:

the path in a Forward Open

That two-segment EPATH says “send this to Class 0x06, Instance 1” — the Connection Manager. The Connection Manager then uses the Connection Path parameter inside the Forward_Open body to figure out which application object the connection should attach to (typically an Assembly object).

The Forward_Open request — complete structure

From Volume 1, Table 3-5.16, every Forward_Open request carries these fields in this order:

ParameterTypePurpose
Priority/Time_tickBYTEUsed with Time-out_ticks to compute the timeout for the request
Time-out_ticksUSINTNumber of timer ticks for this Forward_Open to time out
O→T Network Connection IDUDINTOriginator’s chosen Connection ID for outgoing data
T→O Network Connection IDUDINTOriginator’s chosen Connection ID for incoming data
Connection Serial NumberUINTOriginator-assigned unique number for this connection
Originator Vendor IDUINTThe originator’s Vendor ID (assigned by ODVA)
Originator Serial NumberUDINTThe originator’s device serial number
Connection Timeout MultiplierUSINTHow many RPIs without packets before the connection dies
Reserved3 octetsReserved — must be 0
O→T RPIUDINTOriginator-to-Target Requested Packet Interval, in microseconds
O→T Network Connection ParametersWORDConnection type, size, priority for O→T direction
T→O RPIUDINTTarget-to-Originator RPI, in microseconds
T→O Network Connection ParametersWORDConnection type, size, priority for T→O direction
Transport Type/TriggerBYTETransport class, production trigger, direction
Connection_Path_SizeUSINTNumber of 16-bit words in the Connection_Path field
Connection_PathPadded EPATHRoute + electronic keying + application object reference

For Large_Forward_Open (service 0x5B), the two Network Connection Parameters fields become DWORD instead of WORD. Everything else is identical.

Let’s walk through the fields that matter most.

Network Connection ID — what gets assigned

The Connection IDs in the request are the originator’s preferences. The target responds with the IDs it actually assigns. In the simplest case the target accepts the originator’s values, but it can choose different ones — especially when multicast is involved.

After a successful Forward_Open, both sides know:

  • O→T Connection ID — the ID the originator stamps onto outgoing data packets
  • T→O Connection ID — the ID the target stamps onto outgoing data packets

These IDs go into the Sequenced Address Item of every UDP I/O packet on port 2222. When the PLC receives a UDP packet, it looks at the Connection ID to figure out which Forward_Open this packet belongs to and where to route the data internally. See our EtherNet/IP Encapsulation Protocol Explained article for more on how Connection IDs work on the wire.

Connection Serial Number, Vendor ID, Originator Serial Number — the unique trio

These three fields together uniquely identify a connection anywhere on a CIP network. A duplicate Forward_Open is defined as a new request whose vendor_ID, connection_serial_number, AND originator_serial_number match an existing connection’s parameters. If all three match an existing connection and the new request is not a “null Forward_Open” (used for reconfiguration), the target returns the famous General Status 0x01, Extended Status 0x0100 — “Connection in use or duplicate forward open.”

The Connection Serial Number is generated by the originator. ControlLogix PLCs and similar controllers increment it for every new Forward_Open they issue. The Vendor ID is assigned by ODVA and uniquely identifies the originator’s manufacturer. The Originator Serial Number is the originator’s own factory-set serial number.

This trio is how the protocol prevents two PLCs from accidentally sharing a connection or how it lets a PLC reuse the same Connection Serial Number to reconfigure an existing connection (via null Forward_Open).

RPI — Requested Packet Interval

The O→T RPI and T→O RPI fields specify the desired update rate in microseconds. Typical values:

RPI valueUpdate rateTypical use
2,000 µs (2 ms)500 HzMotion control
5,000 µs (5 ms)200 HzFast I/O
10,000 µs (10 ms)100 HzStandard I/O
20,000 µs (20 ms)50 HzSlower I/O
50,000 µs (50 ms)20 HzDiagnostics, slow loops
100,000 µs (100 ms)10 HzStatus, monitoring

The two directions can have different RPIs — and often do. A drive might produce its position feedback at 2 ms but consume commands from the PLC at 20 ms because commands change less frequently than feedback. The originator picks the values; the target either accepts them or rejects with Extended Status 0x0111 (RPI not supported).

The target returns the Actual Packet Interval (API) in its reply. The API may be the same as the RPI or different — depending on what the target can actually deliver. Some targets round the RPI up to their nearest supported value.

Connection Timeout Multiplier

This is a USINT (1 byte) where each value represents a power-of-2 multiplier:

ValueMultiplier
0× 4
1× 8
2× 16
3× 32
4× 64
5× 128
6× 256
7× 512

The connection times out (and is declared dead) after RPI × Multiplier of silence. So an RPI of 10 ms with a multiplier of 4 (value 0) declares the connection dead after 40 ms without a packet. With a multiplier of 32 (value 3), it takes 320 ms.

Tight multipliers detect failures fast but cause nuisance trips on jittery networks. Loose multipliers tolerate jitter but delay fault detection. Default for most designs is 16 or 32.

Network Connection Parameters — the rich field

This 16-bit (32-bit for Large_Forward_Open) field packs several critical pieces of information together. From Volume 1 Table 3-5.8:

For Forward_Open (16-bit WORD):

BitsFieldPurpose
15Redundant Owner0 = exclusive owner, 1 = multiple owners allowed
14-13Connection Type00 = NULL, 01 = Multicast, 10 = Point-to-Point, 11 = Reserved
12-11Priority00 = Low, 01 = High, 10 = Scheduled, 11 = Urgent
10Fixed/Variable0 = Fixed size, 1 = Variable size
9-0Connection SizeConnection data size in bytes (0-511)

For Large_Forward_Open (32-bit DWORD), bits 31-17 are reserved, and the Connection Size field expands to 16 bits (supporting up to 65,535 bytes).

Critical bits to know

Connection Type (bits 14-13): Point-to-Point (10) means unicast — one specific originator, one specific target. Multicast (01) means the target produces data to a multicast group that any consumer can subscribe to. Multicast is what lets multiple PLCs read the same I/O data from one producer. NULL (00) is used for null Forward_Open (reconfiguration).

Priority (bits 12-11): Determines how the network treats this traffic. Scheduled gets the strictest determinism (and is usually used for ControlNet only). Urgent for time-critical. Low for everything else. Most EtherNet/IP I/O runs as Low or High.

Fixed/Variable (bit 10): Almost always 0 (fixed-size) for cyclic I/O — the connection data size is determined at connection establishment and stays constant. Variable-size is used for adaptive connections that can change size, which is uncommon.

Connection Size (bits 9-0): The data size in bytes, including any 32-bit run/idle header. This must match the actual assembly size on the target. Mismatches return Extended Status 0x0109 (Invalid connection size).

Transport Type/Trigger byte

This single byte controls how the transport layer behaves:

BitsFieldValues
7Direction0 = Client, 1 = Server
6-4Production Trigger000 = Cyclic, 001 = Change of State, 010 = Application Object Triggered
3-0Transport Class0 = Class 0, 1 = Class 1, 2 = Class 2, 3 = Class 3

Transport classes

  • Class 0 — Unidirectional, no acknowledgments. Used for cyclic I/O production from a single producer to a multicast group.
  • Class 1 — Bidirectional, sequence-number-based reliability. The standard for unicast I/O connections between PLC and remote drop.
  • Class 2 — Bidirectional with sequenced acknowledgments. Less common.
  • Class 3 — Bidirectional with strict acknowledgments. Used for connected explicit messaging (a long-lived configuration session).

For typical EtherNet/IP I/O between a ControlLogix PLC and a Point I/O block, the Transport Type byte is usually 0x01 (Class 1, cyclic, client) for one direction and 0x83 (Class 1, cyclic, server) for the other.

Production triggers

  • Cyclic — The producer sends data every RPI, period. Most common for I/O.
  • Change of State — The producer sends data only when something changes, but at least once per RPI as a heartbeat. Used for low-traffic devices where most data is static.
  • Application Object Triggered — The application explicitly tells the connection when to produce. Specialized use.

Connection Path — what the connection attaches to

The Connection Path is the part of the request that says “this connection is for these assemblies on this device.” It’s an EPATH (encoded path) that can contain several types of segments:

  1. Port Segments — for routing across multiple networks (e.g., from EtherNet/IP through a 1756-DNB scanner to a DeviceNet drop). Each port segment specifies one network hop.
  2. Electronic Keying Segment — the famous “this device must match these specs” check. Contains Vendor ID, Device Type, Product Code, and Revision. The target checks these against its own Identity Object and rejects the connection if they don’t match (with Extended Status 0x0114, 0x0115, or 0x0116 depending on which field failed).
  3. Logical Segments — pointing to the application objects. Typically Class 0x04 (Assembly), with three Instance IDs: one for the configuration assembly, one for the consumed (output) assembly, one for the produced (input) assembly.
  4. Data Segments — carrying configuration data inline with the Forward_Open request (used when the configuration assembly has data that should be applied at connection establishment).

A typical Connection Path for a Point I/O EtherNet/IP block looks something like:

Electronic Keying Segment (10 bytes)
  Vendor ID = 0x0001 (Rockwell)
  Device Type = 0x000C (Communications Adapter)
  Product Code = 0x00B8 (1734-AENT)
  Revision = 1.1
Logical Class Segment: 0x04 (Assembly)
Logical Instance Segment: 0x66 (Configuration Assembly)
Logical Instance Segment: 0x67 (Consumed Assembly)
Logical Instance Segment: 0x68 (Produced Assembly)

The exact assembly instance numbers vary by device — the EDS file documents them. See our reference articles on CIP Data Types and the upcoming Assembly Object article for more on assemblies.

The successful Forward_Open response

From Volume 1 Table 3-5.17, a successful response carries:

ParameterTypePurpose
O→T Network Connection IDUDINTTarget’s assigned ID for O→T direction (may echo originator’s choice)
T→O Network Connection IDUDINTTarget’s assigned ID for T→O direction
Connection Serial NumberUINTEchoes the request’s value
Originator Vendor IDUINTEchoes the request’s value
Originator Serial NumberUDINTEchoes the request’s value
O→T APIUDINTActual packet interval for O→T (may differ from RPI)
T→O APIUDINTActual packet interval for T→O
Application Reply SizeUSINTNumber of 16-bit words in the Application Reply field
ReservedUSINTReserved
Application ReplyArray of byteApplication-specific data

The Reply Service code is 0xD4 (0x54 with bit 7 set). General Status is 0x00. The Connection IDs returned are what the originator should use for all subsequent data on this connection.

After this reply, the spec requires the target to wait at least 10 seconds for the first data packet on the connection. This gives the originator a generous window to set up its end of the connection before timing out.

The failed Forward_Open response

When Forward_Open fails, the response carries General Status 0x01 and an Extended Status that explains the actual reason. The Extended Status is a 16-bit value — the “object specific status word” in spec language.

The most common Extended Status values for Forward_Open failures (Volume 1 Section 3-5.6):

Extended StatusReasonWhat it usually means
0x0100Connection in use or duplicate forward openSame vendor_ID + connection_serial_number + originator_serial_number combination already has an active connection
0x0103Transport class and trigger combination not supportedWrong transport class for this object
0x0106Ownership conflictAnother scanner already owns this connection
0x0107Target connection not found (Forward_Close-only typically)Connection ID doesn’t exist on target
0x0108Invalid network connection parameterConnection parameters malformed
0x0109Invalid connection sizeData size doesn’t match assembly instance
0x0110Target for connection not configuredTarget object exists but isn’t ready for connection
0x0111RPI not supportedUpdate rate outside target’s supported range
0x0113Out of connectionsTarget has no available connection resources
0x0114Vendor ID or product code mismatchElectronic keying failed
0x0115Device type mismatchElectronic keying failed
0x0116Revision mismatchElectronic keying failed
0x0117Invalid produced or consumed application pathAssembly instance ID doesn’t exist on the device
0x0118Invalid or inconsistent configuration application pathConfiguration assembly mismatch
0x0119Non-listen-only connection not openedListen-only Forward_Open without primary connection
0x011ATarget object out of connectionsSpecific object instance is out of connections
0x011BRPI is smaller than the production inhibit timeRPI conflicts with the producer’s inhibit time

For a complete walkthrough of these codes and the broader CIP General Status structure, see our CIP General Status Codes Reference.

The failure response also carries the remaining_path_size, which can help diagnose routing failures across multi-network paths — it tells you how far the Forward_Open made it before failing.

Null Forward_Open — used for reconfiguration

A null Forward_Open is a Forward_Open where both Connection Type bits in both Network Connection Parameter fields are set to NULL (0). When the target sees a null Forward_Open with the same vendor_ID + connection_serial_number + originator_serial_number as an existing connection, it does NOT treat it as a duplicate. Instead, it forwards the request to the application for reconfiguration.

This mechanism lets the originator change connection parameters without first closing the connection. The application decides which parameters can actually be modified and which must be left alone.

Most engineers never see null Forward_Open directly — engineering tools issue it transparently when you change a configuration parameter on a running connection.

The connection lifecycle

A typical CIP connection lifecycle:

  1. Forward_Open (0x54) issued by originator → target
  2. Forward_Open reply (0xD4) with assigned Connection IDs from target → originator
  3. Cyclic data exchange at the negotiated APIs (Class 0/1 packets on UDP port 2222 in EtherNet/IP)
  4. Forward_Close (0x4E) at the end of the session → connection torn down cleanly OR
  5. Timeout — RPI × Multiplier elapses without a packet → connection declared dead automatically

The timeout path is automatic — if a network failure prevents packets from flowing, the connection dies on its own and both sides clean up. The Forward_Close path is the polite way to end a connection, freeing target resources immediately rather than waiting for the timeout.

Practical example — a PLC opening a Class 1 connection

Imagine a 1756-L73 ControlLogix PLC opening a connection to a 1734-AENT Point I/O adapter with two input modules at slots 1 and 2.

The Forward_Open request might look like:

Service: 0x54 (Forward_Open)
Request Path: 20 06 24 01  (Class 0x06, Instance 1 - Connection Manager)

Forward_Open Parameters:
  Priority/Time_tick:                0x07
  Time-out_ticks:                    0xC9 (201 ticks)
  O→T Connection ID:                 0x80012345  (chosen by originator)
  T→O Connection ID:                 0x80012346
  Connection Serial Number:          0x0042
  Originator Vendor ID:              0x0001  (Rockwell)
  Originator Serial Number:          0x12345678  (PLC's serial number)
  Connection Timeout Multiplier:     0x02  (×16)
  Reserved:                          00 00 00
  O→T RPI:                           0x0001E848  (125,000 µs = 125 ms)
  O→T Network Connection Parameters: 0x43F8  (Point-to-point, Low priority, fixed size, 8 bytes)
  T→O RPI:                           0x0001E848  (125 ms)
  T→O Network Connection Parameters: 0x43F8
  Transport Type/Trigger:            0x01  (Class 1, cyclic, client)
  Connection_Path_Size:              0x0A  (10 words = 20 bytes)
  Connection_Path:
    Electronic Keying Segment:       Vendor=1, Type=0x0C, Product=0xB8, Rev=4.1
    Class 0x04 (Assembly):           20 04
    Configuration Assembly Inst 102: 24 66
    Consumed Assembly Inst 103:      2C 67  
    Produced Assembly Inst 104:      2C 68

The 1734-AENT validates everything, allocates a connection, and responds:

Service: 0xD4 (Forward_Open reply)
General Status: 0x00 (Success)

Response Parameters:
  O→T Connection ID:                 0x80012345  (echoed)
  T→O Connection ID:                 0xABCDEF01  (target-assigned for multicast)
  Connection Serial Number:          0x0042  (echoed)
  Originator Vendor ID:              0x0001  (echoed)
  Originator Serial Number:          0x12345678  (echoed)
  O→T API:                           0x0001E848  (125 ms — accepted as requested)
  T→O API:                           0x0001E848
  Application Reply Size:            0x00

The connection is now open. The PLC produces output data every 125 ms tagged with Connection ID 0x80012345. The 1734-AENT produces input data tagged with 0xABCDEF01. Both flow over UDP port 2222.

Reading Forward_Open in Wireshark

Wireshark’s CIP dissector decodes Forward_Open requests and replies natively. Useful filters:

cip                                       # All CIP traffic
cip.service == 0x54                       # Forward_Open requests
cip.service == 0xD4                       # Forward_Open replies
cip.service == 0x5B                       # Large_Forward_Open requests
cip.service == 0xDB                       # Large_Forward_Open replies
cip.service == 0x4E                       # Forward_Close
cip.genstat == 0x01                       # All CIP failures (includes failed Forward_Opens)
cip.cm.ext.code != 0                      # Frames with non-zero Connection Manager Extended Status

A productive diagnostic workflow:

  1. Start a capture before the failure begins (or use continuous capture)
  2. Apply cip.service == 0x54 to see every Forward_Open attempt
  3. For each one, look at the matching cip.service == 0xD4 reply
  4. If General Status is non-zero, expand the reply to find the Extended Status code
  5. Match the Extended Status against the table above

For broader EtherNet/IP capture workflows, see our Wireshark for EtherNet/IP guide.

Troubleshooting checklist

When a Forward_Open fails, walk this list:

  1. Is the device reachable? Ping the IP. If ping fails, the network is broken — not a CIP problem.
  2. Can you read the Identity Object? Try a simple Get_Attribute_Single on Class 0x01, Instance 1. If this fails, encapsulation or basic CIP is broken — fix that first.
  3. Read the Extended Status. Specific guidance per code:
    • 0x0100: Wait or power-cycle the device — a stuck connection is holding the slot
    • 0x0106: Another scanner owns the device — find and remove it, or use this scanner instead
    • 0x0109: Connection size doesn’t match — check assembly sizes in the device’s EDS file
    • 0x0111: RPI not in range — increase RPI to the device’s supported minimum
    • 0x0113: Out of connections — close other connections or use a bigger device
    • 0x0114-0x0116: Electronic keying — set keying to “Compatible Module” or update firmware revision in config
    • 0x0117: Wrong assembly instance — verify against EDS
  4. Confirm the assembly instances and data sizes. Open the EDS file or device manual. Make sure the Configuration, Consumed, and Produced assembly instances in your configuration match what the device actually exposes.
  5. Try a known-good baseline. If you have an identical device running on a different PLC, compare the Forward_Open requests in Wireshark side by side. Whatever differs is your problem.
  6. Power-cycle the device. Genuinely resets all internal state including stuck connections and CFUNID locks.

Frequently asked questions

What is CIP Forward_Open?

Forward_Open is the CIP service used to establish a connection between an originator (typically a PLC) and a target device (I/O block, drive, etc.). It is service code 0x54 of the Connection Manager Object (class 0x06). Every cyclic I/O connection in CIP begins with a Forward_Open request.

What is the service code for Forward_Open?

The service code for Forward_Open is 0x54 (decimal 84) per ODVA’s CIP Networks Library Volume 1, Section 3-5.5.2 and Table 3-5.7. The reply service code is 0xD4 (0x54 with bit 7 set). The related Large_Forward_Open service uses code 0x5B (reply 0xDB) for connections exceeding 511 bytes.

What is the difference between Forward_Open and Large_Forward_Open?

Forward_Open (0x54) uses a 16-bit Network Connection Parameters field with a 9-bit size field — limiting connections to 511 bytes per direction. Large_Forward_Open (0x5B) uses 32-bit Network Connection Parameters with a 16-bit size field, supporting connections up to 65,535 bytes per direction. Modern PLCs exchanging large structured data over single I/O connections typically use Large_Forward_Open. Engineering tools select automatically based on the configured connection size.

What does Extended Status 0x0106 mean?

Extended Status 0x0106 means “Ownership conflict” — another scanner already owns the connection to this device. CIP allows only one exclusive-owner scanner per non-redundant device. To fix: either remove the other scanner’s configuration or use that scanner instead. If the conflict is stale (the original owner is no longer active), a device power-cycle clears it.

What does Extended Status 0x0111 mean?

Extended Status 0x0111 means “RPI not supported” — the Requested Packet Interval is outside the device’s supported range. Either too fast (the device can’t keep up) or too slow (the device doesn’t support intervals that long). Check the EDS file or device manual for the supported RPI range and adjust your configuration.

What does Extended Status 0x0114 mean?

Extended Status 0x0114 means “Vendor ID or Product Code mismatch” — electronic keying failed because the Vendor ID or Product Code in your configuration doesn’t match the actual device. Either swap to the correct device, update your configuration to match, or change the keying mode to “Compatible Module” or “Disable Keying” in your engineering tool.

What is RPI in Forward_Open?

RPI stands for Requested Packet Interval — the desired update rate of the cyclic data exchange, in microseconds. The Forward_Open request includes separate O→T RPI and T→O RPI fields because the two directions can update at different rates. The target either accepts the requested RPI or rejects with Extended Status 0x0111. The target’s reply includes the API (Actual Packet Interval), which may differ from the RPI if the target had to round to a supported value.

What is electronic keying in Forward_Open?

Electronic keying is the mechanism in Forward_Open that validates the device matches the configuration. The Connection Path includes a key segment with Vendor ID, Device Type, Product Code, and Revision. The target checks these against its own Identity Object and rejects the connection if they don’t match — returning General Status 0x01 with Extended Status 0x0114, 0x0115, or 0x0116 depending on which check failed. Engineering tools usually let you choose strict, “Compatible Module,” or “Disable Keying.”

What is the Connection Timeout Multiplier?

The Connection Timeout Multiplier is a value (0-7) that maps to a power-of-2 multiplier (4, 8, 16, 32, 64, 128, 256, 512). The connection is declared dead after RPI × Multiplier of silence. So an RPI of 10 ms with multiplier value 2 (×16) declares the connection dead after 160 ms without a packet. Tight multipliers detect failures fast but cause nuisance trips on jittery networks; loose multipliers tolerate jitter but delay fault detection.

What is a null Forward_Open?

A null Forward_Open is a Forward_Open where both Connection Type bits are set to NULL (00) in both the O→T and T→O Network Connection Parameters. The target uses null Forward_Open for connection reconfiguration — when the same vendor_ID + connection_serial_number + originator_serial_number combination appears, the target does not treat it as a duplicate but forwards it to the application for parameter updates. Engineering tools issue null Forward_Open transparently when you modify a parameter on a running connection.

How do I troubleshoot a Forward_Open failure?

Read both General Status (almost always 0x01) and Extended Status. The Extended Status is where the actual reason lives. Common causes: ownership conflict (0x0106), RPI not supported (0x0111), out of connections (0x0113), electronic keying mismatch (0x0114-0x0116), wrong assembly size (0x0109), or wrong assembly instance (0x0117). Use Wireshark to capture the request and reply, then match the Extended Status code against the reference table. Power-cycling the device often clears stuck states.

What port does Forward_Open use?

Forward_Open is sent over TCP port 44818 as encapsulated CIP traffic. The EtherNet/IP encapsulation header wraps a SendRRData command (0x006F) carrying the Forward_Open service request. The resulting connection then exchanges I/O data over UDP port 2222 using the Connection IDs assigned in the Forward_Open reply. See our CIP Protocol Ports article for details.

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.