【T09】要認識到TCP是一個可靠的,但不是絕對可靠的協議

一、稍微想一下就知道,TCP不是絕對可靠的協議,好比:網絡斷開,主機崩潰,不管TCP如何努力,都沒法將數據傳給對方。
二、考慮應用程序A嚮應用程序B發送數據的TCP流程,數據流從應用程序A經過他所在主機的TCP/IP棧向下傳輸,通過幾臺中間路由器,
    經過應用程序B所在主機的TCP/IP棧向上傳輸,最後到達應用程序B。
    特別注意:中間的路由器(即便擁有TCP/IP協議棧)並不涉及TCP層和應用層,只是轉發IP數據報,
    也就是說,不會在路由器的TCP/IP協議棧向上傳輸,而後在向下傳輸,只有在發送端和接收端纔有這部分流程。
三、考慮一種極端的狀況,TCP確認了收到的數據,可是應用程序尚未來得及把這部分數據取走,就崩潰了。
    這種狀況下,發送端認爲接收端已經準確無誤地收到了數據,可是接收端的應用程序並無取到數據。
    除此以外,還有其餘一些的狀況,
四、網絡中斷,若是沒有備用的路徑,數據傳輸一直失敗,知道傳輸路徑修復好,或者存在了備用的路徑。
五、對等實體崩潰,也就是對端的應用程序崩潰,
    注意:對等實體崩潰與對等實體調用close(windows下調用closesocket)以及exit是沒法區分的。
    這種狀況下,對等實體會發送fin包,代表沒有辦法再發送數據了。
六、對等實體的主機崩潰,這和對等實體崩潰不一樣,主機崩潰了,無法發送fin給咱們。
相關文章
相關標籤/搜索