【计算机网络】描述TCP建立连接与断开的过程
一、TCP连接的建立与断开
1、建立连接——三次握手
1、A的TCP向B发出连接请求报文段
其首部中的同步位SYN = 1,并选择序号seq = x,表明传送数据时的第一个数据字节的序号是 x
2、B的TCP收到连接请求报文段后,如同意,则发回确认。
B 在确认报文段中应使SYN = 1,使ACK = 1, 其确认号ack = x + 1,自己选择的序号seq = y
3、A收到此报文段后向B给出确认,其ACK = 1,确认号ack = y + 1。
A 的 TCP 通知上层应用进程,连接已经建立。

2、断开连接——四次挥手
数据传输结束后,通信的双方都可释放连接。现在A 的应用进程先向其TCP 发出连接释放报文段,并停止再发送数据,主动关闭TCP连接
1、A 连接释放报文段首部的FIN = 1,其序号seq = u,等待B的确认。
2、B发出确认ACK = 1,确认号 ack = u + 1,而这个报文段自己的序号 seq = v。TCP 服务器进程通知高层应用进程。
从A到B这个方向的连接就释放了,TCP 连接处于半关闭状态。B若发送数据,A仍要接收。
3、若B已经没有要向A发送的数据,其应用进程就通知TCP 释放连接 ACK = 1。
此时报文首部FIN = 1,报文序列号seq = w,确认号 ack = u + 1。
4、A 收到连接释放报文段后,必须发出确认。确认报文段中 ACK = 1,确认号 ack = w + 1, 自己的序号 seq = u + 1。

