TCP连接秘籍:三次握手建立连接,四次挥手优雅告别

news2024/11/20 2:07:32

 

在数字通信的广阔天地中,TCP协议如同一座稳固的桥梁,连接着网络世界的每一个角落。它不仅确保了数据的可靠传输,还通过精细设计的连接建立与断开机制,展现了其无与伦比的优雅与智慧。TCP的三次握手,犹如初次相遇时的礼貌问候,双方在确认彼此的存在与接收能力后,携手步入数据传输的殿堂。而TCP的四次挥手,则如同一次深情的告别,双方在确认所有数据已安然送达,无遗憾地挥别,各自走向新的旅程。接下来,让我们一同走进这TCP协议的精妙世界,细细品味三次握手建立连接的严谨与四次挥手断开连接的优雅,感受数字通信背后的艺术之美。 

目录

TCP三次握手

初始状态

第一次握手

第二次握手

第三次握手

总结

TCP四次挥手 

1. 第一次挥手

2. 第二次挥手

3. 第三次挥手

4. 第四次挥手

总结


刚开始时,客户端处于CLOSED状态。当客户端想要建立连接时,它会进入SYN-SENT状态,并向服务器发送一个SYN报文(同步序列编号请求报文),该报文中包含了自己的初始化序列号ISN(c)。此时,服务器通常处于LISTEN状态,等待来自客户端的连接请求。

TCP三次握手

初始状态

  • 客户端:CLOSED状态
  • 服务器:LISTEN状态,等待客户端连接请求

第一次握手

  • 客户端动作:
    • 发送SYN报文(同步序列编号请求报文)
    • 报文中包含客户端的初始化序列号ISN(c)
    • 客户端状态变为SYN-SENT
  • 服务器动作:
    • 接收SYN报文
    • 确认接收能力正常
    • 服务器状态变为SYN-RCVD(同步收到)

第二次握手

  • 服务器动作
    • 发送SYN-ACK报文(同步序列编号和确认应答报文)
    • 报文中包含对客户端SYN报文的确认(ACK值为ISN(c) + 1)
    • 同时包含服务器的初始化序列号ISN(s)
    • 服务器状态仍为SYN-RCVD,等待客户端确认
  • 无客户端动作(等待接收服务器的SYN-ACK报文)

第三次握手

  • 客户端动作
    • 接收服务器的SYN-ACK报文
    • 确认自己的发送和接收能力正常
    • 发送ACK报文给服务器,ACK值为ISN(s) + 1
    • 客户端状态变为ESTABLISHED,连接建立
  • 服务器动作
    • 接收客户端的ACK报文
    • 确认自己的发送和接收能力正常
    • 服务器状态变为ESTABLISHED,连接正式建立

总结

  • 通过三次握手,客户端和服务器都确认了双方的发送和接收能力,连接得以成功建立,双方进入ESTABLISHED状态,可以开始数据传输。服务器收到客户端的ACK报文后,也确认了自己的发送能力和接收能力都正常,于是服务器状态也变为ESTABLISHED,连接正式建立。

这样,通过三次握手,客户端和服务器都确认了双方的发送和接收能力,连接得以成功建立。

TCP四次挥手 

四次挥手(Four-Way Wavehand)是TCP/IP协议中用于断开TCP连接的过程。与三次握手建立连接相对应,四次挥手确保连接的双方能够优雅地释放连接并释放资源。以下是四次挥手的详细过程:

  

1. 第一次挥手

  • 客户端:当客户端(主动关闭方)完成数据传输后,想要关闭连接时,会向服务器(被动关闭方)发送一个FIN报文段。这个报文段中,FIN标志位被设置为1,表示请求关闭连接。同时,报文段中还会包含一个序列号,该序列号是当前数据传输的最后一个字节的序列号加1。
  • 状态变化:客户端发送FIN报文段后,进入FIN_WAIT_1状态,等待服务器的确认。

