看板 PangSir 關於我們 聯絡資訊
※ 引述《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時間拉長一點,就可以解決這個問題。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.104