TCP连接的三次握手
是众所周知的,就是一个连接序号和应答序号在客户端和服务端的传递,然后再明确一点是三次握手只是为了保证连接的可靠性,并不能保证数据传输的可靠性。
第一次握手:传递SYN =1,seq=x ,ACK=0 到服务端。
第二次握手: 服务端接收返回ack=x+1.seq=y到客户端,收到信息发送消息后进入ESTABLISHED状态。
第三次握手:客户端发送 ack =y+1 SYN=0 ACK=1到服务端,服务端收到信息,进入ESTABLISHED状态。
自此 客户端和服务端都知道对方可以正确的传递数据到自己这。
这边会有个提问?
为什么二次握手不够?
通俗的讲:二次握手,服务端不知道能不能发送信息到客户端,不符合双向通信,而且不可靠的。
进一步说:二次握手,当请求到服务端,服务端就进入ESTABLISHED状态。当有一个请求在路上耽搁了,在正常的请求结束之后,发送到了服务端,服务端进入ESTABLISHED状态,但是客户端已经CLOSED状态,服务端等待发送信息,持续占有资源。
三次握手的目的:知道了双方这会都可以发送数据
四次挥手
:
二次挥手结束一个单向连接。
第一次挥手:发送FIN=1 seq=u到服务端 ,客户端进入WAIT-1阶段
第二次挥手:发送ACK=1 seq=v ack=u+1 ,服务端进入CLOSE-WAIT阶段,客户端收到进入WAIT-2阶段,断开单向连接,连接释放。
第三次挥手:服务端FIN=1,seq=w,ack = u+1,服务端进入LAST_ACK阶段,客户端收到TIME_WAIT阶段。
第四次挥手:客户端发送 ACK=1 seq =u+1 ack=w+1 客户端进入CLOSED状态,服务端收到进入CLOSED状态。
为什么不是三次挥手呢?
三次挥手:第二次挥手需要发送FIN 标识没有数据要发送了,但是这个保证不了。四次挥手的主要目的:是为了知道双方都不能发送数据了
。
网友评论