TCP为什么要三次握手(三次数据传输)而不是两次?TCP为什么要释放连接?

2023-11-03

  • TCP的运输连接

    TCP的运输连接是有三个阶段:建立连接、数据传送和连接释放。
 

  • TCP的连接过程

 假设A就是客户程序,B就是TCP服务器程序

第一次握手:A的TCP客户端给服务器端TCP会发送一个特殊的TCP数据段,其是不包含应用层数据的,单它需要一个数据段头部的一个标记字段,SYN=1(该信号是指请求和服务器端计算机的序号同步),并会发送一个初始顺序号。

第二次握手:B收到A的连接请求报文后,如果同意就会向A回复确认信息。SYN依旧为1,此事确认信息seq+1(意思应该是我收到了,我确认了你的初始序号),并且发送自己的序列号seq=y(sever_isn)。这时也是不允许携带应用层数据的。(虽然被授予连接了,但是没有获得服务器的允许连接分配缓冲区和变量)

第三次握手:A收到B的回复,允许连接数据后发送回复确认ACK置1,ack=y+1,自己为seq=x+1(不携带信息,不消耗序列号,自己本身不用确认,序列号不变)。客服也会给连接分配缓冲区合和变量,其次因为连接已经建立,所以SYN=0。

TCP为什么要三次握手(三次数据传输)而不是两次?

答:第一次,第二次握手只是告知对方的序列号初始值,但是没有实现客服和服务器都给连接分配缓冲区和变量,并不会传输数据。如果只是两次握手,只有发起方的其实序列号被确认,而服务器端的序列号得不到确认,只有服务器的缓冲区和变量分配给连接,客户机没有分配,无法进行数据传送。目的就是为了防止失效的连接请求报文段突然又传送到B,产生错误。为了实现序列号同步,实现有效可靠的数据传输。

在TCP协议中,三次握手是必要的,而不能用两次握手来建立连接。这是因为两次握手无法解决以下问题:

1. 确认双方都能接收数据:两次握手只能确定客户端和服务器之间的连接是单向的,即客户端可以向服务器发送数据,但服务器无法向客户端发送数据。如果在第一次握手时服务器没有收到客户端的SYN数据包,则无法确认客户端的状态,也就无法确定连接是否建立成功。

2. 避免历史连接的干扰:两次握手无法防止历史连接的干扰。假设在客户端向服务器发送SYN数据包后,由于网络延迟或其他原因,数据包被延迟了一段时间。此时,客户端可能已经关闭了连接,但服务器仍然会认为该连接处于打开状态,并尝试向客户端发送数据,从而导致错误和混乱。

通过三次握手,TCP协议可以解决上述问题,并确保连接的可靠性和稳定性。因此,不能用两次握手来代替三次握手。

三次握手(三次数据传输)?(源于计算机网络书籍)

TCP为什么要释放连接?

