TCP之三次握手四次挥手

         在前面的文章中我们了解到http是基于TCP/IP协议的,这篇文章我们来了解一下TCP/IP。

一、TCP与UDP

1、UDP

       基于非连接。类似于写信,不能保证对方能不能接收到,接收到的内容是否完整,顺序是否正确。

    优缺点:性能损耗小,占用资源少,稳定弱,速度块。

2、TCP

      基于连接,类似与通话,能够确认对方能够准确的接收到发送的信息。

    优缺点:数据传输可靠,支持全双工,建立时间和消耗资源过大,有延迟,效率相对较低。

二、TCP建立连接和断开连接

1、三次握手建立连接

(1)作用

          三次握手是TCP用来建立连接的一种机制,确保双方可以正常通信。每一步都需要对方的确认才能进行下一步,从而确保双方都同意建立连接,并且状态得到正确同步。这样可以减少因网络延迟、丢包等问题导致的连接建立失败或错误。

(2)建立过程

  • 第一次握手:客户端发送SYN包,客户端向服务器发送一个SYN(同步)包,其中包含一个初始序列号(ISN)作为起始值。此时客户端处于SYN_SENT(同步已发送)状态。
  • 第二次握手:服务器回复SYN-ACK包,服务器收到客户端的SYN包后,会生成自己的初始序列号,并对客户端的SYN进行确认。服务器构造一个SYN-ACK(同步-确认)包,将自己的初始序列号作为起始值,同时也将确认号设置为客户端初始序列号加一。然后服务器发送这个SYN-ACK包给客户端。此时服务器处于SYN_RCVD(同步已接收)状态。
  • 第三次握手:客户端发送ACK包,客户端收到服务器的SYN-ACK包后,确认服务器的初始序列号和确认号,并构造一个ACK(确认)包,将确认号设置为服务器初始序列号加一。客户端发送这个ACK包给服务器。此时客户端处于ESTABLISHED(已建立连接)状态,服务器收到ACK包后也转入ESTABLISHED状态。
  • 三次握手完成,客户端和服务器正式建立了TCP连接,可以进行数据的传输。

(3)注意事项

         ①握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

         ②如果已经建立了连接,但是客户端突然出现故障了怎么办?

         TCP协议引入了超时机制。TCP为每个连接都设置了一个定时器,用于在一定时间内检测连接是否还处于活动状态。如果在规定时间内没有收到客户端的数据,则服务器认为客户端已经断开连接,并会关闭连接。

(4)为什么不能用两次握手?

  • 确保双方都愿意建立连接:在两次握手的情况下,客户端只发送一次连接请求,但服务器无法确认客户端是否真正希望建立连接,因为可能只是一个错误的或者重复的请求。通过三次握手,服务器可以回复确认信号来确认客户端真正的通信意愿。
  • 防止已失效的连接请求影响:如果使用两次握手,可能会遇到客户端已经发送了一个连接请求,在网络中滞留了一段时间后终于到达服务器,导致服务器误认为客户端希望建立连接。而通过三次握手,服务器可以得到客户端最新的连接请求,并且可以排除掉之前的已失效的连接请求。
  • 同步双方的初始序列号:在TCP连接中,每个连接都有一个初始序列号(ISN)用于标识数据流的起始位置。通过三次握手,双方可以交换彼此的初始序列号,从而实现双方序列号的同步,确保后续传输的数据能够正确地按序组装和重组。

2、四次挥手断开连接

(1)作用

       是用于关闭TCP连接的过程。它是在双方确认不再需要通信时,进行连接释放和资源回收的步骤。在这个过程中,双方都需要发送FIN和ACK两个标志位的报文段,以确保双方都知道对方已经确认了关闭连接的请求。最后,当双方都收到了对方发送的ACK报文段后,连接就顺利关闭,并且可以回收连接所占用的资源。

