TCP为什么需要三次握手和四次挥手,有哪些需要注意的地方?
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保数据能够准确无误地从一端发送到另一端,TCP设计了一系列机制来保证通信的可靠性,其中包括连接建立和断开的过程。
三次握手(Three-way Handshake)
三次握手是TCP用于建立连接的过程。这个过程可以确保双方在开始数据传输之前已经准备好,并且可以相互发送和接收数据。三次握手的具体步骤如下:
1. 第一次握手:
客户端向服务器发送一个SYN(同步序列编号)包,请求建立连接。这个包中包含了初始序列号(ISN),用以标识该连接的数据流中的第一个字节。
2. 第二次握手:
服务器收到客户端的SYN包后,会回复一个SYN-ACK(同步确认)包。这个包包含了服务器自己的初始序列号,同时也确认了客户端的SYN包中的序列号加一,表示已经收到了客户端的请求。
3. 第三次握手:
客户端收到服务器的SYN-ACK包后,再发送一个ACK(确认)包给服务器,确认号为收到的SYN-ACK包中的序列号加一。当服务器收到这个ACK包后,连接就正式建立了,双方可以开始进行数据交换。
通过三次握手,可以有效地避免错误地建立连接的情况发生,例如由于网络延迟导致的旧的连接请求包突然到达。
四次挥手(Four-way Wave-off)
四次挥手是TCP用于断开连接的过程。与建立连接相比,断开连接需要更谨慎处理,因为每个方向的数据流都需要独立地关闭,以确保所有数据都已正确传输。四次挥手的具体步骤如下:
1. 第一次挥手:
主动关闭方(假设为客户端)发送一个FIN(结束)包,表示客户端已经没有数据要发送了,希望关闭这个方向的连接。
2. 第二次挥手:
被动关闭方(即服务器)收到FIN后,发送一个ACK包作为响应,确认号为收到的FIN包中的序列号加一。
3. 第三次挥手:
如果服务器还有数据需要发送,则继续发送直到完成。完成后,服务器也会发送一个FIN包给客户端,表示自己也没有数据要发送了。
4. 第四次挥手:
客户端收到服务器的FIN后,发送一个ACK包作为确认,确认号为收到的FIN包中的序列号加一。此时,客户端进入TIME_WAIT状态,等待足够的时间以确保服务器接收到最后一个ACK,然后才完全关闭连接。
四次挥手确保了数据传输的完整性,即使在一方已经完成数据发送的情况下,另一方仍然有机会发送剩余的数据。这有助于防止数据丢失或损坏。
常见问题与注意事项
TCP协议虽然设计得非常成熟,但在实际应用中仍可能遇到一些常见问题。了解这些问题有助于更好地使用TCP,优化网络性能和确保数据传输的可靠性。以下是一些常见的TCP问题及注意事项:
1. 拥塞控制
- 慢启动:TCP连接初期,发送方会逐渐增加发送速率,以探测网络的实际带宽。如果过快增加发送速率,可能会引起网络拥塞。
- 拥塞避免:当网络出现拥塞迹象时,发送方会减少发送速率,避免进一步加重拥塞。
- 快速重传:当接收方连续收到三个重复的ACK时,发送方会认为数据包丢失,立即重传丢失的数据包,而不是等到超时重传计时器到期。
- 快速恢复:在快速重传之后,如果接收到新的ACK,表明拥塞情况有所缓解,可以逐步恢复发送速率。
2. 丢包和重传
- TCP通过序列号和ACK机制来检测丢包并进行重传。但如果重传策略不当,可能会导致不必要的带宽浪费或延迟增加。
- 选择性确认(SACK):允许接收方通知发送方哪些数据段已经成功接收,哪些数据段丢失,从而更高效地进行重传。
3. 延时确认
- 接收方可以在一定时间内累积多个ACK,一次性发送出去,以减少网络流量。但这可能会增加发送方的等待时间,影响实时性。
4. 半关闭连接
- 在TCP中,一方可以先关闭其发送方向的连接(即发送FIN),但仍可以接收来自对方的数据。这种情况下,连接处于半关闭状态。需要注意的是,应用程序必须正确处理这种情况,避免数据丢失。
5. TIME_WAIT状态
- 当TCP连接正常关闭时,主动关闭方会进入TIME_WAIT状态,持续一段时间(通常是2MSL,即两倍的最大段生命周期)。这是为了确保最后一个ACK能够被对方接收到,避免旧的数据包在新的连接中出现。但过多的连接处于TIME_WAIT状态会占用系统资源,可能导致性能下降。
6. TCP选项
- TCP头部包含一些可选字段,如MSS(最大报文段长度)、窗口缩放、时间戳等。这些选项可以提高TCP的性能和可靠性,但也需要正确配置和使用。
7. 防火墙和NAT
- 防火墙和NAT设备可能会对TCP连接产生影响,例如限制连接数、修改数据包内容等。在设计网络架构时,需要考虑这些因素,确保TCP连接的正常建立和维护。
8. 性能优化
- 缓冲区大小:合理设置TCP接收和发送缓冲区的大小,可以提高数据传输效率。
- 窗口管理:动态调整TCP窗口大小,以适应网络条件的变化。
- 路径MTU发现:自动发现路径上的最大传输单元,避免数据包分片,提高传输效率。
9. 安全性
- 中间人攻击:TCP连接可能受到中间人攻击,可以通过TLS/SSL等加密协议来保护数据的安全性。
- SYN洪水攻击:攻击者可以通过大量发送SYN包来耗尽服务器资源,导致拒绝服务。可以通过 SYN cookies 等技术来防御这种攻击。
了解和注意这些问题,可以帮助你在设计和使用TCP应用时,更好地应对各种挑战,确保系统的稳定性和性能。
相关文章:
TCP为什么需要三次握手和四次挥手,有哪些需要注意的地方?
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保数据能够准确无误地从一端发送到另一端,TCP设计了一系列机制来保证通信的可靠性,其中包括连接建立和断开的过程。 三次握手(Three-…...

机器学习(基础2)
特征工程 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 特征工程API 实例化…...
Cpolar 内网穿透使用
Cpolar登录地址:cpolar - secure introspectable tunnels to localhost 使用固定公网TCP连接ssh ssh -p端口号 用户名公网地址...
ThreadLocal 提供线程局部变量
ThreadLocal作用 相当于建立一个独立的空间,可以把使用频率高的任何类型的数据放到里面,方便调用用来存取数据:set()/get()使用ThreadLocal存储的数据,线程安全 ThreadLocal工具类 /*** ThreadLocal 工具类*/ SuppressWarnings(…...
MongoDB聚合管道数组操作
数组表达式运算符判断数组中是否包含元素( i n ) 并获取元素索引 ( in)并获取元素索引( in)并获取元素索引(indexOfArray) 一、初始化成员数据 db.persons.insertMany([{ "_id" : "1001", "name" : "张三", "fruits" : [ …...

大数据如何助力干部选拔的公正性
随着社会的发展和进步,干部选拔成为组织管理中至关重要的一环。传统的选拔方式可能存在主观性、不公平性以及效率低下等问题。大数据技术的应用,为干部选拔提供了更加全面、精准、客观的信息支持,显著提升选拔工作的科学性和公正性。以下是大…...
Python_爬虫2_爬虫引发的问题
目录 爬虫引发的问题 网络爬虫的尺寸 网络爬虫引发的问题 网络爬虫的限制 Robots协议 Robots协议的遵守方式 Robots的使用 对Robots协议的理解 爬虫引发的问题 网络爬虫的尺寸 爬取网页,玩转网页: 小规模,数据量小,爬取…...

shell编程之编程基础
目录 为什么学习和使用Shell编程Shell是什么shell起源查看当前系统支持的shell查看当前系统默认shellShell 概念 Shell 程序设计语言Shell 也是一种脚本语言用途 如何学好shell熟练掌握shell编程基础知识建议 Shell脚本的基本元素基本元素构成:Shell脚本中的注释和风…...

24.11.15 Vue3
let newJson new Proxy(myJson,{get(target,prop){console.log(在读取${prop}属性);return target[prop];},set(target,prop,val){console.log(在设置${prop}属性值为${val});if(prop"name"){document.getElementById("myTitle").innerHTML val;}if(prop…...

图形几何之美系列:法向量计算之轮廓有向面积辅助法
“ 垂直于平面的直线所表示的向量为该平面的法向量,可以通过法向量识别平面正反面。法向量是轮廓或面的重要特征,求轮廓法向是一种基础的几何工具算法,在图形几何、图像处理等领域具有广泛的应用。” 图形几何之美系列:三维实体结…...

CPU的性能指标总结(学习笔记)
CPU 性能指标 我们先来回顾下,描述 CPU 的性能指标都有哪些。 首先,最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。 用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用…...

Cadence安装
记录一下安装过程,方便以后安装使用Cadence。 去吴川斌的博客下载安装包,吴川斌博客: https://www.mr-wu.cn/cadence-orcad-allegro-resource-downloads/ 下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装…...

【网络】子网掩码
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是子网掩码,并且能熟练掌握子网掩码的相关计算。 > 毒鸡汤:有些事情,总是不明白,所以我不会…...

Android Osmdroid + 天地图 (二)
Osmdroid 天地图 (二) 前言正文一、定位监听二、改变地图中心三、添加Marker四、地图点击五、其他配置① 缩放控件② Marker更换图标③ 添加比例尺④ 添加指南针⑤ 添加经纬度网格线⑥ 启用旋转手势⑦ 添加小地图 六、源码 前言 上一篇中我们显示了地图…...

使用大语言模型创建 Graph 数据
Neo4j 是开源的 Graph 数据库,Graph 数据通过三元组进行表示,两个顶点一条边,从语意上可以理解为:主语、谓语和宾语。GraphDB 能够通过图来表达复杂的结构,非常适合存储知识型数据,本文将通过大语言实现图数…...

Java poi 模板导出Word 带图片
Java poi 模板导出Word 带图片 重点!!! 官方文档:https://deepoove.com/poi-tl/#_maven 最终效果 模板 其实内容都在官方文档里写的非常明白了 我这里只是抛砖引玉。 Maven依赖 <poi.version>4.1.2</poi.version>…...

SpringCloud-使用FFmpeg对视频压缩处理
在现代的视频处理系统中,压缩视频以减小存储空间、加快传输速度是一项非常重要的任务。FFmpeg作为一个强大的开源工具,广泛应用于音视频的处理,包括视频的压缩和格式转换等。本文将通过Java代码示例,向您展示如何使用FFmpeg进行视…...

shell bash---类似数组类型
0 Preface/Foreword C/C,Python,Java等编程语言,都含有数组类型,那么shell脚本是不是也有类似的语法呢? 1 类似数组类型 1.1 ()类似数组类型 #! /bin/bashecho "Welcome to bash world!" anim…...
IIoT(Industrial Internet of Things,工业物联网)
IIoT(Industrial Internet of Things,工业物联网) 是指物联网技术在工业领域的应用。它将工业设备、传感器、控制系统、数据采集设备等通过互联网或局域网连接起来,实现设备的互联互通和智能化管理。IIoT的目标是提高工业生产效率…...
【C++】引用(reference)
引用是对一个变量或者对象取的别名 定义:真名的数据类型& 别名 真名; 既然是对一个变量或者对象取别名,那就得先有变量或对象,不能凭空取一个别名。也就是定义引用必须初始化。 对引用的操作和对引用对应的变量的操作是完全等价的引用…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

Ray框架:分布式AI训练与调参实践
Ray框架:分布式AI训练与调参实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Ray框架:分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...