1. nagle算法主要目的是減小網絡流量,當你發送的數據包過小時,TCP並不當即發送該數據包,而是緩存起來直到數據包
到達必定大小後才發送。算法
2. 當應用程序每次發送的數據很小,特別是只發送1個字節,加上TCP和IP頭的封裝,TCP頭佔20個字節,IP頭也佔20個字 節,這時候發一個包是41個字節,效率過低。而nagle算法容許計算機緩衝數據,當數據緩存到必定長度後,若是以前發送 的數據獲得了ACK確認且接收方有足夠空間容納數據 (固然也要考慮MSS),就發送這些數據,不然繼續等待。緩存
3. TCP socket提供了關閉nagle算法的接口,能夠經過TCP_NODELAY選項決定是否開啓該算法。 網絡
wikipedia上面關於這個算法的資料:http://en.wikipedia.org/wiki/Nagle's_algorithmsocket
wikipedia上有一段nagle的僞代碼便於理解:spa
if there is new data to send
if the window size >= MSS and available data is >= MSS
send complete MSS segment now
else
if there is unconfirmed data still in the pipe
enqueue data in the buffer until an acknowledge is received
else
send data immediately
end if
end if
end if
接口