(2)建立过程

  • 第一次挥手:客户端发送连接释放请求(FIN),当客户端确定不再发送数据时,它会发送一个带有FIN标志位的报文段给服务器,表示请求关闭连接。此时,客户端进入FIN-WAIT-1(终止等待1)状态。
  • 第二次挥手:服务器回复确认客户端的请求(ACK),服务器收到客户端的连接释放请求后,会发送一个带有ACK标志位的报文段给客户端,确认收到了客户端的请求。服务端就进入了CLOSE-WAIT 关闭等待状态。
  • 第三次挥手:服务器发送连接释放请求(FIN),客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手:客户端回复确认服务器的请求(ACK),客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命)客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

(3)注意事项

       为什么客户端要等待2MSL?
        确保连接彻底关闭,并在此期间处理延迟报文段和防止端口冲突,从而保证网络通信的可靠性和稳定性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化爬虫效率:利用HTTP代理进行并发请求

网络爬虫作为一种自动化数据采集工具,广泛应用于数据挖掘、信息监测等领域。然而,随着互联网的发展和网站的增多,单个爬虫往往无法满足大规模数据采集的需求。为了提高爬虫的效率和性能,我们需要寻找优化方法。本文将介绍一种利用…

网络安全行业岗位缺口有多大?看看美国有多少岗位空缺

网络安全行业岗位缺口一直很大,在各类统计中其实并不能完全客观的反应这个缺口,不过都可以作为一个参考。同时,网络安全行业岗位的人员能力参差不齐,不仅仅在数量上有所欠缺,同时从质量上更加加剧了对人才的需求。我们…

深入探讨梯度下降:优化机器学习的关键步骤(一)

文章目录 🍀引言🍀什么是梯度下降?🍀损失函数🍀梯度(gradient)🍀梯度下降的工作原理🍀梯度下降的变种🍀随机梯度下降(SGD)🍀批量梯度下降&#xf…

UML基础

