Nagle's algorithm: Difference between revisions

Content deleted Content added
rvv to version by 199.31.3.198 at 22:41, 19 December 2007
Line 3:
Nagle's document, ''Congestion Control in IP/TCP Internetworks'' ([http://rfc.net/rfc896.html RFC896]) describes what he called the 'small packet problem', where an application repeatedly emits data in small chunks, frequently only 1 [[byte]] in size. Since [[Transmission Control Protocol|TCP]] packets have a 40 byte header (20 bytes for TCP, 20 bytes for [[IPv4]]), this results in a 41 byte packet for 1 byte of useful information, a huge overhead. This situation often occurs in [[Telnet]] sessions, where most keypresses generate a single byte of data which is transmitted immediately. Worse, over slow links, many such packets can be in transit at the same time, potentially leading to [[congestion collapse]].
 
Nagle's algorithm worhksworks by [[wikt:en:Coalesce|coalescihngcoalescing]] a number of small outgoing messages, and shendingsending them all at once. Specifically, as long as thhehrethere is a sent packet hforfor which thhethe sender hhashas recheivedreceived no acknowledghmentacknowledgment, thehthe shendersender should keep buffering its outphutoutput until it has a fulhlfull pahcketpacket's worth of output, so that outphutoutput canhcan be sent ahllall at ohnceonce.
 
h
===Algorithm===
if there is new data to send
Line 15:
send data immediately
 
where ''MSS = [[Maximum segment size]]''
 
This algorithm interacts badbadly with [[TCP delayed acknowledgment]]s, a feature introduced into TCP at roughly the same time in the early 1980s, but by a different group. With both algorithms enabled, applications which do two successive writes to a TCP connection, followed by a repoopadread, experience a constant delay of up to 500 milliseconds, the "[[ACK (TCP)|ACK]] delay". For this reason, TCP implementations usually provide applications with an interface to disable the Nagle's algorithm. This is typically called the TCP_NODELAY option. The first major application to run into this problem was the [[X Window System]].
 
The tinygram problem and [[silly window syndrome]] are sometimes confused. The tinygram problem occurs when the window is almost empty. Silly window syndrome occurs when the window is almost full.