【计算机网络】TCP握手与挥手:三步奏和四步曲
这里写目录标题
- 前言
- 三次握手
- 四次挥手
- 三次握手和四次挥手的作用
- TCP三次握手的作用
- 建立连接
- 防止已失效的连接请求建立连接
- 防止重复连接
- TCP四次挥手的作用:
- 安全关闭连接
- 避免数据丢失
- 避免半开连接
- 总结:
- 总结
前言
TCP(传输控制协议)是一种面向连接的可靠的传输协议。在建立连接和关闭连接时,TCP使用了三次握手和四次挥手的机制来确保通信的可靠性。
TCP是一种非常重要的传输层协议,被广泛应用于各种网络通信场景中。无论是企业内部的数据传输,还是互联网上的数据交换,都离不开TCP的支持。
三次握手
三次握手的过程是这样的:
-
第一步:客户端向服务器发送一个SYN(同步)标志位的数据包,请求建立连接。这个数据包包含了一个随机生成的序列号X。
-
第二步:服务器收到客户端的请求后,会回复一个带有SYN和ACK(确认)标志位的数据包。这个数据包中除了SYN标志位外,还包含了服务器随机生成的序列号Y,以及确认号ACK为X+1。
-
第三步:客户端收到服务器的响应后,会发送一个ACK标志位的数据包给服务器,确认连接建立。该数据包中的确认号ACK为Y+1。
经过以上三个步骤,双方都知道彼此已经准备好进行通信,连接成功建立。
注意:三次握手的目的是为了确保双方都能够收到对方的数据包。如果只有两次握手,则存在一种情况,即客户端发送的SYN数据包在传输过程中丢失,而服务器没有收到客户端的请求,但是客户端已经认为连接建立成功了。当客户端向服务器发送数据时,服务器会认为这是一个非法的数据包,并拒绝接收。因此,三次握手可以避免这种情况的发生。

四次挥手
四次挥手的过程是这样的:
-
第一步:客户端发送一个FIN(结束)标志位的数据包给服务器,请求关闭连接。
-
第二步:服务器收到客户端的请求后,发送一个ACK标志位的数据包给客户端,确认收到关闭请求。
-
第三步:服务器继续向客户端发送一个FIN标志位的数据包,表示服务器也准备关闭连接。
-
第四步:客户端收到服务器的关闭请求后,发送一个ACK标志位的数据包给服务器,确认收到关闭请求。
经过以上四个步骤,双方都完成了关闭连接的过程。在这个过程中,服务器和客户端都需要等待一段时间(即TIME_WAIT状态)才能完全关闭连接,等待时间一般为2MSL,即2倍最大报文段生存时间。这是因为在实际应用中,网络状况可能不稳定,需要确保对方已经接收到最后一个ACK数据包。
四次挥手的过程可以避免连接关闭时出现问题,如双方同时关闭连接,但是还有数据传输的情况。

三次握手和四次挥手的作用
TCP三次握手的作用
建立连接
三次握手确保了客户端和服务器之间建立了可靠的连接。客户端发送SYN数据包给服务器,服务器回复SYN+ACK数据包给客户端,最后客户端发送ACK数据包给服务器。通过这个过程,双方都确认对方可达,并同步了序列号和确认号。只有完成三次握手,才能确保双方能够正常通信。
防止已失效的连接请求建立连接
在网络传输过程中,可能会有延迟或丢失的情况发生。如果没有三次握手,客户端发送的连接请求可能会在网络中滞留,当客户端重新发送请求时,服务器无法区分新的连接请求与旧的失效请求。通过三次握手,服务器可以确认客户端发送的连接请求是有效的,避免建立无效的连接。
防止重复连接
在网络环境中,可能存在网络拓扑改变或网络故障的情况。如果没有三次握手,客户端可能会发送多个连接请求给服务器,而服务器则无法判断是新的连接请求还是旧的重复连接。通过三次握手,服务器可以确认客户端的序列号和确认号,避免重复连接的情况发生。
TCP四次挥手的作用:
安全关闭连接
四次挥手确保了双方在关闭连接时能够安全地完成数据传输。客户端发送FIN数据包给服务器,表示不再发送数据;服务器回复ACK数据包给客户端,确认收到关闭请求;服务器继续发送FIN数据包给客户端,表示也准备关闭连接;最后,客户端回复ACK数据包给服务器,确认收到关闭请求。通过这个过程,双方都完成了数据传输并安全地关闭连接。
避免数据丢失
在关闭连接之前,可能存在数据传输的延迟。通过四次挥手,客户端和服务器可以互相通知对方不再发送数据,确保所有数据都能被接收和处理,避免数据丢失的情况。
避免半开连接
在网络环境中,可能存在半开连接的情况,即一方已经关闭连接但另一方不知道。通过四次挥手,双方都可以通知对方自己的关闭意图,并确认对方已经收到关闭请求,避免出现半开连接的情况。
总结:
TCP三次握手和四次挥手在网络通信中起着至关重要的作用。通过三次握手,双方建立可靠的连接,确保能够正常通信,并避免无效连接和重复连接的问题。而通过四次挥手,双方安全地关闭连接,完成数据传输,并避免数据丢失和半开连接的情况发生。
总结
通过三次握手和四次挥手的机制,TCP能够可靠地建立连接和关闭连接,保证数据的完整性和可靠性。在实际应用中,TCP是非常重要的协议,被广泛应用于各种网络通信场景中。了解TCP的三次握手和四次挥手机制对于网络开发人员来说是非常重要的基础知识。
相关文章:
【计算机网络】TCP握手与挥手:三步奏和四步曲
这里写目录标题 前言三次握手四次挥手三次握手和四次挥手的作用TCP三次握手的作用建立连接防止已失效的连接请求建立连接防止重复连接 TCP四次挥手的作用:安全关闭连接避免数据丢失避免半开连接 总结: 总结 前言 TCP(传输控制协议)…...
设计模式学习总结
责任链模式 使用方法: 1.创建接口 2.定义实现类,每个实现类实现接口,并拥有一个ArchiveHandle的成员,用作责任链的链接 public interface ArchiveHandle {void handle(ArchiveVO archiveVO); } public class ArchivePreHandle i…...
「HDLBits题解」Cellular automata
本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接:Rule90 - HDLBits module top_module(input clk,input load,input [511:0] data,output [511:0] q );always (posedge clk) begin…...
什么是API ?
API(应用程序编程接口) 就像现成的家具套件相对于家居建设,用一些已经切好的木板组装一个书柜,显然比自己设计,寻找合适的木材,裁切至合适的尺寸和形状,找到正确尺寸的螺钉,然后再组…...
Pytest中conftest.py的用法
Pytest中conftest.py的用法 在官方文档中,描述conftest.py是一个本地插件的文件,简单的说就是在这个文件中编写的方法,可以在其他地方直接进行调用。 注意事项 只能在根目录编写conftest.py 插件加载顺序在搜集用例之前 基础用法 这里…...
java.lang.IllegalArgumentException: When allowCredentials is true
1.遇到的错误 java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a…...
vue折叠展开transition动画使用keyframes实现
需求,我正常的菜单功能有隐藏与显示功能,需要增加动画 打开的时候宽度从0到300,关闭的时候,宽度从300到0 <template> <div id"app"> <button click"toggleLength">Toggle Length</bu…...
书生·浦语大模型实战营-学习笔记5
LMDeploy 大模型量化部署实践 大模型部署背景 LMDeploy简介 轻量化、推理引擎、服务 核心功能-量化 显存消耗变少了 大语言模型是典型的访存密集型任务,因为它是decoder-by-decoder 先把数据量化为INT4存起来,算的时候会反量化为FP16 AWQ算法&a…...
10. Profile
1. 区分环境的配置 1.1. properties 配置 假设,一个应用的工作环境有:dev、test、prod 那么,我们可以添加 4 个配置文件: applcation.properties - 公共配置application-dev.properties - 开发环境配置application-test.proper…...
YOLO 自己训练一个模型
一、准备数据集 我的版本是yolov8 8.11 这个目录结构很重要 ultralytics-main | datasets|coco|train|val 二、训练 编写yaml 文件 # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path…...
3.Eureka注册中心
3.Eureka注册中心 假如我们的服务提供者user-service部署了多个实例,如图: 大家思考几个问题: order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?有多个user-service实例地址࿰…...
基于springboot+vue的墙绘产品展示交易平台系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…...
网络原理-初识(1)
目录 网络发展史 独立模式 网络互连 局域网LAN 广域网WAN 网络通信基础 IP地址 概念 格式 端口 概念 格式 认识协议 概念 作用 五元组 网络发展史 独立模式 独立模式:计算机之间相互独立; 网络互连 随着时代的发展,越来越需要计算机之间相互通信,共享软件和数…...
【GitHub项目推荐--人脸识别】【转载】
01 带有移动应用程序的人脸识别库 OpenFace 作为用于人脸识别的通用库,能够实现瞬态和移动人脸识别,目前在 GitHub 上斩获 14291 Star。以下为 LFW 数据集 Sylvestor Stallone 输入单个图像的流程。 项目地址:https://github.com/cmusatya…...
NLP自然语言处理介绍
自然语言处理(NLP,Natural Language Processing)是一门涉及计算机与人类语言之间交互的学科。它的目标是使计算机能够理解和生成人类语言,从而更好地处理和解析大量的文本数据。NLP不仅是人工智能领域中一个重要的分支,…...
在线WebOffce在HTML/VUE/Electron纯前端网页编辑Office之打开Word后自动处于修订模式
在线办公协同办公过程中,对于老板给出的文档修改,如果在错别字方面都要自己一个个字去看的话也太浪费时间了,其实word上就有一个修订模式,可以帮助大家高效完成文档的修改,在线WebOffce在HTML/VUE/Electron纯前端网页编…...
thinkphp+vue+mysql旅游推荐攻略分享网站p0667
基于php语言设计并实现了旅游分享网站。该系统基于B/S即所谓浏览器/服务器模式,应用thinkphp框架,选择MySQL作为后台数据库。系统主要包括用户、景点信息、攻略分类、旅游攻略、门票购买、留言反馈、论坛管理、系统管理等功能模块。运行环境:phpstudy/wa…...
华为系统底层是用Java写的吗?和安卓的区别?
HarmonyOS(鸿蒙操作系统)是华为自主开发的分布式操作系统。下面是对HarmonyOS底层的详细介绍: 微内核架构:HarmonyOS采用了微内核架构,将核心服务和功能放在微内核中,而将其他应用服务放在用户空间中。这种…...
sql server 修改表前 先判断是否有这个列
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME Users AND COLUMN_NAME userNum) BEGINALTER TABLE UsersADD userNum INT; END 在这个示例中: TABLE_NAME Users 表示我们正在检查Users这张表。COLUMN_NAME userNum 表示我们在查…...
解决网站高并发问题的策略?
解决网站高并发问题的策略 1.应用和数据服务分离:通过将应用和数据服务分离,可以降低数据库的负载压力,提高系统的可扩展性和稳定性。这种策略有助于提高系统的并发处理能力,满足大量用户的需求。 2.使用缓存技术:通过…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
