假設tcp的擁塞控制演算法為tcp reno,ssthresh=20,擁塞視窗的初始值為1.假設網路鏈路為n0<–(b1,d1)–>n1<–(b1,d2)–>n2,其中(b,d)分別代表頻寬和時延,b1>b2。假設這條鏈路僅有乙個tcp session。現在,從理論上分析下這條鏈路的丟包情況。根據之前的分析[1],tcp的發包的時間間隔匹配的是ack的返回間隔,也就是瓶頸鏈路處理兩個資料報的時間間隔。我用符號「1」表示乙個資料報。
在慢啟動階段,第乙個週期傳送了乙個資料報」1」(seq0).第二個週期傳送兩個資料報」11」(seq1,seq2).」11」在瓶頸鏈路排隊,接受端接收資料報的間隔δτ
=mtu
b2,ack的返回間隔為δτ
.第三個週期傳送資料報,」11」(seq3,seq4)<δτ
>」11」(seq5,seq6),就是收到對資料報1的確認,可以連續傳送資料報3,4;間隔δτ
收到對資料報2的確認,可以傳送資料報5,6.第四個週期,可以傳送」11」(seq7,seq8)<δτ
>」11」(seq9,seq10)<δτ
>」11」(seq11,seq12)<δτ
>」11」(seq13,seq14).以此類推,直到達到了慢啟動的閾值。
關於占用的佇列長度,分析下極端的情況,假設鏈路時延(d1,d2)為0,就是鏈路上不存在流動的資料報。
週期間隔
資料報(序號)
佇列占用
ack確認
cwnd1δ
τ 011
2δτ 1,220
23δτ
3,431
33δτ
5,642
44δτ
7,853
54δτ
9,1064
64δτ
11,1275
74δτ
13,1486
85δτ
15,1697
95δτ
17,18108
105δτ
19,20119
115δτ
21,22
1210125
δτ23,24
1311135
δτ25,26
1412145
δτ27,28
1513155
δτ29,30
161416
第五個週期一共可以發16個資料報。每兩個包之間間隔為δτ
[2]tcp congestion control in lossy wireless networks
網絡卡傳送與接收資料報
網絡卡如何傳送資料報 ip報文可以看作乙個包。linux網絡卡驅動程式,將ip包新增14位元組的mac包頭,構成mac包。mac包中含有傳送端和接收端的mac位址資訊。既然是驅動程式建立的mac包頭資訊,當然可以隨便輸入位址資訊的。主機偽裝就是這麼實現的。驅動程式將mac包拷貝到網絡卡晶元內部的緩衝...
資料報傳送與鄰居子系統
資料報從l4傳到ip後,ip呼叫路由子系統來查詢路由,並且在查詢到路由後,建立乙個新的鄰居項 struct neigh 與該路由項繫結。該neigh的初始狀態為incomplete,此時在呼叫傳送函式ip finish output2中呼叫 if dst hh return neigh hh out...
訊息佇列的傳送與接收
訊息佇列的傳送與接收 include include include include include 不包含此標頭檔案,會出現 警告 隱式宣告與內建函式strcpy不相容 struct msg buf int main int argc,char argv msgbuf.mtype getpid s...