首页 > 代码库 > TCP协议笔记

TCP协议笔记

1 TCP 三次握手、四次挥手

1.1 三次握手

client:  CLOSE->SYN_SEND->ESTABLISHED

server:  LISTEN->SYN_RECV->ESTABLISHED

客户端发送连接请求,发送SYNC,状态变为SYN_SEND;如果服务器端接收到SYN报文,状态变为SYN_RECV,同时服务器端发送ACK+SYN报文;如果客户端收到ACK+SYN报文,则继续发送ACK确认报文,此时客户端变为ESTABLISHED状态;如果服务器端收到ACK报文,服务器端也变为ESTABLISHED状态。

1.2 四次挥手

client:  FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT

server:  CLOSE_WAIT->LAST_ACK->CLOSED

客户端关闭连接,发送FIN报文给服务器,状态变为FIN_WAIT_1,此时客户端停止发送数据,但仍能接收服务器端发送过来的数据;服务器端收到FIN,停止发送数据,回复客户端ACK报文,此时状态改为CLOSE_WAIT状态; 服务器端关闭连接,发送FIN报文给客户端,此时状态变为LAST_ACK;如果客户端收到服务器端的FIN报文,则客户端发送ACK确认报文,并且进入TIME_WAIT状态;如果服务器收到客户端的ACK报文,则进入CLOSED状态; 在TIME_WAIT期间,如果客户端没有再收到服务端的FIN报文(也即ACK报文没有丢失),则客户端也进入CLOSED状态。

2 拥塞控制

2.1 慢开始,拥塞控制

拥塞窗口、ssthresh关系

技术分享

cwnd<ssthresh时,使用慢开始算法(指数增长)。

cwnd>ssthresh时,改用拥塞避免算法(线性增长)

cwnd=ssthresh时,慢开始与拥塞避免算法任意;

本来遇到网络拥塞时,也即网络丢包;ssthresh设置为网络拥塞时cwnd值的一半,cwnd此时 重新为1开始发送;周而复始。

2.2 快重传,快恢复

快重传配合使用的还有快恢复算法,有以下两个要点:

①当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。

②考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。如下图:

技术分享

 

TCP协议笔记