1. TCP的可靠传输
可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。
比如,我客户端一个字节流发送的是,12345,那服务端收到的也是12345
1.1 校验
增加一个伪首部,通过使用二进制反码求和的方法来确定
1.2 序号(seq)
每次在传输的时候,我们的序号都是报文段的第一个字节
1.3 确认(ack)
每次在传输的时候,我们想要的报文段的第一个字节
1.4 重传
确认重传不分家,TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。
1.4.1 超时重传
重传时间:TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间 根据第一个报文段,根据第二个和第一个报文段 ·······)
1.4.2 快速重传(冗余ack-冗余确认)
每当比期望序号大的失序报文段到达时,发送一个冗余ack,指明下一个期待字节的序号。
发送方已发送1,2,3,4,5报文段
接收方收到1,返回给1的确认(确认号为2的第一个字节 )
接收方收到3,仍返回给1的确认(确认号为2的第一个字节)
接收方收到4,仍返回给1的确认( 确认号为2的第一个字节)
接收方收到5,仍返回给1的确认( 确认号为2的第一个字节)
发送方收到3个对于报文段1的冗余ack- >认为2报文段丢失, 重传2号报文段
2. TCP流量控制
2.1 定义
流量控制:让发送方慢点,要让接收方来得及接收。
2.2 滑动窗口
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd (接收方设置确认报文段的窗口字段来将rwnd通知给发送方), 发送方的发送窗口取接收窗口rwnd和拥塞窗口(网络堵了)cwnd的最小值。
3. TCP拥塞控制
3.1 慢开始和拥塞避免
拥塞窗口慢慢的变大(从0开始,1-2-4-8-16慢慢的探查),指数规律增长,等到达慢开始的界限值(给定一个初始值)时,由慢开始到拥塞避免,转到增加一个值(16-17-18-19),发生网络拥塞,将拥塞窗口置为1,再慢慢的变大(从0开始,1-2-4-8-16慢慢的探查),指数规律增长,等到达慢开始的界限值(这里的界限值是:发生网络拥塞的值除以2),由慢开始到拥塞避免,转到增加一个值(16-17-18-19)
3.3 快重传和快恢复
当收到3个重复的冗余ack时,直接进行快重传
快重传后,执行快恢复, 快恢复不需要降到0,降到发生堵塞的一半,再执行拥塞避免