答:假设不释放连接的话,若A向B发送的某个丢失分组又回传到B(之前发送因为网络原因或其他原因丢失,B没有收到),B就会认为传输没有结束,会继续等待A的后续分组到来,这会导致过期的连接再次回传到服务器,但是A认为传输已经结束了(它的实际需要发送的数据已经全部发送),对B的载答确认不知道如何回应,就会导致服务器一直超时重传(超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止),那么服务器会一直发送ACK报文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP为什么要三次握手(三次数据传输)而不是两次?TCP为什么要释放连接? 的相关文章

  • Kali Linux 安全渗透核心总结,444页核心知识点

    就像IT人离不开Linux系统一样 网安人也离不开Kali Linux 作为攻击性防御和渗透测试的代名词 越来越多的人开始学习Kali 如果你也对kali感兴趣 又想深入了解这方面内容 不妨收藏一下这份Kali Linux安全渗透教程 共4
  • 广告竞价策略:激发广告变现潜能的关键

    在数字化时代 广告已经成为企业推广品牌 产品和服务的关键手段之一 为了最大程度地发挥广告的效果 广告竞价策略成为广告主和数字营销专业人士关注的焦点 通过巧妙运用竞价策略 广告主可以在激烈的市场竞争中脱颖而出 实现广告变现的潜能 admaoy
  • 服务器超线程的好处

    服务器超线程的好处 1 提高性能 超线程通过提高整体系统吞吐量显着提高服务器性能 通过允许多个线程在单个物理内核上同时执行 超线程减少了空闲时间并最大限度地利用了可用资源 这会加快任务执行速度并缩短应用程序的响应时间 尤其是在多线程工作负载
  • 浅谈能耗系统在马来西亚连锁餐饮业的应用

    1 背景信息 Background 针对连锁餐饮业能耗高且能源管理不合理的问题 利用计算机网络技术 通讯技术 计量控制技术等信息化技术 实现能源资源分类分项计量和能源资源运行监管功能 清晰描述各分店总的用能现状 实时监测各供电回路的电压 电
  • DreadHunger恐惧饥荒海上狼人杀服务器搭建架设教程windows系统

    DreadHunger 恐惧饥荒海上狼人杀服务器搭建架设教程windows系统 大家好我是艾西 在11月底我有发文 DreadHunger 恐惧饥荒海上狼人杀官方停服的消息 当时在官方的公告模版中公布了在2024年一月一日会将服务端公开让喜
  • nohup - 后台执行

    nohup no hang up 语法 nohup Command Arg 使用示例 nohup python a py 日志将被保留在 当前文件夹下的 nohup out 将日志放到文件 不输出到终端 echo hello gt 1 tx
  • centos系统有什么好处?

    CentOS是一种基于开源代码的Linux操作系统 它有以下几个优势 1 稳定性 CentOS是一种非常稳定的操作系统 它的代码经过了严格的测试和审查 因此它非常适合作为服务器操作系统使 用 2 安全性 由于CentOS是基于开源代码的操作
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • messages,CentOS 7不收集日志或不存在 /var/log/messages

    var log message var log secure等都不记录了 并且都是空文件 重启机器 reboot 无效 重启日志 systemctl start rsyslog 无效 怀疑空间不足 删除 var log messages 重
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • HPE Aruba Networking:五大网络现代化策略助力实现校园数字化转型

    作者 Aruba中国区技术销售总监 俞世丹 全球数字化进程日益加深 科技已成为加速教育行业发展的重要驱动力 人工智能 大数据 云计算 物联网 虚拟现实等新兴技术的快速发展 正在深刻改变着教育的形态和模式 为了更好地满足学校师生个性化教育教学
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 网络安全基础知识面试题库

    1 基于路由器的攻击手段 1 1 源IP地址欺骗式攻击 入侵者从外部传输一个伪装成来自内部主机的数据包 数据包的IP是 内网的合法IP 对策 丢弃所有来自路由器外端口 却使用内部源地址的数据包 1 2 源路由攻击 入侵者让数据包循着一个不可
  • 一台java服务器可以跑多少个线程?

    一台java服务器可以跑多少个线程 一台java服务器能跑多少个线程 这个问题来自一次线上报警如下图 超过了我们的配置阈值 打出jstack文件 通过IBM Thread and Monitor Dump Analyzer for Java
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 服务器中E5和I9的区别是什么,如何选择合适的配置

    随着科技的进步 服务器处理器的性能在不断攀升 其中 Intel的E5和I9系列处理器在业界具有广泛的影响力 而当我们在选择服务器的时候会有各种各样的配置让我们眼花缭乱不知道该怎么去选择 下面我跟大家分享一下E5跟I9有什么区别 方便我们在选
  • 网工内推 | 上市公司同程、科达,五险一金,年终奖,最高12k*15薪

    01 同程旅行 招聘岗位 网络工程师 职责描述 1 负责职场 门店网络规划 建设 维护 2 负责网络安全及访问控制 上网行为管理和VPN设备的日常运维 3 负责内部相关网络自动化和系统化建设 4 优化与提升网络运行质量 制定应急预案 人员培

随机推荐

  • 关于nginx日志出现大量no live upstreams while connecting to upstream

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 由于修改了upstream上的server配置 增加了max fails fail timeout weight这个三个参数项 导致nginx错误日志大量输出如下类型的错误
  • vue 表单确认密码 问题

    校验 confirmPwd required true validator rule value callback gt if this ruleForm confirmPwd callback new Error 请再次输入密码 else
  • JS拼table调整表格样式

    页面 table cellspacing 0 cellpadding 0 border 0 class layui table table 根据js选择器选择到table var bodyTag document getElementByI
  • [转]Nginx配置——反向代理

    文章目录 0 引言 1 何为反向代理 2 Nginx配置文件 2 1 第一部分 全局块 2 2 第二部分 events 块 2 3 第三部分 http 块 2 3 1 全局 server 块 2 3 2 location 块 3 反向代理如
  • java类到JVM执行的过程

    java类是如何到JVM执行的 本文是对 java文件到JVM运行的一个过程讲解 其中涉及到相关概念及原理 一 java类 类一般包含属性 代码块 构造器 方法 内部类 二 JDK JDK是java开发工具包 包括 bin db inclu
  • docker PostgreSQL 14.1 主从配置

    主库 IP 192 168 1 100 从库 IP 192 168 1 101 1 主从服务器装PostgreSQL 新建挂载目录 mkdir data postgres 拉取镜像 docker pull postgres 运行容器 doc
  • 项目管理之软件测试流程

    1 目的 对软件产品进行全面测试 以确保产品满足软件产品需求和业务需求 并最终通过测试 2 术语和定义 正式的迭代测试 制定测试方案 编写测试用例 至少2轮测试和1轮回归 简化的迭代测试 可以不输出测试方案 测试用例 只编写测试要点 至少1
  • java布尔表达式例子举例_java 逻辑表达式 布尔_使用基本逻辑门实现布尔表达式...

    java 逻辑表达式 布尔 将布尔表达式转换为逻辑电路 Converting Boolean Expression to Logic Circuit The simplest way to convert a Boolean express
  • 最短回文字符串python_在Python中查找按字典顺序最小的非回文字符串的程序

    假设我们有一个回文字符串s 我们必须更改一个字符 使s不再是回文 并且在字典上最小 因此 如果输入类似于s level 则输出将为 aevel 因为我们可以将第一个 l 更改为 a 以获得字典上最小的 不是回文的字符串 为了解决这个问题 我
  • OceanBase开发者大会震撼来袭

    国产之光 写在前面 打造开发者友好的分布式数据库 价值交换 写在最后 写在前面 这次OceanBase开发者大会是我第一次参加这样的大型技术会议 会议的规模很大 来自不同领域和不同行业的开发者都齐聚一堂 我感到非常激动和兴奋 作为一名开发者
  • leetcode 930. 和相同的二元子数组

    leetcode 930 和相同的二元子数组 给你一个二元数组 nums 和一个整数 goal 请你统计并返回有多少个和为 goal 的 非空 子数组 子数组 是数组的一段连续部分 示例 1 输入 nums 1 0 1 0 1 goal 2
  • 黄金矿工(小游戏)-----------C语言+easyx实现

    啥也不说 上代码 头文件 include
  • Oracle单表备份三种方案

    备份方案一 备份 create table 备份名 as select from 表名 恢复 truncate table org group insert into org group select from 备份名 说明 此种情况适用于
  • 正则表达式(JAVA)

    正则表达式 JAVA 文章目录 正则表达式 JAVA 用法 字符类 只匹配一个字符 预定义字符 只匹配一个字符 数量词 贪婪爬取 符号 捕获分组 规则 捕获分组 符号 非捕获分组 案例 忽略大小写 用法 正则表达式在用于校验信息是否满足某些
  • C练题笔记之:Leetcode-827. 最大人工岛

    题目 给你一个大小为 n x n 二进制矩阵 grid 最多 只能将一格 0 变成 1 返回执行此操作后 grid 中最大的岛屿面积是多少 岛屿 由一组上 下 左 右四个方向相连的 1 形成 示例 1 输入 grid 1 0 0 1 输出
  • 测试Qt是否安装成功

    1 打开Qt软件 选择新建项目 new 选择基类时 一次使用选择QWigget空白窗口 还有2种 带菜单栏的窗口和对话框窗口 选中Generate form会生成图形界面 组件直接拖拉 不需要自己编写 运行结果
  • 数据仓库与数据湖

    一 数据仓库与数据湖的区别 一是存储数据类型不同 数据仓库中存储的主要是结构化数据 对于加载到数据仓库中的数据 首先需要定义数据存储模型 而数据湖以其原生格式保存大量原始数据 包括结构化的 半结构化的和非结构化的数据 并且在使用数据之前 不
  • 38个LoadRunner性能测试常见要点,来看看你缺了什么!

    测试的工作非常枯燥 枯燥的工作很容易使一个人变得麻木 以至于在重复的工作中出现差池也不自知 特别是性能测试这一块 又是重要程序 稍有差池就会对后面的产生不必要的成本 本文讲根据之前个人从事性能测试的经验外加当前性能测试岗位的同事 从里到外地
  • MES系统排行

    MES系统厂商排名榜 一是国内MES厂商 另一类是国外MES系统厂商 国内MES供应商的技术架构 功能设置上与国外MES供应商之间的的差距逐渐缩小 国外MES系统厂商是这个行业的发起者 但是逐渐又被国内MES厂商超越的趋势 MES系统国内厂
  • TCP为什么要三次握手(三次数据传输)而不是两次?TCP为什么要释放连接?

    TCP的运输连接 TCP的运输连接是有三个阶段 建立连接 数据传送和连接释放 TCP的连接过程 假设A就是客户程序 B就是TCP服务器程序 第一次握手 A的TCP客户端给服务器端TCP会发送一个特殊的TCP数据段 其是不包含应用层数据的 单