搞懂 三次握手四次挥手

2024-01-21

计算机网络体系结构

在学习TCP 三次握手四次挥手之前,让我们先来看下计算机网络分层:主要分为OSI模型和TCP/IP模型.OSI模型比较复杂且学术化,所以我们实际使用的TCP/IP模型。
在这里插入图片描述

// 以连接Mysql服务器为例理解这五层
// 应用层
应用层包含各种应用和服务,例如数据库访问协议(如MySQL协议)、HTTPFTP等。
在这一层,数据库客户端应用通过MySQL协议与MySQL服务器进行通信,发送查询请求、接收查询结果等.
// 传输层
传输层包括TCPUDP协议.
如果使用TCP,该层负责建立连接、数据的可靠传输、流量控制等。
如果使用UDP,它提供了一种更轻量级的传输,但不保证可靠性和顺序性。
// 网络层
网络层包含IP协议,负责进行逻辑寻址,例如IPv4IPv6地址。
在连接计算机和MySQL服务器的网络中,网络层确保数据包按照源和目标IP地址的路由规则进行传输。
// 数据链路层
数据链路层包括网络适配器(网卡)和设备驱动程序。
在这一层,数据链路层负责将比特流组织成数据帧,通过MAC地址进行帧的传输,同时处理帧的错误检测与纠正。
// 物理层
物理层包含物理介质和硬件设备,例如网线、网卡等。
该层负责实际比特流的传输,确保数据能够在计算机和远端MySQL服务器之间的物理连接上可靠传输。

TCP/IP网络传输中的数据

网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。

// 我们用用户客户端A发送,服务端B接收来来说明
1.客户端A会进行编码处理产生报文,交给下面的传输层.(message)
2.传输层将应用层数据封装为报文段并附加一个TCP包首部,然后交给下面的网络层.(segment)
3.网络层会将传输层传过来的数据,加上IP首部,生成IP数据报(datagram),然后交给数据链路层.
4.数据链路层将网络层传过来的数据,加上链路层首部,生成链路层帧(frame),然后传给物理层.
5.物理层将数据链路层的数据转化为比特流传输给服务端B的物理层.
6.服务端B的物理层接收到比特流,并将其转换为数据链路层能够理解的形式,也就是将比特流还原成链路层的帧.(frame)
7.服务端B的数据链路层接收到物理层的帧后,会进行解封装,去掉链路层首部,得到网络层的数据报。(datagram)
8.服务端B的网络层接收到数据链路层的数据报后,进行解封装,去掉网络层的IP首部,得到传输层的报文段。
9.服务端B的传输层接收到网络层的报文段后,进行解封装,去掉传输层的TCP包首部,得到应用层的数据。
10.最终,服务端B的应用层接收到传输层的数据后,进行解码处理,得到最初由客户端A发送的原始应用层数据。这个数据可能是一个HTTP请求、数据库查询等,根据应用层协议的不同而有所不同。

下图可以帮助理解:
在这里插入图片描述

TCP

TCP(Transmission Control Protocol)是TCP/IP协议族中的一个重要协议,与上面提到的网络分层(物理层、数据链路层、网络层、传输层、应用层)密切相关。TCP协议位于传输层,承担了可靠的端到端数据传输的责任。

TCP三次握手

TCP的三次握手(Three-Way Handshake)是建立TCP连接的过程,确保通信的双方都准备好进行数据传输。这过程包括客户端和服务器之间的协商和确认。以下是TCP三次握手的具体步骤:
在这里插入图片描述

// 第一次握手
客户端将请求报文SYN设置为1,sequence Number(上图seq)发送给服务端,然后客户端进入SYN_SENT状态,等待服务器确认.
// 第二次握手
服务器端收到客户端的请求报文,SYN=1知道客户端请求连接,服务端应答SYNACk都为1,返回Acknowledgment Number(上图的acknum,即客户端发送的seq+1),然后也给服务端发送一个seq(这里是个新的数值),然后服务器进入SYN_RCVD状态.
// 第三次握手
客户端收到应答报文后,检查acknum是否是之前自己发送的seq+1,检查ACK是否为1,如果都正确,则发送ACK位置为1,给服务端发送的seq+1返回。服务端收到报文,如果都正确,则连接建立成功.客户端服务端都进入ESTABLISHED状态。完成三次握手.
// 总结
1.客户端发送syn=1,seq1 -> 服务端
2.服务端返回ack=1,syn=1,acknum = seq1+1,seq2 -> 客户端
3.客户端返回ack=1,acknum = seq2+1 -> 服务端

针对三次握手的问题

