2011-06-26 31 views

回答

2

@Eugen已經指出TCP_NODELAY,這可能是您的問題最直接的答案。

我會看着一個完全不同的方向:因爲你顯然更關心延遲而不是帶寬,可以考慮使用UDP而不是TCP。是的,有些部件不太方便,但如果你想最大限度地減少延遲,它通常(通常是)更好的答案。

+0

哦,是TCP比'TCP_NODELAY'選項的UDP慢嗎?我能獲得更多細節嗎? – Eonil

+1

@Eonil:它的某些部分肯定是(例如,用於建立TCP連接的三次握手)。其他部分實際上並不需要速度較慢,但​​IP堆棧,路由器等傾向於設計假設TCP允許更多延遲,並且在此基礎上優化流量流量。例如,即使您在本地IP堆棧上設置了TCP_NODELAY,路由器仍可能決定將其與其他數據包合併以提高帶寬使用率。 –

+1

@Eonil:最重要的區別在於TCP確保數據包以正確的順序到達,而UDP不能確保任何事情:數據包可能以錯誤的順序到達,根本不是,甚至是重複的。爲了確保這一點,TCP需要一些開銷(握手開始連接,編號的數據包,到達的數據包的確認(以及未到達的數據包的重發))。 –

3

你指的是哪個Nagle's algorithm

是通過減少 一些需要發送 在網絡上的數據包的改進TCP/IP網絡的效率 的一種手段。

通常可以通過TCP_NODELAY套接字選項在應用程序級別禁用它。

+1

+1用於回答問題。儘管如此,禁用Nagle的算法最終會導致低流量連接的一些重大問題。 Nagle的算法一起批量處理數據以保持TCP/IP開銷不變。通過TCP/IP進行連接以及像Telnet這樣的簡單服務最終可能會在沒有它的情況下高達4000%的開銷。 – jmkeyes