TCP的三次握手和四次挥手详解

article/2025/9/15 16:17:40

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,与之相反的,采用四次挥手来断开连接:
TCP标志位有6种标示,即:SYN(建立联机) 、 ACK(确认) 、 PSH(传送) 、 FIN(f结束) 、 RST(重置) 、 URG(紧急) 、 Sequence number(顺序号码) 、 Acknowledge number(确认号码)。

三次握手

为了准确无误的将数据发送到指定IP处,TCP协议采用了三次握手的策略,如下步骤所示:
1、客户端采用TCP协议将带有SYN标志的数据包发送给服务器,等待服务器的确认。
2、服务器端在收到SYN的数据包后,必须确认SYN,即自己发送的ACK标志,同时,自己也将会向客户端发送一个SYN标志。
3、客户端在接收到服务器短的SYN+ACK包后,自己会向服务器发送ACK包,完成三次握手。那么客户端和服务器正式建立了连接,开始传输数据。
三次握手的图如下所示:
三次握手的图

四次挥手

四次挥手是用来断开服务器和客户端之间的通信的,之所以要断开连接,是因为TCP/IP 协议是要占用端口号的,而计算机的端口却是有限的,不进行断开的话,势必会造成计算机资源的浪费。
1、在整个通信的过程中,谁先发起请求,谁就是客户端。
当客户端的数据传输到尾部时,客户端向服务器发送带有FIN标志的数据包,使其明白自己准备断开通信了。
2、因为TCP的通信是使用全双工通信的WebSocket,所以在断开连接的时候也应该是双向的;当服务器收到带有FIN标志的数据包时,其必不会直接发送FIN标志断开通信的请求,而是先发送一个带有ACK标志的应答信息,使客户端明白服务器还有数据要进行发送。
3、当 服务器的数据发送完成后,向客户端发送带有FIN标志的数据包,通知客户端断开连接。
4、这一次挥手是我觉得四次挥手中设计的最巧妙的一次。
当客户端收到FIN后,担心网络上某些不可控制的因素导致服务器不知道他要断开连接,会发送ACK进行确认,同时把自己设置成TIME_WAIT状态并启动定时器,**在TCP的定时器到达后客户端并没有接收到请求,会重新发送;当服务器收到请求后就断开连接;当客户端等待2MLS(两倍报文最大生存时间)后,没有收到请求重传的请求后,客户端这边就断开连接,**整个TCP通信就结束了。
四次挥手的图如下所示:
四次挥手

注:三次握手为什么不能改成两次握手?

解:三次握手中的每一次都是必须的。如果是两次握手,在第二次结束后,服务器并不能保证客户端已经收到了第二次的请求,如此一来的话,服务器会一直保存着这个通信过程,因为TCP通信都是要占用端口的,造成了一定的资源浪费。所以,就一定要让客户端来发送ACK的确认请求。

注:关闭的时候为什么会是四次挥手?

解:四次挥手不能像三次握手一样,三次握手可以将ACK+SYN 一起发送,ACK用于确认信息,SYN却是用来建立联机的;四次挥手中ACK是不能和FIN一起发送,ACK只是告诉客户端确认我收到了,等我将数据发送完毕之后会向其发送FIN的标志,所以四次挥手是不能够改变的。

以上就是我对三次握手和四次挥手的理解,欢迎我们一起来讨论。


http://chatgpt.dhexx.cn/article/eDA8poWB.shtml

相关文章

TCP三次握手和四次挥手详解(面试常见问题)

大概两个月前,一位朋友在面试360集团时,在面试过程中被问及TCP三次握手和四次挥手的相关知识,他当时只知道大概,但当时面试官问他TCP三次握手过程中发送的数字是多少,他一下子就懵住了,因为这也是他第一次参…

详解TCP 三次握手和四次挥手

任 TCP 虐我千百遍,我仍待 TCP 如初恋。 过去不会没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧! 1、TCP 基本认识 2、TCP 连接建立 3、TCP 连接断开 4、Socket 编程 TCP 基本认识 瞧瞧 TCP 头格式 我们先来看看 TC…

简述三次握手和四次挥手

三次握手 第一次握手:客户端给服务端发送一个SYN报文,并指明客户端的初始化序列号,此时客户端处于SYN_SENT状态 第二次握手:服务端收到客户端的SYN报文之后,会回复SYN报文作为应答,并且也指定了自己的初始…

