运输层8——TCP连接和释放

目录

1、TCP连接

2、TCP释放

3、保活计时器


TCP建立连接前:
1)需要对方的存在
2)允许协商参数,例如最大窗口等
3)对运输资源进行分配

客户:主动发起TCP连接的应用进程
服务器:被动等待连接的应用进程

1、TCP连接

TCP连接的过程称为握手,建立连接需要经过3次握手
说明:SYN为建立TCP连接的同步位
A为发送方,B为接收方
ACK:确认报文位
ack:确认号
seq:发送方要发送数据的开始序号
A、B建立连接时,均创建传输控制块TCB

字段/项描述
SYN用于建立TCP连接的同步位。发送方通过设置SYN标志位,表示请求建立连接。
A发送方(主动发起连接的一方)。
B接收方(响应连接请求的一方)。
ACK确认报文位。用于表示接收方确认收到数据或连接请求。
ack确认号。用于表示接收到的数据的下一个期望序列号。
seq发送方要发送数据的起始序列号。用于标识数据的顺序。
TCB (传输控制块)每个TCP连接在发送方和接收方各自维护一个传输控制块(TCB)。TCB包含了连接的状态、序列号、确认号等信息。

连接过程:
一、A向B发送请求,信息为:SYN=1,seq=x(不可携带任何数据)
意为:我请求建立连接,如我要发送数据,我从字节序号x开始

二、B收到A的请求,B向A发送确认连接:SYN=1,ACK=1,ack=x+1,seq=y(不可携带任何数据)
意为:我同意建立连接,确认号为x+1,我如要发送数据则从字节序y开始

三、A收到B的确认,随即A向B发送确认:ACK=1,seq=y+1(可携带数据)

注意:
上述连接过程需要经过3次握手
同时双方都需要消耗一个序号

问题:为什么要3次握手?当B向A回发确认不就可以确认建立了吗?2次不就可以了吗?
好问题。
假设我们就2次握手建立成功,现在考虑一种情况:(我叫他前夫哥陷阱)
当A第一次发送请求时,该请求报文被滞留在网络中,没有丢失,只是没有到达B。我们叫他1号请求报文
滞留超过A的超时重传时间,于是A认为该报文丢失,于是重新发了2号请求报文。
2号报文正常到达B,B向A回发确认建立,于是,连接建立
正常发送数据。
当一段时候后,不用了,于是释放,结束,over。
整个过程没有问题。
好,好得很,非常好,很棒!
可是,我们的2号请求选手这个时候被放出来
此时2号到达了B
B以为是A新发来的连接,因为请求报文都是一样的
于是B向A发送确认
当A收到B的确认的时候,懵逼了
A:我没有发请求连接啊
同时,A也不会向B发送任何确认和任何数据
于是,对于A来说,A没有建立连接
可是对于B来说,已经和A建立了连接
于是,B一直在等待数据,如此白白消耗B的资源,这是不应该的
因此,应当握手三次,避免上述前夫哥现象。

2、TCP释放

需经过4次握手。
过程:(FIN为终止位,用于释放连接)

一、A用完了,于是停止发送数据,主动关闭TCP连接,并且向B发送释放报文:FIN=1,seq=u
(A处于终止等待1)

二、B收到,向A发送释放确认。可是此时B还有数据没有发完,于是B继续发送,A继续接收:ACK=1,ack=u+1,seq=v
(B处于关闭等待,A处于终止等待2,TCP处于半关闭)

三、A收到确认,等待B释放,因为B还没有发完。当B发送完数据,于是释放TCP连接,向A发送释放报文:FIN=1,seq=w,ack=u+1
(B处于最后确认)
 
四、A收到B的释放报文,向B发送释放确认:ACK=1,ack=w+1,seq=u+1
(A、B均处于时间等待状态)

注意:完成上述四次握手,TCP连接依然没有释放,而是进入时间等待状态。
经过时间等待计时器设置的2MSL后,释放。

问题:A为什么发完第四次还要等?B发过来后,扔个确认过去,然后直接关不就行了吗?
好问题。
现在假设A发完确认关闭就直接关,考虑一种情况:
如果A给B发送的确认关闭的报文丢失,那么B将得不到A的确认关闭报文
对于B没收到回复,于是认为报文丢失,重传
可是!你A发完直接就关闭了!
(你是吃饱饭了,可是你吃完饭就直接把桌子给掀了。)
B:你怎么这么私自!
B重发的一切报文都将石沉大海,永远得不到回应
于是,B无法按正常步骤进行TCP的释放

所以,A得等。
如果回复ACK丢失,他得兜底

同时,A等待一段时间,有好处
在这段时间内,A、B之间的所有报文要么丢失,要么都已经到达对方
也就是说,对于关闭连接之前的互相传输的所有报文都已经完成了使命
此后关闭,不会留任何的历史问题

3、保活计时器

