说说TCP传输的三次握手四次挥手策略

news2024/11/17 1:01:23

TCP(传输控制协议)是一个面向连接、可靠的传输层协议。在建立和关闭连接时,TCP使用“三次握手”和“四次挥手”机制来确保可靠的通信。下面我们详细讲解这两个过程:

一、三次握手(TCP连接建立)

三次握手是建立TCP连接的过程,目的是确保客户端和服务器之间的连接是可靠的。通过三次握手,双方能够确认彼此的接收和发送能力,以及初始的序列号。

三次握手的过程:
  1. 第一次握手 — 客户端发送SYN请求:

    • 客户端发送一个SYN(同步序列编号)报文段到服务器,表示客户端希望建立连接。此时客户端进入 SYN_SENT 状态,等待服务器的响应。
    • SYN报文段中会包含客户端的初始序列号(Seq=Client_ISN),并且SYN标志位被设置为1。
  2. 第二次握手 — 服务器回应SYN-ACK:

    • 服务器收到客户端的SYN报文后,服务器会发送一个SYN-ACK报文段给客户端,表示同意建立连接。此时,服务器进入 SYN_RECEIVED 状态,等待客户端的确认。
    • 该报文中会包含服务器的初始序列号(Seq=Server_ISN),并且ACK标志位被设置为1,表示确认收到客户端的SYN请求(Ack=Client_ISN+1)。服务器还会发送自己的SYN请求。
  3. 第三次握手 — 客户端确认:

    • 客户端收到服务器的SYN-ACK报文后,客户端会发送一个ACK报文段来确认收到服务器的SYN-ACK。此时,客户端进入 ESTABLISHED 状态,表示连接已经建立。
    • 该报文段的序列号为 Seq=Client_ISN+1,ACK字段值为 Ack=Server_ISN+1。客户端发送完毕后,服务器也进入 ESTABLISHED 状态,连接建立完成。

通过这三次握手,客户端和服务器都能确认彼此的接收能力,并且同步序列号,确保数据传输的可靠性。

总结:
  • 第一次:客户端发送SYN请求,服务器收到后回SYN-ACK;
  • 第二次:服务器返回SYN-ACK,客户端确认;
  • 第三次:客户端确认,连接建立。

二、四次挥手(TCP连接关闭)

四次挥手是TCP连接的终止过程。由于TCP是全双工的连接,每一方向的关闭都需要独立处理。四次挥手的目的是确保双方能够完成数据的传输,优雅地关闭连接。

四次挥手的过程:
  1. 第一次挥手 — 客户端发送FIN:

    • 客户端发送一个FIN(结束连接)报文段,表示客户端已经没有数据发送到服务器了。此时,客户端进入 FIN_WAIT_1 状态。
    • 此时客户端请求关闭连接,但仍然可以接收数据。
  2. 第二次挥手 — 服务器回应ACK:

    • 服务器收到客户端的FIN报文后,表示已经接收到客户端关闭连接的请求。服务器会返回一个ACK报文段,确认客户端的FIN报文。此时,服务器进入 CLOSE_WAIT 状态。
    • 服务器的ACK报文段的 Ack=Client_SEQ+1,表明服务器已接收到客户端的关闭请求。
  3. 第三次挥手 — 服务器发送FIN:

    • 服务器发送一个FIN报文段,表示服务器端的数据也传输完毕,准备关闭连接。此时,服务器进入 LAST_ACK 状态。
    • 此时服务器告诉客户端它已经没有数据要发送了,请求客户端关闭连接。
  4. 第四次挥手 — 客户端回应ACK:

    • 客户端收到服务器的FIN报文后,发送一个ACK报文段来确认。此时客户端进入 TIME_WAIT 状态,等待一段时间,以确保服务器收到ACK报文后再完全关闭连接。
    • 客户端的ACK报文的序列号为 Ack=Server_SEQ+1。此时,客户端可以关闭连接,进入 CLOSED 状态。

    TIME_WAIT状态:客户端在发送完最后的ACK报文后,会进入 TIME_WAIT 状态,通常会持续2倍的最大报文生存时间(MSL,Maximum Segment Lifetime),目的是确保服务器能够收到ACK报文,避免重复的数据包影响新连接。

总结:
  • 第一次:客户端发送FIN,表示请求关闭;
  • 第二次:服务器回复ACK,确认关闭;
  • 第三次:服务器发送FIN,表示数据发送完毕;
  • 第四次:客户端回复ACK,连接完全关闭。

为什么需要四次挥手?

TCP连接是全双工的,客户端和服务器各自都可以独立地发送和接收数据。因此,当客户端或服务器中的一方决定关闭连接时,需要确保另一方还有时间来完成数据的发送,避免丢失数据。此外,TIME_WAIT 状态可以防止连接关闭后的老数据包干扰新的连接。

总结

  • 三次握手:用于建立TCP连接,确保双方都准备好进行数据传输,并且能够同步初始的序列号。
  • 四次挥手:用于正常终止TCP连接,确保双方都能完成剩余数据的发送和接收,并且优雅地关闭连接。

这两种机制是TCP协议提供的可靠性保障,确保在连接的建立与关闭过程中不会丢失数据或出现通信错误。

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

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

相关文章

跳房子(弱化版)

题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上。每个格子内…

A029-基于Spring Boot的物流管理系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

Spring系统框架

