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

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

3天内不再提示

TCP三次握手与四次挥手的细节理解

GReq_mcu168 来源:码农爱学习 作者:码农爱学习 2021-03-25 14:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简介

TCP提供面向有连接的通信传输,面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。

TCP在数据通信之前,通过TCP首部发送一个SYN包作为建立连接的请求等待确认应答(TCP中发送第一个SYN包的一方叫做客户端,接收这个的一方叫做服务端)。如果对端发来确认应答,则认为可以进行数据通信。如果对端的确认应答未能到达,就不会进行数据通信。此外,在通信结束时会进行断开连接的处理(FIN包)。

一个连接的建立与断开,正常过程至少需要来回发送7个包才能完成(建立一个TCP连接需要发送3个包,这个过程也称作“三次握手”,断开一个TCP连接需要发送4个包,这个过程也称作“四次挥手”)。

af0d6c02-8cec-11eb-8b86-12bb97331649.png

TCP报文段首部

在具体理解三次握手与四次挥手的细节时,需要先了解一下TCP报文段的首部格式:

af854cd6-8cec-11eb-8b86-12bb97331649.jpg

主要需要了解的是:

序号 seq

占4个字节,范围[0,223-1],共223(42 9496 7296)个序号。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。

确认号 ack

占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。

确认 ACK

仅当ACK=1时确认号字段才有效,当ACK=0时,确认号无效。TCP规定,在建立连接后所传送的报文都必须把ACK置1。

同步 SYN

在连接时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求报文段,对方若同意连接,在应在响应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。

终止 FIN

用来释放一个连接,当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。

三次握手

afdd4238-8cec-11eb-8b86-12bb97331649.jpg

最初两端的TCP进程都处于CLOSE(关闭)状态。上图中A主动打开连接,B被动打开连接。

B打开连接后处于LISTEN(监听状态),等待客户的连接请求。

A向B发送请求报文,SYN=1,ACK=0,选择一个初始序号seq=x。

B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为ack= x+1,同时也选择一个初始的序号 seq=y。

A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为ack= y+1,序号为 seq=x+1。

B 收到 A 的确认后,连接建立。

必须握手三次而不是两次的原因

主要是防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

建立连接后,客户端出现故障时的机制

TCP设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若2小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

四次挥手

b055125e-8cec-11eb-8b86-12bb97331649.jpg

A 发送连接释放报文,FIN=1。

B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。

当 B 不再需要连接时,发送连接释放报文,FIN=1。

A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。

B 收到 A 的确认后释放连接。

四次挥手的细节

CLOSE-WAIT

客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

TIME-WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。原因有二:

为保证A发送的最后一个ACK报文段能够到达B

A发送的这个ACK报文段有可能丢失,如果 B 没收到 A 发送来的确认报文,那么A就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。

防止“已经失效的连接请求报文段”出现在本链接中

A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接的时间内所产生的所有报文段都从网络中消失。这样下一个新的连接中就不会出现这种旧的连接请求报文段。

为何建立连接协议是三次握手,而关闭连接却是四次挥手?

因为服务端B的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当B收到对方A的FIN报文通知时,它仅表示客户端A没有数据发送给B了;但未必B的数据都全部发送给A了,所以B可能未必会马上会关闭SOCKET,而是先发送一个ACK应答信号,继续将剩余的数据发送给A之后,再发送FIN报文给A表示B同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

原文标题:TCP的三次握手与四次挥手

文章出处:【微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    18

    文章

    6490

    浏览量

    140372
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1437

    浏览量

    83902

原文标题:TCP的三次握手与四次挥手

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TCP三次握手四次挥手的基础知识

    TCP 三次握手四次挥手是网络基础知识中的基础,面试时能背出来的人很多,但真正遇到生产环境问题需要排查时,很多人就傻眼了。比如:连接建立后
    的头像 发表于 05-25 11:02 348次阅读

    芯朋微电子提供面向800V HVDC的三次电源全栈解决方案

    AI大模型的快速发展,正在推动算力基础设施加速升级,XPU功耗也随之从数百瓦跃升至数千瓦。在这一过程中,供电系统不再只是幕后支撑,尤其是最靠近XPU的三次侧供电,正面临瞬态响应更快、电流承载更大、热管理更严苛、运维要求更复杂等多重挑战,成为决定整机性能释放与稳定运行的关键环节。
    的头像 发表于 05-25 09:26 601次阅读
    芯朋微电子提供面向800V HVDC的<b class='flag-5'>三次</b>电源全栈解决方案

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

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

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

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

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

    TCP 三次握手四次挥手,大概是网络领域被问烂了的面试题。但真正能把状态变迁、序列号变化、抓包细节
    的头像 发表于 02-25 10:38 547次阅读

    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 6936次阅读
    回溯示波器的<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 850次阅读
    从电网到栅极:赋能第<b class='flag-5'>三次</b>能源革命

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

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

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

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

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

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

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

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