0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

说说TCP三次握手的过程?为什么是三次而不是两次、四次?

工程师邓生 来源:未知 作者:刘芹 2024-02-04 11:03 次阅读

说说TCP三次握手的过程?为什么是三次而不是两次、四次?

TCP三次握手是建立TCP连接的过程,确保数据的可靠传输。它是由发送端和接收端完成的。本文将详细讲解TCP三次握手的过程,并解释为什么需要三次而不是两次或四次。

首先,我们需要了解TCP是一种面向连接的协议。在进行数据传输之前,发送端和接收端需要建立一个可靠的连接。TCP三次握手就是用来建立这个连接的过程。

三次握手的过程如下:

第一步:发送端向接收端发送一个SYN(同步)包。

发送端首先将标志位SYN置为1,选择一个初始序列号,然后将这个包发送给接收端。这个SYN包相当于发送端向接收端发出请求:我想建立连接,你收到了吗?

第二步:接收端收到SYN包后,回复一个SYN+ACK(同步+确认)包。

接收端在收到SYN包后,将标志位SYN和ACK都置为1,确认号ACKnum设置为发送端的初始序列号+1,同时选择一个自己的初始序列号。然后将这个SYN+ACK包发送给发送端。这个包相当于接收端告诉发送端:我同意建立连接,你收到了吗?

第三步:发送端收到接收端的SYN+ACK包后,再回复一个ACK(确认)包。

发送端收到SYN+ACK包后,将标志位ACK置为1,确认号ACKnum设置为接收端的初始序列号+1,同时将序列号SeqNum设置为初始序列号。然后将这个ACK包发送给接收端。这个包相当于发送端告诉接收端:我收到你的同意了,我们可以开始传输数据了。

至此,三次握手完成,连接建立成功。

那么为什么需要三次握手呢?

首先,为了确认双方的发送和接收能力正常。第一次握手发送端发送SYN包,接收端回复SYN+ACK包,是为了确认接收端的接收能力正常。第二次握手发送端回复ACK包,是为了确认发送端的发送能力正常。如果只有两次握手,无法同时检测发送和接收能力,可能会导致连接建立后无法正常传输数据。

其次,为了抵御网络中的重复包。在网络传输过程中,可能会发生丢包或延迟等情况,所以需要通过三次握手来确认。

再次,为了对连接进行同步处理。发送端在发送第一个SYN包后,如果没有收到回复的SYN+ACK包,则无法确定接收端是否正常工作。接收端在收到第一个SYN包后,如果没有回复SYN+ACK包,则发送端也无法确定发送端是否正常工作。只有经过三次握手,双方才能确认彼此的工作状态,保证接下来的数据传输是可靠的。

最后,三次握手过程也可以防止已经失效的连接请求报文段突然又传送到了服务端,因而产生错误。

综上所述,TCP三次握手是确保连接建立的过程,通过三次握手可以确认双方的发送和接收能力正常、抵御网络中的重复包、对连接进行同步处理,并防止已经失效的连接请求。因此,三次握手是为了保证数据的可靠传输,是一种较为可靠的连接建立方式。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据传输
    +关注

    关注

    9

    文章

    1526

    浏览量

    63563
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1271

    浏览量

    78297
