序号、确认序号、确认应答机制、超时重发机制
TCP协议保证数据传输可靠性的机制(一)
1、确认应答机制
1.1原理:
发送方与接收方传输数据时,为了保证数据一定会发送给接受方,TCP协议规定接受方接收到数据后需要给发送方一个接受到数据的通知,若是发送方没有接收到接受方的确认报文,发送方认为数据没有发送到,就会重新发送数据。
1.2***:TCP将每个字节的数据都进行了编号
因为网络传输数据是不能保证传送顺序的,即使是客户端有序的发送数据,服务器端接受到的数据也有可能无序,因此为了保证有序,TCP的包头中保存发送数据的***,告诉接受端读取数据的顺序
1.3确认***:
确认序号是发送方发送数据最高序号加1,作用是对已经接收到的数据进行确认,并告知对方下次发送数据的位置
2、超时重传机制:
确认应答机制中主机A给主机B发送数据后,数据可能会在发送途中丢失,数据无法到达主机B,为了保证数据的可靠性,TCP中引用了超时重传机制。
2.1原理:
TCP每发送一个报文段,就会对这个报文段设置一次计时器,只要计时器设置的重传时间到,但发送端还没有收到接收端发来的确认,此时就会重传此报文段。
2.2发送方未接收到数据有两种情况:
2.2.1发送方发送的数据在发送途中丢失
这种情况下,发送方在一段时间后重新发送就行
2.2.2接受方接收到数据后,发送的确认数据在发送途中丢失
因此,发送方重新发送的数据就会重复,TCP协议需要能够识别出哪些包是重复的,并且把重复的丢弃掉,这时前面提到的***就可以很容易做到去重的效果
2.3超时重传的时间确认:
最理想的状态下找到一个最小的时间,保证”确认应答一定能在这个事件内返回“,但是这个时间的长短会随着网络环境的不同,是有差异的。如果事件设置的太长,会影响整体的传输效率;如果设置的事件过短,有可能会频繁发送重复的包。
为了保证在任何环境下都有比较高效性能的通信,因此TCP会动态的计算这个最大超时时间
超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍
如果重发一次后,仍然得不到应答,等待2*500ms后再进行重传
如果仍然得不到应答,等待4*500ms进行重传,依次类推,以指数形式递增
累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接