[转载] TCP三次握手 四次挥手

TCP报文的交互过程 在TCP 协议提供可靠的连接服务时,采用三次握手建立一个连接,采用四次握手来关闭一个连接。 本文介绍tcp建立连接和断开连接时的报文交互,并通过实例对TCP建立和断开连接进行详细说明 阅读详情

TCP三次握手
TCP运输连接有三个阶段:连接建立、数据传送、连接释放
TCP连接过程通常叫做握手,握手需要客户端和服务器端交换三个报文,如下图所示
之所以需要三次握手是因为TCP是可靠传输,三次能够刚好可靠又不多余
TCP三次握手与Socket的连接过程是相关联对应的,Socket就是对于TCP/IP的封装么
客户端有CLOSED、SYN-SEND、ESTABLISHED三种状态
客户端有CLOSED、LISTEN、SYN-RCVD、ESTABLISHED四种状态

服务器会首先创建连接,并且进入监听等待阶段,等待客户端的请求
当需要发送请求时,浏览器客户端主动打开连接,然后服务器被动打开连接

在这里插入图片描述

连接过程
客户端在需要时,向服务器发起请求连接报文,发出后状态从CLOSED转换为SYN-SEND 同步-已发送状态
服务器一直处于LISTEN状态,接收到请求后,对客户端的请求进行回应,转换为SYN-RCVD,同步-已收到状态
客户端收到服务器的回应后,状态转换为ESTABLISHED,并且再次向服务器发送确认
服务器收到客户端的确认之后,服务器也转换为ESTABLISHED状态,完成了连接
发出消息或者收到消息后状态才会进行切换
客户端与服务器的握手是一个往复确认的过程

客户端:发出确认请求,SYN=1,seq=x,你听得到么,我想建立连接(SYN=1),我的序号是x(seq=x)
服务器:对请求进行确认,也就是回应,我听到了(ACK=1,ack=x+1),你听得到么(SYN=1),我的序号是y(seq=y)
客户端:对服务器的回应进行确认,我听到了(ACK=1,ack=y+1),我的序号是x+1
IP数据报经过运输层需要分段发送,所以在TCP的处理过程中,有序号的概念
比如客户端说我要从666号开始,发送100个数据,服务器说,我是从888号开始回应的
上面的seq=x 和 seq=y seq=x+1(上一个seq=x,下一个自然就是seq=x+1了)都是各自的序号
握手的过程就是SYN seq ACK ack的来回确认
SYN ACK是头部的字段,可以理解为标志位,协议中有对他们的值有具体的规定
ack就是确认号,确认号是期望收到的对方的下一个报文段的第一个数据字节的序号,也就是收到的序号+1
否则随便一个,怎么对得上号

为什么要三次握手?
如果不是三次握手,只有两次
如果客户端发出请求连接时,报文延时了,于是客户端重新发送了一次连接请求消息
后来收到了确认,建立了连接,然后完成了数据传输,关闭了连接
此时,服务器收到了那个迟到的请求消息,此时他应该是个废物了
但是如果只有两次握手,服务器收到请求就响应建立了连接了
但是如果是三次,客户端不会再次确认,服务器也就随后知道了这消息有问题,不会建立连接

TCP四次挥手
连接建立以后就可以进行数据通信传输了
通信结束后,需要断开连接,断开连接需要四次交互,常被称为四次挥手
最初状态均为ESTABLISHED,客户端与服务器相互进行数据传送
下图假设客户端无数据发送,请求断开连接
在这里插入图片描述

