TCP通信三次握手四次挥手理解

news2024/11/15 7:15:45

TCP(传输控制协议)是一种面向连接、可靠的数据传输协议,旨在解决在不可靠的互联网上如何确保端到端的可靠数据传输问题。

TCP的特点:

  • 面向连接:在数据传输之前,客户端和服务器必须建立连接。这种连接是持久的,直到双方通信结束才会释放。

  • 可靠的:TCP通过序列号、确认应答和重传机制来保证数据传输的可靠性。每个数据包都有序号,接收方收到数据后会发送确认应答,发送方如果未收到确认应答或者超时,将会重传数据包,直到对方确认接收。

TCP三次握手:

为了确保客户端和服务器端之间的连接能够正常建立,TCP使用三次握手过程:

  1. 第一次握手(SYN):客户端向服务器发送一个特殊的数据包,包含了SYN标志位和初始序列号,用于初始化TCP连接。

  2. 第二次握手(SYN-ACK):服务器收到客户端的SYN后,返回确认应答。该应答中包含了对客户端SYN的确认,同时也包含了服务器的SYN,以及服务器的初始序列号。

  3. 第三次握手(ACK):客户端收到服务器的确认应答后,再次向服务器发送确认。这次确认中,客户端确认了服务器的SYN,同时也确认了自己发送的SYN。

这三次握手过程确保了双方的发送和接收能力正常,可以安全地开始数据传输。

为什么要进行第三次握手?
主要原因:防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

当客户端向服务器发送的连接请求由于网络问题未能及时到达服务器,这种情况下,客户端会认为连接请求已经失效,并尝试重新发送请求以建立连接。一旦新的连接建立并数据传输完成后,即使之前滞留的请求报文在网络畅通后到达服务器,此时服务器应当忽略该报文,因为该请求已被认为失效。如果服务器错误地处理了这个滞留的请求报文,误以为客户端再次发送了新的连接请求,并进行了两次握手建立连接,此时客户端并不会发送确认,因为客户端已经不再处于请求连接的状态。由于缺乏客户端的确认,服务器会意识到客户端并没有真正请求建立连接,从而避免建立不必要的连接,避免浪费网络资源和引发不必要的通信错误。

TCP四次挥手:

当数据传输结束后,客户端和服务器需要安全地关闭连接,使用四次挥手过程:

  1. 第一次挥手(FIN):客户端发送一个FIN标志位的数据包,表示数据传输已完成,请求关闭连接。

  2. 第二次挥手(ACK):服务器收到客户端的FIN后,发送一个确认应答ACK,表示已收到关闭请求。

  3. 第三次挥手(FIN):服务器发送一个FIN标志位的数据包,告知客户端服务器也准备关闭连接。

  4. 第四次挥手(ACK):客户端收到服务器的FIN后,发送一个确认应答ACK,确认接收到关闭请求。此时,连接进入TIME-WAIT状态,等待可能存在的延迟数据包到达,最后关闭连接。

 为什么客户端在TIME-WAIT状态要等待2MSL?

客户端在TIME-WAIT状态等待一段时间(2MSL),客户端需要等待2MSL的主要原因是确保第一个ACK报文能够到达服务器。这是因为这个ACK报文有可能在传输过程中丢失。2MSL是指报文在网络中存在的最长时间,超过这个时间后报文会被丢弃。这个等待时间的目的是防止新的连接中出现旧连接的请求报文。

总结:

TCP的这些特性和过程保证了在不可靠的网络环境中,数据能够可靠地传输和关闭连接,是互联网上广泛使用的传输协议之一。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED

Unrecognized option: --add-opensjava.base/java.langALL-UNNAMED Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Disconnected from server 报错原因:这里我是启动一个SpringBoot项目的时候报这…

Node.js(8)——Express的基本使用

监听GET请求 通过app.get()方法,可以监听客户端GET请求,具体语法: app.get(请求URL,function(req,res){处理函数}) 监听POST请求 语法: app.post(请求URL,function(req,res){处理函数}) 把内容响应给客户端 通过res.send()方法…

基于R语言绘制GGE双标图2

参考资料: 严威凯等: 双标图分析在农作物品种多点试验中的应用【作物学报】 https://cran.r-project.org/web/packages/GGEBiplots/GGEBiplots.pdf 1、如何判断双标图是否充分体现数据中的规律 在对双标图的解释中,有一个隐含的假设,就是所…

【算法速刷(4/100)】LeetCode —— 155.最小栈

每天写几题,健康每一天 最小栈问题,有许多种办法进行解答,首先需要锁定的条件是要求在实现栈功能之外,要在常数时间内检索最小元素。 一般这种O(1)查找最值都可以用一下方法 哈希表:使用哈希表存储对应栈大小时的栈…

PXE自动批量装机应用

目录 一 生成kickstart自动安装脚本 1.1 工具介绍 1.2 实验过程 1.2.1 环境要求 1.2.2 实验步骤 二 配置dhcp服务 2.1 安装dhcp 2.2 配置dhcp 三 配置syslinux,tftp 3.1 安装suslinux和tftp 3.2 配置软件 3.3 实验效果实现 一 生成kickstart自动安装脚…

光伏逆变器、MPPT、PCS储能变流器、BMU、BCU、BDU和液冷机组