2. 第二次挥手

  • 服务器:服务器收到客户端的FIN报文段后,会向客户端发送一个ACK报文段作为确认。这个ACK报文段中,ACK标志位被设置为1,确认号字段被设置为客户端FIN报文段中的序列号加1,表示服务器已经收到了客户端的关闭请求。
  • 状态变化:服务器发送ACK报文段后,进入CLOSE_WAIT状态。在这个状态下,服务器可以继续向客户端发送数据,直到服务器也准备好关闭连接。

3. 第三次挥手

  • 服务器:当服务器也完成数据传输,并准备好关闭连接时,会向客户端发送一个FIN报文段。这个FIN报文段同样包含FIN标志位和序列号,表示服务器请求关闭连接。
  • 状态变化:服务器发送FIN报文段后,进入LAST_ACK状态,等待客户端的确认。

4. 第四次挥手

  • 客户端:客户端收到服务器的FIN报文段后,会向服务器发送一个ACK报文段作为确认。这个ACK报文段中,ACK标志位被设置为1,确认号字段被设置为服务器FIN报文段中的序列号加1。
  • 状态变化:客户端发送ACK报文段后,进入TIME_WAIT状态。在这个状态下,客户端会等待一段时间(通常是2MSL,即两倍的最大报文段生存时间),以确保所有在网络中传输的数据包都已经被对方收到。之后,客户端会关闭连接,进入CLOSED状态。服务器收到客户端的ACK报文段后,也进入CLOSED状态,连接完全释放。

总结

四次挥手的过程确保了TCP连接的双方能够优雅地释放连接并释放资源。通过四次挥手,连接双方都能确认对方已经收到了关闭请求,并且所有数据传输都已经完成。TIME_WAIT状态的存在是为了防止网络中可能出现的延迟数据包对新的连接造成干扰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【惠州大亚湾】之维修戴尔服务器DELLR730XD

1:广东省惠州市大亚湾某游客服务中心来电报修1台DELL PowerEdge R730xd服务器无法正常开机的问题。听该负责描述这台服务器因为服务中心电力切换导致意外关机,来电后发现就无法正常开机了。所以找到我们希望配合维修。 2:该机器由于特别着急…

常见网络厂商设备默认用户名/密码大全

常见网络厂商的默认用户名/密码 01 思科 (Cisco) 设备类型:路由器、交换机、防火墙、无线控制器 默认用户名:cisco 默认密码:cisco 设备类型:网管型交换机 默认用户名:admin 默认密码:admin 02 华…

PH热榜 | 2024-11-18

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. Momen 标语:快速搭建你的最小可行产品,然后扩展它,无需任何编程经验。 介绍&#xff…

LoFTR: Detector-Free Local Feature Matching with Transformers—特征点匹配算法系列

LoFTR: Detector-Free Local Feature Matching with Transformers 受到:受到开创性作品 SuperGlue 的启发 摘要总结: 提出了一种局部图像特征匹配的新方法。更为突出说明的是室内场景下的特征点的匹配问题。 不是依次执行图像特征检测、描述和匹配&#…

Percona XtraBackup备份docker版本mysql 5.7

my.cnf配置文件 [client] default_character_setutf8[mysqld] # 数据存储目录(必须手动指定) datadir/var/lib/mysql/data# 字符集 collation_server utf8_general_ci character_set_server utf8 # 二进制日志 server-id1 log_bin/var/log/mysql/binl…

Windows安装vcpkg教程(VS2022)

内容摘要: 本文详细介绍如何在Windows系统上使用 Git 克隆 vcpkg 仓库来安装vcpkg工具,并链接Visual Studio 2022。 目录 一、关于vcpkg 二、开发环境 三、安装Git 四、使用 Git 克隆 vcpkg 仓库 一、关于vcpkg vcpkg 是一个开源的 C 包管理工具&am…

