概述
TCP协议保证数据传输可靠性的方式主要有
1.应用数据被分割成TCP认为最适合发送的数据块
2.TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用成
3.校验和
4.序列号
5.确认回答
6.超时充传
7.连接管理
8.流量控制
9.拥塞控制
校验和
TCP将保持它首部和数据的检验和,这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化,如果有差错,TCP将丢弃这个报文段和不缺人收到此报文段
计算方式
在数据传输的过程中,将发送的数据端都当作一个16位的证书,将这些证书加起来,并且前面的进位不能丢弃,补在后面,最后取反,得到校验和
发送方在发送数据之前计算校验和,并进行校验和的填充
接收方收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方进行比对
注意:接收方和校验方如果校验码一致,数据不一定传输成功
确认应答与序列号
通过比对Seq和ACK来实现
序列号的作用不仅仅是应答的作用,有了序列号,能够接收到的数据根据序列号排序,并且去掉重复序列号的数据。
超时重传
在进行TCP传输时,由于确认应答与序列号机制,也就是说发送方发送一部分数据后,都会等待接收方发送的ACK报文,并解析ACK报文,判断数据是否传输成功,如果发送完数据迟迟没雨等到接收方的ACK报文,可能有两点原因
1.传输的过程直接丢包,导致接收方根本没有接收到
2.接收方收到了相应的数据,但是发送的ACK报文响应却由于网络原因丢包了
所以就需要引入超时重传机制,简单理解就是在发送方发送完数据后等待一个时间,时间到达没有ACK报文,那么对刚才发送的数据进行重新发送
如果是第一个原因,接收方收到二次重发的数据后,便进行ACK应答
如果是第二个原因,接收方发现接受的数据已经存在(判断依据就是序列号),那么直接丢弃,仍旧发送ACK英法
由于TCP传输保证能够在任何环境下都有一个高性能通信,因此这个最大超时时间是动态计算的
连接管理
就是三次握手和四次挥手,TCP的三次握手,四次挥手
流量控制
TCP利用滑动窗口实现流量控制,流量控制是为了控制发送方的发送速率,保证接收方来的及时接收
接收方发送的确认报文中的窗口字段可以用来控制发送方的窗口大小,将窗口字段设置为0,则发送发不能发送数据
流程
当发送端发送数据后,接收端回复ACK与窗口大小WIN给发送端,发送端根据接收端发送的窗口大小来发送数据
(1)发送端:写入2KB的数据[seq=0]。
(2)接收端:收到数据,初始化接收端缓冲区4K,写入后还剩2K,于是通告ack[seq=2048,win=2048]。
(3)发送端:接收到窗口通告为2048,于是最多只能写入2K的数据,将2K数据写入[seq=2048]。
(4)接收端:应用层尚未消费缓冲区。接收到2K数据后,缓冲区满。于是通告窗口为0,返回ack[seq=4096,win=0]。
(5)发送端:由于发送窗口为0,不能发送任何数据。此时发送端就需要定时的发送0字节的数据去探测接收端窗口。所需的定时器即为持续定时器(TCPT_PERSIST)。
(6)接收端:缓冲区满,窗口通告为0,ack[seq=4096,win=0]。
(7)发送端:继续发送0字节的探测数据。
(8)接收端:缓冲区被应用层消费了2K,缓冲区可用字节为2K,通告窗口为2048,ack[seq=4096,win=2048]。
(9)发送端:继续写入1K的数据。
发送窗口
1. Sent and Acknowledged:这些数据表示已经发送成功并已经被确认的数据,比如图中的前31个bytes,这些数据其实的位置是在窗口之外了
2. Send But Not Yet Acknowledged:这部分数据称为发送但是没有被确认,数据被发送出去,没有接收到接收端的ACK
3.Not Sent Recipient Ready To Receieve:允许发送但是尚未发送的数据,在缓冲区内,应该尽快发送
4.Not Sent,Recipient Not Ready To Receive:为发送,同时接收端也不允许发送,处在窗口之外
(1)已经发送并且对端确认(Sent/ACKed)---------------发送窗外 缓冲区外
(2)已经发送但未收到确认数据(Sent/UnACKed)----- --发送窗内 缓冲区内
(3)允许发送但尚未防的数据(Unsent/Inside)-----------发送窗内 缓冲区内
(4)未发送暂不允许(Unsent/Outside)-------------------发送窗外 缓冲区内
2,3两部分为发送窗口
接收窗口
接受方有三种情况,“已接收”,“未接收准备接收”,“未接收不准备接收”,其中为接收准备接收称为接收窗口
拥塞控制
在某段时间,若对网络中每一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫拥塞
为了进行拥塞控制,TCP发送方要维持一个拥塞窗口(cwnd)的状态变量,拥塞控制窗口的大小取决于网络的拥塞成都,并且动态变化
发送方让自己的发送窗口取为拥塞窗口和接收方的接收窗口中较小的一个
TCP拥塞采用了四种算法
1.慢开始
2.拥塞避免
3.快重传
4.快恢复
网络层也可以使用路由器采用适当的分组丢弃策略,已减少网络拥塞的发生
1.慢开始
算法的思路是当助局开始发送数据时,如果立即把大量的数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的负荷情况
经验表明,较好的方法是先探测一下,即由小到大逐渐增加发送窗口,也就是由小到大增加有塞窗口的数值,cwnd的初始值为1,每经过一个传播轮次,cxnd加倍
2.拥塞避免
目的是当拥塞发生时,降低网络的传输速率,这可以通过调用满启动的动作来降低网络的传输速率
当超过cwnd超过ssthresh时,经过一个轮次就不是指数增加了,而是容量加一
3.快重传
在接受方收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时捎带确认
在接收到相同ACK后,推断出丢失报文段起始序号,然后立即重传此报文
快重传规定:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
4.快恢复
主要是配合快传重,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh(慢启动阈值)门限减半(为了预防网络发生拥塞)
ARQ协议
停止等待AHQ协议
停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组。
优点:简单
缺点:信道利用率低,等待时间长
连续AHQ协议
提高信道利用率,发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了
优点:信道利用率高,容易实现,即使确认丢失,也不必重传。
缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。
参考文章
网络基础:TCP协议-如何保证传输可靠性_Chenxi13-CSDN博客_tcp如何保证可靠传输
UDP与TCP对比,TCP保证可靠性传输的详细说明_来者无穷_-CSDN博客_tcp和udp哪个更安全
美团9大高频问题和答案! 【后端】_笔经面经_牛客网
TCP-IP详解:滑动窗口(Sliding Window)_深邃 精致 内涵 坚持-CSDN博客_滑动窗口
TCP协议详解-滑动窗口_yuliantao的专栏-CSDN博客_tcp窗口
TCP滑动窗口(发送窗口和接受窗口) - hongdada - 博客园
最后
以上就是生动大神为你收集整理的【网络】TCP如何保证可靠传输校验和确认应答与序列号超时重传连接管理流量控制拥塞控制 ARQ协议的全部内容,希望文章能够帮你解决【网络】TCP如何保证可靠传输校验和确认应答与序列号超时重传连接管理流量控制拥塞控制 ARQ协议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复