如何确保TCP协议传输稳定可靠?
TCP,控制傳輸協(xié)議,它充分實(shí)現(xiàn)了數(shù)據(jù)傳輸時(shí)的各種控制功能:
針對(duì)發(fā)送端發(fā)出的數(shù)據(jù)包確認(rèn)應(yīng)答信號(hào)ACK;
針對(duì)數(shù)據(jù)包丟失或者出現(xiàn)定時(shí)器超時(shí)的重發(fā)機(jī)制;
針對(duì)數(shù)據(jù)包到達(dá)接收端主機(jī)順序亂掉的順序控制;
針對(duì)高效傳輸數(shù)據(jù)包的滑動(dòng)窗口控制;
針對(duì)避免網(wǎng)絡(luò)擁堵時(shí)候的流量控制;
針對(duì)剛開始啟動(dòng)的時(shí)候避免一下子發(fā)送大量數(shù)據(jù)包而導(dǎo)致網(wǎng)絡(luò)癱瘓的慢啟動(dòng)算法和擁塞控制。
此外,TCP作為一種面向有連接的控制傳輸協(xié)議,只有在確認(rèn)對(duì)端主機(jī)存在時(shí)才會(huì)發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費(fèi)。
?
?
?TCP通過序列號(hào)、超時(shí)重傳、檢驗(yàn)和、流量控制、滑動(dòng)窗口、擁塞控制實(shí)現(xiàn)可靠性。
1、應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊。
2、TCP給發(fā)送的每一個(gè)包進(jìn)行編號(hào),接收方對(duì)數(shù)據(jù)包進(jìn)行排序,把有序數(shù)據(jù)傳送給應(yīng)用層。
3、TCP的接收端會(huì)丟棄重復(fù)的數(shù)據(jù)。
4、超時(shí)重傳:當(dāng)TCP發(fā)出一個(gè)段后,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認(rèn)收到這個(gè)報(bào)文段。如果不能及時(shí)收到一個(gè)確認(rèn),將重發(fā)這個(gè)報(bào)文段。
5、校驗(yàn)和:TCP將保持它首部和數(shù)據(jù)的檢驗(yàn)和,發(fā)送的數(shù)據(jù)包的二進(jìn)制相加然后取反。這是一個(gè)端到端的檢驗(yàn)和,目的是檢測(cè)數(shù)據(jù)在傳輸過程中的任何變化。如果收到段的檢驗(yàn)和有差錯(cuò),TCP將丟棄這個(gè)報(bào)文段和不確認(rèn)收到此報(bào)文段。
6、流量控制:TCP連接的每一方都有固定大小的緩沖空間,TCP的接收端只允許發(fā)送端發(fā)送接收端緩沖區(qū)能接納的我數(shù)據(jù)。當(dāng)接收方來不及處理發(fā)送方的數(shù)據(jù),能提示發(fā)送方降低發(fā)送的速率,防止包丟失。TCP使用的流量控制協(xié)議是可變大小的滑動(dòng)窗口協(xié)議。接收方有即時(shí)窗口(滑動(dòng)窗口),隨ACK報(bào)文發(fā)送。(TCP 利用滑動(dòng)窗口實(shí)現(xiàn)流量控制)
7、滑動(dòng)窗口:實(shí)際中的傳輸方式,
需要說明一下,如果你不了解TCP的滑動(dòng)窗口這個(gè)事,你等于不了解TCP協(xié)議。
我們都知道,TCP必需要解決的可靠傳輸以及包亂序的問題,
所以,TCP必需要知道網(wǎng)絡(luò)實(shí)際的數(shù)據(jù)處理帶寬或是數(shù)據(jù)處理速度,這樣才不會(huì)引起網(wǎng)絡(luò)擁塞,導(dǎo)致丟包。
8、擁塞控制:當(dāng)網(wǎng)絡(luò)擁塞時(shí),減少數(shù)據(jù)的發(fā)送。發(fā)送方有擁塞窗口,發(fā)送數(shù)據(jù)前比對(duì)接收方發(fā)過來的即使窗口,取小慢啟動(dòng)、擁塞避免、擁塞發(fā)送、快速恢復(fù)。應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊,TCP的接收端會(huì)丟棄重復(fù)的數(shù)據(jù)。?
停止等待協(xié)議也是為了TCP協(xié)議傳輸穩(wěn)定可靠,它的基本原理就是每發(fā)完一個(gè)分組就停止發(fā)送,等待對(duì)方確認(rèn)。在收到確認(rèn)后再發(fā)下一個(gè)分組。
轉(zhuǎn)載于:https://www.cnblogs.com/raysync0704/p/11140083.html
總結(jié)
以上是生活随笔為你收集整理的如何确保TCP协议传输稳定可靠?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统下安装卸载jdk
- 下一篇: drf认证组件源码分析