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

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

3天内不再提示

用恋爱的方式解释TCP的三次握手和四次挥手

机智云 2022-08-28 16:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

今天的分享,是关于前两天读到的心得,TCP建立连接时三次握手,断开时为何4次握手的自我理解:

恋爱时

连接时客户端说:SYN(约吗?)

服务器说:SYNACK(约啊,一起)

接着客户端说:ACK(好的)

热恋时

传输了n个字节的数据之后,开始分手流程

分手时

客户端说:FIN(分手了啦!)

接着服务器说:ACK(分就分啦!)

服务器接着又说:FIN(记住是我先分的)

客户端说:ACK(OK!)

现在来说明为何分手要4次

因为连接时,调用socket的connect函数发送SYN包,而服务器端只是accept一下,就一次发送了SYN和ACK标志位,而到了断开连接时大家都要调用各自的close函数结束这段socket(骚)恋情,所以两次close分别触发了两次FIN包,导致没有和ACK合并为一个包,所以握手3次,分手要4次。

下面来正经的,TCP/IP协议三次握手与四次握手流程解析。

TCP报文格式

TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:

dc2d4460-256a-11ed-9ade-dac502259ad0.png

上图中有几个字段需要重点介绍下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

URG:紧急指针(urgent pointer)有效。

ACK:确认序号有效。

PSH:接收方应该尽快将这个报文交给应用层。

RST:重置连接。

SYN:发起一个新连接。

FIN:释放一个连接。


需要注意的是:

不要将确认序号Ack与标志位中的ACK搞混了。

确认方Ack=发起方Req+1,两端配对。

三次握手

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:

dc3fe052-256a-11ed-9ade-dac502259ad0.jpg

(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

四次挥手

三次握手耳熟能详,四次挥手估计就dc529008-256a-11ed-9ade-dac502259ad0.gif,所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:

dc71e73c-256a-11ed-9ade-dac502259ad0.jpg

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。


(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。


上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:

dcd001b4-256a-11ed-9ade-dac502259ad0.png

流程和状态在上图中已经很明了了,在此不再赘述,可以参考前面的四次挥手解析步骤。

思考?

关于三次握手与四次挥手通常都会有典型的面试题,在此提出供有需求的XDJM们参考:

(1)三次握手是什么或者流程?四次握手呢?答案前面分析就是。
(2)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。

而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

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

    关注

    8

    文章

    1433

    浏览量

    83772
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    怎么理解TCP三次握手四次挥手

    作为运维工程师,无论是排查网络故障、分析日志,还是配置负载均衡器,都需要对 TCP 协议有深入理解。很多"疑难杂症"的根源,往往在于对 TCP 状态转换和连接管理理解不够透彻。
    的头像 发表于 04-10 16:42 803次阅读

    TCP/IP(Socket)协议深度剖析

    TCP/IP协议作为互联网通信的基础架构,其核心机制Socket编程承载着全球数据交换的使命。本文将深入剖析这一协议的七层架构、三次握手四次挥手
    的头像 发表于 03-03 17:06 793次阅读

    TCP三次握手四次挥手的详细过程

    TCP 三次握手四次挥手,大概是网络领域被问烂了的面试题。但真正能把状态变迁、序列号变化、抓包细节讲清楚的人并不多。很多人背了八股文,一到
    的头像 发表于 02-25 10:38 434次阅读

    兆芯助力上海市政协十四届四次会议顺利举办

    2月2日至5日,中国人民政治协商会议上海市第十四届委员会第四次会议顺利召开。来自全市各界的政协委员齐聚一堂,聚焦深化“五个中心”建设、加快建成具有世界影响力的社会主义现代化国际大都市,积极建真言、献良策、出实招,共绘城市发展新蓝图。
    的头像 发表于 02-24 16:35 661次阅读

    RDMA设计21:连接管理模块设计

    至 CONNECT 状态,创建连接流程类似 TCP/IP 三次握手流程;如果为断开连接则跳转至 DISCONNECT 状态,断开连接流程类似 TCP/IP
    发表于 01-12 11:03

    RDMA设计14:连接管理模块设计

    至 CONNECT 状态,创建连接流程类似 TCP/IP 三次握手流程;如果为断开连接则跳转至 DISCONNECT 状态,断开连接流程类似 TCP/IP
    发表于 12-30 16:51

    回溯示波器的四次认知跃迁

    工程师“第只眼”的仪器,究竟走过了怎样波澜壮阔的百年历程?它如何从一根阴极射线管,进化成如今能“读懂”电路故障的AI诊断官?今天,我们就拨开流量的迷雾,回溯示波器的四次认知跃迁,看看它如何一步步塑造了现代电子世界。
    的头像 发表于 12-19 15:39 6823次阅读
    回溯示波器的<b class='flag-5'>四次</b>认知跃迁

    TCP和UDP的区别

    相比,TCP大核心特性: 1、面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP 需要三次握手建立连接,
    发表于 12-09 07:24

    TCP三次握手

    ,Server进入SYN_RCVD状态。 (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server
    发表于 12-02 07:16

    从电网到栅极:赋能第三次能源革命

    开启。随后在美国发生了第二能源革命,20 世纪石油产业的繁荣推动了汽车和电力领域取得前所未有的进步。 如今,人工智能 (AI) 的快速发展正在引领第三次能源革命,涵盖产生、转换和分配为我们正在消耗的大量数据提供动力所需的能源。如何产生
    的头像 发表于 11-14 10:19 763次阅读
    从电网到栅极:赋能第<b class='flag-5'>三次</b>能源革命

    坐标测量仪让三次元测量从此简单高效

    三次元测量(即坐标测量)常被视为“技术门槛高、操作复杂、效率难提”的环节,因为传统坐标要么因体积庞大需专属机房,零件转运耗时费力;要么因精度与效率难以兼顾,批量检测时频繁陷入“调参-等待-复测
    的头像 发表于 09-17 15:23 2818次阅读
    <b class='flag-5'>三</b>坐标测量仪让<b class='flag-5'>三次</b>元测量从此简单高效

    集创北方出席LED TCON团体标准发展第三次技术研讨会

    近日,由中国光学光电子行业协会发光二极管显示应用分会(简称中国光协LED显示应用分会)主办,北京集创北方科技股份有限公司(简称集创北方)承办的“《基于TCON方案的LED显示接口及通讯协议规范》团体标准第三次技术研讨会”在集创北方深圳园区圆满举行。
    的头像 发表于 08-16 16:19 1791次阅读

    中微公司第四次蝉联客户满意度调查冠王

    ”,上交所股票代码:688012)第四次荣获冠王。今年5月,CSS公布了主要排名结果,此次白皮书披露了更多关于满意度调查的数据。
    的头像 发表于 07-21 14:39 1551次阅读

    工业4.0:第四次工业革命的机遇与挑战

    工业4.0是近年来全球制造业领域最受关注的概念之一,它代表了以智能化、数字化和网络化为核心的第四次工业革命。这一概念最早由德国政府提出,旨在通过先进信息技术与制造业的深度融合,实现生产效率的大幅提升
    的头像 发表于 07-18 16:54 1310次阅读

    舜宇车载光学召开车载激光雷达团体标准第三次会议

    近日,由舜宇车载光学牵头的《车载激光雷达典型光学器件可靠性要求及检测方法》团体标准第三次工作组会议在浙江省余姚市召开。
    的头像 发表于 06-20 09:31 1239次阅读