Spring Framework系统架构 1.Spring核心概念 代码书写现状 耦合度偏高 解决方案 使用对象时,在程序中不要主动使用new产生对象,转换为外部提供对象 IOC(Inversion of Control)控制反转 对象的创建控制权由程序移到外部,这种思想称为控制…

鸿蒙实战:页面跳转

文章目录 1. 实战概述2. 实现步骤2.1 创建项目2.2 准备图片素材2.3 编写首页代码2.4 创建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 实战概述:本实战通过ArkUI框架,在鸿蒙系统上开发了一个简单的两页面应用。首页显示问候语和“下一页”按钮&…

文献解读-DNAscope: High accuracy small variant calling using machine learning

关键词:基准与方法研究;基因测序;变异检测; 文献简介 标题(英文):DNAscope: High accuracy small variant calling using machine learning标题(中文):DNAsc…

程序设计方法与实践-变治法

变换之美 变治法就是基于变换的思路,进而使原问题的求解变得简单的一种技术。 变治法一般有三种类型: 实例化简:将问题变换为同问题,但换成更为简单、更易求解的实例。改变表现:变化为同实例的不同形式,…

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url 第一类情况 在anaconda创建新环境时,使用如下代码 conda create -n charts python3.7 错误原因: 默认镜像源访问速度过慢,会导致超时从而导致更新和下载失败。 解决方…

Spring Boot框架:电商系统的技术革新

4 系统设计 网上商城系统的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没有经过全…

wordpress下载站主题推荐riproV5 wordpress日主题

iPro主题全新V5版本,是一个优秀且功能强大、易于管理、现代化的WordPress虚拟资源商城主题。支持首页模块化布局和WP原生小工具模块化首页可拖拽设置,让您的网站设计体验更加舒适。同时支持了高级筛选、自带会员生态系统、超全支付接口等众多功能&#x…

微服务即时通讯系统的实现(客户端)----(1)

目录 1. 项目整体介绍1.1 项目概况1.2 界面预览和功能介绍1.3 技术重点和服务器架构 2. 项目环境搭建2.1 安装Qt62.3 安装vcpkg2.3 安装protobuf2.4 构建项目2.5 配置CMake属性 3. 项目核心数据结构的实现3.1 创建data.h存放核心的类3.2 工具函数的实现3.3 创建编译开关 4. 界面…

2024年11月15日

1.计算机网络 逻辑右移 做加减法 定点乘法 原码乘法运算 一位乘 计组 2.英语六级

算法定制LiteAIServer摄像机实时接入分析平台玩手机打电话检测算法:智能监控的新篇章

在现代社会,随着智能手机的普及,无论是在工作场所还是公共场所,玩手机或打电话的行为日益普遍。然而,在某些特定环境下,如工厂生产线、仓库、学校课堂等,这些行为可能会影响到工作效率、安全或教学秩序。为…

算法--解决二叉树遍历问题

第一 实现树的结构 class Node(): # 构造函数,初始化节点对象,包含数据和左右子节点 def __init__(self, dataNone): self.data data # 节点存储的数据 self.left None # 左子节点,默认为None self.rig…

深度学习基础—Beam search集束搜索

引言 深度学习基础—Seq2Seq模型https://blog.csdn.net/sniper_fandc/article/details/143781223?fromshareblogdetail&sharetypeblogdetail&sharerId143781223&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上篇博客讲到,贪心算…

C++__day1

1、思维导图 2、如果登录失败&#xff0c;提示用户登录失败信息&#xff0c;并且提示错误几次&#xff0c;且重新输入&#xff1b;如果输入错误三次&#xff0c;则退出系统 #include <iostream> using namespace std;int main() {string id , pswd;string user"admi…

【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)

欧式距离和曼哈顿距离是两种常用的距离度量方法&#xff0c;用于衡量两点之间的相似性或差异性。它们在几何分析、数据挖掘、机器学习等领域有广泛应用。 1. 欧式距离 概念 欧式距离&#xff08;Euclidean Distance&#xff09;是最常见的直线距离度量方法&#xff0c;源于欧…

Java之JDBC,Maven,MYBatis

前言 就是用来操作数据库的 1.JDBC快速入门 注意在使用前一定要导入jar包 在模块那里新建目录&#xff0c;新建lib&#xff0c;粘贴复制jar包&#xff0c;我这个jar设置的是模块有效 package test1017;import java.sql.Connection; import java.sql.DriverManager; import…

JavaWeb笔记整理——Spring Task、WebSocket

目录 SpringTask ​cron表达式 WebSocket SpringTask cron表达式 WebSocket

【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩

1. rowkey的设计 ​ RowKey可以是任意字符串&#xff0c;最大长度64KB&#xff0c;实际应用中一般为10~100bytes&#xff0c;字典顺序排序&#xff0c;rowkey的设计至关重要&#xff0c;会影响region分布&#xff0c;如果rowkey设计不合理还会出现region写热点等一系列问题。 …

如何实现主备租户的无缝切换 | OceanBase应用实践

对于DBA而言&#xff0c;确保数据库的高可用性、容灾等能力是其日常工作中需要持续思考和关注的重要事项。一方面&#xff0c;可以利用数据库自身所具备的功能来实现这些目标&#xff1b;若数据库本身不提供相应功能&#xff0c;DBA则需寻找其他工具来增强数据库的高可用性和容…