做京東筆試題時遇到這問題
截斷二進制指數(shù)退避(truncated binary exponential backoff)算法就是是用來解決以太網(wǎng)碰撞問題的一種算法。
1.確定基本退避時間,它就是爭用期。以太網(wǎng)把爭用期定為51.2us。對于10Mb/s以太網(wǎng),在爭用期內(nèi)可發(fā)送512bit,即64字節(jié)。也可以說爭用期是512比特時間。1比特時間就是發(fā)送1比特所需要的時間。所以這種時間單位與數(shù)據(jù)率密切相關。
2.從離散的整數(shù)集合[0,1,…,]中隨機取出一個數(shù),記為r。重傳應推后的時間就是r倍的爭用期。上面的參數(shù)k按下面的公式計算:
k=Min[重傳次數(shù),10]
可見當重傳次數(shù)不超過10時,參數(shù)k等于重傳次數(shù);但當重傳次數(shù)超過10時,k就不在增大而一直等于10。
3.當重傳達16次仍不能成功時(這表明同時打算發(fā)送的數(shù)據(jù)站太多,以致連續(xù)發(fā)生沖突),則丟棄該,并向高層報告。
例如,在第1次重傳時,k=1,隨機數(shù)r從整數(shù){0,1}中選一個數(shù)。因此重傳推遲的時間是0或爭用期,在這兩個時間中隨機選擇一個。整數(shù)范圍的選擇為2的k次方個數(shù)
若再發(fā)生碰撞,則重傳時,k=2,隨機數(shù)r就從整數(shù){0,1,2,3}中選一個數(shù)。因此重傳推遲的時間是在0,2? ,4? 和6? 這4個時間中隨機抽取一個。
同樣,若在發(fā)生碰撞,則重傳時k=3,隨機數(shù)r就從整數(shù){0,1,2,3,4,5,6,7}中選一個數(shù)。以此類推。
若連續(xù)多次發(fā)生沖突,就表明可能有較多的站參與爭用信道。但使用退避算法可使重傳需要推遲的平均時間隨重傳次數(shù)而增大(這也稱為動態(tài)退避),因而減小發(fā)生碰撞的概率,有利于整個系統(tǒng)的穩(wěn)定。
以太網(wǎng)在發(fā)送數(shù)據(jù)時,如果幀的前64字節(jié)之內(nèi)沒有發(fā)生沖突,那么后續(xù)的數(shù)據(jù)就不會發(fā)生沖突。換句話說,如果發(fā)生沖突就立即中止發(fā)送,這時已經(jīng)發(fā)送出去的數(shù)據(jù)一定小于64字節(jié),因此以太網(wǎng)規(guī)定了最短有效的幀長為64字節(jié),凡長度小于64字節(jié)的幀都是由于沖突而異常中止的無效幀。收到了這種無效幀就應當立即丟棄。