三次握手与四次挥手

三次握手

三次握手(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进行连接,释放资源时,接受方在收到发送方的释放连接请求后,还需要一段时间来处理未完成的发送请求,这里需要两次确认发送方的请求:第一次是未处理完,我还不能释放,但是收到了你的请求,告诉发送方一声,等等我;第二次确认表示已经处理完请求了,我也可以进行释放了。因此需要四次

相关推荐
草履虫君36 分钟前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
日取其半万世不竭40 分钟前
LVM 逻辑卷管理:不停机扩容磁盘的正确方式
运维·服务器
@insist1231 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试
优化Henry1 小时前
TDD-LTE站点Rilink=3链路故障处理案例---BBU侧C口“有发光、无收光”的排查与恢复
运维·网络·信息与通信·tdd
浪客灿心1 小时前
Linux网络传输层协议
linux·运维·网络
V搜xhliang02461 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
遇见火星2 小时前
Nginx限流配置:防止接口被刷,服务器稳如泰山
运维·服务器·nginx
计算机安禾2 小时前
【Linux从入门到精通】第49篇:服务器故障排查终极指南——思路决定出路
linux·运维·服务器
古月-一个C++方向的小白2 小时前
Linux——初识文件
linux·运维·服务器
北山有鸟2 小时前
编译香橙派内核
linux·运维·服务器