Everyone who has any knowledge of the internet is well-aware of the Transport Control Protocol (TCP). Robert Kahn and Vinton Cerf invented TCP in the 1970s for satellite communications. In their work building a satellite communications network, they realized the need for a hardware-independent mechanism to move data from one computer to another. All prior work – remember, there was no internet – used systems highly customized for specific hardware implementations. They thought that a more general mechanism would make it easier to add connectivity to new systems.
They built TCP as a general communication mechanism that could easily be adapted to different computer systems. They architected it as a connection-oriented protocol that managed connections between client devices (initiators) and servers (responders). EtherNet/IP fans know these terms as Scanners and Adapters.
TCP is much improved over those early days. It is now part of the TCP/IP communication suite that is part of nearly every computer system on the planet. Its most important features are:
- Acknowledged communication – Every packet is acknowledged by the receiver.
- Automatic packet retransmission – Packets not arriving at their destination are automatically retransmitted.
- Ordered packet transmission – Packets are always received in the exact order that they were transmitted by the sender.
- Automatic fragmentation – Messages that exceed the packet size of the underlying media or technology are automatically fragmented at the sending node and reformed into the exact original message at the receiver.
Most of us understand TCP but what the heck is UA TCP? How does it differ from TCP?
Let’s start with the fact that UA TCP is still TCP. It is still Transport Control Protocol, with all the same characteristics of the Transport Control Protocol that we all use all day, every day for EtherNet/IP and PROFINET IO. What’s different is that when we speak about UA TCP, we are talking about a set of specific messages that are embedded in the TCP packet. UA TCP is actually a protocol embedded in a TCP packet.
Standard TCP transmits anything and everything. It doesn’t know or care about the contents of its packets. It just sends them from the current node to the destination node. In UA TCP, the contents of the message are important. In fact, what distinguishes TCP from UA TCP is that UA TCP is a protocol that exists within TCP. It describes the specific packets that are sent from the Client device to the Server.
The packets embedded in a UA TCP message serve several purposes. First, they allow the Client and Server to exchange basic link information: buffer sizes, maximum message sizes, maximum chunk count and other important restrictions on the communication channel. Secondly, the UA TCP protocol transfers UA Secure Conversation packets between a Client and a Server. The UA TCP protocol specifies the structure of signed messages, encrypted messages, and signed and encrypted messages.
The UA TCP transport protocol has the following responsibilities:
- opening a low-level communication link with Clients;
- passing message limits to the Client so it is aware of any Sever limitations regarding message sizes and available buffer sizes;
- chunking and de-chunking messages as they are sent and received;
- moving OPC UA secure conversation messages between clients and servers.
The UA TCP protocol is described in detail in the book OPC UA – UNIFIED ARCHITECTURE: THE EVERYMAN’S GUIDE TO OPC UA.