断开过程
客户端无数据发送时,请求关闭连接,我好了,我想断开连接了(FIN=1)我的序号是u(u就是之前传送过的所有数据的最后一个字节的序号+1)
此时客户端转变为FIN-WAIT-1状态
服务器收到客户端的消息后,告诉客户端“好的,我知道了”(ACK=1,ack=u+1),这条消息的序号是v(seq=v ,这是服务器发送消息的序号)
此时服务器的状态就转换为了CLOSE-WAIT状态
此时,客户端通往服务器的路就断开了,客户端不能向服务器发送数据
但是服务器仍旧可以向客户端发送数据,现在是“半关闭”的状态
当客户端收到来自服务器的确认之后,进入FIN-WAIT-2状态,等待服务器那边说断开连接,等待中。。。。。
当服务器所有的数据也都完全发送完成了之后,服务器才开始主动告知客户端断开连接(FIN=1,seq=w)
这中间服务器可能又继续发送了一些数据,可能是v+1 也可能发送了更多,所以设置为w
并且再次发送确认信息(ACK=1,ack=u+1,因为客户端已经不能发送数据了,服务器期望收到的序号永远都是最后一个序号+1,也就是u+1)
这时,服务器就进入了LAST-ACK状态,最后确认状态
客户端收到了服务器的断开连接请求后,也需要给出确认响应(ACK=1,ack=w+1,seq=u+1),然后进入TIME-WAIT状态
等待两个MSL后,进入关闭状态
MSL 是Maximum Segment Lifetime英文的缩写“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
服务器最终收到来自客户端的确认信息后,关闭,进入CLOSED状态
四次挥手也是一个互相确认的过程,你说不玩了,别人答应了,还要等别人都搞好了再告诉你可以走了,你才能走
客户端:我不想玩了
服务器:好的我知道了
服务器:你可以走了
客户端:好的我走了
就如同在网吧上网,你点击下机之后,再去网管那边结账
结账清楚了之后才彻底结束,而不是你说走就走了,难道你办会员卡了么
这个过程很好理解**,客户端发出请求后,并不意味着服务器都已经完成响应**
所以当客户端请求断开时,并不能立即断开,还需要等待服务器那边处理妥当,再来通知你的确是可以断开了
消息发出来谁知道别人收没收到,所以还需要一个确认

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改 本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。 阅读详情

相关推荐

【密码专栏】超强进阶:PLONK VS Groth16(上)

前言 前文《天冷了,干了这碗“零知识证明”鸡汤》对「零知识证明学习」作了一个形象化的比喻:炖鸡汤。那么本系列的主要内容可以简单概括为《论高压锅炖鸡汤的一百种方法》之方法二。在学会了“清炖鸡汤”之后,不如来一口“阿胶鸡汤”补补脑细胞吧! 正如鸡汤不同风味之间各具千秋,不同的zk-SNARK方案也各有所长。zk-SNARK方案可以被分为【通用】与【非通用】zk-SNARK,PLONK与Groth16分别是其中的典型代表。通过本系列,我们将对PLONK算法内容作简要介绍,并指出PLONK和Groth16算法思路上

Hyperchain的博客 1805

【TCP专题】TCP连接断开

当TCP的连接建立完成后,我们就可以尽情的通过TCP连接所创立的会话来进行数据的传输了。当然,再有意思的话题也有说完的时候,所以,当数据传输完之后,TCP该如何善后呢?

Linkjiee的博客 6880

EDA与机器学习融合:智能优化芯片设计流程的工程实践

机器学习作为数据驱动的核心技术,通过从历史数据中学习复杂模式,实现对系统行为的预测与优化。其原理在于构建模型,将输入特征映射到目标变量,从而揭示数据背后的内在规律。在工程领域,这项技术的核心价值在于能够将专家经验转化为可量化、可复用的智能模型,显著提升自动化水平与决策效率。电子设计自动化(EDA)是芯片设计的关键支撑,传统流程高度依赖人工试错,面临参数空间巨大、优化周期长等挑战。将机器学习应用于EDA,能够构建预测模型来预估设计性能(PPA),或通过代理模型加速设计空间探索,实现智能化的设计辅助与优化。本文

weixin_30411239的博客 684

为什么TCP建立连接需要三次握手,断开却要四次挥手呢?

面对面试官毫不慌张系列

weixin_53220369的博客 8631

ubuntu20.04开机黑屏卡在/dev/sda1:clean,***files,***blocks,解决心得记录

