TCP

TCP头

tcp_header

连接维护

三次握手

tcp_connect_workflow 三次握手的目的是让客户端和服务器端都知道对方的收、发是正常的。第一次:服务器知道客户端发正常。第二次:客户端知道服务器收、发都正常。第三次:服务器知道客户端收也正常。

四次挥手

tcp_disconnect_workflow 需要四次挥手是因为服务器知道客户端要断开连接后,不一定可以向建立连接时用一个包发送ACK和SYN一样也同时发ACK和FIN,因为服务器端可能还有数据包要发送,所以要等数据包发完之后才能再发FIN包。

累计应答机制

为了处理顺序问题以及丢包问题,首先每个TCP包都有一个编号,并用发送和接收缓存来记录。每一个包都需要接收方发送ACK包进行确认,如果发生丢包就会重发。有超时重传机制和快速重传机制(发送三个ACK包含下一个期望的包序号)。 send_buffer receive_buffer

流量控制

接收方返回的ACK包中包含接收窗口大小,来通知发送方控制发送速度。

拥塞控制

通过拥塞窗口控制发送速度。拥塞窗口初始值为1,然后指数增长到ssthresh,变为线性增长。如果通过快速重传算法检测丢包,就将拥塞窗口变为当前值的一般,令ssthresh等于新的拥塞窗口,然后开始线性增长。