If you are wondering how to disable Nagle's algorithm, here you'll find an answer. But you must be aware of consequences. Learn more and take your decision!
Nagle's algorithm. The background
Nagle's algorithm intends to reduce the number of packets sent over the network by grouping them into larger segments. The basic principle is, that for small messages, there is a delay before the data is actually sent over the network.
If more messages are enqueued to be sent during this delay, they are grouped into one larger data segment. This reduces the overhead of TCP/IP headers - which is 40 bytes per packet (for IPv4), even if the data itself is just one byte.
John Nagle worked over the algorithm for Ford Aerospace - the aerospace and defense division of Ford Motor Company. It was designed to relieve congestion for a private TCP/IP network operated by the company and broadly introduced in 1984.
When do you want to disable Nagle's algorithm?
As always the answer is 'it depends'. For some applications, the low latency of communication is crucial. One example of such a scenario is online gaming, another might be real-time data processing.
Nagle's algorithm, however, introduces additional delays that might cause problems in those scenarios.
Caution! There are ways to turn Nagle's algorithm off, however, what you should do first, is to make sure this is the actual source of the problem you are trying to solve. Making this configuration change will harm the overall throughput of the communication.
How to disable Nagle's algorithm?
So, how do you turn off the algorithm? You can disable it:
- at the OS level (on Windows by editing adapter settings in the registry)
- if you work with the TcpClient, set
(also available on the
`tcpClient.NoDelay = true`
- if you use HTTP, set
`ServicePointManager.UseNagleAlgorithm = false` (before making any HTTP calls)