网络连接(3次握手和4次挥手)

在进行3次握手和4次挥手传输数据时,都可能会出现丢包的情况,推荐看出现丢包问题的情况以及解决方法

一.为什么要进行3次握手?

在进行网络连接时,需要3次握手

3次握手的初心就是两方面:

1.投石问路,验证通讯路径是否畅通,双方的发送/接收能力是否正常

2.协商必要的参数,使客户端和服务器使用相同的参数进行消息传输

二.为什么要进行4次挥手?

在断开网络连接时,需要4次挥手

在进行网络连接时,双方会存储对端的一些相关信息,所以在不需要连接的时候就要断开连接,释放双方存储对端信息的内存,在进行4次挥手的过程中就会释放这些网络连接的内存,断开连接

三.3次握手

1.3次握手的图示

SYN,ACK是TCP协议报头中的标志位, SYN表示请求建立连接,可以称为"同步报文段",ACK表示确认号是否有效,可以称为应答报文段

2.过程介绍

一般进行网络连接是客户端进行申请的

1.首先客户端向服务器发送SYN(同步报文段)请求与服务器建立连接

2.服务器收到了客户端传来的SYN(同步报文段)后内核就立即返回一个ACK(应答报文段)(接收方在收到信息后内核立马返回给发送方应答报文段这是保证TCP可靠性的核心因素),同时服务器也发送一个SYN(同步报文段)请求与客户端建立连接

3.客户端在收到ACK(应答报文段)后便知道自己的连接请求已经被服务器成功接收,并且收到SYN(同步报文段)后客户端的内核也马上发送ACK(应答报文段)给服务器

这样就成功完成了3次握手,检验了双方的发送和接送信息的能力,同步了必要的参数,完成了网络连接

注意在这些信息的传递过程中有可能会出现丢包的情况,导致信息没有成功传递,解决方法就是超时重发,可以看文章首部推荐的博客

3.3次握手的执行时机

我们在使用TCP协议进行网络编程时,主要的类是Socket和ServerSocket,我们在实例化Socket类(连接对象)时就会在内核中开始进行3次握手,这个new(实例化)操作完成了,3次握手也就完成了(这是内核完成的工作,应用程序无法干预)

对于使用TCP协议进行网络编程的案例推荐看TCP协议网络编程 回显服务器,客户端实现

4.3次握手为什么是3次,而不是2次或4次

因为恰好3次,就能验证双方的发送和接收能力均正常,并且把这个信息同步给双方

例子:假如现在有一个客户端A和服务器B进行3次握手

1.A向B发送SYN(同步报文段)请求建立连接,此时A并不知道自己的发送能力是否正常

2.B接收到了A传来的SYN(同步报文段)后发送ACK(应答报文段)和SYN(同步报文段)给A表名接受到了A的SYN并且向A请求建立连接,此时B知道了A的发送能力正常,自身的接收能力正常

3.A接收到了B传来的ACK(应答报文段)和SYN(同步报文段),便知道了自身的发送和接收能力正常,B的发送/接收能力正常,于是向B发送ACK(应答报文段)

4.B接收到了A发送的ACK(应答报文段),便知道了自身的发送能力,A的接收能力正常

所以综上所述,我们3次握手就刚好可以让A,B都确定双方的发送和接收能力正常,就可以安全的进行网络连接

四.4次挥手

1.4次挥手的图示

'

2.为什么4次挥手不能将中间的两次合并在一起

我们可以很明显的发现4次挥手和3次握手的区别便是4次挥手将3次握手中间的两个操作给分开了,那为什么我们在"挥手"时不将这两个操作一起进行呢?

因为当客户端向服务器发送FIN(结束报文段)(TCP的标志位,通知对方,本端要关闭了),服务器会在接收到FIN(结束报文段)后由内核立即发送ACK(应答报文段)给客户端,此时需要服务器发送FIN(结束报文段)给客户端,但是服务器发送FIN(结束报文段)是由代码控制的

只有当服务器代码中的Socket连接对象调用close方法,释放对象以后,服务器才会发送FIN(结束报文段)给客户端,所以服务器发送ACK(应答报文段)是立即发送,而发送FIN(结束报文段)要等待程序执行到对应的代码才能发送

于是就不能将发送ACK(应答报文段)和FIN(结束报文段)合为一个操作

相关推荐
白帽子黑客罗哥5 小时前
渗透测试技术:从入门到实战的完整指南
网络·安全·web安全·渗透测试·漏洞挖掘·网络安全培训
北邮刘老师6 小时前
【智能体互联协议解析】ACPs/AIP为什么还在用“落后”的“中心化”架构?
网络·人工智能·架构·大模型·智能体·智能体互联网
CodeCraft Studio6 小时前
用“录制宏”轻松实现文档自动化:ONLYOFFICE 宏功能实践解析
运维·自动化·onlyoffice·录制宏·创建宏·文档自动化·文档协同
winfield8216 小时前
MCP 协议详解
开发语言·网络·qt
sdszoe49226 小时前
IP地址规划与VLSM技术
网络·网络协议·tcp/ip·vlsm·ip地址规划
m0_569531016 小时前
《K8s 网络入门到进阶:Service 与 Ingress 原理、部署方案及核心区别对比》
网络·容器·kubernetes
广东大榕树信息科技有限公司6 小时前
当运维管理面临挑战时,如何借助动环监控系统提升响应能力?
运维·网络·物联网·国产动环监控系统·动环监控系统
The star"'6 小时前
02-Ansible 基本使用
运维·云计算·ansible
wanhengidc6 小时前
巨 椰 云手机 满足多元需求
运维·服务器·安全·智能手机·云计算
liebe1*16 小时前
第十一章 密码学
服务器·密码学·php