当一个HTTP请求发出后,首选需要建立client和server之间的TCP连接,连接过程需要“三次握手”。
1、client发送SYN=1给server,client进入SYN_SEND;
2、server发送SYN=1,ACK=1给client,server进入SYN_RECV;
3、client发送ACK=1给server。
到此,client进入ESTABLISHED状态,server收到ack数据包后也进入ESTABLISHED状态。
关于为什么不可以两次握手?
这个主要原因是考虑出现失效的请求数据包的情况。如果client第一次发送的连接请求因为网络延迟等原因,未能及时送到服务器,client会再次发送一次,假设这一次正常发送,server正常响应,client收到了请求数据,然后关闭了这一次的连接,那么一次TCP连接就完成了。
如果第一次的请求恰好在这个阶段到了server(其实早就失效了的),它会已经是client又重新发了一次,于是再次将请求的数据发给client,但是呢,client根本不会理会&#x