TCP三次握手和四次挥手最通俗解释说明

TCP三次握手和四次挥手以及11种状态 1、三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三…

简述TCP三次握手和四次挥手

为了准确无误地把数据送达目标处,TCP 协议采用了三次握手策略。 1.1 TCP三次握手漫画图解 如下图所示,下面的两个机器人通过 3 次握手确定了对方能正确接收和发送消息(图片来源:《图解 HTTP》)。 简单示意图: 客户端–发送带有 SYN 标志的数据包–一次握手–服务端服务…

tcp三次握手和四次挥手

TCP三次握手与四次挥手详解(最全面) 一、TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。 无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/I…

三次握手和四次挥手详解

详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ” *TCP connection* 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection(关系,连接)的东西; 由于TCP不存在连接的概念,只存在请求和响应&…

TCP三次握手和四次挥手过程

TCP三次握手和四次挥手过程 1、TCP报文段首部2、TCP三次握手过程及常见问题2.1 TCP三次握手过程2.2 常见问题 3、TCP四次挥手过程及问题3.1 TCP四次挥手过程3.2 常见问题 1、TCP报文段首部 要理解TCP三次握手和四次挥手的过程,首先需要了解TCP报文段的某些首部的含义…

三次握手和四次挥手

三次握手和四次挥手 三次握手四次挥手 ♠ \color{red}{\spadesuit} ♠ ok,上一篇介绍完TCP/IP的常见状态码,对TCP协议有一个大概的了解了,接下来进入TCP协议的(建立连接)三次握手和四次挥手(关闭连接&#…

详解三次握手和四次挥手

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官&#xff1…

TCP为什么需要3次握手与4次挥手

http://blog.csdn.net/xifeijian/article/details/12777187 为什么需要“三次握手” 在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次…

一文搞懂TCP的三次握手和四次挥手

目录 1、三次握手 2、四次挥手 3、11种状态名词解析 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕…

【通俗易懂】三次握手与四次挥手

1.三次握手 三次握手(Three-way Handshake)是指在建立一个TCP连接时,客户端和服务器会一共发送三个报文段。 初始时客户端和服务器都处于CLOSED状态,当服务器应用程序创建一个监听套接字时,服务器处于LISTEN状态。 …

面试官,不要再问我三次握手和四次挥手

温馨提示:本篇文章会长期维护及更新,详情见:https://yuanrengu.com/2020/77eef79f.html 面试相关文章推荐: 面试必备 | 小伙伴栽在了JVM的内存分配策略。。。垃圾收集器(CMS、G1)及内存分配策略Java虚拟机…

C语言数据结构创建矩阵,及代入数据

创建一个这样的矩阵 数据由我们插入(定位坐标行列及插入的数据) 代码如下: 思路:将每个坐标节点和我们插入的节点坐标做对比,如果行列坐标都相等,则value置1并输出其相应的数据,否则value还是为0&#x…

数据结构-树(c语言实现篇)

数据结构之二叉树(c语言实现篇) 介绍树的概念和二叉树的概念和应用,内容主要是以二叉树为主。 1. 树 1.1 树的概念 树是n个结点的有限集,当n0时,称为空树。树是一种非线性的数据结构,与前面的线性表、栈和…

c语言的数据结构表达式求值

最近学习c语言的数据结构中有关栈的实现。下面是用栈实现表达式求值的一个实例,用的是顺序栈的形式 原理: List item 我们默认一‘#’开始,最后输入’#‘结束 在运算中的每一步中,任意两个相继出现的算符theta1和theta2之间的关…

C语言数据结构篇——栈的顺序存储

作者名:Demo不是emo 主页面链接:主页传送门创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索&#xf…

C语言数据结构之查找(顺序查找,折半查找)

C语言数据结构之查找(顺序查找,折半查找) tips:前些天已经学习了树和图的相关知识,今天来总结下两种常用的查找方式(顺序查找,折半查找)。 为了演示方便,顺序查找和折半…

【C语言数据结构7】--串的实现

串 一、什么是串 串就是我们常说的字符串,它同样是一个线性表。可能有人认为串就是元素为字符的线性表,但这种说法是不准确的。对于普通的线性表,它们关注的往往是单个元素,每个单独的元素都有独立的含义。比如我们用线性表存储…