Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TCP三次握手和四次挥手

TCP三次握手和四次挥手

原创
作者头像
剁椒鱼鳞
发布于 2023-06-07 08:31:08
发布于 2023-06-07 08:31:08
2100
举报
文章被收录于专栏:前端小学生前端小学生

一、三次握手

建立可靠的通信通道,即服务端和客户端都可以正常的数据的发送和接收。

  1. 第一次握手

客户端:向服务端发送syn,什么都无法确认

服务端:可以确认自己接受正常,客户端发送正常

  1. 第二次握手

客户端:发送正常、接受正常

服务端:仍旧是确认自己接受正常,客户端发送正常

  1. 第三次握手

客户端:第二次握手都已确认

服务端:自己发送正常、接受正常,客户端发送正常,接受正常

  • 为什么需要三次,而不是两次

防止失效的链接请求被服务端接收,从而产生错误。只需两次握手,客户端并没有太大影响,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞或者其他原因导致超时,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

二、四次挥手

  1. 第一次挥手

客户端向服务端发起释放请求,该请求只有报文头,客户端进入FIN-WAIT-1状态

  1. 第二次挥手

服务端收到释放请求后,会通知相应的程序,会向客户端发送应答,自此服务端进入CLOSE-WAIT状态

经过这两次挥手,客户端不会再发送数据,服务端不会接受数据。但是客户端仍旧可以接受数据,服务端仍旧可以发送数据。

  1. 第三次挥手

当服务端向客户端发送完所有数据后,就会向客户端发送释放请求

  1. 第四次挥手

当客户端收到服务的的释放请求后,会向服务端发送确认应答,此时客户端进入了TIME-WAIT状态。改状态会持续2MSL时间,若该时间段内没有服务端的重发请求的话,就进入了CLOSED状态,撤销TCB(在通信开始前,双方都得创建各自的传输控制块)。当服务端收到确认应答后,也进入了CLOSE状态,撤销TCB。

  • 为什么挥手需要四次,而不是两次

前两次挥手,仅仅是断掉了一个方向的链接,即客户端不会再发送数据,服务端也不会再接受数据。但是另外的一个方向的链接还保留着,即服务端仍旧还可以发送数据,客户端仍旧还可以接受数据。

  • 客户端为什么要先进入TIME-WAIT状态,登台2MSL时间后才进入CLOSE状态

