TCP是通過什么方式來提供可靠傳輸的
合理截斷數據包,超時重發,校驗,失序重新排序,能夠丟棄重復數據,TCP可以進行流量控制
TCP提供一種面向連接的、可靠的字節流服務。
面向連接:意味著兩個使用TCP的應用(通常是一個客戶和一個服務器)在彼此交換數據之前必須先建立一個TCP連接。在一個TCP連接中,僅有兩方進行彼此通信。廣播和多播不能用于TCP。
TCP通過下列方式來提供可靠性:
- 應用數據被分割成TCP認為最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據報長度將保持不變。 (將數據截斷為合理的長度)
- 當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。 (超時重發)
- 當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒。 (對于收到的請求,給出確認響應,之所以推遲,可能是要對包做完整校驗)
- TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時并重發)。 (校驗出包有錯,丟棄報文段,不給出響應,TCP發送數據端,超時時會重發數據)
- 既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
(對失序數據進行重新排序,然后才交給應用層)
既然IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。
(對于重復數據,能夠丟棄重復數據)TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
(TCP可以進行流量控制,防止較快主機致使較慢主機的緩沖區溢出)
TCP使用的流量控制協議是可變大小的滑動窗口協議。