三次握手和四次挥手主要是讲如何建立和关闭TCP连接。

1. 三次握手过程

符号说明

  • seq:"sequance"序列号
  • ack:"acknowledge"确认号
  • SYN:"synchronize"请求同步标志
  • ACK:"acknowledge"确认标志"
  • FIN:"Finally"结束标志

1.1 为什么不是两次握手?

我们假设两次握手的情况,看看会出现什么问题。假设Client A和Server B进行TCP连接

  • 情形:A给B发送1个连接请求,但是由于网络堵塞,B以为没收到,然后A重发,并且B成功收到。再然后B收到了之前被堵塞的TCP连接请求,就一直在这个TCP连接上等待数据接收(然而什么都没有,因为A以为这个请求丢了呢!)。试想下,A发了100个请求,其中前面99个由于网络堵塞一开始都没被B收到,后来才收到,这造成巨大浪费!

2. 四次挥手