计算机网络 | TCP 三次握手四次挥手 |半关闭连接

本来是不愿意写的,可是在实际场景,对具体的描述标志还是模糊不清,基础不扎实,就得承认!!!

在这里插入图片描述

TCP 连接建立需要解决三大问题:

  1. 知道双方存在
  2. 约定一些参数,如最大滑动窗口值、是否使用滑动窗口扩大选项、时间戳、服务质量等等
  3. 双方能够对运输实体资源(缓存大小、连接表中的项目)进行分配

三次握手
握手: TCP客户端和服务器之间进行交换三个TCP报文段

  1. 初始状态:两端的进程都处于关闭状态
  2. 服务器端创建传送控制块,用来存储TCP连接中的一些重要信息(TCP连接表、指向发送和接收缓存的指针、指向重传队列的指针、当前发送和接收序号等等),之后准本接收TCP客户进程的连接请求。TCP服务器处于监听状态,等待客户端进程的连接请求(TCP服务器是被动等待TCP客户进程的连接请求)(这又叫被动打开连接,不是主动建立连接的)
  3. TCP客户进程首先创建传输控制块 (请求发送和接收缓存的指针、指向重传队列的指针、当前的发送和接收序号)
  4. 开始第一次握手,TCP客户进程发送TCP请求报文段,进入同步已发送状态(SYN-SENT),发送的请求报文段中首部的同步位(SYN = 1),序号字段(seq = x,作为TCP客户进程所选择的初始序号)(注意TCP规定,SYN被设置为1的报文段不能携带数据,但是要消耗一个序号**)(主动打开连接
  5. 第二次握手(前提是服务进程接收客户进程的连接请求),TCP服务进程向TCP客户进程发送连接请求确认报文段(进入同步已接收状态, 监听状态–> 同步已接收状态)(连接请求报文段中头部SYN = 1,ACK = 1, seq = y, ack = x + 1) (同步位SYN = 1,确认位ACK = 1,这可以确定这是连接请求确认报文段) 序号字段 seq = y(初始值设置为y,作为TCP服务器进程所选择的初始序号,确认字段ack = x + 1,这是对TCP客户进程所选择的初始序号的确认),注意,这次发送的报文段(第二次握手)也不能发送数据,同样消耗一个序号
  6. 第三次握手(前提是TCP客户进程收到TCP请求确认报文段),接着TCP客户进程向TCP服务进程发送一个普通的TCP确认报文段。此时客户进程进入连接已建立状态,该发送的普通报文段中,确认位ACK = 1(这表明这是一个普通的TCP确认报文段),序号字段seq = x +1,确认字段ack = y +1(这是对TCP服务进程所选择的初始序号的确认)。(注意,这里的序号为x + 1 ,就是第一次握手发送的报文段是消耗了一个序号,然后TCP规定普通报文段是可以传输数据的,如果不携带数据这不消耗序号,在不携带数据的情况下,下一个数据报文段的序号仍然是x + 1)。TCP服务进程接收到该报文段后也进入了连接已建立状态
  7. 接下来就可以进行可靠的数据传输。

在这里插入图片描述
为什么还要发送一个普通的TCP确认报文段呢????===>能够两次握手建立连接???
特殊情境:TCP客户进程发送的请求报文段发送到了TCP服务端进程,但用了很长时间,所以会引发该报文段的超时重传,然后重传的报文段被TCP服务进程正常接收(注意后来发送的超时重传的报文段反而先被接收)然后地第二次握手。注意如果这是两次握手。然后TCP服务进程就进入了连接已建立状态(而不是三次握手进入同步已接收状态。这个时候TCP服务进程会等待TCP客户进程发送TCP连接请求确认报文段的普通确认报文段),第二次握手,没有给TCP发送普通 报文段,进入了连接已建立状态。此时两两可以开始传输数据。开始传输数据了哈,然后传输的数据很少,然后很快就断开连接,两端断开连接后,这时变态的事情就发生了,TCP服务线程接收到第一次发送的TCP连接请求报文段(TCP服务线程进入的连接已建立状态)。然后TCP服务线程肯定会发送确认报文段嘛,搞笑的事情就发生了,TCP客户线程就会莫名奇怪。明明断开连接之后,我啥也没干呀!!!(不理睬,关闭状态)

四次挥手
数据传输结束后,双方都可以释放连接

释放连接前的状态都是 连接已建立(EDTABLISHED)

  1. 假设是TCP客户进程的应用进程通知其主动关闭TCP连接。TCP客户进程发送TCP连接释放报文段,接着TCP客户进程主动关闭状态,进入终止等待1状态(FIN-WAIT-1),该发送的连接释放报文段中的头部终止位FIN = 1,确认位ACK = 1。可以通过这些头部字段信息判定这是TCP连接释放报文段(因为有时候抓包,需要确认什么什么是什么什么包)。同时,对之前收到的报文段确认 seq = u,ack = v。(u -1 , v - 1 分别表示什么 可以参照TCP三次握手)(注意:TCP规定终止位FIN = 1的报文段即使不携带数据,也要消耗一个序号
  2. TCP服务进接收到发送的连接释放报文段后,会发送一个普通的TCP确认报文段,ACK = 1,seq = v, ack = u + 1(还是解释以下吧,seq = TCP服务进程之前已经传送的数据的最后一个字节序号加1),—>关闭等待状态(CLOSE-WAIT),同时TCP服务进程通知高层应用进程,TCP客户进程要和我们断开TCP连接,请做好断开连接的准备。注意这时,TCP客户进程到TCP服务进程这个方向(—>)的连接就释放了。这时的TCP连接也叫做半关闭状态。(怎么个半关闭呢?TCP客户进程已经没有发数据给TCP服务进程,但是要注意这个时候TCP服务进程还可以发送数据给TCP客户进程。虽然在TCP服务这边,服务进程已经传达断开消息给高层应用了,但是这段时间内,高层应用是可以继续发送消息的,简言之TCP服务线程可以发送数据给TCP客户线程,并且TCP客户线程是可以接受到发送过来的数据)。TCP客户进程接收到TCP确认报文段后就进入终止等待2状态(FIN-WAIT-2)
  3. TCP服务应用进程知晓后,也就会通知TCP服务进程没有数据要发送,接着TCP服务进程就会发送连接释放报文段(报文段首部FIN = 1 ACK = 1 ,seq = w, ack = u + 1 所以期间发送的报文段次数为w - v 注意 u + 1 是对之前收到的TCP连接释放报文段的重复确认。也就是TCP客户线程第一次发送的报文段的确认)给TCP客户线程。TCP服务这边是被动关闭连接,TCP服务线程发送TCP连接释放报文段后,其状态---->最后确认 (LAST-ACK)
  4. TCP客户线程 接收到发送的报文段后,紧接着发送TCP普通确认报文段 ACK = 1, seq = u + 1, ack = w + 1。之后TCP客户端进入时间等待状态 发送的报文段消耗一个序号。TCP 服务线程接收到该报文段后进入关闭状态(CLOSED),注意TCP客户线程需要经过2MSL时间后才能进入关闭状态。

解释:MSL 最长报文段寿命 RFC793建议为2分钟
在这里插入图片描述思考为什么TCP客户线要经历2MSL的时间自动关闭连接,置为关闭状态呢?
分析,如果TCP客户端发送TCP普通确认报文段后直接置为关闭状态,但是这个报文段很遗憾没有发送成功,在半路丢失。在TCP服务线程触发超时重传,又进行第三次挥手。但是TCP客户线程已经下线了,怎么也连不上,那这就是没有关闭成功。(怎么算的2MSL ??TCP客户线程 发送过去,触发超时,TCP服务线程发送报文段,两倍2MSL)

引申 保活计时器
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/98861.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 提示词技巧

文章目录 背景介绍如何写好提示词提示词的语法正向提示词负向提示词 随着AI技术的不断发展,越来越多的新算法涌现出来,例如Stable Diffusion、Midjourney、Dall-E等。相较于传统算法如GAN和VAE,这些新算法在生成高分辨率、高质量的图片方面表…

YOLOv5模型压缩:综述

YOLOv5模型压缩:综述 AbstractIntroduction剪枝基于ln-范数修剪模型Feature map activationBatch normalization scaling factor (BNSF)First-order derivativeMutual informationGranularity of Pruning非结构化剪枝结构化剪枝基于通道的修剪基于滤波器的修剪基于核的剪枝关于…

次高端白酒:一场冰火两重的「战局」

【潮汐商业评论/ 原创】 夜深人静,Andy突然想起还没有给爷爷准备生日礼物。 “送酒肯定能让他老人家开心,但是买什么品牌呢?茅台太贵,其他好酒还真不熟。”,对于白酒研究不多的Andy来说,如何挑选到一款称…

【锁】定时任务推送数据-redission加锁实例优化

文章目录 redission 加锁代码-有问题优化代码看门狗是什么? redission 加锁代码-有问题 /*** 收货入库物料标签(包装码)推送接口** throws Exception*/public void synReceiveMaterialTags() throws Exception {String tag DateFormatUtils.format(new Date(), &qu…

自动化实时在线静电监控系统的构成

自动化实时在线静电监控系统是一种帮助企业监测和管理静电问题的技术解决方案。静电在许多工业和商业环境中都是一个潜在的风险和生产问题。通过使用这样的监控系统,企业可以及时发现并采取对策来预防或减轻可能的静电问题。 该系统通常由以下组成部分构成&#xf…

RK3562 VS RK3566 性能解析

RK3562是深圳触觉智能最新推出的一款高性能核心板及其开发套件,采用四核A53Mali G52架构,主频2GHz,内置1T NPU算力以及13M ISP,拥有丰富的外围接口。其次在解码方面,支持H.264 1080P60fps、H.265 4K30fps;编…

深入理解css3背景图边框

border-image知识点 重点理解 border-image-slice 设置的值将边框背景图分为9份,图像中间的舍弃,其他部分图像对应边框的相应区域放置,上右下左四角固定,border-image-repeat设置的是除四角外其他部分的显示方式。 截图来自菜鸟教…

JavaScript Web APIs - 06 正则表达式

Web APIs - 06 文章目录 Web APIs - 06正则表达式正则基本使用元字符边界符量词范围字符类 替换和修饰符正则插件change 事件判断是否有类 目标:能够利用正则表达式完成小兔鲜注册页面的表单验证,具备常见的表单验证能力 正则表达式综合案例阶段案例 正…

如何使用FormKit构建Vue.Js表单

表单是现代网页开发的重要组成部分,创建表单通常是一项耗时且繁琐的任务。这就是FormKit的用武之地;它是一个功能强大的现代表单构建库,旨在帮助开发人员轻松高效地创建表单。 在本文中,我们将探讨使用FormKit的好处,并…

Shell - 根据PID过滤进程信息

文章目录 #!/bin/bash #Function: 根据用户输入的PID,过滤出该PID所有的信息 read -p "请输入要查询的PID: " P nps -aux| awk $2~/^$P$/{print $11}|wc -l if [ $n -eq 0 ];thenecho "该PID不存在!!"exit fi echo "…

Nginx-报错no live upstreams while connecting to upstream

1、问题描述 生产环境Nginx间歇性502的事故分析过程 客户端请求后端服务时一直报错 502 bad gateway,查看后端的服务是正常启动的。后来又查看Nginx的错误日志,发现请求后端接口时Nginx报错no live upstreams while connecting to upstream&#xff0c…

PPPoE连接无法建立的排查和修复

嗨,亲爱的读者朋友们!你是否曾经遇到过PPPoE连接无法建立的问题?今天我将为你详细解析排查和修复这个问题的步骤。 检查物理连接 首先,我们需要确保物理连接没有问题。请按照以下步骤进行检查: - 检查网线是否插好&…

OpenCV(九):LUT查找表

LUT(Look-Up Table)查找表是OpenCV中一种常用的图像处理方法,用于对图像进行像素级别的颜色映射或图像增强操作。LUT查找表可以实现快速、高效的颜色转换和像素操作,尤其在处理大量像素的情况下具有优势。以下是关于OpenCV LUT查找…

【深度学习实验】NumPy的简单用法

目录 一、NumPy介绍 1. 官网 2. 官方教程 二、实验内容 1. 导入numpy库 2. 打印版本号 3. arange 函数 4. array函数 5. reshape函数 6. 矩阵点乘(逐元素相乘) 7. 矩阵乘法 一、NumPy介绍 NumPy是一个常用于科学计算的Python库,尤…

2023年信息安全管理与评估(赛项)评分标准第三阶段夺旗挑战CTF(网络安全渗透)

全国职业院校技能大赛 高职组 信息安全管理与评估 (赛项) 评分标准 第三阶段 夺旗挑战CTF(网络安全渗透) 竞赛项目赛题 本文件为信息安全管理与评估项目竞赛-第三阶段赛题,内容包括:夺旗挑战CTF&#xff08…

【爬虫】实验项目一:文本反爬网站的分析和爬取

目录 一、实验目的 二、实验预习提示 ​编辑 三、实验内容 四、实验要求 五、实验过程 1. 基本要求: 2. 改进要求A 3. 改进要求B: 六、资料 1.实验框架代码: 2.OpenSSL:Win32/Win64 OpenSSL Installer for Windows - Shining Light…

Ubuntu学习---跟着绍发学linux课程记录(第一部分)

文章目录 1、启动、关闭、挂起、恢复(电源)2、更多虚拟机操作2.1 电源设置2.2 硬件参数设置2.3 状态栏2.4 全屏显示 3、快照与系统恢复4、桌面环境5、文件系统6、用户目录7、创建目录和文件8、命令行:文件列表ls 9、命令行:切换目…

Vulnstack----5、ATTCK红队评估实战靶场五

文章目录 一 环境搭建二 外网渗透三 内网信息收集3.1 本机信息收集3.2 域内信息收集 四 横向移动4.1 路由转发和代理通道4.2 抓取域用户密码4.3 使用Psexec登录域控4.4 3389远程登录 五、痕迹清理 一 环境搭建 1、项目地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/7/ …

python读取图像小工具

一、和图像交互获得图像的坐标和像素值 import cv2 import numpy as np import signal import threading import timeif __name__ __main__:img cv2.imread(XXX,0)#读取图片font_face,font_scale,thicknesscv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x…

香港服务器快还是台湾服务器快?

​  基于机房位置不同,香港服务器相对于台湾服务器在访问速度方面有一定的优势。香港服务器拥有CN2线路,因此访问速度较快。在网络服务商方面,中华电信等台湾服务商提供的带宽也具有很高的性价比。 香港服务器对大陆用户的影响 对于大陆用户…