这个问题如果你百度,会发现目前有很多种解决方法。 有更新显卡驱动的,有卸载上一次安装软件的,还有各种奇奇怪怪的故障原因。 如果你是属于上述情况,那么按照百度和论坛的各种指引操作一般都能解决。 但我这里主要说一种特殊情况,就是我什么也没有操作,我什么也没干。就是正常使用系统关了机突然就报错了。 这也是自己亲自遇到的问题,做个小记录方便以后自己回顾。 上一次出现这种情况我重装系统了,这次用了两个月又出现了,重装成本太高,我接受不了,于是找到解决办法。 首先找个终端进入,进入终端的方法很多,用安装u盘

qq_41517017的博客 2万+

使用C# HslCommunication库实现三菱PLC通信(含完整代码示例)

在工业自动化开发中,上位机与PLC的通信是关键环节。HslCommunication库是一个开源的.NET工业通信库,支持三菱、西门子、欧姆龙等多个品牌PLC的通信协议。本文将演示如何通过库实现C#程序与三菱PLC的通信,并提供完整的代码示例。

StevenChen的博客 2291

HTTP 三次握手与四次挥手

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程

web00_11的博客 761

16. SAP Fiori Elements 应用里图片字段(Image)的显示原理介绍

很多朋友向我反映,学习了 一段时间的 SAP Fiori Elements 开发,但是感觉整套体系对于自己来说还是个黑盒子,很多技术点,看了 SAP 官方帮助文档后,觉得自己懂了,但是一旦需要自己动手做一些东西出来时,又觉得一片茫然。 其实笔者自己也经历过这个过程。究其原因,还是大家对 Fiori Elements 一些技术细节没有理解,对 SAP 官方的知识点仅仅停留在记忆,甚至是死记硬背上面。 不过没有关系,本教程笔者会刻意设置一些练习,让大家动手,在实战中逐渐熟悉 Fiori Elements 这

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 760

TCP三次握手

 TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接三个过程,TCP建立连接的过程称为三次握手,下面说一下三次握手的具体过程: TCP三次握手过程 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你

wangzhaotongalex的专栏 933

pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案

本文主要介绍了pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]’ is not a valid editable requirement解决方案,希望能对使用markitdown的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

提示词编写:从新手到专家的进阶之路

本文旨在为提示词编写者提供一条从新手到专家的进阶之路。我们将详细探讨提示词编写的背景与意义、基础与进阶技巧、实战应用以及最佳实践。通过逐步深入的分析与实操,读者将掌握提示词编写的核心要点,提高编写效率和作品质量。提示词是用于引导人工智能生成文本的关键词或短语,它包含了作者想要传达的主题、情感和细节。随着人工智能技术的普及,自动化写作工具逐渐应用于各行各业。为了提高写作效率,项目团队决定开发一款基于人工智能的自动化写作工具。成功开发了一款自动化写作工具,生成文本质量较高。

AI天才研究院 1087

【转载】TCP 三次握手以及四次挥手

文章目录 一.TCP简介二.TCP数据报结构三.TCP的三次握手四.TCP的四次挥手 一.TCP简介 1、TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。 2、客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。 3、TCP建立连接时...

m0_54138989的博客 166

YOLOv9改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

本文记录的是改进YOLOv9的损失函数,将其替换成Slide Loss,并详细说明了优化原因,注意事项等。Slide Loss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss来提高模型在处理复杂样本时的性能。

Limiiiing的博客 2606

TCP 的三次握手 与 四次挥手详解(转载)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的。 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。 那如何断开连接呢?简单的过程如下:

刘森林l的博客 3098

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TCP三次握手和四次挥手详解 --- 转载

转载地址:https://blog.youkuaiyun.com/qq_43412060/article/details/107140216?utm_source=app 文章目录 1、三次握手 1.1connect()、listen()和accept()三者之间的关系 1.1三次握手的过程 1.2三次握手的状态转换和安全问题 1.3三次握手的问题汇总 2、四次挥手 2.1四次挥手的过程 1.2四次挥手的问题汇总 3.1TCP编程中三次握手和四次挥手的全过程 3.2TCP状态..

