- 为什么需要第三次?如果没有第三次握手,那么server端在第二次回复就必须打开就绪,但是client端发起连接的过程有可能第一次握手延误(网络问题等),以致于认为本次握手失效(重连),那么,对这次失效的client请求进入就绪状态,会造成资源浪费。
- 另外,由于之后传输(聊天),是基于报文(一个一个字),多个报文可能会走不同的路由,导致报文无序,所以,握手还初始化商定了一个序列值(SYN=Synchronize Sequence Numbers)
-
为什么需要四次挥手?本质上只有两次,client端和server都需要FIN(走了)和ACK(好,拜)。接收到FIN回复ACK,两端可以同时关闭(上层发起关闭)。
-
另外:http是基于tcp/ip的应用层协议,所以http虽然无状态,但是每次请求并不一定需要重新新建一个tcp连接(重新握手),tcp是否重新新建连接对http不可见,例如http的(keep-alive)可能重用连接。
TCP报文如下.
网上找的图。