Overview of SCTP in Industrial Automation
The Stream Control Transmission Protocol (SCTP) is a transport layer protocol defined in RFC 4960 and updated by RFC 9260 in 2022. It was originally specified by the IETF Signaling Transport (SIGTRAN) working group in 2000 to carry PSTN signaling messages over IP networks. As described in the SCTP Wikipedia reference, SCTP combines the reliability of TCP with the message boundary preservation of UDP, and adds two features that neither TCP nor UDP provide: multi-homing and multi-streaming.
In an industrial SIMATIC environment, the most common reason to consider SCTP is a third-party mandate (customer requirement, telecom backhaul, or regulatory framework) that specifies SCTP as the only acceptable transport. SIMATIC S7-1200 and S7-1500 CPUs and their associated CP modules do not expose SCTP as a configured transport option in the TIA Portal connection configuration; the protocol is not part of the published firmware feature set of the Siemens SIMATIC CP family as of the current TIA Portal V18 / V19 generation. This reference describes the architecture, the affected modules, the alternatives, and the available workaround strategies for engineers who must integrate SIMATIC into an SCTP-mandated environment.
SCTP Technical Architecture
SCTP operates at OSI layer 4 and provides connection-oriented, message-oriented, reliable data transfer. The common header is exactly 12 bytes, followed by one or more chunks:
| Field | Length (bits) | Description |
|---|---|---|
| Source Port | 16 | Sender SCTP port, equivalent to TCP/UDP source port |
| Destination Port | 16 | Receiver SCTP port |
| Verification Tag | 32 | Anti-spoofing tag, must match the Initiate Tag of the peer |
| Checksum | 32 | CRC32c (RFC 9260) covering the entire SCTP packet |
Each chunk carries its own 4-byte header: Chunk Type (1 byte), Chunk Flags (1 byte), Chunk Length (2 bytes), and a variable-length Chunk Value. The valid chunk types in the current RFC 9260 specification are:
| Type ID | Name | Purpose |
|---|---|---|
| 0x00 | DATA | User payload, the only chunk that carries application data |
| 0x01 | INIT | First packet of the four-way handshake |
| 0x02 | INIT-ACK | Response to INIT, includes a cryptographic cookie |
| 0x03 | SACK | Selective acknowledgment, identifies received TSNs |
| 0x04 | HEARTBEAT | Path probe, sent to all inactive alternate addresses |
| 0x05 | HEARTBEAT-ACK | Reply to HEARTBEAT, validates path |
| 0x06 | ABORT | Forced association termination |
| 0x07 | SHUTDOWN | Graceful association close request |
| 0x08 | SHUTDOWN-ACK | Acknowledges SHUTDOWN |
| 0x09 | SHUTDOWN-COMPLETE | Final chunk of graceful close |
| 0x0A | ERROR | Reports protocol errors |
| 0x0B | COOKIE-ECHO | Third packet of handshake, returns the cookie |
| 0x0D | COOKIE-ACK | Fourth packet of handshake, confirms association established |
| 0x0F | CWR | Congestion Window Reduced |
| 0x40 | FORWARD-TSN | Used with PR-SCTP partial reliability |
| 0x82 | I-DATA | Replaces DATA for I-DATA support in RFC 8260 |
| 0x0E | AUTH | Authenticated chunk (RFC 4895) |
| 0xC1/0x80 | ASCONF / ASCONF-ACK | Dynamic address reconfiguration |
The four-way handshake replaces the TCP three-way handshake and adds DoS protection through a state cookie. Multi-homing means that each endpoint advertises a list of transport addresses; HEARTBEAT chunks continuously monitor reachability of each alternate address, and a path failure triggers retransmission on a backup without re-establishing the association. Multi-streaming allows multiple independent data flows inside one association so that head-of-line blocking affects only one stream. SCTP also implements message bundling: several short DATA chunks from different streams can be concatenated into a single IP packet to improve throughput, and partial reliability (PR-SCTP, RFC 3758) lets the application set a TTL for each message.
SIMATIC CP Module Compatibility Assessment
None of the SIMATIC S7-1200 or S7-1500 CP modules listed below ships with a firmware release that exposes SCTP as a user-selectable transport in the TIA Portal project tree. The published manuals enumerate only TCP, UDP, ISO-on-TCP, PROFINET, S7 communication, Modbus TCP, OPC UA Transport Profile, and IEC 61850 MMS (selected CPs). SCTP is therefore a non-feature at the catalog level, and a feature request raised with Siemens support will be returned as "not on the roadmap" for the legacy S7-300 / S7-400 CP family.
| Module | CPU Family | MLFB / Catalog No. | Native SCTP |
|---|---|---|---|
| CP 1543-1 | S7-1500 | 6GK7543-1AX00-0XE0 | No |
| CP 1545-1 | S7-1500 | 6GK7545-1DX00-0XE0 | No |
| CP 1243-1 | S7-1200 | 6GK7243-1BX30-0XE0 | No |
| CP 1243-7 LTE | S7-1200 | 6GK7243-7KX30-0XE0 | No |
| CP 343-1 | S7-300 | 6GK7343-1EX30-0XE0 | No |
| CP 343-1 Advanced | S7-300 | 6GK7343-1GX30-0XE0 | No |
| CP 443-1 | S7-400 | 6GK7443-1EX30-0XE0 | No |
| CP 443-1 Advanced | S7-400 | 6GK7443-1GX30-0XE0 | No |
| CP 1623 | PC-based | 6GK1162-3AA00 | Host stack dependent |
| CP 1628 | PC-based | 6GK1162-8AA00 | Host stack dependent |
The CP 1623 / CP 1628 are PCI Express cards supplied with a Siemens driver package. The driver provides the PROFINET, S7, and TCP/UDP acceleration features of the CP, but SCTP acceleration is not part of the documented feature set. A SIMATIC IPC running Windows or Linux can still open a raw SCTP socket on the underlying OS stack, but the CP firmware does not participate in the association. The CPU side stays on TCP/UDP; the IPC side speaks SCTP to the remote peer.
Industrial Use Cases That Specify SCTP
The vast majority of SIMATIC deployments never encounter SCTP because industrial automation standardized on TCP and ISO-on-TCP decades ago. The following scenarios are the few that do require SCTP, and identifying the original use case is the first step in any workaround design:
- Telecommunications signaling — Diameter, M3UA, M2PA, M2UA, SUA, IUA, all of which were specified by IETF SIGTRAN and ITU-T on top of SCTP.
- 4G/5G mobile radio interfaces — S1AP, NGAP, X2AP, E1AP, F1AP, and N2 use SCTP per 3GPP TS 36.413, TS 38.413, and TS 38.472.
- Cellular IoT gateways — Some industrial 5G/4G routers expose a "raw SCTP" mode for backhaul into operator core networks.
- Substation automation over LTE — Certain IEC 61850-90-5 deployments have been implemented with SCTP at the transport layer in research contexts; deployed utility networks predominantly use TCP or UDP.
- Rail and defense signaling — Vendor-specific protocols in some signaling stacks still require SCTP for redundancy and authentication.
If a customer mandates SCTP, the request is almost always traceable to one of the bullet points above. The pragmatic reaction is not to seek a SIMATIC firmware patch that adds SCTP, but to introduce a gateway or a SIMATIC IPC that terminates the SCTP association outside the CPU.
Transport Protocol Alternatives in SIMATIC
SIMATIC offers a generous set of transport options. The table below compares the features that matter when SCTP is being considered as a replacement or substitute.
| Feature | TCP | UDP | ISO-on-TCP (RFC 1006) | SCTP (target) |
|---|---|---|---|---|
| Reliability | Byte-stream, reliable | Datagram, unreliable | Message-oriented, reliable | Message-oriented, reliable |
| Connection setup | 3-way | None | 3-way + TPDU | 4-way with cookie |
| Multi-homing | No (L4 only) | No | No | Yes, native |
| Multi-streaming | No | No | No | Yes, native |
| Message boundaries | No (byte stream) | Yes (datagram) | Yes | Yes |
| S7-1500 TIA block | TSEND_C / TRCV_C | TUSEND / TURCV | TSEND / TRCV via T_Conn | Not supported |
| NAT traversal | Good (helpers in stack) | Excellent | Poor | Poor (RFC 6951 extensions exist but rarely deployed) |
| Firewall footprint | Single port | Single port | Single port (ISO 5-byte TPDU header) | Single port, but stateful inspection per association |
| Wireshark dissector | Yes | Yes | Yes | Yes (heuristic on port) |
The RFC 1006 ISO transport over TCP, often called "ISO-on-TCP" or simply "ISO transport", is the closest S7-1500 native option to SCTP in terms of message orientation and reliability. It is the transport used by S7 communication and by the TSEND / TRCV blocks when the connection type is "ISO on TCP". T_Conn is the parameter data block that stores the remote IP, remote port, and the local TPDU length. ISO-on-TCP still does not give you multi-homing, but it gives you the message semantics and the ISO transport selector that the S7 partner expects.
UDP-Based Workaround Strategy
SCTP cannot be replaced by raw UDP without losing reliability, sequencing, multi-homing, and multi-streaming. A common engineering compromise is to implement a thin SCTP-like application layer on top of UDP, where the PC endpoint maintains the SCTP association with the remote peer and the SIMATIC CPU exchanges reliable datagrams with the PC over a single UDP socket. The pattern has the following components:
- Heartbeat probe: the PC sends a one-byte heartbeat to the CPU every 2 s; the CPU replies. If two consecutive heartbeats are missed, the CPU triggers a backup connection on a different IP.
- Sequence number: each datagram carries a 32-bit sequence number; the receiver buffers and discards duplicates.
- Application ACK: a 4-byte selective acknowledgment is sent every 16 datagrams, listing received sequence numbers.
- Reassembly: the message boundary is provided by a length prefix in the UDP payload, since UDP preserves datagram boundaries on its own.
- Keep-alive on UDP socket: configure TUSEND / TURCV with a connect_id that does not time out (TIA Portal default 30 s; raise to 600 s for store-and-forward applications).
The cost is a per-byte overhead of 4 (sequence) + 4 (length) + 4 (control flags) = 12 bytes per datagram, on top of the 8-byte UDP header and the 20-byte IPv4 header. For 100-byte payloads, the efficiency is 100 / (100+12+8+20) = 71 %, which is comparable to a 128-byte SCTP DATA chunk that would carry 100 bytes of payload and 4 bytes of chunk header plus 12 bytes of common header = 100/136 = 74 %.
PC-Based Software Implementation
For situations where the SCTP association must be terminated on the local site, a SIMATIC IPC (IPC 227G, IPC 277G, IPC 347G, IPC 647E, IPC 847E) is the most maintainable option. The CPU retains its PROFINET, S7, and TCP/UDP transport options, and the IPC is added as a peer in the S7 project under "PC station".
-
Linux kernel SCTP — The mainline kernel (≥ 2.6) ships lksctp with the net/sctp module. Enable with
modprobe sctpand inspect withcat /proc/net/sctp/assocsandcat /proc/net/sctp/remaddrs. - Windows SCTP — Microsoft does not ship a native SCTP stack with Windows. Options include the lksctp-for-Windows port, the sctp.ko driver package, and commercial libraries such as OpenFastCSC.
-
Python — The
pysctpmodule wraps the Linux kernel ABI; install withpip install pysctpon a SIMATIC IPC with matching kernel headers. - Java — The JDK does not include SCTP. The OpenFastCSC project provides a JNI binding for the Linux lksctp module.
Example Python SCTP server that listens on port 38412 and echoes a length-prefixed datagram to a SIMATIC IPC-side client. The struct sctp_initmsg is set to 10 outbound streams and 10 inbound streams:
import socket
import struct
SCTP_PROTO = 132 # IPPROTO_SCTP on Linux
SCTP_INITMSG = 14 # option name
initmsg = struct.pack('HHHH', 10, 10, 8, 60) # OS, MIS, max_att, max_to
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, SCTP_PROTO)
s.setsockopt(SCTP_PROTO, SCTP_INITMSG, initmsg)
s.bind(('0.0.0.0', 38412))
s.listen(5)
conn, addr = s.accept()
while True:
data = conn.recv(2048)
if not data:
break
# Length-prefixed echo: first 4 bytes = payload length
conn.send(struct.pack('!I', len(data)) + data)
On the SIMATIC side the data exchange happens through a TUSEND / TURCV pair that targets the IPC IP and UDP port 38412. The PROFINET traffic, S7 connection, and the IPC channel are independent and can coexist on the same Ethernet subnet. TIA Portal V18 and V19 expose TUSEND / TURCV under "Instructions > Communication > Open User Communication".
SIMATIC SCL Sample for the CPU Side
The following Structured Control Language snippet shows a typical S7-1500 bridge block. It opens a TCP listener on port 2000 for configuration, opens a UDP socket to the IPC at 192.168.10.50 / 38412, and forwards each received TCP request to the IPC as a length-prefixed UDP datagram.
// fbSctpBridge.scl - S7-1500 / S7-1200 (FW 4.4+)
FUNCTION_BLOCK "fbSctpBridge"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 1.0
VAR_INPUT
iEnable : BOOL;
iIpcIp : STRING[15] := '192.168.10.50';
iIpcPort : UINT := 38412;
iLocalTcpPort : UINT := 2000;
END_VAR
VAR_OUTPUT
oUdpBusy : BOOL;
oTcpBusy : BOOL;
oError : BOOL;
oStatus : WORD;
END_VAR
VAR
stUdpConnParams : TCON_IP_V4; // UDP param struct
stTcpConnParams : TCON_IP_V4; // TCP param struct
fbUdpSend : TUSEND;
fbUdpRecv : TURCV;
fbTcpServer : TSERVER;
tSendBuf : ARRAY[0..1452] OF BYTE;
tRecvBuf : ARRAY[0..1452] OF BYTE;
tLen : UDINT;
END_VAR
BEGIN
IF iEnable THEN
// TCP listener config
#fbTcpServer.connectId := 1;
#fbTcpServer.connParam.localPort := #iLocalTcpPort;
#fbTcpServer();
oTcpBusy := #fbTcpServer.status = 16#7000;
// UDP send / recv config
#fbUdpSend.id := 10;
#fbUdpSend.connectId := 2;
#fbUdpSend.req := TRUE;
#fbUdpSend.len := #tLen;
#fbUdpSend.data := #tSendBuf;
#fbUdpSend();
#fbUdpRecv.id := 11;
#fbUdpRecv.connectId := 2;
#fbUdpRecv();
oUdpBusy := #fbUdpSend.status = 16#7000 OR
#fbUdpRecv.status = 16#7000;
oStatus := #fbUdpSend.status;
END_IF;
END_FUNCTION_BLOCK
Compile the block in TIA Portal V18 or V19 and download it to the S7-1500 CPU. The TCP listener can be tested with telnet 192.168.10.20 2000 from the engineering station; the UDP datagram exchange can be observed in Wireshark with the filter udp.port == 38412.
Security and Network Considerations
SCTP brings its own security extensions, most of which are not natively available in SIMATIC and must be implemented on the IPC peer:
- RFC 4895 (AUTH) — adds a shared-key HMAC-SHA-1 to the INIT / INIT-ACK / COOKIE-ECHO handshake, preventing connection-flooding and man-in-the-middle attacks during association setup.
-
DTLS over SCTP (RFC 8261) — replaces the deprecated RFC 3436 TLS-over-SCTP, supports streaming datagram mode and application data record protection. Requires OpenSSL ≥ 1.1.1 with the
DTLS-SCTPprovider. - IPsec / ESP — can protect the entire SCTP packet at layer 3, used in carrier networks where M3UA runs over SCTP / IPsec.
- NAT traversal — SCTP is not NAT-friendly out of the box. RFC 6951 (UDP Encapsulation) wraps SCTP inside UDP and is the only practical path through enterprise firewalls. Most firewalls will still not understand the multi-homed paths and may drop heartbeats.
- Firewall rules — open the destination UDP port (RFC 6951 mode) or TCP port (deprecated) toward the IPC IP; the SIMATIC CPU does not need a rule change because it is only a TCP/UDP peer of the IPC.
- CP 1545-1 security features — the SIMATIC CP 1545-1 brings firewall, VPN, and TLS termination for TCP-based protocols; SCTP traffic is not filtered by the CP and must be terminated upstream.
Diagnostics and Verification Procedures
Once the gateway architecture is in place, the following checks verify that the SCTP association is alive and that the CPU-to-IPC datagram exchange is healthy:
- On the SIMATIC IPC, run
ss -K -punder Linux (iproute2 ≥ 4.16) to see active SCTP associations, including TSN, SSN, and the state (ESTABLISHED, SHUTDOWN-PENDING). On older systems usecat /proc/net/sctp/assocs. - On the same IPC, run
cat /proc/net/sctp/remaddrsto list remote addresses and the primary / active path. - Capture with Wireshark and apply the display filter
sctp; the source / destination port, chunk type, TSN, and SSN are decoded. Multi-homing is visible when the same association shows two different IP source addresses for HEARTBEAT chunks. - In TIA Portal online diagnostics, open the CPU's diagnostic buffer and the CP 1543-1's connection statistics; no SCTP counters are exposed, but UDP datagram counters on TUSEND / TURCV confirm the IPC↔CPU link.
- Use
tshark -z sctp,assocto enumerate all SCTP associations, retransmission counts, and RTT estimates. - In the TIA Portal project, right-click the CPU and select "Online & Diagnostics > Diagnostic buffer" to confirm no communication alarms raised by the CP 1543-1 during the SCTP association lifetime.
If a connection fails, the first check is whether the Wireshark capture shows an INIT / INIT-ACK / COOKIE-ECHO / COOKIE-ACK handshake; an absent INIT means the SCTP peer is unreachable, while an absent COOKIE-ACK means the path MTU is below 1280 bytes and the handshake is being fragmented. In the latter case, raise the MTU on the managed switch port to ≥ 1500 bytes and disable jumbo frame fragmentation of the SCTP cookie. A second common failure is the SIMATIC CPU's TCP connection watchdog (default 30 s) closing the socket while the IPC is still waiting for the next SCTP HEARTBEAT; raise the CPU-side keep-alive in the T_Conn parameter to 600 s.
Migration Path and Field-Proven Tips
When the engineering team is forced to deploy SIMATIC into an SCTP-mandated environment, the field-proven rollout pattern is as follows:
- Validate that the remote peer really requires SCTP. Many "SCTP required" specifications in vendor RFPs are a copy-paste from a 3GPP document and the peer will accept TCP if you ask.
- If SCTP is non-negotiable, source a SIMATIC IPC with a Linux image that ships the lksctp kernel module. Siemens does not bundle the module on its IPC images; you will need to rebuild the kernel or use a third-party distribution.
- Configure the IPC as a "PC station" in the TIA Portal project and add an S7 connection to the CPU. This is the control plane; the SCTP traffic is the data plane and never touches the S7 protocol.
- Open the firewall on the managed switch between the IPC and the remote peer. Add a SPAN port to a Wireshark capture node so that the SCTP association can be observed during commissioning.
- Commission with a synthetic load generator that sends 100 INIT/s and 1000 DATA/s for 24 hours; the SIMATIC CPU is rated for a fixed number of open user connections (typically 64 for S7-1516, 32 for S7-1511) and the watchdog will close the UDP socket if the load exceeds the configured resource limit.
- Document the architecture, the part numbers, the firmware versions, and the IP addresses in the project's network diagram. The SCTP gateway is a critical single point of failure; the customer will need this information for maintenance.
Frequently Asked Questions
Does any SIMATIC S7-1500 or S7-1200 CP module support SCTP natively?
No. The CP 1543-1, CP 1545-1, CP 1243-1, CP 1243-7 LTE, CP 343-1, CP 343-1 Advanced, CP 443-1, and CP 443-1 Advanced expose TCP, UDP, ISO-on-TCP, PROFINET, S7 communication, Modbus TCP, OPC UA, and IEC 61850 MMS, but SCTP is not part of the published firmware feature set. Any future SCTP support would be documented in a firmware release note on the Siemens support portal.
Can UDP be used on the SIMATIC CPU to mimic SCTP?
UDP itself is connectionless and unreliable; it cannot replicate SCTP semantics. The practical workaround is to add a SIMATIC IPC that terminates the SCTP association and exchanges reliable UDP datagrams with the CPU using TUSEND / TURCV. The CPU still does not speak SCTP, but the external observer sees a working SCTP association through the IPC gateway.
How does SCTP multi-homing differ from TCP application-level failover?
SCTP multi-homing is implemented inside the transport layer: each endpoint advertises a list of IP addresses, HEARTBEAT chunks continuously probe the secondary paths, and a path failure causes SCTP to switch the primary path without tearing down the association. TCP failover is implemented in the application (for example, S7 redundancy) or in the routing layer; it requires a full socket close and reopen on the alternate path, which interrupts the application state.
Which industrial automation protocols actually use SCTP?
None of the mainstream industrial automation standards. IEC 61850 uses MMS over TCP, PROFINET uses its own DCOM-free RPC, EtherNet/IP uses TCP or UDP with CIP encapsulation, and Modbus TCP uses TCP. SCTP is used in 3GPP mobile signaling (S1AP, NGAP, X2AP, F1AP) and in legacy PSTN signaling stacks such as Diameter, M3UA, M2PA, M2UA, SUA, and IUA.
What is the closest SIMATIC-native substitute for SCTP behavior?
ISO-on-TCP (RFC 1006) over a T_Conn configured as "ISO on TCP" in TIA Portal is the closest match. It is reliable, message-oriented, and supports the same TPDU-based protocol IDs used by S7 communication. It does not provide multi-homing or multi-streaming, so a higher-level redundancy scheme (for example, MRP or S7 H redundancy) is required for failover.
Does the SIMATIC CPU see the SCTP association at all?
No. The CPU only sees the UDP socket terminated by TUSEND / TURCV on the SIMATIC IPC. The IPC maintains the SCTP association with the remote peer and forwards the payload across the UDP socket. The CPU and the CP 1543-1 do not parse SCTP packets, do not see the verification tag, and do not react to HEARTBEAT chunks.