TCP的三次握手、四次挥手

news/2024/4/26 22:11:33/文章来源:https://blog.csdn.net/Gong_yz/article/details/129139697

文章目录

    • 前言
  • 一、一些重要字段的含义
  • 二、TCP总括图
  • 三、三次握手详细过程
    • 1.第一次握手
    • 2.第二次握手
    • 3.第三次握手
    • 三次握手小结
    • 4.为什么必须要进行三次握手,两次或四次就不行
  • 四、四次挥手
    • 1.第一次挥手
    • 2.第二次挥手
    • 3.第三次挥手
    • 4.第四次挥手
    • 四次挥手简述

前言

一个TCP的对话的建立必须要通过三次握手来建立,如果想要终止TCP的连接,就要通过四次挥手来实现


一、一些重要字段的含义

1.序号:seq序号,占32位,用来标识从TCP源端向目的地端发送的字节流,发起方发送数据时对此进行标记
2.确认号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
3.标志位:共六个:URG ACK PSH RST SYN FIN 具体含义如下:
URG:紧急指针有效
ACK:确认序号有效
PSH:接收方应该尽快将这个报文交给应用层
RST:重置连接
SYN:发起一个新连接
FIN:释放一个连接

二、TCP总括图

在这里插入图片描述

三、三次握手详细过程

1.第一次握手

第一次握手:Client将同步标志位SYN置为1(SYN为1就表示要建立连接,连接成功之后该位置会再次被置为0),请求序号seq=x(在所有的字节排列中,申请从哪一个字节开始发送,这个序号就一般表示当前已经发送到哪个序号,服务器同意后将会从下一个序号开始发送,第一次握手只有请求序号没有确认号),并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

2.第二次握手

第二次握手:Server收到数据包后由同步标志位SYN=1指导Client请求建立连接,确认标志位ACK置为1(这会才有确认标志位,第一次握手并没有确认标志位。当确认标志位为0时,确认号不起作用),ack=x+1(确认序号等于请求序号+1,表示x+1之前的Server都收到了,从Server发送的请求已经收到)。TCP是全双工协议,因此Server有可能也会给Client发送数据,因此Server也会向Client建立连接,Server将同步标志位SYN置为1(Server也要向Client发送请求,因此SYN也要被置为1),seq=y就表示Server给Client发送的数据开始序号。并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

3.第三次握手

第三次握手:因为连接要是双向的,Server确认后只是Client到Server连通了,因此Client也要确认一下,才能让Server向Client的连接也连通。Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

三次握手小结

三次握手使客户端与服务器完成了连接并且可以相互之间传输数据,可以将这个过程简述为:客户端告诉服务器我可以给你发送数据吗,服务器收到后说可以,我也可能给你发数据;客户端接收之后说好的,那我们相互发送数据。这个过程就大概描述了TCP的三次握手

4.为什么必须要进行三次握手,两次或四次就不行

TCP 的三次握手是为了保证数据的可靠传输的,TCP 是全双工的协议,也就是说通过 TCP 协议发送的协议是要得到回复的,一来一回,所以说对于需要建立 TCP 连接的两端来说,每一端都需要进行一来一回的确认,这就进行三次握手。
1、A 给 B 发送需要建立连接的请求;
2、B 给 A 发送可以建立连接的回复;
3、A 给 B 发送确认收到回复的信息;

如果是两次握手的话,当B给A发送可以建立连接的回复之后,是没有收到A确认收到回复的消息,这样的连接不可靠;
如果是四次握手,其实没有必要,因为三次握手已经可以使A B之间建立连接,四次握手只会浪费资源
三次握手是保证双方互相明确对端可以收发的最低值。

四、四次挥手

所谓四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端相互总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭。这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了。但是在这个TCP连接上仍然能够发送数据,直到另一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

1.第一次挥手

第一次挥手:Client发送一个FIN,以及选择号seq=u(表示:u之前的数据已经全部发送,并且数据发到u就可以截止了,就不再有数据了),用来关闭Client到Server的数据传送。Client进入FIN_WAIT_1状态。

