原创 TCP窗口擴張係數選項WSCALE

如下圖所示,TCP窗口擴張係數選項長度爲3個字節,在TCP握手階段的SYN報文和SYN+ACK報文中攜帶,其旨在通告對發送和接收窗口擴張功能的支持,以及通告擴張係數。注意前者意味着只有在SYN報文中通告了對WSopt選項的支持時,

原创 Tail Loss Probe實現

Tail loss probe (TLP)利用RACK減少RTO的發生,TLP觸發快速恢復以修復末端丟包,否則只能由之後的RTO來修復。在原始報文發送之後,TLP將在1到2倍的RTT時間內發送探測數據報文,探測報文可以是新的、之前

原创 本地掛載openwrt鏡像

以下編譯了一個X86-64平臺的openwrt鏡像,完成之後在bin/targets/x86/64目錄下文件,主要由內核文件,和兩個根文件系統文件,格式分別爲ext4和squashfs,還有兩個內核與文件系統打包在一起的鏡像文件(

原创 H-TCP擁塞算法

根據對AIMD擁塞算法的觀察,對於傳統網絡,增加值α應當足夠小,以便於同傳統TCP擁塞算法(Reno/NewReno)相兼容;而對於高速和長距離(high-speed and long distance)網絡,可增大α的值,以便獲

原创 TCP監聽端口選擇

內核提供了兩個PROC文件可以控制套接口使用的端口號範圍,其中文件ipv4_local_port_range定義了可使用的端口範圍;文件ip_local_reserved_ports定義了保留的端口範圍。 static struc

原创 TCP客戶端端口號選擇

如下函數inet_hash_connect,如果沒有指定綁定的接口,在發起連接的時候,由函數inet_sk_port_offset先選擇一個端口偏移量(port_offset),函數__inet_hash_connect負責綁定端

原创 傳統TCP(Reno)擁塞響應函數

TCP擁塞響應函數指吞吐與丟包率之間的一個關係,傳統Reno-TCP執行以下兩個操作:1)將丟包視爲網絡發生了擁塞,將擁塞窗口降低一半;2)在擁塞避免階段,每個RTT週期,擁塞窗口增加1。以上兩者決定了在丟包率和平均吞吐之間形成了

原创 TCP套接口選擇

在TCP接收函數tcp_v4_rcv中,由__inet_lookup_skb執行報文所屬套接口的查找任務。 int tcp_v4_rcv(struct sk_buff *skb) { int sdif = inet_sdi

原创 Scalable TCP擁塞算法

Scalable TCP(STCP)擁塞控制算法,在每個RTT週期內,如果沒有發生擁塞,將在接收到每個ACK報文後,將擁塞窗口增加0.01(a值)。 cwnd = cwnd + 0.01 如果在一個RTT週期內第一次檢測到擁塞

原创 DPDK在testpmd中修改隊列數量

一是可以在啓動testpmd時,通過命令參數txq和rxq分別制定發送和接收隊列的數量。 # ./build/app/testpmd -l 0-3 -n 4 -- -i --txq=8 --rxq=8 ... testpmd>

原创 TCP-BIC Binary Increase Congestion算法

BIC主要包括兩個部分: binary search increase 和 additive increase,這兩個部分又統稱爲binary increase,即BIC算法名稱的由來。另外,BIC還包括一個Slow-Start和

原创 SlowStart階段擁塞窗口增長

慢啓動階段的擁塞窗口增長函數tcp_slow_start如下,擁塞窗口以報文數量表示,參數acked表示當前ACK報文確認的數據包數量。如果擁塞窗口增加acked數量之後小於慢啓動閾值ssthresh,使用二者相加結果作爲新的擁塞

原创 TCP快速恢復算法PRR

PRR算法(Proportional Rate Reduction)決定在丟包恢復(Loss Recovery)期間,對應於每個ACK報文,可發送的報文數量。目的是:1)快速平穩的從Loss中恢復;2)恢復之後擁塞窗口收斂與sst

原创 TCP混合慢啓動

混合慢啓動(Hybrid Slow Start)使用二個信息來決定SlowStart階段到擁塞避免階段(Congestion Avoidance)的轉換,一是ACK Train的長度;二是報文延遲的增長。ACK Train的長度爲

原创 忽略設置linkdown標誌的路由表項

遇到一個路由轉發問題,如下路由表,在ens40網卡鏈路斷開的時候,目的地址爲192.168.3.0/24網段的報文,還是走ens40網卡,而不是默認路由,導致報文被丟棄。 $ ip route default via 192.16