前提:
- (1)SYN(synchronous 建立联机)
- (2)ACK(acknowledgement 确认)
- (3)PSH(push 传送)
- (4)FIN(finish 结束)
一, 三次握手
(1)第一次握手: 客户端发送 syn 包 (syn=x) 到服务器, 并进入 SYN_SEND 状态, 等待服务器确认;
(2)第二次握手: 服务器收到 syn 包, 必须确认客户的 SYN(ack=x+1), 同时自己也发送一个 SYN 包(syn=y), 即 SYN+ACK 包, 此时服务器进入 SYN_RECV 状态;
(3)第三次握手: 客户端收到服务器的 SYN+ACK 包, 向服务器发送确认包 ACK(ack=y+1), 此包发送完毕后, 客户端和服务器进入 ESTABLISHED 状态, 完成三次握手.
握手过程中传送的包里不包含数据, 三次握手完成后, 客户端和服务器才正式开始传送数据. 理想状态下, TCP 连接一旦建立, 在通信双方中的任何一方主动关闭连接之前, TCP 连接将一直保持下去.
二, 四次挥手
(1)第一次握手: 主动关闭方发送一个 FIN 包, 用来关闭主动方的数据传送,(在 FIN 包之前发送出去的数据, 如果没有收到 ACK 确认报文, 主动方依然会重发这些数据)但此时主动关闭方还可以接受数据.
(2)第二次挥手: 被动关闭方收到 FIN 包后, 发送一个 ACK 包给对方, 确认序号为收到序号 + 1,(与 SYN 相同, 一个 FIN 占用一个序号).
(3)第三次挥手: 被动关闭方发送一个 FIN 包, 用来关闭被动关闭方到主动关闭方的数据传送.(数据传送关闭)
(4)第四次挥手: 主动关闭方收到 FIN 后, 发送一个 ACK 包给被动关闭方, 确认序号为收到序号 + 1, 至此, 完成四次挥手.
来源: http://www.bubuko.com/infodetail-2788343.html