TCP 可靠传输
TCP 首部的序号字段用来保证数据能有序提交给应用层,TCP 把数据看成有序的字节流,序号是建立在传送的字节流之上的。
确认号字段默认使用累计确认,即只确认数据流中至第一个丢失字节为止的字节。
有两种事件会导致 TCP 对报文段进行重传。
超时:TCP 每发送一个报文段,就对这个报文段设置一个计时器,只要计时结束但还没收到确认,就重传这一报文段。TCP 会记录一个报文段发出的时间,以及收到相应确认的时间,时间差叫做报文段的往返时间(RTT),并保留一个加权 RTT 来计算要设置的重传时间。
冗余 ACK:TCP 规定每当比期望序号大的失序报文段到达时,发送一个冗余 ACK,指明下一个期待字节的序号。并且当发送方收到对同一个报文段的3个冗余 ACK 时,就可以认为跟在这个被确认报文段之后的报文段已经丢失。这时要立刻重传,这种技术称为快速重传。