2.第二次挥手

第二次挥手:Server收到FIN后,发送一个请求号seq=v和确认序号ack=u+1给Client。Server进入CLOSE_WAIT状态。

3.第三次挥手

第三次挥手:Server发送一个FIN,请求号为最新的seq=w和确认序号ack=u+1,用来关闭Server到Client的数据传送。Server进入LAST_ACK状态。

4.第四次挥手

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为w+1。Server进入CLOSED状态,完成四次挥手。

四次挥手简述

四次挥手指当TCP断开连接时,需要客户端和服务器总共发送四个包来断开它们之间的连接。大概可以简述为:客户机A说我没有数据要发送了,我们断开连接吧;服务器B说好的,但是我还有数据要发送;然后又对A说,好了我发完了,我们断开连接吧;A收到之后说好的,我们断开连接吧。以上过程就简述了TCP断开连接的过程


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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gulimall技术栈笔记

文章目录1.项目背景1.1电商模式1.2谷粒商城2.项目架构图3.项目技术&特色4.项目前置要求5.分布式基础概念5.1微服务5.2集群&分布式&节点5.3远程调用5.4负载均衡5.5服务注册/发现&注册中心5.6配置中心5.7服务熔断&服务降级5.7.1服务熔断5.7.2服务降级5.8API网…

Allegro如何通过报表的方式检查单板上是否有假器件操作指导

Allegro如何通过报表的方式检查单板上是否有假器件操作指导 在做PCB设计的时候,输出生产文件之前,必须保证PCB上不能存在假器件,如下图,是不被允许的 当PCB单板比较大,如何通过报表的方式检查是否存在假器件,具体操作如下 点击Tools点击Reports

【华为云-开发者专属集市】DevCloud+ECS、MySQL搭建WordPress

文章目录AppBazaar官网选择与购买项目项目概况操作过程购买DevCloud服务创建项目添加制品库应用部署购买ECS添加部署模板并执行任务故障排除安装及访问WordPress登录网站管理后台访问网站完善部署模板资源释放使用总结AppBazaar官网 首先,我们来到AppBazaar的官网&…

大数据Hadoop教程-01大数据导论与Linux基础

目录 01、大数据导论 02、Linux操作系统概述 P007 P008 P009 P010 P011 P012 P013 P014 P015 P016 P017 01、大数据导论 企业数据分析方向 现状分析(分析当下的数据):现阶段的整体情况,各个部分的构成占比、发展、变…

揭开JavaWeb中Cookie与Session的神秘面纱

文章目录1,会话跟踪技术的概述2,Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3,Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session…

通过命令行快速了解电脑CPU架构

Linux 和 MacOS 使用终端(小黑窗)执行下面的命令,根据输出结果查表: uname -m输出 的内容分别对应架构 输出对应架构i386, i686i386x86_64amd64arm, armelarm_garbagearmv7l, armhfarmv7*mipsmips*mips64mips64*Window 按 WinR …

【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题

先上Roms.tar.gz安装地址:Roms.tar.gz 以下内容是解决问题的思路,如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: 先是卡在:Building wheel for AutoROM.accept-rom-license 然后是显示安装失败…

预告|2月25日 第四届OpenI/O 启智开发者大会昇腾人工智能应用专场邀您共启数字未来!

如今,人工智能早已脱离科幻小说中的虚构想象,成为可触及的现实,并渗透到我们的生活。随着人工智能的发展,我们正在迎来一个全新的时代——数智化时代。数据、信息和知识是这个时代的核心资源,而人工智能则是这些资源的…

感知数据温度,聚焦海量冷数据存储难题

在信息科技高速发展的背景之下,海量数据已经让拥有者和管理者应接不暇,根据IDC发布的《数据时代2025》预测,全球数据圈(数据圈代表每年被创建、采集或是复制的数据集合)将从2018 年的32ZB增至2025年的175ZB。2018年&am…