统一建模语言(UML是 Unified Modeling Language的缩写, 是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品 进行说明、可视化、和编制文档的一种标准语言。 共有9种图 UML中的图其实不止九种 (相同的图还可能会有不同的名称), 这里的九种图是…

SSM(Spring-Mybatis-SpringMVC)

文章目录 1. 介绍1.1 概念介绍 2 SSM整合框架3. SSM功能模块开发4 测试4.1 业务层接口测试4.2 表现层接口测试 5.优化 -表现层数据封装6.异常处理 1. 介绍 1.1 概念介绍 SSM项目是指基于SpringSpringMVCMyBatis框架搭建的Java Web项目。 Spring是负责管理和组织项目的IOC容器和…

selenium 动态爬取页面使用教程以及使用案例

Selenium 介绍 概述 Selenium是一款功能强大的自动化Web浏览器交互工具。它可以模拟真实用户在网页上的操作,例如点击、滚动、输入等等。Selenium可以爬取其他库难以爬取的网站,特别是那些需要登录或使用JavaScript的网站。Selenium可以自动地从Web页面…

[羊城杯 2020] easyphp

打开题目&#xff0c;源代码 <?php$files scandir(./); foreach($files as $file) {if(is_file($file)){if ($file ! "index.php") {unlink($file);}}}if(!isset($_GET[content]) || !isset($_GET[filename])) {highlight_file(__FILE__);die();}$content $_GE…

【广州华锐互动】AR技术在配电系统运维中的应用

随着科技的不断发展&#xff0c;AR(增强现实)技术逐渐走进了我们的生活。在电力行业&#xff0c;AR技术的应用也为巡检工作带来了许多新突破&#xff0c;提高了巡检效率和安全性。本文将从以下几个方面探讨AR配电系统运维系统的新突破。 首先&#xff0c;AR技术可以实现虚拟巡检…

opencv鼠标事件函数setMouseCallback()详解

文章目录 opencv鼠标事件函数setMouseCallback()详解1、鼠标事件函数&#xff1a;&#xff08;1&#xff09;鼠标事件函数原型&#xff1a;setMouseCallback()&#xff0c;此函数会在调用之后不断查询回调函数onMouse()&#xff0c;直到窗口销毁&#xff08;2&#xff09;回调函…

golang指针的学习笔记

package main // 声音文件所在的包&#xff0c;每个go文件必须有归属的包 import ("fmt" )// 引入程序中需要用的包&#xff0c;为了使用包下的函数&#xff0c;比如&#xff1a;Printin// 字符类型使用 func main(){ // 基本数据类型&#xff0c;变量存的就是值&am…

面向对象的软件测试案例 | Date.increment方法的测试

面向对象技术产生了更好的系统结构&#xff0c;更规范的编码风格&#xff0c;它极大地优化了数据使用的安全性&#xff0c;提高了程序代码的可重用性&#xff0c;使得一些人就此认为面向对象技术开发出的程序无须进行测试。应该看到&#xff0c;尽管面向对象技术的基本思想保证…

【前端】场景题:如何在ul标签中插入多个节点 使用文档片段

直接插入的问题&#xff1a;会回流多次。每插入一次li就会回流一次&#xff0c;消耗性能。 这里可以使用文档片段来解决这个问题。 // 创建文档片段 let node document.createDocumentFragment()DocumentFragment节点存在于内存中&#xff0c;并不在DOM中&#xff0c;所以将子…

Chrome 和 Edge 上出现“status_breakpoint”错误解决办法

文章目录 STATUS_BREAKPOINTSTATUS_BREAKPOINT报错解决办法Chrome浏览器 Status_breakpoint 错误修复- 将 Chrome 浏览器更新到最新版本- 卸载不再使用的扩展程序和应用程序- 安装计算机上可用的任何更新&#xff0c;尤其是 Windows 10- 重启你的电脑。 Edge浏览器 Status_brea…

flutter架构全面解析

Flutter 是一个跨平台的 UI 工具集&#xff0c;它的设计初衷&#xff0c;就是允许在各种操作系统上复用同样的代码&#xff0c;例如 iOS 和 Android&#xff0c;同时让应用程序可以直接与底层平台服务进行交互。如此设计是为了让开发者能够在不同的平台上&#xff0c;都能交付拥…

分类任务评价指标

分类任务评价指标 分类任务中&#xff0c;有以下几个常用指标&#xff1a; 混淆矩阵准确率&#xff08;Accuracy&#xff09;精确率&#xff08;查准率&#xff0c;Precision&#xff09;召回率&#xff08;查全率&#xff0c;Recall&#xff09;F-scorePR曲线ROC曲线 1. 混…

浅谈Mysql读写分离的坑以及应对的方案 | 京东云技术团队

一、主从架构 为什么我们要进行读写分离&#xff1f;个人觉得还是业务发展到一定的规模&#xff0c;驱动技术架构的改革&#xff0c;读写分离可以减轻单台服务器的压力&#xff0c;将读请求和写请求分流到不同的服务器&#xff0c;分摊单台服务的负载&#xff0c;提高可用性&a…

C#模拟PLC设备运行

涉及&#xff1a;控件数据绑定&#xff0c;动画效果 using System; using System.Windows.Forms;namespace PLCUI {public partial class MainForm : Form{ public MainForm(){InitializeComponent();}private void MainForm_Load(object sender, EventArgs e){// 方式2&#x…

现货黄金走势图中的止盈点

对平仓时机的把握能力&#xff0c;是衡量现货黄金投资者水平的重要标志&#xff0c;止盈点设置得是否合理&#xff0c;在行情兑现的时候能否及时地离场&#xff0c;是事关投资者账户浮盈最终能否落袋为安的“头等大事”&#xff0c;要在现货黄金走势图中把握止盈点&#xff0c;…

四旋翼飞行器基本模型(MatlabSimulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C++11新特性① | C++11 常用关键字实战详解

目录 1、引言 2、C11 新增关键字详解 2.1、auto 2.2、override 2.3、final 2.4、nullptr 2.5、使用delete阻止拷贝类对象 2.6、decltype 2.7、noexcept 2.8、constexpr 2.9、static_assert VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xf…