Modbus RTU vs TCP — Differences Explained

Both carry the same register data, but the transport layer is fundamentally different. Understanding these differences prevents misconfigurations and helps you choose the right protocol for your application.

Fundamentals Updated Feb 2026 8 min read

Side-by-Side Comparison

AspectModbus RTUModbus TCP
Physical LayerRS-485 (or RS-232)Ethernet (10/100/1000)
Default PortSerial COM portTCP port 502
AddressingSlave address (1-247)IP address + Unit ID
Error DetectionCRC-16TCP checksum (no Modbus CRC)
Frame DelimitingSilent interval (3.5 char times)MBAP header with length field
TopologyBus (daisy chain)Star (via switches)
Max Devices32 per segment (247 addressable)Unlimited (network capacity)
SpeedUp to 115200 baud (~11.5 KB/s)100 Mbps+ (practical: 10K+ msg/s)
Max Distance1200m (at 9600 baud)100m per segment (Ethernet)
Simultaneous Requests1 (half-duplex)Multiple (TCP is full-duplex)
Cost per DeviceLower (simple UART)Higher (Ethernet PHY + stack)

Frame Structure Differences

Modbus RTU Frame

┌──────────────┬───────────────┬──────────┬─────────┐
│ Slave Address │ Function Code │ Data     │ CRC-16  │
│ 1 byte        │ 1 byte        │ N bytes  │ 2 bytes │
└──────────────┴───────────────┴──────────┴─────────┘
← Frame bounded by silent intervals (≥3.5 char times) →

Modbus TCP Frame

┌────────────────────────────── MBAP Header ──────────────────────────────┐
│ Transaction ID │ Protocol ID │ Length  │ Unit ID │ Function │ Data      │
│ 2 bytes        │ 2 bytes (0) │ 2 bytes │ 1 byte  │ 1 byte   │ N bytes   │
└───────────────┴─────────────┴─────────┴─────────┴──────────┴───────────┘
← No CRC needed — TCP handles error detection →

Key differences in the frame:

When to Choose RTU

When to Choose TCP

ℹ TCP-to-RTU Gateways

You don't always have to choose one or the other. TCP-to-RTU gateways let your SCADA system use Modbus TCP while the field devices stay on RS-485. The gateway handles the protocol translation transparently. Just remember that the serial bus is still the bottleneck — one request at a time, at the serial baud rate.

Common Migration Pitfalls

RTU → TCP: Don't Forget the Unit ID

When migrating from RTU to TCP, the slave address becomes the Unit ID in the MBAP header. Make sure your TCP client sets the correct Unit ID, not just 0 or 1. If you're going through a gateway, the Unit ID routes to the correct downstream serial device.

TCP → RTU: Timing Matters

If you're adding RTU devices to a TCP-based system (via gateway), remember that serial is much slower. A single register read that takes 2ms on TCP takes 50-200ms on RTU at 9600 baud. Don't set your poll interval to 100ms and expect 50 RTU devices to keep up.

🔄 Works with Both

ModBus Pro supports RTU (serial) and TCP out of the box. Scan address ranges to find devices on your serial bus or your Ethernet network.

Download ModBus Pro