關於nagle及tcp nodelay的一些小結

2021-08-27 22:31:57 字數 543 閱讀 5939

一 準備知識點

1.1 mss

max segment size,就是tcp報文段中data欄位(非head)的最大長度,是tcp選項中最早的選項。mss在tcp三次握手中協商確定,由src-host、router、dst-host三類角色最終商討確認。mss對保證傳輸質量非常重要,因為tcp傳輸過程中,tcp-head、ip-head的尺寸一定,實際傳輸的data越小,一定size的資料需要傳輸的次數越多,同時傳輸效率=sum(data)/sum(segment) 越小。

mss的合理值 = 保證資料報不分片的最大值。對於ethnet,一般為1460。

前面說過mss在tcp建立連線的時候確認,具體流程如下:

二 nagle與delay ack的糾結

三 解決

四 參考

網路程式設計之nagle演算法和TCP NODELAY

之前寫過一篇blog 描述了用mina的時候寫socket發現的乙個詭異現象,當時將多個小資料寫操作合併成乙個寫操作,問題就沒了。chenshuo同學還建議我設定tcp nodelay,只是後來因為事情忙,也就沒有再深究下去。現在大概明白,是由於nagle演算法在搗亂。tcp ip協議中,無論傳送多...

關於Nagle演算法和粘包問題

tcp ip協議中,無論傳送多少資料,總是要在資料前面加上協議頭,同時,對方接收到資料,也需要傳送ack表示確認。為了盡可能的利用網路頻寬,tcp總是希望盡可能的傳送足夠大的資料。乙個連線會設定mss引數,因此,tcp ip希望每次都能夠以mss尺寸的資料塊來傳送資料 nagle演算法就是為了盡可能...

關於 dev null及用途

把 dev null 看作 黑洞 它非常等價於乙個只寫檔案.所有寫入它的內容都會永遠丟失.而嘗試從它那兒讀取內容則什麼也讀不到.然而,dev null 對命令列和指令碼都非常的有用.禁止標準輸出 1 cat filename dev null 2 檔案內容丟失,而不會輸出到標準輸出.禁止標準錯誤 1...