一:TCP可靠性

copy
TCP 通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
1.通过序列号与确认应答提高可靠性
copy
在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做确认应答(ACK)。

copy
TCP 通过肯定的确认应答(ACK)实现可靠的数据传输。 当发送端将数据发出之后会等待接收端的确认应答,如果有确认应答,说明数据已经成功到达接收端。反之,则数据就有可能丢失。
copy
如下图所示,在一定时间内没有等到确认应答,发送端就可以认为数据已经丢失,并进行重发。由此,即使产生了丢包,也能保证数据能够到达接收端,实现可靠传输。

copy
为收到确认应答并不意味着数据一定丢失,也有可能是数据对方已经收到,只是返回的确认应答在途中丢失。这种情况也会导致发送端因没有收到确认应答,而认为数据没有到达目的地,从而进行重新发送。如下图所示。

copy
上述这些确认应答处理、重发控制以及重复控制等功能都可以通过序列号实现。序列号是按顺序给发送数据的每一个字节(8位字节)都标上号码的编号。 接收端查询接收数据 TCP 首部中的序列号和数据长度,将自己下一步应该接收的序号作为确认应答返送回去。就这样,通过序列号和确认应答号,TCP 可以实现可靠传输。
