TCP如何保证可靠传输
校验和
如果接收方比对校验和与发送方不一致,那么数据一定传输有误。但是如果接收方比对校验和与发送方一致,数据不一定传输成功。
序列号和确认应答机制
每次收到数据都要进行确认应答,也就是发送ACK报文。这个ACK报文中有对应的确认号,告诉对方期望下次从哪开始发。
数据可通过序列号进行排序,也可去除掉重复序列号的数据。
超时重传
没有收到ACK报文就对刚才的数据进行重新发送
连接管理
三次握手和三次挥手
流量控制(滑动窗口)
根据窗口大小(接收端的数据缓冲区的大小)改变自己的发送数据速度。
如果窗口为0,停止发送。并定期发送探测数据段(防止接受端告知窗口大小的数据包丢失导致死锁),让接受端告诉自己窗口大小。
拥塞控制
由于不知道网络的情况,一开始就发送大量数据容易导致拥堵,所以引入慢启动机制,先发少量数据进行探路。这时候就有拥塞窗口的概念,每次收到ACK应答,就指数增长。超过一定阈值后,就线性增长。遇到网络阻塞,就减半。