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

    文章

    5975

    浏览量

    135867
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1351

    浏览量

    78989

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

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

收藏 人收藏

    评论

    相关推荐

    三次谐波治理用多大的电抗器?

    三次谐波治理时选择合适的电抗器电感值非常关键,一般需要根据电网谐波情况、目标滤波频率和滤波器容量等因素来确定。针对三次谐波治理,通常建议配置以下参数的电抗器: 电抗率(%) :三次谐波频率较低
    的头像 发表于 10-28 14:14 191次阅读
    <b class='flag-5'>三次</b>谐波治理用多大的电抗器?

    简述TCP协议的三次握手机制

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在IP网络中进行数据传输。TCP协议的三次握手
    的头像 发表于 08-16 10:57 686次阅读

    MEMS 的第四次浪潮,来了!

    星、小米、OPPO等各种消费电子品牌。 MEMS被业内人士号称“一辈子都做不完的产业”,迄今已经经历了三次热潮:1990年~2000年汽车安全掀起第一热潮;2000年~2010年智能手机引发第二热潮
    的头像 发表于 07-25 16:46 509次阅读
    MEMS 的第<b class='flag-5'>四次</b>浪潮,来了!

    三次谐波定子接地保护动作条件

    三次谐波定子接地保护是电力系统中一种重要的保护方式,主要用于保护发电机、变压器等设备的定子绕组。 一、三次谐波定子接地保护的基本原理 1.1 三次谐波的产生 在电力系统中,由于非线性负载、变压器铁芯
    的头像 发表于 07-25 14:57 933次阅读

    三次谐波对注入式定子接地影响

    引言 随着电力系统的快速发展,电力系统的谐波问题日益突出。三次谐波作为电力系统中常见的一种谐波,对电力系统的安全稳定运行产生了一定的影响。特别是在注入式定子接地系统中,三次谐波的影响尤为明显。 三次
    的头像 发表于 07-25 14:55 602次阅读

    谐波和三次谐波区别 二谐波危害没有三次谐波大?

    谐波和三次谐波区别 二谐波危害没有三次谐波大? 在现代电力系统中,谐波问题逐渐引起人们的关注。谐波是指频率是基波频率的倍数的电流或电压成分。二
    的头像 发表于 04-08 17:11 5308次阅读

    SpaceX星舰将第三次试飞

    SpaceX公司近日宣布,其巨型火箭星舰即将迎来第三次试飞,旨在进一步测试其性能极限。据悉,这次试飞计划最早于3月14日进行,相比前两,其任务目标更加宏大且复杂。
    的头像 发表于 03-08 13:52 638次阅读

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

    说说TCP三次握手的过程?为什么是三次而不是两四次T
    的头像 发表于 02-04 11:03 622次阅读

    tcp协议四次挥手过程及原因

    TCP协议致力于可靠的数据传输,即使在连接关闭时也不例外。在关闭连接之前,双方需要确保对方已经接收到了所有的数据,以避免数据丢失或不完整。
    的头像 发表于 02-03 16:51 5519次阅读
    <b class='flag-5'>tcp</b>协议<b class='flag-5'>四次</b><b class='flag-5'>挥手</b>过程及原因

    TCP协议连接的三次握手

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

    传输控制协议TCP特点及三次握手过程

    TCP的主要功能包括分段、确认、重传、排序和流控等,以保证数据传输的可靠性和顺序性。TCP通过将数据流分割成适当长度的报文段,并对每个段进行编号,以便接收端实体按序接收并重组为原始数据流。
    的头像 发表于 02-03 16:38 1027次阅读
    传输控制协议<b class='flag-5'>TCP</b>特点及<b class='flag-5'>三次</b><b class='flag-5'>握手</b>过程

    TCP和UDP协议有什么区别?如何通过网关实现TCP协议通信?

    四次握手就是指断开的过程。而UDP可以立即传输数据,并不需要建立三次握手连接。两者相比,TCP就像是挂了专家号,可以保证及时看病;而UDP就
    的头像 发表于 01-24 11:07 571次阅读
    <b class='flag-5'>TCP</b>和UDP协议有什么区别?如何通过网关实现<b class='flag-5'>TCP</b>协议通信?

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

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

    浅谈TCP三次握手四次挥手

    在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。
    的头像 发表于 01-03 13:40 714次阅读
    浅谈<b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和<b class='flag-5'>四次</b><b class='flag-5'>挥手</b>

    TCP四次挥手过程分析

    TCP 连接是全双工的,双方可以同时发送和接收数据。第一客户端发送 FIN 报文后只表示它不再发送数据,但还是能接受数据。服务端接收到 FIN 报文,回一个 ACK 应答报文,这次服务端可以还有数据需要处理和发送,等它处理完成
    的头像 发表于 12-10 15:40 2843次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>四次</b><b class='flag-5'>挥手</b>过程分析