骨传导耳机工作原理,骨传导耳机优缺点

骨传导耳机虽说最近是十分火爆的一款单品,但还是有很多人对骨传导耳机不是很了解,骨传导耳机更多使用场景还是在户外运动使用,骨传导耳机对于长时间使用耳机的人来说十分友好,这主要还是得益于骨传导耳机传输声音的特殊性。 下面我…

【轻量级自适应加权网络:超分】

Lightweight adaptive weighted network for single image super-resolution (单幅图像超分辨率的轻量级自适应加权网络) 近年来,深度学习已成功应用于单幅图像超分辨率(SISR)任务,并取得了上级的性能。然…

Django使用jinja2模板

Django使用jinja2模板 jinja2介绍 Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,尤其是Flask框架内置的模板语言…

异步执行结果-Callable、Future、FutureTask

Callable 实现Runnable接口的任务执行没有返回值&#xff0c;如果我们希望线程运算后将结果返回&#xff0c;应该使用Callable。Callable代表有返回值的任务。 class CallTask implements Callable<String> {Overridepublic String call() throws Exception {return Th…

前端开发环境搭建

文章目录Node.js是什么安装查看版本入门示例NPM使用 npm 命令安装模块常见命令使用淘宝 NPM 镜像TypeScript安装入门示例从github拉取构建项目如何从零创建一个TypeScript项目规划目录结构新建项目Web App运行服务添加依赖打包使用browserify打包使用webpack打包推荐流程目录配…

以学校数据模型为例,掌握在DAS下使用GaussDB

文章目录题目具体操作一、表的创建二、表数据的插入三、数据查询目的&#xff1a; 这里以学校数据库模型为例&#xff0c;介绍GaussDB数据库、表等常见操作&#xff0c;以及SQL语法使用的介绍。题目 假设A市B学校为了加强对学校的管理&#xff0c;引入了华为GaussDB数据库。 在…

GEE学习笔记 六十三:新的地图图层ui.Map.CloudStorageLayer

在GEE中导出数据有一种方式是直接导出地图到Google Cloud Storage中&#xff0c;也就是Export.map.toCloudStorage(xxx)&#xff0c;这种方式是将我们计算生成影像导出成为静态瓦片的格式存放在Google Cloud Storage中。我们可以在其他的前端程序比如OpenLayer、Mapbox GL JS等…

实时数仓Hologres新一代弹性计算组实例技术揭秘

作者&#xff1a;王奇&#xff08;花名慧青&#xff09; 阿里云Hologres研发 随着实时数仓在业务生产系统的普及&#xff0c;资源弹性、资源隔离等保障业务稳定性方面的技术需求开始变得越来越迫切。Hologres在保障业务方面持续优化核心技术竞争力&#xff0c;过去一年中&…

自建商城或会员系统如何对接在线客服咨询系统,例如商城系统、物流订单系统接入在线客服功能...

自建商城或会员系统如何对接在线客服咨询系统&#xff0c;例如商城系统、物流订单系统接入在线客服功能 对接在线客服咨询系统可以帮助您的客户更快地获得问题解答和支持&#xff0c;提升客户满意度和忠诚度。 在商品详情页面传递产品信息 在进入产品详情页面以后&#xff0c;需…

FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(一)

在最后一个例程中笔者精挑细选了一个较为综合性的项目实战&#xff0c;其中覆盖了很多知识点&#xff0c;也是从一个转产产品中所提炼出来的&#xff0c;所以非常贴近实战项目。 整个工程实现了用户通过对上位机PC端人机界面的操作&#xff0c;即可达到控制豌豆开发并行DAC输出…

计算时间序列周期的三种方法

周期是数据中出现重复模式所需的时间长度。更具体地说&#xff0c;它是模式的一个完整周期的持续时间。在这篇文章中&#xff0c;将介绍计算时间序列周期的三种不同方法。 我们使用City of Ottawa 数据集&#xff0c;主要关注的是每天的服务呼叫数量。所以不需要对病房名称进行…