5分钟读懂tcp/ip协议三次握手、四次挥手
TCP协议报文结构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0bfeb86a8c06b8b5824b20d5f4c6bd66.png#pic_center)
- **ACK:**确认控制字段。1:确认号有效;0:忽略确认号段。
- **SYN:**请求建立连接控制字段
- **FIN:**控制字段,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
TCP三次握手过程(面试)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a459e9410aa11f78793b4e29c91a0cfc.png#pic_center)
1) 第一次握手:
发送请求建立连接控制字段SYN=1, 发送序号seq=x(随机生成,所以用x代替)。客服端进入SYN_SEND状态
2) 第二次握手:
发送请求建立连接控制字段SYN=1, 同时还会发送确认控制字段ACK=1
发送序号seq=y, 还会发送确认序号ack=x+1(对上一个数据序号信息进行确认)
服务端进入SYN_RCVE状态
3) 第三次握手:
发送确认控制字段ACK=1,确认序号ack=y+1
客服端进入ESTABLISHED状态
服务器端收到后也进入ESTABLISHED状态
TCP四次挥手过程:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/51aa6cd8919d9854b46f185d0445ee4a.png#pic_center)
1) 第一次挥手:
发送控制字段FIN=1请求断开连接,序列号seq=x
客户端进入FIN_WAIT_1(终止等待1)
2) 第二次挥手:
发送确认控制字段ACK=1,确认号ack=x+1
服务端进入CLOSE_WAIT(关闭等待)
客户端收到后进入FIN_WAIT_2(终止等待2)
3) 第三次挥手:
发送控制字段FIN=1请求断开连接,序列号seq=y
服务端进入LAST_ACK
4) 第四次挥手:
发送确认控制字段ACK=1,确认号ack=y+1
客户端进入TIME_WAIT
服务器收到包后进入CLOSED
*三次挥手也会存在: 当主动方不合理断开连接时,被动方把ACK,FIN合并发送。