具体流程如下图:
同时挥手
3.3 通过序列号与确认应答提高可靠性
在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知 。这个消息叫做确认应答(ACK) 。当发送端将数据发出之后会等待对端的确认应答 。如果有确认应答,说明数据已经成功到达对端 。反之,则数据丢失的可能性很大 。在一定时间内没有等待到确认应答,发送端就可以认为数据已经丢失,并进行重发 。由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输 。未收到确认应答并不意味着数据一定丢失 。也有可能是数据对方已经收到,只是返回的确认应答在途中丢失 。这种情况也会导致发送端误以为数据没有到达目的地而重发数据 。此外,也有可能因为一些其他原因导致确认应答延迟到达 , 在源主机重发数据以后才到达的情况也屡见不鲜 。此时 , 源主机只要按照机制重发数据即可 。对于目标主机来说,反复收到相同的数据是不可取的 。为了对上层应用提供可靠的传输,目标主机必须放弃重复的数据包 。为此我们引入了序列号 。序列号是按照顺序给发送数据的每一个字节(8位字节)都标上号码的编号 。接收端查询接收数据 TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送回去 。通过序列号和确认应答号,TCP 能够识别是否已经接收数据 , 又能够判断是否需要接收,从而实现可靠传输 。
序列号和确认应答
3.4 重发超时的确定
重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔 。如果超过这个时间仍未收到确认应答,发送端将进行数据重发 。最理想的是 , 找到一个最小时间 , 它能保证“确认应答一定能在这个时间内返回” 。TCP 要求不论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况发生何种变化,都必须保持这一特性 。为此,它在每次发包时都会计算往返时间及其偏差 。将这个往返时间和偏差时间相加,重发超时的时间就是比这个总和要稍大一点的值 。在 BSD 的 Unix 以及 Windows 系统中,超时都以0.5秒为单位进行控制,因此重发超时都是0.5秒的整数倍 。不过,最初其重发超时的默认值一般设置为6秒左右 。数据被重发之后若还是收不到确认应答,则进行再次发送 。此时,等待确认应答的时间将会以2倍、4倍的指数函数延长 。此外,数据也不会被无限、反复地重发 。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接 。并且通知应用通信异常强行终止 。3.5 以段为单位发送数据
在建立 TCP 连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS) 。最理想的情况是,最大消息长度正好是 IP 中不会被分片处理的最大数据长度 。TCP 在传送大量数据时 , 是以 MSS 的大小将数据进行分割发送 。进行重发时也是以 MSS 为单位 。MSS 在三次握手的时候,在两端主机之间被计算得出 。两端的主机在发出建立连接的请求时,会在 TCP 首部中写入 MSS 选项,告诉对方自己的接口能够适应的 MSS 的大小 。然后会在两者之间选择一个较小的值投入使用 。3.6 利用窗口控制提高速度
TCP 以1个段为单位,每发送一个段进行一次确认应答的处理 。这样的传输方式有一个缺点 , 就是包的往返时间越长通信性能就越低 。为解决这个问题,TCP 引入了窗口这个概念 。确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅地缩短 。也就是说 , 发送端主机 , 在发送了一个段以后不必要一直等待确认应答 , 而是继续发送 。如下图所示:
推荐阅读
- 房产私人协议有效吗? 房产私人协议有效吗
- 离婚能异地办理吗? 协议离婚能异地办理吗
- 离婚协议做公证需要哪些手续 离婚协议做公证需要哪些手续和证件
- 婚后财产协议离婚时有效吗? 婚后财产协议离婚时有效吗怎么写
- 怎样写离婚协议书 怎样写离婚协议书模板
- 收养协议有哪一些内容 收养协议有哪一些内容呢
- 如何 堆栈 ps
- 协议离婚孩子抚养权的规定有哪一些
- 怎样写离婚协议书模板 怎样写离婚协议书
- 借车协议法律认可吗? 借车协议法律认可吗