TCP是如何保證包的順序傳輸


轉自:http://blog.csdn.net/ggxxkkll/article/details/7894112


 大家都知道,TCP提供了最可靠的數據傳輸,它給發送的每個數據包做順序化(這看起來非常煩瑣),然而,如果TCP沒有這樣煩瑣的操作,那么,可能會造成更多的麻煩。

如造成數據包的重傳、順序的顛倒甚至造成數據包的丟失。

 

那么,TCP具體是通過怎樣的方式來保證數據的順序化傳輸呢?

 

1. 主機每次發送數據時,TCP就給每個數據包分配一個序列號並且在一個特定的時間內等待接收主機對分配的這個序列號進行確認,

2. 如果發送主機在一個特定時間內沒有收到接收主機的確認,則發送主機會重傳此數據包。

3. 接收主機利用序列號對接收的數據進行確認,以便檢測對方發送的數據是否有丟失或者亂序等,

4. 接收主機一旦收到已經順序化的數據,它就將這些數據按正確的順序重組成數據流並傳遞到高層進行處理。


具體步驟如下:

 

(1)為了保證數據包的可靠傳遞,發送方必須把已發送的數據包保留在緩沖區; (2)並為每個已發送的數據包啟動一個超時定時器; (3)如在定時器超時之前收到了對方發來的應答信息(可能是對本包的應答,也可以是對本包后續包的應答),則釋放該數據包占用的緩沖區; (4)否則,重傳該數據包,直到收到應答或重傳次數超過規定的最大次數為止。 (5)接收方收到數據包后,先進行CRC校驗,如果正確則把數據交給上層協議,然后給發送方發送一個累計應答包,表明該數據已收到,如果接收方正好也有數據要發給發送方,應答包也可方在數據包中捎帶過去。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM