简单理解TCP的三次握手和四次挥手

article/2025/9/15 15:51:28

本文用简洁的语言教你理解TCP的三次握手和四次挥手,匆忙写的,审美可能有待提升。

本文适合入门,基础不高的同学观看,以便有一个大概的了解。深入的同学还请高抬贵手。

还有请记住,是传输层中TCP的东西,不是应用层的HTTP,前者是提供传输的服务,后者是通信和交互规则。之前查其他博客时候,看过有很多错误的,甚至自己也手寡写错。

目录

三次握手

四次挥手

常见问题&面试题目


 PS:

客户端服务端

浅绿色背景的是你可以不用深入理解记忆的。

浅黄色背景是为了更好理解这些符号的作用而自创的名词,并不存在。

加粗是需要记住的,

相关的数值可以记住是什么意思,你记不住编一个也行,但要知道是对应的,改编不是乱编

橙色是区别报文的作用而命名的

紫色是客户端/服务端进入的状态,是要牢记

三个状态位

SYN是同步位,ACK是确认位,FIN是释放位

默认为0未激活,1为激活

SYN,ACK配套的值分别为seq,ack,代表某个序号值

序号是什么?

序号起始值x(用来标记每一次传输数据的起始值),在后期能确认数据是否存在丢失。起始序号+数据长度+1应等于下一次起始序号。

为什么确认时候ack要+1?

 通过x+1来确认已经收到了对面发送的序号起始值,并期待下一次收到的数据起始序号是x+1。


三次握手

图像来自网络

首先服务端创建TCB模块(用来存储连接的信息,tcp连接表等等),并一直处于监听状态,等待客户端发送连接请求

1.客户端创建TCB模块。

创建同步字段,同步位SYN设为1,设置一个客户端初始序号seq设为x(数值不确定)

发送连接请求报文

进入同步已发送状态

补充:序号是tcp报文首部里的一个字段,用来标志数据的起始位置


2.服务端收到报文后,如果同意建立连接,

