日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tcp协议栈优化1-增加TCP初始拥塞窗口 ===》流氓的方式

發(fā)布時(shí)間:2023/12/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tcp协议栈优化1-增加TCP初始拥塞窗口 ===》流氓的方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
看linux3.0 network代碼,發(fā)現(xiàn)TCP initcwd(初始擁塞窗口)默認(rèn)已經(jīng)調(diào)為10,同時(shí),TCP rcvwnd初始接收窗口也已調(diào)為10。
? ? ? ?tcp initcwd初始化函數(shù)---函數(shù)tcp_init_cwnd(),宏TCP_INIT_CWND
? ? ? ?tcp rcvwnd初始化函數(shù) ---函數(shù)tcp_select_initial_window(),宏TCP _DEFAULT_ I NIT_RCVWND
? ? ?(注:tcp允許發(fā)送包個(gè)數(shù)由 發(fā)送端擁塞窗口 和 接收端接收窗口 決 定, 接收 端通過tcp頭部window字段通知發(fā)送端接收窗口大小)
? ? ? ?linux為什么要調(diào)大tcp initcwnd,請參見http://lwn.net/Articles/427104/ 和 http://tools.ietf.org/html/draft-hkchu-tcpm-initcwnd-01;
? ? ?(注:wf和我在09年已經(jīng)進(jìn)行了研究,并在線上業(yè)務(wù)中調(diào)大initcwnd,當(dāng)時(shí)覺得該參數(shù)適用場景不具普遍性;沒想到google能對其進(jìn)行量化的研究,并推動(dòng)IETF接受該調(diào)整,值得我們學(xué)習(xí))

? ? ? ? ?國內(nèi)外 互聯(lián)網(wǎng)公司(google/baidu/taobao等)已在合適業(yè)務(wù)中調(diào)大了TCP初始擁塞窗口,調(diào)大有2種方法:
? ? ? ?1. ip route方式, ip route?change default via <gateway> dev eth0?initcwnd?<iw>(記得2.6.32版本以上支持),該方式僅對通過該路由的TCP連接有效;
????2. sysctl參數(shù),自己在內(nèi)核中增加一個(gè)控制initcwnd的proc參數(shù),該方式對于所有tcp連接有效;(我們當(dāng)年采用了該方式)
? ? ?
? ? ? ? 適用場景 :短連接+發(fā)送數(shù)據(jù)量小(擁塞控制尚處于slowstart階段,傳輸就完 畢了)
? ? ? ? 效果 :我知道的幾個(gè)應(yīng)用效果為傳輸速度可以提高10%~20%;但有好處也有壞處,TCP重傳率會(huì)增加(初始擁塞窗口越大,重傳率越高)

? ? ? ? 代碼研究:
? ? ? ?我們將分析“tcp三次握手”過程中,客戶端和服務(wù)端 擁塞窗口(snd_cwnd)的變化 ;,。
? ? ? ? 客戶端
? ? ? ? ? ? ? ? 創(chuàng)建soc ket - 函數(shù)tcp_v4_init_sock - snd_cwnd=2;
? ? ? ? ? ? ? ?發(fā)送syn - 函數(shù)tcp_v4_connect - snd_cwnd=2? 沒有變化;
? ? ? ? ? ? ? ?收到syn_ack發(fā)送ack - 函數(shù)tcp_rcv_synsent_state_process 調(diào)用 函數(shù)tcp_init_metrics 調(diào)用 snd_cwnd = tcp_init_cwnd(tp, dst);
? ? ? ? ? 服務(wù)端:
? ? ? ? ? ? ? ?linux tcp/ip協(xié)議棧中 服務(wù)端收到三次握手的最后一個(gè)ack,才會(huì)創(chuàng)建socket;
? ? ? ? ? ? ? ?收到ack - 函數(shù)tcp_create_openreq_child中創(chuàng)建socket,snd_cwnd=2 - 函數(shù)tcp_rcv_state_process,當(dāng)前socket狀態(tài)為TCP_SYN_RECV,調(diào)用 函數(shù)tcp_init_metrics 調(diào)用 snd_cwnd = tcp_init_cwnd(tp, dst);
? ? ? ?
? ?? ? ?注:函數(shù)tcp_init_metrics根據(jù)socket所在路由中設(shè)置的tcp參數(shù) 初始化 該socket;同時(shí),該路由條目所在socket在關(guān)閉時(shí),會(huì)通過函數(shù)tcp_update_metrics,更新路由中的tcp參數(shù)(sysctl_tcp_nometrics_save為是否更新的開關(guān));路由條目中所有的tcp參數(shù)在rtnetlink.h中定義,如RTAX_RTT/RTAX_REORDERING等。

總結(jié)

以上是生活随笔為你收集整理的tcp协议栈优化1-增加TCP初始拥塞窗口 ===》流氓的方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。