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)
引用是对一个变量或者对象取的别名 定义:真名的数据类型& 别名 真名; 既然是对一个变量或者对象取别名,那就得先有变量或对象,不能凭空取一个别名。也就是定义引用必须初始化。 对引用的操作和对引用对应的变量的操作是完全等价的引用…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
