校验和
确认应答和超时重传
数据到达接收方,接收方会发出一个确认应答报文段(ACK=1,表示确认号ack有效),表示已经接受到了该数据段,确认号ack为接收方下一次接收数据的序号;若发送发迟迟未收到确认应答报文段,发送方会在一段时间后进行超时重传。
序列号
序列号-TCP为发送的数据的每个字节分配的编号。序号可以保证数据按序到达;接收方可以立刻知道缺少哪个序号的数据;
连接管理
连接管理机制即TCP建立连接时的三次握手和断开连接时的四次挥手。
流量控制(接收端出现了问题)
在TCP报文段首部中有一个窗口长度,当接收端接收到发送方的数据后,在确认报文段中就将自身缓冲区的剩余大小,放入窗口中;
拥塞控制(网络出现了问题)
拥塞控制:防止过多的数据注入到网络中,使网络过载;是全局性的通信量控制。
cwnd-拥塞窗口;ssthresh-慢开始门限;
发送方让自己的发送窗口等于拥塞窗口。
TCP进行拥塞控制的算法:
慢开始-慢开始不是指拥塞窗口的增长速度慢(指数增长),而是在开始发送时设置拥塞窗口cwnd=1,先探测一下网络的拥塞程度,再逐渐增加拥塞窗口的大小(实时拥塞窗口的大小以字节为单位);
为了防止拥塞窗口增长过大引起网络拥塞,设置一个慢开始门限(ssthresh状态变量):cwnd<ssthresh,使用慢开始算法;cwnd=ssthresh,慢开始算法和拥塞避免算法均可使用;cwnd>ssthresh,使用拥塞避免算法。
拥塞避免-拥塞窗口的增长速度缓慢增大(线性增长);无论在慢开始阶段还是拥塞避免阶段,只要发送方认为网络出现拥塞(发送方没有收到确认报文段),就将慢开始门限设置为出现拥塞时发送窗口大小的一半,然后把拥塞窗口设置为1,执行慢开始算法;
快重传-接收方收到一个失序的报文段后,就立刻发出重复确认,而不是等到自己发送数据时发出;发送方只要连续收到三个重复确认就立刻重传接收方未收到的报文段,而不用等待重传计时器,这样可以尽早重传未确认的报文段,提高网络的吞吐量;
快恢复-当发送方连续收到三个重复确认时,将慢开始门限设置为出现拥塞时发送窗口的一半,将拥塞窗口设置为慢开始门限的大小,然后执行拥塞避免算法。