← Back to Software Development

Data Transmission Between Applications

Data transmission through serialisation, network transport, routing, and parsing.

Software DevelopmentData TransferNetworking

Data transmission between applications looks simple from the caller's side. One service sends a request, another returns a response. Under the surface, the data is serialised into bytes, split into packets, routed across networks, reassembled, parsed, and then interpreted by an application protocol. Each layer solves a different problem, and failures at any layer can surface as "the API is down" even when the root cause is more specific.

Step 1: the sender turns objects into bytes

An application cannot send an in memory object directly over the network. It first serialises the data into a wire format such as JSON, Protocol Buffers, MessagePack, or a custom binary protocol. The choice affects interoperability, payload size, and CPU cost. JSON is easy to inspect and widely supported, but verbose. Binary formats are smaller and faster to parse, but less human friendly.

The sender then wraps those bytes in an application protocol such as HTTP, gRPC, WebSocket, SMTP, or AMQP. That protocol defines message boundaries, headers, status codes, and behaviour on errors.

Step 2: transport and networking move the bytes

Below the application protocol, a transport protocol takes over. TCP is common because it gives ordered, reliable delivery through acknowledgements and retransmissions. UDP is used when lower latency or custom reliability logic matters more than in order delivery. TLS may sit between the application and transport layers if confidentiality and integrity are required.

The operating system divides the outgoing byte stream into packets sized for the network path. Routers forward those packets based on IP addresses. The receiver's operating system reassembles the transport stream, verifies checksums, and delivers the resulting bytes to the listening process.

Step 3: the receiver reconstructs meaning

The receiving application parses the protocol, reads headers, validates the payload, and deserialises the bytes back into useful data structures. Only then can business logic run. If the schema has changed incompatibly, the network may be working perfectly while the application still fails.

Where transmission usually goes wrong

Failures are not limited to total outages. A request may time out because packets are lost and retransmitted. A payload may be truncated by a proxy limit. A client may retry an operation that was actually applied, creating duplicates. Character encoding may be misread. Compression may save bandwidth but increase CPU enough to hurt latency.

Distributed systems also face partial failure. The sender might believe a request failed because the response never arrived, while the receiver actually processed it successfully. This ambiguity is why idempotency keys, explicit timeouts, and correlation IDs are operationally important.

The practical view

Data transmission between applications is therefore a stack of transformations: object to bytes, bytes to packets, packets back to bytes, bytes back to objects. Reliability comes from understanding each boundary and deciding what guarantees the whole path really needs. Once that is clear, protocol choice, retry policy, and payload design become engineering decisions rather than folklore.