创建确认字段,将确认位大写ACK设为1,小写ack设为x+1,(​​​​​​​+1表示的意思请看最上的总结

创建同步字段,将同步位SYN设为1服务端初始序号seq设为y(数值不确定)

发送确认报文表示收到了客户端的连接请求报文。

进入同步收到状态


3.客户端收到报文后。

创建确认字段,将确认位大写ACK设为1,小写ack设为y+1

加上自己的序号seq为x+1

发送确认报文表示收到了服务端的确认报文。

进入已建立联系状态


服务端收到报文后,进入已建立联系状态


四次挥手

1.客户端

创建释放字段,将释放位FIN设为1seq设为u(等于客户端发送的数据最后一个字节的序号+1),

发送连接释放报文表示没有数据传送给服务端了,请求释放连接。

进入终止等待1状态


2.服务端收到报文后。

创建确认字段,将确认位大写ACK设为1,小写ack设为u+1seq为v(数值不确定)

发送确认报文

服务端进入关闭等待状态,

客户端收到报文后,进入终止等待2状态,此时TCP进入半关闭状态,客户端不再有数据发送(如报文丢失后可能会超时重传)。


3.服务端在接下来的过程中,可能还有数据要发送给客户端,等没有数据要发了。

创建释放字段,将释放位FIN设为1seq设为w(等于服务端发送的数据最后一个字节的序号+1),

创建确认字段,将确认位大写ACK设为1,小写ack设为u+1

发送释放报文,重复发送是为了表示没有数据需要发送,准备释放连接。

进入最后确认状态


4.客户端收到报文后,

创建确认字段,将确认位大写ACK设为1,小写ack设为w+1

并向服务端发送确认报文表示收到了服务端的释放报文

客户端进入时间等待状态,设定时间等待计时器

计时器(2MSL)时间到了,客户端不再收到服务端的释放报文,客户端才进入释放连接状态


服务端收到报文后,进入释放连接状态

到此,便是大概的流程。实际流程比较复杂,比如报文可能延迟到达,报文丢失需要使用超时重传等等。但这都不是初学者重要关注的点。

常见问题&面试题目

1.为什么要第三次握手(为什么不是两次握手)?

答:为了防止已失效的连接请求报文突然又传到了服务端从而产生问题。

只有两次握手,则可能出现情况客户端报文延迟到达后,重发连接请求报文,两个报文无论哪个先到达服务端,如果报文到达时间已经是第一次连接已经释放完了,服务端便会以为客户端再次请求连接,向客户端发送确认报文,但客户端已经完成,不再理会服务端的确认报文,导致服务端一直处于同步收到状态,白白浪费资源。

而使用三次握手,在刚才异常情况下,客户端不会向服务端发出确认报文,服务端收不到确认,便知道客户端并没有请求连接。

2.为什么不是四次握手?(指为什么不需要服务端再发送一个确认请求,确认客户端的确认

答:此时已经满足最低需求,保证了客户端服务端都确认了对方已经收到连接建立的请求。再多握手没有意义,只会浪费资源。

3.一二三次握手目的是什么?

答:第一次握手是为了确认客户端的发送能力

       第二次握手时为了确认服务端的接受能力和发送能力

       第三次握手时为了确认客户端的接受能力

4.为什么握手时是三次,挥手是四次?

答:因为挥手时,第二次和第三次握手期间,服务端可能还有数据需要传给客户端,所以需要第三次握手来确认没有数据需要传给客户端了,准备断开服务端对客户端连接。

5.为什么最后一次挥手客户端需要等待2MSL(什么是时间等待计时器)才断开连接?常问

答:是为了确认报文(第四次挥手)丢失时实现超时重传,为了确保服务端能收到确认报文,创建计时器,如果计时器时间到了。如果服务端没收到确认报文,会再次发送释放报文(第三次挥手),客户端收到后计时器重置,再次发送确认报文。

注:MSL是生存时间

6.还有一个计时器是什么(保活计时器),作用是什么?

答:在建立TCP连接后,为了防止客户端因故障,不能再发送数据给服务端,导致服务端白白等待,浪费资源。使用保活计时器,每收到一次来自客户端的数据,就重置计时器。如果计时结束,仍没有数据,则服务端主动发送探测报文,每隔75秒发送一次,第十次发送后扔未响应,则断开连接。


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

相关文章

tcp三次握手和四次挥手的过程

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号 并交换 TCP窗口…

TCP的三次握手和四次挥手

一、TCP介绍 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种…

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

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,希望大家能带着如下问题进行阅读,收获会更大: 请画出三次握手和四次挥手的示意图为什么连接的时候是三次握手?什么是半连接队列?ISN(Initial Sequence Number)是…

TCP的三次握手和四次挥手总结

TCP的三次握手和四次挥手总结 本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问 序列号 seq:占 4 个字节,用来标记数据段的顺序,TCP 把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生…

三次握手和四次挥手知识总结(超详细)

前言: 最近学习了计算机网络的知识,看了很多的视频,并参考了很多资料,写下了这将近4500字的与“三次握手和四次挥手”相关的知识,希望能帮助到各位小伙伴儿以及加深自己印象,方便以后复习用 如果有什么写的…

简述TCP的三次握手和四次挥手过程

①TCP是一种精致的,可靠的字节流协议。 ②在TCP编程中,三路握手一般由客户端(Client)调用Connent函数发起。 ③TCP3次握手后数据收发通道即打开(即建立了连接)。 ④简述三路握手过程: 图 .TCP三次握手 (1)第一次握手:C…

通俗易懂理解TCP协议三次握手和四次挥手及其常见问题

TCP协议三次握手和四次挥手 三次握手如果建立连接只需要2次握手,可能会出现的情况 四次挥手为什么建立连接是三次握手,关闭连接确是四次挥手呢?TIME_WAIT状态有什么作用,为什么主动关闭方没有直接进入CLOSED状态释放资源&#xff…

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

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,与之相反的,采用四次挥手来断开连接: TCP标志位有6种标示,即:SYN(建立联机) 、 ACK(确认) 、 PSH(传送) 、…

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通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕…