3次握手
客户端————>服务器————>客户端————>服务器
1 2 3
1:客户端主动启动 向服务端 发送 seq=x (序号) SVN=1 (发送请求) 客户端进入SYN_SENT 已发送状态
2:服务器接收到客户端报文 被动打开 向客户端发送 SVN=1 ACK=1(确认序号有效) seq=y ack=x+1(客户端seq+1) 服务器进入 SYN_RCVD 已接收状态
3:客户端接收到服务器发送报文 向服务器发送 ACK=1,SEQ=X+1,ack=y+1
服务器接受 连接建立
第三次握手含义 防止服务器接受到无效请求发送给客户端后直接建立连接(反馈)
4次挥手
客户端————>服务器 1
服务器————>客户端 2
服务器————>客户端 3
客户端————>服务器 4
客户端 发送fin=m给服务器 进入fin_wait_1状态
服务器接受到 fin 返回ack=m+1 表示接收到fin=m 传输剩余数据 服务器进入CLOSE_WAIT状态
服务器发送 fin=n 给客户端 进入LAST_ACK状态
客户端接受到 fin=n 进入TIME_WAIT(等待两个msl 最大报文保存时间 后关闭) 并发送 ack=n+1 给服务器 服务器接受到ack后close
4次原因 服务器收到关闭请求时可能还要继续发送数据 所以fin ack要分开发送
等待两个msl 最大报文保存时间原因 客户端发送的第四次挥手ack=n+1 可能不被服务器收到 服务器会重发 客户端time_wait状态可以接受并重新发送ack=n+1给服务器