Re: [CN]HW2

作者: gary04n (04N)   2012-05-17 17:38:35
※ 引述《kevin269782 (修也森)》之銘言:
: 助教你好,請問
: 當今天client向server做RRQ的請求,然後他們之間開始互相傳資料...
: 當server送最後一份資料塊data#n給client,這時client收到這份data,
: 並回傳ack#n,但是ack#n卻loss,因此server以為client沒收到data#n,
: 因此重新傳一份data#n,這時client再一次收到server送來的data#n,
: 因此client知道server並沒有收到ack#n,因此又再度送ack#n給server,
: 但這份ack#n又loss,因此server又傳一份data#n給client,結果這份
: data#n也loss掉....如此一來,client以為server已收到ack#n,
這邊client並不會以為server收到ACK
: 因此結束這次的RRQ,但server仍舊沒收到ack#n,因此server以為
client並不會馬上結束RRQ,應該要再等一段時間(timeout),看看server有沒有再傳
DATA#N來,如果這段期間有傳來那就回傳ACK#N,沒有傳來就結束這個REQUEST
: client沒收到data#n,所以繼續傳data#n....
: 最後server便不停地傳data#n而無法停止。
: 請問該如何解決這種情形?
一般來說,要先設定好重傳的最大值,如果重傳次數超過某個數字就代表
有錯誤發生(斷線......),但是這次並沒有要求同學實作這一個部分。
這次我們demo的網路環境並不會很差,差到timeout時間內ACK#N傳不過去,所
以同學只要把最後一個封包的timeout時間拉長一點,就可以解決這個問題。

Links booklink

Contact Us: admin [ a t ] ucptt.com