参考:(57条消息) TCP/IP协议 - 三次握手四次挥手(入门易懂版)-CSDN博客
握手=建立连接
挥手=断开连接
需要了解两个概念:序号和标志位
在TCP/IP协议下
序号:seq(计算机随机产生)
确认序号:ack(用于连接断开时一般在seq上+1)
标志位:
ACK:确认序号标志,1表示有效,0表示忽略
SYN:同步序号标志,SYN = 1 和 ACK = 0 表示该数据段没有使用捎带的确认域,SYN = 1 和 ACK = 1 为连接应答捎带一个确认
FIN:完成标志,1 时表示发送方已经没有数据发送了,即关闭本方数据流
了解完以上概念即可深入学习三次握手和四次挥手啦
![](https://i-blog.csdnimg.cn/blog_migrate/3b1ec0dae630f15cad5808832da4dfac.png)
![](https://i-blog.csdnimg.cn/blog_migrate/31a3f311e3984bce2e334715a9f7bdc5.png)
过程讲解:
客户端向服务端发送一个序号seq(1)和一个报文:确认序号标志位SYN=1
服务端接收到报文后发送ACK=1报文,表示接收成功,并且发送序号seq(2)和确认序号ack=seq(1)+1
客户端接收到服务端报文,再向服务发送ACK=1B报文和确认序号ack=seq(2)+1
以上就是三次握手,为什么两次握手不可以?
因为两次握手只能确认服务端能接收到客户端的信息,不能保证客户端能接收到服务端的信息
四次挥手:
![](https://i-blog.csdnimg.cn/blog_migrate/5e360faea6565cca2605afaa8d15ace4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a3a151bca2df39d79dc9e6299c1c931f.png)
过程讲解:
客户端发送FIN=1报文(一次)
服务端·接受到客户端的信息,发送ACK=1报文,再发送FIN=1报文(二、三次)
客户端接收服务端的报文,发送ACK=1报文(四次)
tip:为什么第二步服务端要发送两次报文?
因为服务端一般会连接多个客户端,而每次只能处理来自一个客户端的报文,所以一般客户端发来FIN=1的报文时,服务端会先给客户端ACK=1的报文,等处理完上一个客户端的请求以后·再发送FIN=1报文表示允许断开
tip2:如果连接过程中客户端突然断开会怎么样?
服务端每次收到客户端的请求时,都会有·一个·定时器清0,如果超过两个小时没有收到请求,服务端会每隔75s发送一个探测信号,发送10个还没有反应就断开连接