为了保证服务端能收到客户端的确认应答。若客户端发送完确认应答后直接进入了CLOSE状态,那么如果该应答丢失,服务端等待超时后,就会重新发送链接释放请求,但此时客户端应该关闭了,不会作出任何响应,此时服务端永远无法正常关闭。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
拜托,不要再问我三次握手和四次挥手了!
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。
Bug开发工程师
2019/10/11
1.1K0
拜托,不要再问我三次握手和四次挥手了!
tcp的四次挥手(为什么三次握手和四次挥手)
在断开连接之前客户端和服务器都处于ESTABLISHED状态,双方都可以主动断开连接,以客户端主动断开连接为优。
全栈程序员站长
2022/07/29
7930
tcp的四次挥手(为什么三次握手和四次挥手)
TCP三次握手四次挥手(通俗易懂版)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151215.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/25
3670
TCP三次握手四次挥手(通俗易懂版)
动图详解TCP的三次握手与四次挥手
原文:https://blog.csdn.net/qzcsu/article/details/72861891
java进阶架构师
2018/09/21
8401
动图详解TCP的三次握手与四次挥手
面试常见的三次握手和四次挥手
传输方式:TCP是面向连接的,UDP是面向无连接的,所谓连接是一个逻辑上的概念,TCP需要在两端都建立数据结构来保存对端的通信状态,以此达到维持连接的目的;
玛卡bug卡
2022/09/20
4750
面试常见的三次握手和四次挥手
网络通信——TCP “三次握手“、“四次挥手“ 详解
第一次握手: 客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
SmallRoll小卷
2023/03/03
5490
网络通信——TCP “三次握手“、“四次挥手“ 详解
TCP三次握手图_tcp为什么三次握手
我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。
全栈程序员站长
2022/11/10
9630
TCP三次握手图_tcp为什么三次握手
面试常问!!TCP的三次握手与四次挥手理解
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
乔戈里
2019/04/24
5890
面试常问!!TCP的三次握手与四次挥手理解
注意!是TCP不是HTTP的3次握手与4次挥手
引言 在开发中,时不时会听到关于HTTP的三次握手和四次挥手,在面试中也会被问道HTTP的三次握手和四次挥手,很多开发者可能都会有这这种误解,认为三次握手和四次挥手都是HTTP协议的,实际上,这是错误的。正确的来说,三次挥手与四次握手是在TCP中进行的。 TCP中的三次握手 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。 通过下面的图片,我们来详细分析
我就是马云飞
2018/06/22
6660
在tcp协议的三次握手中(tcp/ip协议三次握手)
假设现在 A 想去 B 家里玩游戏,于是 A 给 B 发消息,若消息没有出现错误且顺序正确 结果如下所示:
全栈程序员站长
2022/07/25
5820
在tcp协议的三次握手中(tcp/ip协议三次握手)
面试官:会TCP三次握手,四次挥手吗
在我们日常工作中,无时无刻不在接触HTTP请求,那么HTTP又是基于TCP进行通信的,在面试中面试官经常会问我们,你知道三次握手和四次挥手吗,正在读这篇文章的你,知道吗?不知道的话就跟老哥来一起学习吧!!!
公众号 IT老哥
2020/09/16
1.2K0
面试官:会TCP三次握手,四次挥手吗
“三次握手,四次挥手”这么讲,保证你忘不了
我们都知道TCP是面向连接的,三次握手就是用来建立连接的,四次握手就是用来断开连接的。
三分恶
2021/05/27
5430
TCP 三次握手 和 四次挥手
在聊到网络协议的时候,总是会说到TCP的三次握手和四次挥手,这里也整理记录下学习的整个过程。
艳龙
2021/12/16
5110
TCP 三次握手 和 四次挥手
基础巩固——你应该这么理解TCP的三次握手和四次挥手
网络传输层负责最底层的底层链路连接。两台主机之间进行互联,基于网线的物理硬件上的协议。在这个侧面,主机与主机之间只认得硬件mac编码。并不认识IP。
Janti
2018/08/01
5530
基础巩固——你应该这么理解TCP的三次握手和四次挥手
TCP 三次握手 和 四次挥手
概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手。 三次握手 下图为三次握手的流程图 下面通过我
java404
2018/06/04
1K0
三次握手四次挥手
此笔记默认已经熟悉TCP协议头的首部格式了,因为握手和挥手是建立的TCP协议上的,具体来说是建立在其内部的各种字段上
晚上没宵夜
2020/04/30
7060
三次握手四次挥手
TCP三次握手和四次挥手
(1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
云计算小黑
2022/12/28
5390
TCP三次握手和四次挥手
6张图带你搞懂TCP为什么是三次握手?
OK,下面正经地来回答下这个问题,要搞清楚这个问题,首先得了解TCP究竟是如何保证可靠传输的。
入门笔记
2022/06/03
3670
6张图带你搞懂TCP为什么是三次握手?
关于三次握手与四次挥手你要知道这些
第一次握手:主机A发送位码为syn=1,随机产生seq number=x的数据包到服务器,客户端进入SYN_SEND状态,等待服务器的确认;主机B由SYN=1知道A要求建立连接。
全菜工程师小辉
2019/08/16
7660
tcp三次握手和四次挥手
其实问题本质是信道不可靠,但是通信双方需要就某个问题达成一致,而要解决这个问题,无论在消息中包含什么消息,三次通信是理论上的最小值。 所以三次握手不是TCP本身的要求,而是为了满足“在不可靠信道上可靠的传输信息”这一需求所导致的。三次达到了,后面想接着握手也好,发数据也好,跟进行可靠信息传输的需求就没关系了。
CodingCode
2021/09/19
4651
tcp三次握手和四次挥手
推荐阅读
相关推荐
拜托,不要再问我三次握手和四次挥手了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档