三次握手与四次挥手

三次握手

三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个数据包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,并交换 TCP 的信息。在socket编程中,客户端执行connect()时,将触发三次握手。

第一次握手

  1. 第一次握手,由客户端发送请求连接即SYN = 1,TCP规定SYN=1的时候,不能够携带数据。但是需要消耗一个seq序号。因此,产生了一个序号seq = x。

第二次握手

. 第二次握手,B主机收到A主机发送的消息。向A主机发送确认。发送SYN = 1,表示请求连接已经收到,把TCP包中ACK位置为1,表示同意连接,并发送一个新的序列号seq =y。

确认好ack = x + 1;

第三次握手

  1. 第三次握手,其实经过两次连接之后,双方的基本连接已经建立。但是A收到B的确认之后,还需要向B给出确认,说明自己已经收到确认包了。设置确认ACK = 1,ack = y + 1。而顺序号seq = x + 1,。双方建立稳定的连接。此时ACK报文可以携带数据。

总结

第一次握手:客户端向服务器端发送报文

:证明客户端的发送能力正常

第二次握手:服务器端接收到报文并向客户端发送报文

:证明服务器端的接收能力、发送能力正常

第三次握手:客户端向服务器发送报文

:证明客户端的接收能力正常

四次挥手

我们TCP数据建立连接的时候,需要使用3次握手,但是断开连接的时候,需要挥手四次。所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发

第一次挥手

|----------------------------------------------------------------|
| 客户端打算关闭连接,此时会发送⼀个 TCP ⾸部 FIN 标志位被置为 1 的报⽂ ,也即 FIN 报文,之后客户端 |

进⼊ FIN_WAIT_1 状态。

第二次挥手

服务端收到该报⽂后,就向客户端 发送 ACK 应答报⽂ ,接着服务端进⼊ CLOSED_WAIT (等待关闭示)状态。

第三次挥手

客户端收到服务端的 ACK 应答报⽂后,之后进⼊FIN_WAIT_2 状态(等待对方的FIN报文
。但此时服务端可能还有一些数据未处理完。 等待服务端处理完数据后,也向客户端发送 FIN 报⽂ ,之后服务端进⼊LAST_ACK 状态。

第四次挥手

客户端收到服务端的 FIN 报⽂后,回⼀个 ACK 应答报⽂,之后进⼊ TIME_WAIT (收到了对方的FIN**报文**,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态)

服务端收到了 ACK 应答报⽂后,就进⼊了 CLOSED 状态,⾄此服务端已经完成连接的关闭。

客户端在经过 2MSL ⼀段时间后,⾃动进⼊ CLOSED 状态,⾄此客户端也完成连接的关闭。

为什么要进行三次握手?

**主要原因:**防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

为什么需要四次挥手?

因为不像建立连接的过程,接收方收到连接请求后可以立即发送SYN进行连接,释放资源时,接受方在收到发送方的释放连接请求后,还需要一段时间来处理未完成的发送请求,这里需要两次确认发送方的请求:第一次是未处理完,我还不能释放,但是收到了你的请求,告诉发送方一声,等等我;第二次确认表示已经处理完请求了,我也可以进行释放了。因此需要四次

相关推荐
C2H5OH66615 分钟前
WebSocket-练习1
网络·websocket·网络协议
狂奔的sherry16 分钟前
Socket vs WebSocket
网络·websocket·网络协议
wuk99821 分钟前
CentOS7环境搭建L2TP服务器
运维·服务器
恒创科技HK23 分钟前
香港1核2G云服务器当网站服务器够用不?
运维·服务器
IT 小阿姨(数据库)43 分钟前
PostgreSQL 之上的开源时序数据库 TimescaleDB 详解
运维·数据库·sql·postgresql·开源·centos·时序数据库
颜大哦1 小时前
linux安装mysql
linux·运维·mysql·adb
学习3人组1 小时前
Node.js 网站服务器开发
运维·服务器·node.js
来知晓2 小时前
Linux:WSL内存空间管理之清完内存C盘可用空间不增问题解决
linux·运维·服务器
sadandbad2 小时前
[vulhub靶机通关]DC-2(rbash绕过_git提权)
网络·sql·web安全·网络安全
GTgiantech2 小时前
科普SFP 封装光模块教程
服务器·网络·数据库