nodejs入门(1):nodejs的前后端分离

一、引言 我关注nodejs还是从前几年做了的一个电力大数据展示系统开始的,当然,我肯定是很多年的计算机基础的,万变不离其宗。 现在web网站都流行所谓的前后端结构,不知不觉我也开始受到这个影响,以前都是前端直接操作…

智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建

hello~这里是维小帮,如有项目需求和技术交流欢迎大家私聊我们!点击文章最下方获取智慧停车场方案~撒花! 随着城市化进程的加速,停车难问题日益凸显。智能停车系统作为缓解停车压力的有效手段,其核心技术与架构的构建至…

Django5 2024全栈开发指南(三):数据库模型与ORM操作

目录 一、模型的定义二、数据迁移三、数据表关系四、数据表操作4.1 Shell工具4.2 数据新增4.3 数据修改4.4 数据删除4.5 数据查询4.6 多表查询4.7 执行SQL语句4.8 数据库事务 Django 对各种数据库提供了很好的支持,包括 PostgreSQL、MySQL、SQLite 和 Oracle&#x…

中仕公考怎么样?事业编面试不去有影响吗?

事业编考试笔试已经通过,但是面试不去参加会有影响吗? 1. 自动放弃面试资格:未能按时出席事业单位的面试将被视为主动放弃该岗位的竞争机会。 2. 个人信誉问题:面试作为招聘流程的关键步骤,无故缺席可能被解释为诚信…

MySql结合element-plus pagination的分页查询

实现效果如下: 重点:使用mysql查询的limit和offset 原生SQL写法: select c.id as deptid,c.name as department,position,a.name staffname,2024-11 as shijian ,CASE WHEN b.shijian IS NULL THEN no ELSE yes END AS submit from fa_wecom…

学习笔记019——Ubuntu部署tomcat

1、下载Tomcat压缩包。本人下载的版本是:apache-tomcat-8.5.77.tar.gz 2、将压缩包上传到Ubuntu某个目录。 本人存放的目录是 /opt 目录下, 命令解压: ## 解压tomcat压缩包 tar -zxvf apache-tomcat-8.5.77.tar.gz 3、vim打开bin目录的setclasspath…

【JavaSE】(6)抽象类和接口

目录 一、抽象类 1、什么是抽象类 2、抽象类的特点 3、抽象类的作用 4、抽象类示例代码 二、接口 1、什么是接口 2、接口的书写建议 3、接口的特点 4、实现多个接口 5、接口能“忘记类型” 6、接口间的继承 7、接口的应用 7.1、引用类型的比较--Comparable 和 Co…

Git学习教程(更新中)

持续更新完善中… 1 Git简介 1.1 Git是什么? Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。它能够记录项目文件的变更历史,让多个开发者可以协作开发同一个项目&#…

TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞

随着区块链技术的快速发展,去中心化应用(DApp)逐渐成为了数字生态的重要组成部分。而Telegram作为全球领先的即时通讯应用,不仅仅满足于传统的社交功能,更在区块链领域大胆探索,推出了基于其去中心化网络的…

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列: 列名称,类型在后 n…

两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐,所以我制作了两个基础的镜像,希望可以帮助大家节省时间,你可以选择其中一种进行安装,版本说明: base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel,默认 python 版本…

免费实时图片编辑工具:MagicQuill

参看: https://huggingface.co/spaces/AI4Editing/MagicQuill 人工智能交互式图像编辑:可以制定涂改增加删除

前端学习八股资料CSS(五)

更多详情:爱米的前端小笔记,更多前端内容,等你来看!这些都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们的支持才是我不断更新的动力!找…

翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践

引言:自2021年起,翼鸥教育便开始应用OceanBase社区版,两年间,先后部署了总计12套生产集群,其中核心集群占比超过四分之三,所承载的数据量已突破30TB。自2022年10月,OceanBase 社区发布了4.2.x 版…