1. 确认应答

    假设没有丢包,那么发送端每次发送数据后都会受到接收端的确认应答(ACK),发送端只有受到接收端的确认应答(ACK)后,才会继续发送数据。

    1. 序列号

    每当发送端发送数据时,会将序列号放入TCP包的首部中,然后接收端接收到数据后会解析TCP包的首部,在序列号的基础上+1生成新的序列号,通过ACK发回给发送端,那么即使当发送端在特定时间外接收到之前接收端返回的ACK,发送端会根据序列号判断是否要继续重新发送之前的数据。自此,通过序列号我们解决了因网络延迟的问题不断重新发送相同数据的情况。

    1. 重发控制

    若数据重发后一直收不到确认应答,则进行再次重发。此时,等待确认应答的时间将以2倍、4倍的指数函数增长。此外,数据不会被无限、反复的重发。达到一定重发次数之后,如果仍没有确认应答返回,就会判断为网络或对端主机发生异常,强制关闭连接。

    1. 窗口控制

    ACK不再是以每个分段,而是以更大的单位进行确认时,转发时间将会被大幅度的缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。