八股文-TCP的三次握手

TCP协议是一种面向连接、可靠传输的协议,而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息,确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。

tcp.jpg

漫画TCP的三次握手

TCP连接的建立采用了三次握手的机制,确保通信双方都能够正常收发数据。我们通过漫画的形式示例下:
-2023-11-04-2144b30e777bc73a1a2b.png

第一次握手(SYN)

连接的发起方是客户端,它向服务器发起连接请求。这个过程称为“第一次握手”;

1. 客户端发送SYN(同步序列号)标志的数据包给服务器。

客户端希望建立连接,于是发送一个包含SYN标志的数据包。这个包中还包含一个随机生成的序列号(ISN,Initial Sequence Number),用于后续数据的顺序传输。

2. 客户端进入SYN-SENT状态。

客户端发送完SYN后,进入SYN-SENT状态,等待服务器的响应。

第二次握手(SYN + ACK)

服务器收到客户端的SYN后,决定是否接受连接请求。如果服务器愿意接受,就会回应一个包含SYN/ACK标志的数据包;

1. 服务器发送SYN/ACK标志的数据包给客户端。

服务器接收到客户端的SYN后,向客户端发送一个包含SYN/ACK标志的数据包,表示已收到连接请求,并同样包含一个随机生成的序列号。

2. 服务器进入SYN-RECEIVED状态。

服务器发送完SYN/ACK后,进入SYN-RECEIVED状态,等待客户端的最后确认。

第三次握手(ACK)

客户端收到服务器的SYN/ACK后,决定是否接受连接。如果接受,客户端会发送一个带有ACK标志的数据包;

1. 客户端发送ACK标志的数据包给服务器。

客户端收到服务器的SYN/ACK后,向服务器发送一个带有ACK标志的数据包,表示连接建立成功。

2. 客户端进入ESTABLISHED状态。

客户端发送完ACK后,进入ESTABLISHED状态,连接建立成功。此时,服务器也接收到了客户端的确认,进入ESTABLISHED状态。

至此,三次握手完成,连接建立成功,双方可以进行正常的数据传输了。

详细图示如下:

tcp.png

为什么是三次握手?

  • 确保双方都具备通信能力

第一次握手: 服务端可以确认客户端的发送能力,自己的接收能力是正常的;

第二次握手: 客户端确认服务端的发送能力,自己的接收能力是正常的;服务端可以确认自己的发送能力是正常的;

第三次握手: 服务端确认客户端的接收能力是正常的;

  • 防止失效的连接请求被误认为是新连接

如果只有两次握手,会出现以下问题:

  1. 客户端发送连接请求(SYN)。
  2. 服务器收到请求后,发送确认(ACK)。
  3. 客户端在接收到确认前就突然宕机或丢失数据包。

此时,服务器无法知道是因为连接成功而没有收到客户端的确认,还是客户端的连接请求根本没有到达。如果客户端重新启动并发送一个新的连接请求,而这个新请求的序列号与旧请求一致,服务器可能会误认为是同一个连接请求,导致连接的混乱。

总结

通过三次握手,TCP协议在连接建立阶段建立了双方的信任,确保了后续数据传输的可靠性和有序性。这个过程是TCP协议中非常重要的一部分,也是网络通信中的基石之一。

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

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

相关文章

Ubuntu16.04上安装Docker

Ubuntu16.04上安装Docker 更新 apt 包索引: sudo apt-get update安装依赖包,以便使用 HTTPS 仓库 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu…

[Mac软件]Infuse 7 PRO v7.6.3 一个强大的视频播放器(激活版)

使用Infuse制作您的视频内容,这是在iPhone、iPad、Apple TV和Mac上观看几乎任何格式的视频的好方法。无需转换文件!Infuse针对macOS 12进行了优化,具有强大的流媒体选项、Trakt同步以及对AirPlay和字幕的无与伦比的支持。华丽的界面。精确控制…

元组(Tuple)操作的经验分享

一、创建元组 复制代码 代码如下: tup1 (physics, chemistry, 1997, 2000); tup2 (1, 2, 3, 4, 5 ); tup3 "a", "b", "c", "d"; 创建空元组 复制代码 代码如下: tup1 (); 元组中只包含一个元素时,需要在元素后面添…

webpack系列之:手把手教你 打包和使用js文件

项目初始化 mkdir demo1 cd demo1 npm init // 一路回车 创建一个package.json文件webpack安装 npm install --save-dev webpackJs文件打包 可以先看一下最后的项目情况,然后我们再开始一步步操作 创建需要打包的js文件 创建文件夹用于存放js文件 // 创建文…

Win10开启FTP与配置

#1.控制面板>程序>启用或关闭Windows功能> (控制面板可在 桌面右键>个性化>主题>桌面图标设置>勾选控制面板>确定) Internet Information Services---勾選FTP服務器,IIS管理控制台 #2.win鍵輸入IIS打开IIS #3.右击网站添加FTP站点 #4.输入…

rtsp、rtmp、m3u8、flv、mkv、3gp、mp4直播流测试地址

