赞
踩
在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的ACK确认应答报文,就会重发该数据
TCP在两种情况下会触发超时重传:
当出现丢包时,客户端(发送方)是无法辨别是发送的数据包丢失了,还是对方发来的确认应答报文丢失了,因为这两种情况下发送方都收不到对方发来的响应报文,此时客户端(发送方)就只能进行超时重传
如果是服务器(接收方)确认应答报文丢失而导致发送方进行超时重传,此时服务器(接收方)就会再次收到一个重复的报文数据,但此时也不用担心,接收方可以根据报头当中的32位序列号来判断曾经是否收到过这个报文,从而达到报文去重的目的
需要注意的是,当发送缓冲区当中的数据被发送出去后,操作系统不会立即将该数据从发送缓冲区当中删除或覆盖,而会让其保留在发送缓冲区当中,以免需要时进行超时重传,直到收到该数据的响应报文后,发送缓冲区中的这部分数据才可以被删除或覆盖
我们都知道TCP是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个
这样的传输方式有一个缺点:数据包的往返时间越长,通信的效率就越低
为解决这个问题,TCP引入了窗口这个概念,即使在往返时间较长的情况下,它也不会降低网络通信的效率
那么有了窗口,就可以指定窗口大小,窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值
窗口的实现实际上是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除
假设窗口大小为3个TCP段,那么发送方就可以**「连续发送」** 3个TCP段,并且中途若有ACK丢失,可以通过「下一个确认应答进行确认」
窗口大小由哪一方决定?
滑动窗口既想给对方推送更多的数据,又想要保证对方来得及接收
TCP使用滑动窗口进行流量控制,实际上是对发送方数据流量的控制
下图就是发送方缓存的数据,根据处理的情况分成四个部分,其中深蓝色方框是发送窗口,紫色方框是可用窗口:
在下图,当发送方把数据全部都一下发送出去后,可用窗口的大小就为0了,表明可用窗口耗尽,在没收到ACK确认之前是无法继续发送数据了
在下图,当收到之前发送的数据3236字节的ACK确认应答后,如果发送窗口的大小没有变化,则滑动窗口往右边移动5个字节,因为有5个字节的数据被应答确认,接下来5256字节又变成了可用窗口,那么后续也就可以发送52~56这5个字节的数据了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。