二、TCP建立连接过程为何是3次握手,不是2次,4次?
1、选择3次原因
①防止重复历史连接的初始化,从而浪费网络资源
网络拥塞、延迟情况下,旧的连接请求(SYN报文)可能会比新的连接请求更晚到达服务器。
3次握手过程中,服务器发送SYN-ACK后,需要等待客户端ACK确认连接有效性
避免了旧连接的初始化
②同步双方初始序列号
TCP序列号,可以确保数据的顺序与完整性;3次握手过程中,双方可以确认初始序列号,从而确保数据传输的正确性
③确保双方具有发送、接受数据能力
2、非2次原因
①无法避免历史连接的初始化、浪费网络资源
如果采用两次握手,服务器可能会错误地响应旧的连接请求,导致资源浪费和混乱
·或者由于旧连接请求滞留网络,服务器端开辟网络资源持续等待,到达时已经失效,浪费资源;
·或者服务器依旧响应建立连接后,开辟网络资源等待旧连接发送数据;但由于旧连接请求已经超时失效,客户端已发出新连接请求;服务端开辟的网络资源浪费
②只能保证连接单向畅通
客户端发出的连接,服务器确认收到后;
服务器返回的应答,客户端无法确认是否成功收到。
此部分解释可参考博文中描述,写得很好:
《对线面试官》| 高频计算机网络面试题_计算机网络 高频面试题-CSDN博客
3、非4次原因
①增加通信开销与延迟
连接建立过程中传输的数据量增加,且由于操作增加,建立连接时间增加。
②降低连接建立效率
三、TCP断开连接过程为何是4次挥手,不是3次,5次
1、选择4次原因
①全双工特性
数据可以在两个方向同时传输,故关闭连接时,每个方向上都需要发送一次FIN和对应的ACK,共4次
②确保数据完整传输
每次挥手均有对上次动作确认ACK,确保数据的可靠传输直到连接断开
③进入客户端TIME_WAIT状态
·保证客户端A 发送的最后一个 ACK 报文段能够到达服务器B。
·处理延迟的数据包,防止 “已失效的连接请求报文段”出现在本连接中。
客户端A 在发送完最后一个ACK 报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产
生的所有报文段,都从网络中消失。
这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
2、非3次原因
①无法确保双方均准备关闭连接
②无法处理延迟到达的数据包
客户端发送FIN后直接关闭连接,服务器仍然需要继续发送的数据无法传输
3、非5次原因
参考建立连接过程不选择4次握手原因:增加不必要开销与延迟
欢迎补充,互相学习🤝
相关文章:
【计算机网络】描述TCP建立连接与断开的过程
一、TCP连接的建立与断开 1、建立连接——三次握手 1、A的TCP向B发出连接请求报文段 其首部中的同步位SYN 1,并选择序号seq x,表明传送数据时的第一个数据字节的序号是 x 2、B的TCP收到连接请求报文段后,如同意,则发回确认。 B …...
CSS学习14[重点]
定位 前言一、定位二、定位模式1. 静态定位 static2. 相对定位 relative3. 绝对定位 absolute4. 子绝父相5. 绝对定位的盒子水平居中 6. 固定定位(fixed)7. 叠放次序(z)三、四种定位总结四、定位模式转换 前言 为什么学习定位&am…...
力扣 | 递归 | 区间上的动态规划 | 486. 预测赢家
文章目录 一、递归二、区间动态规划 LeetCode:486. 预测赢家 一、递归 注意到本题数据范围为 1 < n < 20 1<n<20 1<n<20,因此可以使用递归枚举选择方式,时间复杂度为 2 20 1024 ∗ 1024 1048576 1.05 1 0 6 2^{20…...
黑白格
题目描述 小杨有一个 n 行 m 列的网格图,其中每个格子要么是白色,要么是黑色。 小杨想知道至少包含 k 个黑色格子的最小子矩形包含了多少个格子。 输入格式 第一行包含三个正整数 n,m,k,含义如题面所示。 之后 n 行,每行⼀个…...
数据链路层(MAC地址)
文章目录 数据链路层(MAC地址)1、以太网2、以太网帧格式3、MAC地址4、对比理解 MAC 地址和 IP 地址5、最大传输单元(MTU)6、MTU 对 IP 协议的影响7、MTU 对 UDP 协议的影响8、MTU 对 TCP 协议的影响9、查看硬件地址和 MTU10、ARP …...
【ruby java】登陆功能/邮件发送模版240903
Rails 风格登录系统添加全面而详细的注释,解释每个部分的功能和用途。 详细注释,解释了每个文件和代码块的功能。以下是一些关键点的总结: 1. 控制器(Controllers): - ApplicationController: …...
告别格式不兼容烦恼!ape转换mp3,分享3个简单方法
各位读者们,你们是否有过这种体验:满怀期待地在网上下载一首好听的歌曲,结果怎么点击手机都播放不了,定睛一看,弹窗显示“无法播放该音频文件”。这是为什么呢?原来那首歌的音频格式是ape,不被手…...
Java核心知识体系-并发与多线程:线程基础
1 先导 Java线程基础主要包含如下知识点,相信我们再面试的过程中,经常会遇到类似的提问。 1、线程有哪几种状态? 线程之间如何转变? 2、线程有哪几种实现方式? 各优缺点? 3、线程的基本操作(线程管理机制ÿ…...
KRaft模式下的Kafka启动指南:摆脱Zookeeper依赖
一、背景介绍 多年来,人们一直在同时使用Apache ZooKeeper和Apache Kafka。但是自Apache Kafka 3.3发布以来,它就可以在没有ZooKeeper的情况下运行。同时它包含了新的命令kafka-metadata-quorum和kafka-metadata-shell?该如何安装新版kafka,…...
【数据库】MySQL-基础篇-函数
专栏文章索引:数据库 有问题可私聊:QQ:3375119339 目录 一、简介 二、字符串函数 三、数值函数 四、日期函数 五、流程函数 一、简介 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在 M…...
dp练习【4】
最长数对链 646. 最长数对链 给你一个由 n 个数对组成的数对数组 pairs ,其中 pairs[i] [lefti, righti] 且 lefti < righti 。 现在,我们定义一种 跟随 关系,当且仅当 b < c 时,数对 p2 [c, d] 才可以跟在 p1 [a, b…...
php 实现推荐算法
在PHP中实现推荐算法的应用场景通常包括电商、社交媒体、内容平台等。推荐算法可以帮助用户找到与其兴趣相关的内容,提高用户体验和平台黏性。以下是几种常见的推荐算法及其PHP实现方式: 1. 基于协同过滤的推荐算法 协同过滤(Collaborative…...
相机光学(三十六)——光圈
0.参考链接 (1)Hall光圈和Piris光圈的区别 (2)自动光圈及P-IRIS原理 1.光圈分类 Hall光圈和Piris光圈是两种不同的光圈技术。它们之间的区别如下: Hall光圈:Hall光圈是一种传统的光电子元件,通…...
数据结构——树和二叉树
目录 一、树的概念 二、树结点之间的关系 三、二叉树 1、满二叉树 2、完全二叉树 四、二叉树的存储 1、顺序存储 2、链式存储 一、树的概念 如果数据和数据之间满足一对多的关系,将其逻辑结构称之为树 如下图:树的根与树的分支存在一对多的关系 将上…...
142. Go操作Kafka(confluent-kafka-go库)
文章目录 Apache kafka简介开始使用Apache Kafka构建生产者构建消费者 总结 之前已经有两篇文章介绍过 Go如何操作 kafka 28.windows安装kafka,Go操作kafka示例(sarama库) 51.Go操作kafka示例(kafka-go库) Apache ka…...
spring boot(学习笔记第十九课)
spring boot(学习笔记第十九课) Spring boot的batch框架,以及Swagger3(OpenAPI)整合 学习内容: Spring boot的batch框架Spring boot的Swagger3(OpenAPI)整合 1. Spring boot batch框架 Spring Batch是什么 Spring Batch 是一个…...
docker安装 redis 并且加密开启SSL/TLS通道
拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest redis:latest要在 Docker 容器中启动 Redis 并开启 SSL/TLS 加密,需按照以下步骤修改启动命令和配置…...
什么是ARM架构?什么是X86架构?两者的区别是什么?
一、什么是ARM架构 (一)起源于发展 ARM 架构由英国剑桥的 Acorn 计算机公司开发。因市场无合适产品,Acorn 自行设计出第一款微处理器,命名为 ARM。此后 ARM 架构不断发展,1990 年为与苹果合作成立 ARM 公司࿰…...
【vscode】vscode paste image插件设置
本文首发于 ❄️慕雪的寒舍 vscode编辑md文件的时候,如果想插入图片,自带的粘贴只会粘贴到当前目录下,也没有文件重命名,很不友好。 在扩展商店里面有mushan的Paste Image插件,相比自带的,更加友好一点。但…...
自定义string类
#include <iostream> #include <string> int main() { std::string str "Hello, World!"; // 使用 c_str() 将 std::string 转换为 C 风格字符串,并传递给 printf printf("The string is: %s\n", str.c_str()); // 尝试修改…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
