為了通過數(shù)據(jù)包實現(xiàn)可靠性傳輸,需要考慮很多事情,例如數(shù)據(jù)的破壞、丟包、重復(fù)記憶分片順序混亂等問題。如不能解決這些問題,也就無從談起可靠傳輸。
TCP通過檢驗和、序列號、確認應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機制實現(xiàn)可靠性傳輸。
通過序列號與確認應(yīng)答提高可靠性
在TCP中,當(dāng)發(fā)送端的數(shù)據(jù)到達接收主機時,接收端主機會番號一個已收到消息的通知。這個消息叫做確認應(yīng)答--ACK(Positive Acknowled-gement 意指已經(jīng)接收。)
TCP通過肯定的確認應(yīng)答(ACK)實現(xiàn)可靠的數(shù)據(jù)傳輸。當(dāng)發(fā)送端將數(shù)據(jù)發(fā)生之后會等待對端的確認應(yīng)答。如果有確認應(yīng)答,說明數(shù)據(jù)已經(jīng)成功到達對端。反之,則數(shù)據(jù)丟失的可能性很大。
當(dāng)然,在一定時間內(nèi)沒有等到確認應(yīng)答,發(fā)送端就可以認為數(shù)據(jù)已經(jīng)丟失,并進行重發(fā)。由此,即使產(chǎn)生了丟包,仍然能夠保證數(shù)據(jù)能夠到達對端,實現(xiàn)可靠傳輸。
未收到確認應(yīng)答并不意味著數(shù)據(jù)一定丟失。也有可能是數(shù)據(jù)對方已經(jīng)收到,知識返回的確認應(yīng)答在途中丟失。這種情況也會導(dǎo)致發(fā)送端因沒有收到確認應(yīng)答,而認為數(shù)據(jù)沒有到達目的地,從而進行重新發(fā)送,如下圖: