TCP核心机制之连接管理详解(三次握手,四次挥手)

news2024/11/29 10:51:04

目录

前言:

建立连接

建立连接主要两个TCP状态:

断开连接

断开连接的两个重要状态

小结:


前言:

    TCP是如何建立对端连接,如何断开连接,这篇文章会详细介绍。

建立连接

    首先明确连接的概念:Socket明确对方Socket对象(互相明确,建立认同关系),建立连接。断开连接就是删除内核中对于对端数据存储的空间。

    TCP建立连接的过程称为 “三次握手”,断开连接的过程称为 “四次挥手”。每一次通信称为一次握手或者挥手。

    注意:建立连接发起的报文称为同步报文段,TCP报头中标志位用SYN表示。

注意:

    所谓三次握手本质上是四次,通信双方互相发送建立连接的请求SYN,互相都回应一个ACK。

    这里将中间两次通信的过程合并为了一次。是因为当接收方接收到SYN,需要返回应答报文ACK和连接请求SYN。由于这两步都是在内核中完成的,发送的时机一致,因此就将它们合并为一个报文发送了。也就是三次握手。

三次握手另外一个重要作用:

    验证通信双方各自的发送能力和接收能力是否正常。因为三次握手已经实现了通信双方的请求和响应。

注意:

    三次握手也一定程度上保证了TCP的可靠性,但只是辅助作用(核心是:确认应答,超时重传)。

三次握手的意义:

1)让通信双方各自建立对对方的“认同”。

2)验证通信双方各自的发送能力和接收能力是否正常。

3)在握手的过程中,双方协商一些重要参数。

建立连接主要两个TCP状态:

1)LISTEN(服务器状态)

    表示服务器已经准备就绪,随时可以进行连接。

2)ESTABLISHED(客户端,服务器都有)

    连接建立完成,接下来可以通信了。

断开连接

    通过四次挥手断开连接。

    注意:FIN为结束标志,意味着这个报文为断开报文。TCP报头标志位也有体现。

注意:

    很清楚看到四次挥手的中间两次通信没有合并。由于发送断开连接其实就是Socket的close方法或者进程结束,就会触发Socket发送FIN报文段。当客户端发送断开连接的请求,服务端返回ACK,这个过程是操作系统内核实现的。两者的执行时机不同,就不能合并。

断开连接的两个重要状态

1)CLOSE_WAIT(出现在被动断开的一方)

    等待关闭(等待Socket执行close方法)

2)TIME_WAIT(主动发送断开连接的一方)

    如果一切顺利,客户端进入TIME_WAIT状态。四次挥手已经挥完了。

存在一个问题:

    最后一次挥手ack如果丢包了,超时重传就会重新发送。如果已经断开了,就会无法接收FIN返回ACK。因此设置一个断开等待时间(2MSL)就算丢包了,也会顺利的进行超时重传。

    MSL为互联网上,最长两个节点,数据传输消耗的最大时间。通常为60s。这里设置2MSL的等待时间,就是由于发送一个ACK且接收一个FIN最大时间也就2MSL。因此重传的时间一定小于2MSL。

小结:

    三次握手和四次挥手形象的体现了TCP连接和断开的过程,让我们仔细的去思考和理解。

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

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

相关文章

Docker系列之九巧用Nginx

前言 Nginx是个很棒的反向代理服务工具,之前我都是直接安装到服务器上去,过程繁琐也许不是难以接受,但是有更简单地Docker镜像服务,我自然没必要再次舍近求远。 一些配置是参考自我以前的文章Docker系列一安装Docker和Hexo历险记…

影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入

使用过NAS(Network Attached Storage)的朋友都知道,它可以通过局域网将本地硬盘转换为局域网内的“网盘”,简单理解就是搭建自己的“私有云”,但是硬件和网络成本都太高了,有点可望而不可及的意思。Alist开源库则可以满足我们&…

Docker+Nginx+KeepaLived实现Nginx一主一从高可用

系统版本 Centos7 IP:10.10.11.79 Master IP:10.10.11.81 Slave 虚拟ip:10.10.11.77 客户端发起一个请求 ,请求没有到Nginx的实际IP上,而是请求的虚拟IP(会和实际IP通过配置文件进行绑定) 如果有一台Nginx…

Linux进阶(Shell编程学习一)

由于shell脚本在java项目运维方面极其重要,比如服务的启动脚本,日志的分割脚本,文件的管理脚本大多都是shell脚本去实现的。所以作为java开发者懂linux的基本命令,会基本的shell编程是必要的。 Shell 是一个用 C 语言编写的程序&…

nodejs+vue学生考试成绩数据分析与可视化系统vscode

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:技术背景…

springboot 集成driud

druid官方文档导入jar包<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid-spring.version}</version></dependency>配置数据源spring:datasource:url: jdbc:m…

什么是销售管理?销售管理的五大职能

销售管理听起来很简单&#xff0c;似乎只是负责销售并确保客户满意&#xff0c;但事实上&#xff0c;它远不止于此。 销售管理的实际职能包括监督销售团队的工作&#xff0c;制定计划和设定目标&#xff0c;通常还包括确保销售流程的效率以获得最佳业务结果。 什么是销售管理…

千兆网口down/up偶发link成百兆问题

a. 软硬件环境&#xff1a;​NXP LS1043A IGB211&#xff08;pcie接口千兆网卡&#xff09;:linux 4.9.19 igb driver Nvidia Xavier NX RTL8211F: linux4.9​ ​NXP LS1043A -----(pcie)--- IGB211 <---(PCB走线代替网线)-----> RTL8211F&#xff08;phy&#xff09;…

剑指 Offer 56 - II. 数组中数字出现的次数 II

题目 在一个数组 nums 中除一个数字只出现一次之外&#xff0c;其他数字都出现了三次。请找出那个只出现一次的数字。 思路 这题是剑指 Offer 56 - I. 数组中数字出现的次数的变体&#xff0c;本题只有一个数num出现一次&#xff0c;其余的均出现三次 三次的话使用异或消无法…

云计算与 SaaS 有何区别?

云计算与 SaaS 有何区别&#xff1f;众所周知&#xff0c;SaaS是云计算的三种服务模式其中之一。 三种分别是&#xff1a; Iaas&#xff1a;基础设施即服务Paas&#xff1a;平台即服务SaaS&#xff1a;软件即服务 对于三者的区别&#xff0c;一起来吃顿烤肉&#xff0c;听我慢…

13_FreeRTOS消息队列

目录 队列简介 FreeRTOS队列特点 队列操作基本过程 队列结构体介绍 队列结构体整体示意图 队列相关API函数介绍 创建队列相关API函数介绍 往队列写入消息API函数 往队列写入消息函数入口参数解析 从队列读取消息API函数 实验源码 队列简介 队列是任务到任务、任务…

开发微服务电商项目演示(五)

登录方式调整第1步&#xff1a;从zmall-common的pom.xml中移除spring-session-data-redis依赖注意&#xff1a;本章节中不采用spring-session方式&#xff0c;改用redis直接存储用户登录信息&#xff0c;主要是为了方便之后的jmeter压测&#xff1b;2&#xff09;这里只注释调用…

如何使用ArcGIS转换坐标

1.概述大家都知道ArcGIS提供了坐标转换功能&#xff0c;在我们手里的数据坐标系千差万别&#xff0c;经常会遇到转换坐标的时候&#xff0c;那么是否可以用ArcGIS进行转换&#xff1f;答案是肯定的&#xff0c;但是转换的过程比较复杂&#xff0c;这里为大家介绍一下转换的方法…

微软 new Bing 通过 ChatGPT 加持后搜索体验暴增,国内该如何申请使用那?

就在近期微软公布了自家的 Bing 将加持 ChatGPT 推出新版&#xff0c;消息一出 Bing 的下载量直接翻了 10 倍以上&#xff0c;48小时内就已经有 100 万名新用户申请加入了 还可以申请试用 new bing 吗&#xff1f; 目前用户还无法直接访问新版 bing &#xff0c;还是要前往申…

从一次有趣的漏洞分析到一个有趣的PHP后门

起因 事情的起因很有趣&#xff0c;前几天我正对着电脑发呆的时候&#xff0c;突然有个安全交流群的群友来找我交流一个问题 大概的意思就是&#xff0c;他在挖SRC的时候&#xff0c;发现一处资产存在目录遍历漏洞&#xff0c;它通过这个漏洞&#xff0c;找到目标资产使用了一…

基于图像的相机定位:概述

虚拟现实、增强现实、机器人和自动驾驶最近引起了学术界和工业界的广泛关注&#xff0c;其中基于图像的相机定位是一项关键任务。然而&#xff0c;还没有关于基于图像的相机定位的完整评论。迫切需要映射这个主题&#xff0c;使个人能够快速进入该领域。在本文中&#xff0c;概…

【Airplay_BCT】Bonjour conformance tests苹果IOT

从Airplay开始&#xff0c;接触到BCT&#xff0c;这是什么&#xff1f;被迫从安卓变成ios用户和开发。。。开始我的学习之旅&#xff0c;记录成长过程&#xff0c;不定时更新 Bonjour 下面是苹果官网关于bonjour的解释 Bonjour, also known as zero-configuration networking, …

pinia实战 购物车(自定义插件实现pinia持久化)

目录 一、实例 二、需求 三. 代码解析 shop.vue shop.ts 四、持久化插件 插件介绍 持久化实现思路 一、实例 二、需求 单选全选功能&#xff0c;并且可以互相联动 小计功能 总计功能 商品加减&#xff0c;数量为零时不能在减 三. 代码解析 shop.vue 1.获取shop模块实…

AttributeError: module ‘lib‘ has no attribute ‘OpenSSL_add_all_algorithms

pip安装crackmapexec后,运行crackmapexec 遇到报错 AttributeError: module lib has no attribute OpenSSL_add_all_algorithms 直接安装 pip3 install crackmapexec 解决 通过 python3 -m pip install --upgrade openssl 或者 python3 -m pip install openssl>22.1.…

YOLOv5/v7 Flask Web 车牌识别 | YOLOv7 + EasyOCR 实现车牌识别

YOLOv7 Flask Web 车牌识别图片效果展示 本篇博文只包含源码以及使用方式,目前不同提供详细开发教程。 YOLOv7 Flask Web 车牌识别视频效果展示 YOLOv7 + EasyOCR 实现车牌识别 什么是Flask? 简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更…