TCP实现可靠传输
1. TCP 和 UDP的區(qū)別:
- TCP面向連接;UDP無連接
- TCP保證數(shù)據(jù)的可靠傳輸,數(shù)據(jù)傳送無差錯,不丟失,無重復(fù),按序到達;UDP不保證可靠交付
- TCP連接一對一;UDP支持更廣泛
- UDP實時性好,效率高,適用場景:短消息傳輸,大量客戶端,對數(shù)據(jù)安全性要求不高但實時性要求高
- TCP面向數(shù)據(jù)流;UDP面向數(shù)據(jù)報
2. TCP如何保證數(shù)據(jù)傳輸?shù)目煽啃?#xff1f;
1. 序列號,ACK信號:發(fā)送方按照順序給要發(fā)送的數(shù)據(jù)包的每個字節(jié)都標(biāo)上編號。接收方接收到發(fā)送方的數(shù)據(jù)包之后,回傳一個ACK信號,標(biāo)識下一個需求的數(shù)據(jù)包初始字節(jié)編號。
2. 超時重發(fā):在等待接收方回傳的ACK信號超時后,發(fā)送方重發(fā)數(shù)據(jù)包。一旦開始重傳,下一次等待的時間間隔指數(shù)增長,重發(fā)一定次數(shù)后還是收不到ACK信號,將強制終止連接。
3. TCP的連接管理:建立連接的三次握手和斷開連接的四次揮手。
4. 以段為單位發(fā)送數(shù)據(jù)包:在建立TCP連接的同時,兩端協(xié)商發(fā)送數(shù)據(jù)包的單位,稱為“最大消息長度”:MSS。 【TCP數(shù)據(jù)(MSS字節(jié))】【TCP首部(20字節(jié))】【IP首部(20字節(jié))】
5. 滑動窗口:以段為單位發(fā)送數(shù)據(jù)包,每發(fā)送一個數(shù)據(jù)包需要等待一個ACK信號,當(dāng)數(shù)據(jù)包往返時間越長效率越低?;瑒哟翱谥写翱谇岸藶橐寻l(fā)送但為收到ACK的數(shù)據(jù),后端為待發(fā)送數(shù)據(jù)。發(fā)送端一次發(fā)送多個數(shù)據(jù),接收端回傳收到的連續(xù)數(shù)據(jù)的ACK信號,緩存缺失數(shù)據(jù)之后的數(shù)據(jù)包(保持順序)。發(fā)送端當(dāng)收到ACK信號時,窗口向前依次移動,直到遇到有數(shù)據(jù)未確認時停止。一段時間后啟動超時重傳,接收端若收到缺失數(shù)據(jù),則和緩存數(shù)據(jù)一起發(fā)送ACK信號,否則,拋棄緩存數(shù)據(jù)。
6. 流量控制:TCP首部有一個字段來通知窗口的大小,接收端通過設(shè)置來主動控制傳輸流量。
7. 擁塞控制:發(fā)送端通過擁塞窗口主動控制傳輸流量。慢啟動:防止雙方通信剛開始就傳送大量數(shù)據(jù)包,發(fā)送端擁塞窗口初始設(shè)置為1MSS,每接受一個ACK信號,窗口擴大為兩倍。發(fā)送數(shù)據(jù)時,取擁塞窗口和滑動窗口的較小值。同時設(shè)定一個慢啟動閾值,當(dāng)擁塞窗口大小超過閾值時,改為線性增長,直到網(wǎng)絡(luò)擁塞。擁塞時將慢啟動閾值設(shè)置為當(dāng)前窗口的的一半,并將擁塞窗口的值設(shè)置為1,然后再次重復(fù)操作。
?
轉(zhuǎn)載于:https://www.cnblogs.com/walker993/p/9570902.html
總結(jié)
- 上一篇: 安装phantomjs、使用phanto
- 下一篇: ApiController得到服务器端绝