为避免客户端突然故障
服务器设立保活计时器,一般为2小时
2小时内没有收到任何客户数据,则发送探测报文
每隔15s发一个探测,如果10次都没有得到响应
则服务端认为客户端故障,主动关闭TCP连接。


 

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

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

相关文章

Three.js材质纹理扩散过渡

Three.js材质纹理扩散过渡 import * as THREE from "three"; import { ThreeHelper } from "/src/ThreeHelper"; import { LoadGLTF, MethodBaseSceneSet } from "/src/ThreeHelper/decorators"; import { MainScreen } from "/src/compone…

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10

赫布定律 | 机器学习 / 反向传播 / 经验 / 习惯

注:本文为 “赫布定律” 相关文章合辑。 未整理。 赫布定律 Hebb‘s law 馥墨轩 2021 年 03 月 13 日 00:03 1 赫布集合的基本定义 唐纳德・赫布(Donald Hebb)在 1949 年出版了《行为的组织》(The Organization of Behavior&a…

uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能

前言 这次的标题有点长,主要是想要表述的功能点有点多; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分,可以单击预览大图,同时在预览界面可以双指放大缩小图片并且可以移动查看图片,双击放大&#xff0…

杭州乘云联合信通院发布《云计算智能化可观测性能力成熟度模型》

原文地址:杭州乘云联合中国信通院等单位正式发布《云计算智能化可观测性能力成熟度模型》标准 2024年12月3日,由全球数字经济大会组委会主办、中国信通院承办的 2024全球数字经济大会 云AI计算创新发展大会(2024 Cloud AI Compute Ignite&…

第6章图6.21-6.27-《分析模式》原图和UML图对比

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集

如何在谷歌浏览器中设置广告屏蔽

在数字时代,网络广告无处不在,虽然它们为网站提供了收入来源,但有时也会干扰我们的浏览体验。如果你正在寻找一种方法来减少这些干扰,那么在谷歌浏览器中设置广告屏蔽是一个不错的选择。本文将指导你完成这一过程,并简…

认识网络互联设备(二)

交换机 功能: (1)通过支持并行通信,提高交换机的信息吞吐量; (2)将传统的一个大局域网上的用户分若干工作组,每个端口连接一台设备或者连接一个工作组,有效的解决了拥塞情…

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果(网页显示&#…

AMBA-CHI协议详解(十二)

AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transac…

【MATLAB第109期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数

【MATLAB第108期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数 参考第64期文章【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用(含无目标函数,考虑代理模型) 创新点: 1、采…

《外国服务区加油站模型:功能与美观的完美结合 caotu66.com》

这个外国服务区加油站模型在设计上独具特色,兼具实用性和美观性。 从整体布局来看,加油站位于服务区的显眼位置。加油站的顶棚采用了现代风格的设计,顶棚的颜色主要是黄色和蓝色,色彩鲜明且具有辨识度。顶棚下方有多个加油柱&…

mybatis-plus超详细讲解

mybatis-plus (简化代码神器) 地址:https://mp.baomidou.com/ 目录 mybatis-plus 简介 特性 支持数据库 参与贡献 快速指南 1、创建数据库 mybatis_plus 2、导入相关的依赖 3、创建对应的文件夹 4、编写配置文件 5、编写代码 …

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中,集合类(Collections)是构建高效程序的核心组件之一,而 List 接口作为集合框架中的重要一员,是一个有序、可重复的元素集合。与 Set 接口不同,List 保证了元素的顺序性,并允许存…

泊松编辑 possion editing图像合成笔记

开源地址: GitHub - kono-dada/Reproduction-of-possion-image-editing 掩码必须是矩形框

【Flink-scala】DataStream编程模型之状态编程

DataStream编程模型之状态编程 参考: 1.【Flink-Scala】DataStream编程模型之数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之窗口计算-触发器-驱逐器 4.【Flink-scal…

Linux实操篇-远程登录/Vim/开机重启

目录 传送门前言一、远程登录1、概念2、ifconfig3、实战3.1、SSH(Secure Shell)3.2、VNC(Virtual Network Computing)3.3、RDP(Remote Desktop Protocol)3.4、Telnet(不推荐)3.5、FT…

【计算机网络】期末考试预习复习|上

作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为: A: (–1 –1 –1 1 1 –1 1 1);B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1);D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列:(–1 1 –…

CTFHub-ssrf

技能树--Web--SSRF 内网访问 开启题目 尝试访问位于127.0.0.1的flag.php吧 进入环境 根据提示输入即可 127.0.0.1/flag.php 伪协议读取文件 开启题目 尝试去读取一下Web目录下的flag.php吧 进入环境,根据提示输入 file:///var/www/html/flag.php 鼠标右键查看…

解决PyTorch模型推理时显存占用问题的策略与优化

在将深度学习模型部署到生产环境时,显存占用逐渐增大是一个常见问题。这不仅可能导致性能下降,还可能引发内存溢出错误,从而影响服务的稳定性和可用性。本文旨在探讨这一问题的成因,并提供一系列解决方案和优化策略,以…