// 为什么要三次握手?
主要是为了数据传输的可靠性,而三次握手是保证数据可靠传输又能提高传输效率的最小次数.在传输过程中都必须维护一个序列号,标识发送出去的数据包哪些已经被对方收到.
假如:客户端发送数据包(假设到校为10byte),同时发送一个序列号为1000,那么服务端接收到数据包之后,会返回一个确认号10101000+10),表明发送下一个序列号从1011开始.
// 为什么不是两次?
假设只有2次握手,客户端发送SYN,服务端返回SYNACK,然后客户端突然失效.此时服务器认为连接已经建立,这样如果后面有其他的客户端使用相同的ip地址和端口号连接,服务器可能会误以为是之前的请求,导致连接混乱。

TCP四次挥手

TCP的四次挥手是用于安全关闭一个已经建立的连接.
在这里插入图片描述

// 以客户端主动关闭连接为例
// 第一次挥手
客户端决定关闭连接,向服务端发送一个带有FIN标志的TCP数据包,表示客户端不再发送数据。进入入FIN-WAIT-1状态
// 第二次挥手
服务端收到客户端的FIN请求后,发送一个带有ACK标志的TCP数据包,表示已经收到了关闭请求。此时,服务端进入CLOSE_WAIT状态,等待可能还在传输的客户端的数据传输完成。
// 第三次挥手
当服务端也准备好关闭连接时,发送一个带有FIN标志的TCP数据包给客户端,表示服务端不再发送数据。
// 第四次挥手
客户端收到服务端的FIN请求后,发送一个带有ACK标志的TCP数据包,表示已经收到了服务端的关闭请求。此时,客户端进入TIME_WAIT状态,等待可能未到达的服务端的最终确认.

针对四次挥手的问题

// 为什么TCP的挥手需要四次?
TCP是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。
挥手时可能有数据在传输: 在挥手的时候,客户端和服务端都可能还有未发送完的数据。挥手过程需要等待这些数据传输完成,才能安全关闭连接。

// 为什么需要TIME-WAIT状态?
在网络中,ACK确认可能因为延迟而无法及时到达。通过等待一段时间,服务端可以处理可能的 ACK 延迟,确保客户端已经完全接收到了服务端的关闭请求。

总结

三次握手用于建立连接,确保双方都愿意通信;四次挥手用于关闭连接,保证双方都能安全、可靠地关闭连接。在这些过程中,序列号、确认号、状态转换等都起到关键作用,确保了连接的可靠性和稳定性。

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

搞懂 三次握手四次挥手 的相关文章

  • 查看linux中的TCP连接数

    一 查看哪些IP连接本机 netstat an 二 查看TCP连接数 1 统计80端口连接数 netstat nat grep i 80 wc l 2 统计httpd协议连接数 ps ef grep httpd wc l 3 统计已连接上的
  • 基础知识十一、Python解析网络报文之TCP首部报文解析

    文章目录 一 TCP首部解析器的实现 二 测试逻辑 上一节解析了 IP首部报文后 本节继续解析TCP报文首部 TCP协议处于OSI七层模型的传输层 传输层的作用就是负责管理端到端的通信连接问题 连续ARQ automatic repeat
  • 【网络】传输层-UDP协议

    文章目录 UDP报文格式 UDP协议特性 无连接 不可靠 面向数据报 UDP缓冲区 UDP特性对于编程的影响 基于UDP的应用层协议 netstat工具 pidof命令 UDP报文格式 查看Linux系统下的 usr include net
  • Could not proxy request /captchaImage from localhost to http://localhost:8080/.

    项目场景 项目场景 配置若依环境前端通过 run npm dev 启动报500 问题描述 根据报错分析 无法将请求 路径 从本地主机代理到http 本地主机 8080 原因分析 我们可以看到前端配置的端口号80 地址就是本机没有问题 排除前
  • 网络协议之ARP协议解析

    ARP协议简介 ARP Address Resolution Protocol 是个地址解析协议 最直白的说法是 在IP以太网中 当一个上层协议要发包时 有了该节点的IP地址 ARP就能提供该节点的MAC地址 OSI 模式把网络工作分为七层
  • OSI与TCP/IP协议

    OSI七层模型 OSI7层模型分别是 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 数据的封装与解封装过程 OSI模型vsTCP IP模型 TCP IP协议族的组成 每层常见的协议 应用层的协议 HTTP协议 HTTPS协议
  • 西门子PLC如何与多个三菱PLC建立无线通信?

    对一个大型工厂 由于生产线的不断改造 新老流程的不断更新 这些PLC系统往往是由不同的制造商提供的 那么在智慧工厂的实现中 常会遇到不同品牌PLC之间需要进行相互通讯的情况 由于场地和生产能效的原因 在后期的系统改造中 通常需要采用无线的方
  • 【Linux/C++:modebus通信示例】(带初习配置概括)

    以modbus RTU为例 模拟modbus简单通信原理的代码实现 首先需要配置串口 这里使用的为Configure Virtual Serial Port Driver虚拟串口调试工具 创建COM1 COM2虚拟端口 或另创建一对串口互作
  • Wireshark抓包及DNS报文分析

    Wireshark抓包及DNS报文分析 来来来 点我进行5分钟视频学习 冲冲冲 一 抓包整体描述 第一行 帧Frame 2 指的是要发送的数据块 其中 所抓帧的序号为2 捕获字节数等于传送字节数 696字节 第二行 以太网 有线局域网技术
  • 开启电脑ssl协议的方法

    转自 微点阅读 https www weidianyuedu com 电脑ssl协议怎么开启 开启ssl协议的方法是什么 经近期实际操作了解到开启ssl协议一共需要6个步骤 很快即可完成 以下是开启电脑ssl协议的方法介绍 1 首先打开浏览
  • 无需公网IP!Apache服务器本地部署与内网穿透实现公网访问

    Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问 前言 1 Apache服务安装配置 1 1 进入官网下载安装包 1 2 Apache服务配置
  • 鉴赏 tcp vegas

    优秀的 vegas 之后 再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas 从下图可看出所有的 对 所有的 aimd 都毫无伸缩性 z 吞吐 x rtt y 丢包率 由 buffer size 直接决定 一下就可看出 rtt 和 bu
  • Linux: sysctl: network: ip_no_pmtu_disc,容易搞混的参数名称

    这个参数的迷惑性在于双重否定 字面意思是关闭PMTU发现的功能 如果设置为1 代表关闭 如果是0 代表不关闭pmtu发现的功能 所以说明里 有disable enable 就容易搞混 所以要甄别网上的某些博客的说明 不要被误导 ip no
  • Linux中使用HTTP协议进行远程访问的示例——你的“云端”小伙伴

    大家好 今天我们要聊聊的是如何在Linux中使用HTTP协议进行远程访问 是的 你没有听错 就是那个我们每天用来浏览网页的HTTP协议 首先 我们需要明白HTTP是什么 HTTP 全名为超文本传输协议 Hypertext Transfer
  • 深度解析Python爬虫中的隧道HTTP技术

    前言 网络爬虫在数据采集和信息搜索中扮演着重要的角色 然而 随着网站反爬虫的不断升级 爬虫机制程序面临着越来越多的挑战 隧道HTTP技术作为应对反爬虫机制的重要性手段 为爬虫程序提供了更为灵活和隐蔽的数据采集方式 本文将探讨Python爬虫
  • 2024Web自动化测试的技术框架和工具有哪些?

    Web 自动化测试是一种自动化测试方式 旨在模拟人工操作对 Web 应用程序进行测试 这种测试方式可以提高测试效率和测试精度 减少人工测试的工作量和测试成本 在 Web 自动化测试中 技术框架和工具起着至关重要的作用 本文将介绍几种常见的
  • 什么是DLNA

    DLNA旨在解决个人PC 消费电器 移动设备在内的无线网络和有线网络的互联互通 使得数字媒体和内容服务的无限制的共享和增长成为可能 DLNA的口号是Enjoy your music photos and videos anywhere an
  • 什么是DLNA

    DLNA旨在解决个人PC 消费电器 移动设备在内的无线网络和有线网络的互联互通 使得数字媒体和内容服务的无限制的共享和增长成为可能 DLNA的口号是Enjoy your music photos and videos anywhere an
  • 网络协议与攻击模拟_01winshark工具简介

    一 TCP IP协议簇 网络接口层 没有特定的协议 物理层 PPPOE宽带拨号 应用场景 宽带拨号 运营商切网过来没有固定IP就需要拨号 家庭带宽一般都采用的是拨号方式 数据链路层 网络层 IP v4 v6 ARP 地址解析协议 RARP
  • 揭秘网络世界的幕后密码——Wireshark网络协议分析软件

    在我们日常生活中 计算机和互联网已经成为不可或缺的一部分 然而 很少有人真正了解网络背后复杂的工作原理和通信协议 幸运的是 有一款强大而实用的软件 Wireshark 可以帮助我们深入了解网络世界的幕后密码 Wireshark是一款免费的网

随机推荐

  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 基于springboot+vue实现食品安全管理系统演示【附项目源码+论文说明】

    基于springboot vue实现食品安全管理系统演示 摘要 食品行业同其他行业有很多的差别 食品行业不仅要管食品的生产和销售 还要管食品的库存和保质期 那么对于食品管理者来说 就存在着一定的难度 况且食品的种类复杂 存储条件各不相同 存
  • 春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了

    俺滴座右铭是不在沉默中爆发 就在沉默中灭亡 一起加油学习 珍惜现在来之不易的学习时光吧 等工作之后 你就会发现 想学习真的需要挤时间 厚积薄发啦 我们知道Java是面向对象的静态型编程语言 在Java的世界里万物皆对象 但我认为是万物皆数据
  • 创业者自白|Mia Bao:唯有热爱,才能从“废墟”中蜕变出价值

    本采访转载自 财富 Fortune Magazine 创业者自白 Mia Bao 唯有热爱 才能从 废墟 中蜕变出价值 财富中文网 在充满机遇和挑战的区块链与Web3领域 涌现出许多富有冒险精神的年轻创业者 然而 在这个领域中 秉持热爱 并
  • APP开发毕业设计|ssm爱心小屋公益机构智慧管理APP

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 基springboot+vue实现开放实验室管理系统子系统【附项目源码+论文说明】

    基springboot vue实现开放实验室管理系统子系统 摘要 信息技术永远是改变生活的第一种创新方式 各种行业的发展更是脱离不了科技化的支持 原本传统的行业正在被科技行业的切入悄悄的发生变化 就拿我们生活当中常见的事情举例而言 在外卖行
  • 最新整理Java面试八股文,大厂必备神器

    在此 我采访了数十名大厂的面试官和上百的的面试者 总结出了这一套Java面试八股文 这套八股文已经帮助了上百人拿到自己心仪的offer 我们先来看看这套八股文 Java基础面试八股文 操作系统中 heap 和 stack 的区别 什么是基于
  • 中小企业如何做好信息化规划?

    中小企业需不需要做信息化规划 什么时候做信息化规划比较好 企业的信息化规划 一定是越早越好 越快越好 因为信息化是一个过程 不是一个结果 它不是一天完成的事情 而是贯穿着企业经营管理的整个生命周期 而且在 企业创办初期或刚进入发展期的时候
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • Mysql中设置只允许指定ip能连接访问(可视化工具的方式)

    场景 Mysql中怎样设置指定ip远程访问连接 Mysql中怎样设置指定ip远程访问连接 navicat for mysql 设置只有某个ip可以远程链接 CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式 如果通过可视
  • 计算机Java项目|基于SpringBoot个人空间平台的设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • chrome浏览器无法在地址栏输入内容搜索问题解决--图文

    关于日常遇到的小问题解决记录一下 1 导航栏录入信息后跳转错误 2 解决办法 默认百度搜索引擎地址错误 百度正确的搜索格式是 http www baidu com s wd s chrome浏览器中百度的搜索格式是 http www bai
  • 2024史上最全Java面试八股文(带全部答案)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 面试官:分库分表后如何生成全局ID?

    分库分表后就不能使用自增 ID 来作为表的主键了 因为数据库自增 ID 只适用于单机环境 但如果是分布式环境 是将数据库进行分库 分表或数据库分片等操作时 那么数据库自增 ID 就会生成重复 ID 从而导致业务查询上的问题 所以此时 可以使
  • 详解Java信号量-Semaphore

    第1章 引言 大家好 我是小黑 今天 咱们一起来深入探讨一下Semaphore 在Java中 正确地管理并发是一件既挑战又有趣的事情 当谈到并发控制 大家可能首先想到的是synchronized关键字或者是ReentrantLock 但其实
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 【卡尔曼滤波】具有梯度流的一类系统的扩散映射卡尔曼滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章
  • 第三届能源动力与控制工程国际学术会议(EPECE 2024)

    鹅厂第五周实习周记 中注协公布 全各省会计师事务所TOP5 华子三方 秋招投递华子你需要知道的十件事 兄弟们实习过年什么时候回家呢 评论区的朋友们有找实习的吗 我们的第2个实习生干了4个多月被老师叫回学校了 来过的都说好 C C 软开岗位
  • Eclipse、IntelliJ IDEA、PyCharm

    Eclipse IntelliJ IDEA PyCharm Eclipse IntelliJ IDEA和PyCharm是三种流行的集成开发环境 IDE 每个都有其特性和优点 1 Eclipse Eclipse是一款开源 春招求职 来多益网络
  • 搞懂 三次握手四次挥手

    计算机网络体系结构 在学习TCP 三次握手四次挥手之前 让我们先来看下计算机网络分层 主要分为OSI模型和TCP IP模型 OSI模型比较复杂且学术化 所以我们实际使用的TCP IP模型 以连接Mysql服务器为例理解这五层 应用层 应用层