alpha_love的博客 2295

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[ 转载 ] Tcp三次握手和四次挥手详解

#TCP的报头: 源端口号:表示发送端端口号,字段长为16位。目标端口号:表示接收端口号,字段长为16位。序列号:表示发送数据的位置,字段长为32位。每发送一次数据,就累加一次该数据字节数的大小。注意:序列号不会从0或1开始,而是在建立连接时由计算机生成的一个随机数作为其初始值,通过SYN包发送给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。确认应答号:...

weixin_30649859的博客 109

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

转载:TCP的三次握手和四次挥手详解

三次握手建立链接,四次挥手断开链接。这个问题算非常经典的问题,也是面试官非常喜欢问的问题。 不夸张的说,龙叔在校招面试的时候每一家公司都问到过关于三次握手和四次挥手相关的问题,相信大家也都差不多被面试官各种怼。 这个问题的重要性,已经意识到。不说废话了,接下来就是听龙叔给你安排的明明白白。 先画个图,看下TCP的建立连接 和 断开连接的整体过程。 tcp三次握手四次挥手 看完这个图相信聪明的你在整体对三次握手和四次挥手有了一些基本把...

初心不改 332

形象描绘TCP三次握手和四次挥手(转载)

一、TCP三次握手 TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己。 形象描绘TCP三次握手和四次挥手 张三首先向李四招手(syn),李四看到张三向自己招手后,向对方点了点头挤出了一个微笑(ack)。张三看到李四微笑后确认了李四成功辨认出了自己(进入established状态)。 但是李四还有点狐疑,向四周...

樱吹雪 914

TCP三次握手四次挥手(转载)

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。 确认ACK:占1位,仅当ACK=1时,确认号字段才有效。A...

weixin_45629738的博客 158

TCP三次握手和四次挥手以及11种状态(转载)

TCP三次握手和四次挥手以及11种状态 1、三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: 1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建...

uzong 481

转载:TCP的三次握手和四次挥手

https://blog.youkuaiyun.com/qq_38950316/article/details/81087809 这篇博客写的很详细 自己理解: 首先要明白几个名词:seq,ack,SYN,ACK,FIN 大写的表示标志位,只有0,1两种状态,seq为序列号,ack为确认序列号 一、tcp的三次握手过程 客户端向服务端发送seq=x,SYN=1,客户端进入sent状态 服务端收到数据,将x+...

杆子的博客 165

转载Tcp三次握手连接和四次挥手断开过程详解

原文:https://blog.youkuaiyun.com/qq_38950316/article/details/81087809 版权声明:转载需声明出处 https://blog.youkuaiyun.com/qq_38950316/article/details/81087809 本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把...

wannibadehaizi的博客 152

TCP三次握手和四次挥手【转载】

TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一。 原文来自微信 码洞:https://mp.weixin.qq.com/s/pSrKbVryn71kDVIXUtpXMA TCP三次握手 TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己。 张三首先向李四招手(syn),李四看到张三向自己招手后,向...

To-nemy 195

【转载】TCP的三次握手与四次挥手理解及面试题

本文转自https://blog.youkuaiyun.com/qq_38950316/article/details/81087809 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个...

名侦探张六儿的博客 188

(转载)TCP的三次握手与四次挥手理解及面试题

**转载自**: [原地址](https://blog.youkuaiyun.com/qq_38950316/article/details/81087809)     序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个...

八面玲珑 217

【转载】跟着动画来学习TCP三次握手和四次挥手 | 详解图文教程

原文地址:跟着动画来学习TCP三次握手和四次挥手 作者:老錢 来源:掘金 著作权归作者所有。商业转载请联系作者获取授权,非商业转载请注明出处 跟着动画来学习TCP三次握手和四次挥手 TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一。很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答。 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地地理解TCP...

FG成长空间 756
上一篇: java8高级应用与开发课件和贯穿案例(全)分享
下一篇: 企业版火绒无需密码进行卸载操作
ProuHan
博客等级 码龄8年 14粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProuHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值