收藏 人收藏

    评论

    相关推荐

    STM32+LWIP通信12无法再次通信要怎么解决?

    ,并且跑了几个串口通信的任务,测试大概两三天的样子,并没有出现问题。 2:移植LWIP1.4.1 (从ST官网下载的那个网页的例程,修改引脚定义后跑在板子上没问题,确认硬件没问题) 3:将ST官网
    发表于 04-12 07:42

    用cubeMX + STM32L0HAL库1.12.1生成的自定义HID设备,接收后发送数据第三次开始会失败卡死的原因?

    用cubeMX + STM32L0HAL库1.12.1生成的自定义HID设备,在接收后发送数据,第三次开始会失败卡死,单独接收和发送没问题,用HAL库1.12.0生成的没问题
    发表于 03-21 08:05

    TCP协议连接的三次握手

    通过三次握手,客户端与服务端能够确保彼此的网络连接是可用的。客户端发起的SYN报文和服务端返回的SYN+ACK报文都包含了对方的初始序列号和通信能力信息,通过互相确认这些信息,双方确认彼此的能力和正确性。
    的头像 发表于 02-03 16:44 877次阅读
    <b class='flag-5'>TCP</b>协议连接的<b class='flag-5'>三次</b><b class='flag-5'>握手</b>

    请问SPI DMA描述符列表如何单触发?

    第一 按照描述符元素0的配置信息进行触发; 手动第二 按照描述符元素1的配置信息进行触发; 手动第三次 按照描述符元素2的配置信息进行触发; 手动第四次 按照描述符元素0的配置信
    发表于 01-12 08:07

    使用ARM对ADIS16480进行SPI数据读取时,需要发送三次读取指令才能读取到数据是为什么?

    使用ARM对ADIS16480进行SPI数据读取时,需要发送三次读取指令,第三次才能读到第一发送读取数据指令所读到的数据,请问有人知道这个是什么地方配置出错还是什么别的原因
    发表于 12-28 07:26

    TCP三次握手的理论知识

    关于TCP三次握手的理论知识,往上一搜一大片,本文就跳过理论,直接上手。Let’s go。 准备知识 抓一个TCP三次
    的头像 发表于 11-09 11:27 315次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>的理论知识

    STM32定时器到时间后会进两次中断的原因?

    STM32定时器到时间后,会进两次中断
    发表于 09-22 07:55

    白皮书 | 第二代ClearClock™三次泛音晶体振荡器

    白皮书 第二代ClearClock™三次泛音晶体振荡器 在这份全新的白皮书中,我们讨论了最新一代超低抖动三次泛音晶体振荡器的特点、优势、性能和特性,这些振荡器旨在为各种高速应用提供稳定准确的时钟信号
    发表于 09-13 09:51

    TCP/IP三次握手四次挥手讲解

    第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
    发表于 08-22 09:42 215次阅读
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>三次</b><b class='flag-5'>握手</b>与<b class='flag-5'>四次</b>挥手讲解

    STM32F767ZGT6连续调用两次rt_spi_transfer读取同一个地址,第二读取的时反馈之异常变为0怎么解决?

    连续调用两次rt_spi_transfer读取同一个地址,第二读取的时候反馈之异常变为0. 前提信息: 1.芯片采用STM32F767ZGT6 2.使用的rt_spi_send进行写入,写入后连续
    发表于 08-20 15:24

    e203软件代码中断为什么会触发两次

    如图所示,然后串口输出得到的printf执行了两次(按一按键触发两次中断) 如该图只按了一button1和一button2. 并且应
    发表于 08-16 08:12

    ESP8266 deepSleep后需要reset两次的原因?怎么解决?

    我用的是 esp01s 开发板。电路板功能正常,大部分时间都可以正常重置和运行其程序。 然而,当让它进入深度睡眠时,电路板需要触发两次复位信号。 一块相同的电路板将一根电线焊接到复位引脚以从内部
    发表于 06-06 07:07

    三次浪潮(2)#应用开发

    应用开发
    学习硬声知识
    发布于 :2023年05月31日 17:55:03

    三次浪潮(1)#应用开发

    应用开发
    学习硬声知识
    发布于 :2023年05月31日 17:54:32

    【野火 fireFlasher Mini 脱机烧录器】4. 脱机烧录下载次数限制测试

    声,但是第三次下载红色LED常亮并伴随蜂鸣器有节奏的响声,表示下载失败。 后续第四次,第五都会下载失败,包括烧录器断上电之后,也会一样的下载失败,试验成功,见视频演示。 第一和第二
    发表于 05-07 22:23