✍️作者简介:沫小北/码农小北(专注于Android、Web、TCP/IP等技术方向) 🐳博客主页:沫小北/码农小北 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请&…

原来你不会找资源,三个宝藏白嫖书籍网站,阅读改变生活(一)

[无名图书] - 探索无尽的书海 致力于为你打开一扇通往无限知识和无穷想象的大门。从畅销小说到学术专著,书库涵盖了各个领域,满足了各种阅读胃口。无论你是文学爱好者、学术追求者还是正在寻找新奇刺激的冒险者,这都是你不可错过的阅读伴侣。…

tomact部署Nginx 高负载

准备工具 安装jkd 双击程序开始安装, 点击下一步 选择安装路径 安装完成,点击关闭 配置java的环境变量 鼠标右键点击车我的电脑,选择属性点击 系统设置 点击环境变量 点击下方的新建 变量名输入JAVA_HOME 变量值输入jdk安装的路径 点击确认 在系统变量中找到path,然后点击…

C#asp.net考试系统+sqlserver

C#asp.net简易考试系统 sqlserver在线考试系统学生登陆 判断学生是否存在 选择课程名 科目 可以进行答题操作,已经考试的课程不能再次答题, 自动根据课程名对应的题库生成试卷界面 加入选项类容 说明文档 运行前附加数据库.mdf(或sql生成数…

STM32——STM32F103时钟解析(正点原子资料+HAL库代码分析)

文章目录 前言时钟树详解系统时钟配置系统时钟使能配置 前言 上次写系统时钟解析的时候说出一篇103的时钟解析,我就整理HAL库开发的正点的资料,给小白梳理,我也是小白,不做权威使用。 时钟树详解 在 STM32 中,有五个…

零代码实现问卷网与巨量引擎的对接

通过数环通,您可以使用不到几分钟的时间即可实现问卷网与巨量引擎的对接与集成,从而高效实现工作流程自动化,降本增效! 1.产品介绍 巨量引擎是字节跳动旗下的营销服务品牌,它整合了字节跳动旗下的产品及海量内容&…

RTLS 颠覆制造业的 方式之——跟踪

进行中工作跟踪 在制品 (WIP) 跟踪主要关注生产中的项目如何从一个步骤移动到另一步骤。因此,运动是此类流程管理的共同点,使得实时位置的洞察力几乎在每个时刻都很有用。 1. 传递时间和运动数据 制造几乎总是涉及许多同时移动的事物。无论是在同一条…

如果免费使用GPT4

各位兄弟,这个漏洞也是最近挖到的,觉得这个可以为大家谋福利,所以我这给你们写一下。 看我如下操作 先登录GPT4 登录进来后,我们可以看见这里是GPT3 然后看如下操作 然后再问一下是模型几 各位就是这么简单,点过关注…

一个朴实无华的Java计算引擎(很实用)

计算引擎: 公司用的一个计算引擎(适合计算量比较大比较多的行业,比如金融行业、科学研究和工程、互联网和社交媒体、电子商务、医疗和生命科学、制造业、能源行业、交通和物流)。 计算引擎地址:xbc-cm: 公式管理、公式计算、公式计算结果管…

分享一个图像轮播效果

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 话不多说,先看效果: 根据图片的播放,页面背景会被替换为当前图片。 老规矩,源码自己拿…

划片机:半导体工艺精细化高效化的新里程碑

随着科技的飞速发展,半导体已经成为现代电子设备的基石,而半导体晶圆的划片机作为半导体制造的核心设备之一,其发展程度直接关系到半导体的质量和产量。近年来,博捷芯精密划片机以其在半导体划片机领域的卓越表现,引领…

几个测试接口的好工具,效率加倍~

作为一名后端程序员,一定要对自己写的接口负责,保证接口的正确和稳定性。因此,接口测试也是后端开发中的关键环节。 但我相信,很多朋友是懒得测试接口的,觉得这很麻烦。一般自己写的接口自己都不调用,而是…

抖音测试付费短视频:从短剧领域拓展到知识、娱乐全品类

11月16日,抖音开始测试短视频内容付费,即用户在观看创作者的内容时,部分内容需要付费解锁才能全部观看,涉及范围不仅包括此前已经进行付费试水的短剧领域,还拓展至知识、娱乐等几乎全品类内容,用户可按单条…

Linux进程之进程的状态简述

文章目录 1.百度搜索2.对进程状态的认识2.0创建状态2.1就绪状态2.2运行状态2.3阻塞状态2.4挂起状态 3.认识LinuxOS下的进程3.0进程状态的简述3.1了解R/S状态3.2D深度睡眠状态3.3信号/调试暂停状态3.4僵尸状态 1.百度搜索 2.对进程状态的认识 一个进程所具有的状态为操作系统的…

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能

有时程序载入硬件,没有按代码执行,可能由于此。 1.欲完成功能: 结构:PA0管脚可以输出高低电平,控制LED灯的亮灭;PA1管脚作为输入,连接一头已经接地的switch开关。 逻辑:当开关闭合…
最新文章