关于可靠
可靠就是保证接收方进程从缓存区里面读取出来的字节流和发送方发送的字节流是一样的。
TCP实现可靠的传输机制
校验和UDP一样 都是增加一个伪首部 通过二进制饭吗的求和方法来判断有没有发生错误
序号
序号就是报文段的第一个字节的序号 也就是ack
一个字节占一个序号
确认(累计确认)
发送方要一直保持这个发送的报文段 知道接受方确认收到完整的确认报文段才可以摘出
接受方接受到了报文段 会返回一个确认报文段(只是确认功能)(累计确认)
图中已经收到了第一个报文段 它期望收到的报文段是下一个报文段的第一个字节的确认号是第一个字节的序号也就是4,发送方就会删除掉321这个报文段
如果456报文段因为一些愿意没有发送过去 反而是78先发送过去了
虽然接受方接受到了78的报文段 但是因为456还没到
接受方返回的确认报文段 首部部分 确认号字段还是第二个报文段的第一个字节的序号4
虽然78会接受 但是接受方会一直向发送方说我需要你的456报文段 尽快发送过来
重传
确认重传不分家
TCP的发送方在规定的时间(重传时间)内没有收到确认就要重传已经发送的报文段。 超时重传
重传时间
TCP采用自适应算法 动态改变重传时间 RTTS(加权平均往返时间)
但在有的时候,等待的时间太长,这时候就会有一个方法能够提前知道接受方没有接受到传输数据
也就是
冗余ACK(冗余确认) 3次确认
每当比期望序号大的失序报文段到大时,发送一个冗余ACK 指明下一个期待字节的序号