Logo

dev-resources.site

for different kinds of informations.

Why does TCP stick to packets? How to solve the sticky package problem?

Published at
9/26/2022
Categories
tcp
Author
ebyte18
Categories
1 categories in total
tcp
open
Author
7 person written this
ebyte18
open
Why does TCP stick to packets? How to solve the sticky package problem?

In our applications involving the TCP protocol, the problem of sticky packets often occurs. The so-called sticky packet, simply put, means that I have two messages, obviously the code of the sender is sent in two times, but the two messages are received at one time at the receiver. This situation is very common in both the embedded industry and the Internet industry.

  1. Why does the TCP protocol stick to packets?

Then you need to understand the definition of TCP first. TCP (Transmission Control Protocol) is a connection-oriented, reliable, byte stream-based transport layer communication protocol.
Among them, the biggest relationship with sticky packets is based on the feature of byte stream. The byte stream can be understood as the data flowing in a two-way channel. This data is actually the binary data we often say, which is simply a lot of 01 strings. There are no boundaries between these 01 strings.

The data sent by the application layer to the TCP protocol is not sent to the destination host in message units, but sent to the downstream in the form of byte streams. These data may be cut and assembled into various data packets, and the receiving end receives these The previous message is not restored correctly after the data package, so the sticky package phenomenon occurs.
Then why can't it be restored correctly? There are two main reasons:

  1. The reason for the sender

When the sender assembles the message, it combines several small packets into one packet, so that the receiver cannot parse out the small packets. This corresponds to Nagle's algorithm. Because both TCP and Nagle's algorithm are products of the last century, doing so in early networks can significantly reduce network stress. Otherwise, sending small packets with only a few bytes frequently will seriously waste network IO performance.
However, in the modern Internet, the network performance has been greatly improved. It seems that the IO performance improved by the Nagle algorithm is not so important. On the contrary, due to the operation of waiting for the data to be merged, the transmission delay will become larger. In the application of online games , it will greatly affect the experience. So it is generally turned off now.

  1. Reasons on the receiving end

After the receiving end receives the message, the application layer cannot always take the data immediately, and there is always a receive buffer. If the interval between two independent messages entering the buffer is too small, the application layer cannot take the previous message in the middle of the two messages, then the next time it is read, the two packets of messages are bound to be read at the same time, which will also lead to sticky packets.

And this situation cannot be avoided by letting the sender send packets evenly in time, because of the existence of network instability, even packets sent evenly in time may appear randomly to the receiver.

Second, how to avoid the negative impact of sticky bags?

According to the above analysis, it is not difficult to find that it is basically impossible to eliminate the problem of sticky bags. Even if the sender and receiver can control themselves, the process of network transmission is difficult to control.

But even if the problem of sticky packets exists, it does not affect our large-scale use of the TCP protocol. Because this problem is very well handled at the application layer. There are roughly two ideas:

  1. Add a special flag as a separator in the message

In this way, when the application layer detects the special separator, it knows that this is the start and end of a packet, and can perform operations such as fragmentation, and the problem is solved.

However, there are some disadvantages. For example, if the delimiter is defined as "12345678", what if the string of "12345678" appears in the message content? This will cause the message to be sliced โ€‹โ€‹abnormally, resulting in the wrong message being received. However, if you can control the content of the message and ensure that the content of "12345678" will not appear in it, this method is more flexible.

  1. Add the length of the message

Read the message length information according to the agreed length field, and then read the message content according to the message length information. This is also a very common method and is reflected in many protocols.

  1. Add package header

The sender adds a packet header to each data packet, and the header should contain at least the length of the data packet, so that the receiver can know the actual length of each data packet by reading the length field of the packet header after receiving the data.

The above is the content of this issue about solving the problem of TCP sticky packets. Small code words are not easy, please like and support! See you next time~~

tcp Article's
30 articles in total
Favicon
TCP-based P2P data transmission
Favicon
4G module update for the power failure alarm device with call telephone function
Favicon
Understanding Internet Protocols
Favicon
Docker Server Certificate with SSL
Favicon
Decoding Networking Protocols: A Guide to TCP/IP, HTTP, Socket, and WebSocket
Favicon
How to Run Multiple Tokio Runtimes in a Rust Application
Favicon
Optimizing global message transit latency: a journey through TCP configuration
Favicon
Setting Up a Simple TCP Server
Favicon
Introduction
Favicon
You (probably) do not understand UDP
Favicon
Chat Server in Ruby Sockets
Favicon
Unveiling the Power of TCP: Building Apps with Node.js's net Module
Favicon
TCP vs UDP Understanding the Differences
Favicon
A Beginner's Guide to Networking Protocols: TCP, UDP, HTTP, and HTTP/3
Favicon
Understanding WebSocket and creating from Scratch with JavaScript
Favicon
Why Linux 6.8 Networking Updates are a Big Deal
Favicon
Network - socket (1)
Favicon
Understanding Mobile TCP: Enhancing Connectivity in a Dynamic World
Favicon
Unveiling IP Spoofing Attacks in TCP/IP Networks: Detection, Prevention, and Impact
Favicon
Tipos de Sockets em TCP e UDP: Escolhendo o Caminho Adequado
Favicon
Network protocol
Favicon
What Would Marco Polo Think About the WebSockets?
Favicon
Server-Sent Events Explained
Favicon
TCPDump Kullanฤฑmฤฑ
Favicon
TCP์˜ 3๋Œ€ ์ œ์–ด
Favicon
Optimizing Large File Transfers in Linux with Go - An Exploration of TCP and Syscall
Favicon
TCPs challenger: Homa
Favicon
What happens when you type a URL into your browser: The whole story
Favicon
what happens when your type google.com in your browser and press enter
Favicon
Why does TCP stick to packets? How to solve the sticky package problem?

Featured ones: