關於快恢復演算法中的一些問題

2021-08-07 02:55:57 字數 1022 閱讀 8122

tcp reno這個演算法定義在rfc5681。快速重傳和快速恢復演算法一般同時使用。快速恢復演算法是認為,你還有3個duplicated acks說明網路也不那麼糟糕,所以沒有必要像rto超時那麼強烈,並不需要重新回到慢啟動進行,這樣可能降低效率。所以協議棧會做如下工作

cwnd = cwnd/2

sshthresh = cwnd

然後啟動快速恢復演算法:

設定cwnd = ssthresh+ack個數*mss(一般情況下會是3個dup ack)

如果只收到dup ack,那麼cwnd = cwnd + 1, 並且在允許的條件下傳送乙個報文段

如果收到新的ack, 設定cwnd = ssthresh, 進入擁塞避免階段

1.為什麼在第1步中要 + ack個數*mss這一步?

答:我們在開始的時候將傳送視窗的值設為ssthresh的值,但是因為我們接收到n個ack,這說明在網路中已經有n個報文已經到達接收端了,所以我們設定的視窗中還可以再新增n個報文傳送,這樣其實才是真正的將傳送視窗的值設為ssthresh的值。

2.為什麼在接收到重複ack的時候還要讓cwnd加1?

答:每當我們接收到重複的ack的時候就能說明兩點:

1)我們要傳送的報文還是沒有到達接收端,所以傳送視窗的左端是不能動的;

2)在網路中又有乙個報文成功到達接收端,所以網路中又可以新增乙個報文。

但是要注意的是,雖然看起來傳送視窗變大了,但是裡邊傳送的報文數量其實和我們設定的ssthresh值是一樣的,裡邊有很多「小視窗」是空的,不嚴謹的講,我們甚至可以說這個傳送視窗的真實大小就是ssthresh。

3)為什麼在最後接收到非重複的ack要重置cwnd的值?

答:其實看過前兩個問題的答案,這個問題的答案也就顯而易見了。我們雖然一直在加cwnd的值,但是其中可同時傳送的報文數量還是ssthresh的值,而當我們接收到非重複的ack的時候,說明我們之前要傳送的報文也順利到達接收端,這個時候,我們將傳送視窗移動到這個新的ack的位置,這個時候視窗裡邊已經沒有那些空的「小視窗」,所以要把傳送視窗大小重置為ssthresh的值。

關於開發中的一些問題

error on rename of blog article to blog sql2 f94 1 errno 152 drop procedure if exists pre 如果存在此儲存過程則刪掉 delimiter 以delimiter來標記用 表示儲存過程結束 create proced...

關於面試的一些問題

面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...

關於Labview的一些問題

第一章 虛擬儀器及 labview入門 1 虛擬儀器概述 虛擬儀器 virtual instrumention 是基於計算機的儀器。計算機和儀器的密切結合是目前儀器發展的乙個重要方向。粗略地說這種結合有兩種方式,一種是將計算機裝入儀器,其典型的例子就是所謂智慧型化的儀器。隨著計算機功能的日益強大以及...