以下是對Nagle算法的兩個簡單描述。針對Nagle算法的描述正確嗎?
版本1:等待對端發送任何部分分組
2版前確認先前發送的分組:等待對等體確認發送任何部分分組
之前先前發送 局部包
第1版是什麼,我從谷歌搜索信息瞭解的結果,如Wiki(Nagle's algorithm)或TCP_CORK: More than you ever wanted to know
2版是什麼,我從Linux內核實現Nagle算法
static inline int tcp_nagle_check(const struct tcp_sock *tp,
const struct sk_buff *skb,
unsigned mss_now, int nonagle)
{
return (skb->len < mss_now &&
((nonagle & TCP_NAGLE_CORK) ||
(!nonagle && tp->packets_out && tcp_minshall_check(tp))));
}
功能tcp_minshall_check()檢查所有已發送小的數據包是否獲得確認的理解的結果。
所以我的問題是:
- 其描述是正確的?
- 如果兩者都是正確的,那麼Linux的修改有什麼優勢?
無論是正確的,有沒有這樣的事,作爲一個「局部包「在TCP中。 – Alnitak 2012-03-13 14:56:45
我猜「部分數據包」是指長度小於MSS的數據包。爲什麼它不在TCP中存在? – sliter 2012-03-13 15:06:14
,因爲TCP是一個面向流的協議,底層的_segmentation_應該是應用層不可見的。每個TCP數據包被定義完成(除非它已經遭受IP層_fragmentation_)。 – Alnitak 2012-03-13 15:08:39