一、光伏逆变器 光伏逆变器(PV inverter或solar inverter)可以将光伏(PV)太阳能板产生的可变直流电压转换为市电频率交流电(AC)的逆变器,可以反馈回商用输电系统,或是供离网的电网使…

基于风险的完整性和检查建模(RBIIM)MATLAB仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 Prior Density (先验密度) 4.2 Posterior Perfect Inspection (后验完美检验) 4.3 Posterior Imperfect Inspection (后验不完美检验) 4.4Cumulative Posterior Imperfect Inspection…

PyTorch深度学习实战(3)——小试牛刀:CIFAR-10分类

下面尝试从零搭建一个PyTorch模型来完成CIFAR-10数据集上的图像分类任务,步骤如下。 (1)使用torchvision加载并预处理CIFAR-10数据集。 (2)定义网络。 (3)定义损失函数和优化器。 (4…

P32调试技巧1、2

实用调试技巧 什么是bug?调试是什么?有多么重要?debug和release的介绍windows环境调试介绍一些调试的实例如何写出好的(易于调试)代码编程常见的错误 什么是bug? 第一次被发现的导致计算机错误的飞蛾,也是…

Modbus -- TCP协议

MODBUS TCP协议是一种基于TCP/IP协议的Modbus变种,它允许Modbus协议在以太网网络上运行,使得设备之间可以通过IP网络交换数据。 一:协议概述 modbus_TCP协议:走的是网口,所以需要创建TCPclient对象进行通信,和modubus-RTU协议最大的区别是&a…

proxfier的使用和设置

1,安装proxifier工具 2,安装之后配置代理设置 3,首先点击彩色卷部分 4,修改配置文件,并且配置代理协议为https ip为127.0.0.1 端口为8888 (注意下面图片 default一定为直连) 5,设置代理服务器&#xff…

怎样配置虚拟机IP

目录(三步走) 配置本机IP 配置虚拟机外部IP 配置虚拟机内部IP 参考链接: 配置本机IP 打开“网络和共享中心”——>更改“适配器设置” 找到“VMnet8”,然后右键“属性”,弹出下列窗口 输入本机IP(你目前电脑的IP) win系统可以用的命令:IPconfig 一共有AB两位,…

为什么我3d模型选择面选不到?---模大狮模型网

在展览3D模型设计行业中,设计师常常面临诸多技术挑战,其中之一是在模型编辑过程中遇到选择面的困难。这不仅影响了设计工作效率,还可能影响最终作品的质量和展示效果。本文将探讨在3D模型设计中为何会遇到“为什么我3D模型选择面选不到?”这…

【51单片机仿真】基于51单片机设计的钟表定时闹钟系统仿真源码设计文档演示视频——完整资料下载

演示视频 设计内容 (1)使用 DS1302 结合字符型 LCD12864 显示器设计一个简易的定时闹钟 LCD 时钟。程序执行后 LCD 显示“00:00:00” (2)K1—设置现在的时间,年闪烁,再按 K1 键月闪…

淘宝小程序踩坑记录

最近搞了一套淘宝小程序配合淘宝店铺直接跳转,类似于扭蛋机那种机制,真是一路坎坷,一步一个坑,这里记录一下(前端);淘宝小程序文当中心 编译相关 用uni-app没有淘宝小程序独有的编译环境&…

EdgeWorkers 最佳实践丨助力流媒体创新

近日亚太区 Akamai EdgeWorkers 首届编程挑战赛圆满落幕。参赛团队充分利用 Akamai 的智能边缘平台,探索无服务器计算的应用潜力。爱奇艺等获胜团队凭借 Akamai EdgeWorkers 和 EdgeKV 产品开发功能,将 DNS 解析时间降低 40% 。 一、云上竞逐&#xff0…

21LTR-Scene打靶渗透【附POC】(权限提升)

靶机下载地址:21LTR: Scene 1 ~ VulnHub21LTR: Scene 1, made by JayMaster2000. Download & walkthrough links are available.https://www.vulnhub.com/entry/21ltr-scene-1,3/ 1. 主机发现端口扫描目录扫描【192.168.2.120】 1.1. 主机发现 nmap -sn 192.…

牛客周赛 Round 54 (A~E)

#牛客周赛 Round 54 (A~E) 前言: 以后会定时更新很多比赛的题解 希望借此让自己坚持赛后补题 要不然写完就结束 自己水平没有一点提高 本人很菜所以不会更新 太难的题 加油!!!1. ​清楚姐姐的糖葫芦…

落笔成画!Krita+ComfyUI解锁AI实时绘图

原文链接:落笔成画!KritaComfyUI解锁AI实时绘图 (chinaz.com) 安装前提:电脑本地已经安装过ComfyUI且能正常运行 首先我们到Krita的官网下载Krita,我们直接下载最新的安装就可以了,安装过程非常简单,选择…

SQL注入之sqli-labs靶场第一关

手工注入less-1 1.找注入点 通过 ?id1 and 12--没有发现变化,尝试闭合发现注入点 字符型注入,单引号闭合 2.猜解字段数量 发现字段数量为3 3.通过union联合查询判断回显点 发现回显点2,3, 4,进行信息收集 数据库…