面试:HTTP 的长连接和短连接

news2025/1/10 20:42:00

https://www.cloudflare.com/zh-cn/learning/ddos/syn-flood-ddos-attack/

一文搞懂 HTTP 的长连接和短连接_文晓武的博客-CSDN博客

1、HTTP 协议与 TCP/IP 协议的关系

HTTP 的长连接和短连接本质上是 TCP 长连接和短连接。HTTP 属于应用层协议,在传输层使用 TCP 协议,在网络层使用 IP 协议。IP 协议主要解决网络路由和寻址问题,TCP 协议主要解决如何在 IP 层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP 有可靠,面向连接的特点。

2、什么是长连接、短连接?

在 HTTP/1.0 中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次 HTTP 操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源,如JavaScript 文件、图像文件、CSS 文件等;当浏览器每遇到这样一个 Web 资源,就会建立一个 HTTP 会话。

但从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头有加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache )中设定这个时间。实现长连接要客户端和服务端都支持长连接。

HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。

3.1 TCP 连接

当网络通信时采用 TCP 协议时,在真正的读写操作之前,server 与 client 之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要 3 次握手的,而释放则需要 4 次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的。

经典的三次握手示意图:

经典的四次握手关闭图:

3.2 TCP短连接

我们模拟一下 TCP 短连接的情况,client 向 server 发起连接请求,server 接到请求,然后双方建立连接。client 向 server 发送消息,server 回应client,然后一次读写就完成了,这时候双方任何一个都可以发起 close 操作,不过一般都是 client 先发起 close 操作。为什么呢,一般的 server 不会回复完 client 后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作

短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。

3.3 TCP 长连接

接下来我们再模拟一下长连接的情况,client 向 server 发起连接,server 接受 client 连接,双方建立连接。Client 与 server 完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

首先说一下 TCP/IP 详解上讲到的 TCP 保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。

大量的半连接状态会引起服务端资源耗尽:

TCP三次握手及其背后的缺陷_沙漠一只雕得儿得儿的博客-CSDN博客

SYN Flood攻击原理与防范_沙漠一只雕得儿得儿的博客-CSDN博客

TIME_WAIT和CLOSE_WAIT状态区别_沙漠一只雕得儿得儿的博客-CSDN博客

如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下 4 个状态之一:

  • 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。

  • 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的 TCP 都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送 10 个这样的探测 ,每个间隔 75 秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。

  • 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。

  • 客户机正常运行,但是服务器不可达,这种情况与 2 类似,TCP 能发现的就是没有收到探查的响应。

扩展:SYN洪水攻击

什么是 SYN 洪水攻击?

SYN 洪水(半开连接攻击)是一种拒绝服务 (DDoS) 攻击
,旨在耗尽可用服务器资源,致使服务器无法传输合法流量。通过重复发送初始连接请求 (SYN) 数据包,攻击者将可击垮目标服务器计算机上的所有可用端口,导致目标设备在响应合法流量时表现迟钝乃至全无响应。

SYN 洪水攻击如何工作?

SYN 洪水攻击利用TCP连接的握手过程发动攻击

正常情况下如图,TCP 连接将完成三次握手以建立连接。

为发起拒绝服务
攻击,攻击者需利用这样一项事实:收到初始 SYN 数据包后,服务器将通过一个或多个 SYN/ACK 数据包做出回响,等待完成握手过程的最后一步。工作方式如下:

  1. 攻击者通常使用伪造的 IP 地址向目标服务器发送大量 SYN 数据包。
  2. 然后,服务器分别对每一项连接请求做出响应,并确保打开的端口做好接收响应的准备。
  3. 在服务器等待最后一个 ACK 数据包(永远不会到达)的过程中,攻击者将继续发送更多 SYN 数据包。每当有新的 SYN 数据包到达,服务器都会临时打开一个新的端口并在一段特定时间内保持连接;用遍所有可用端口后,服务器将无法正常运行。

https://www.cloudflare.com/zh-cn/learning/ddos/syn-flood-ddos-attack/

扩展问题:TCP的粘包问题

硬核图解|tcp为什么会粘包?背后的原因让人暖心_个人文章 - SegmentFault 思否

  • TCP 不管发送端要发什么,都基于字节流把数据发到接收端。这个字节流里可能包含上一次想要发的数据的部分信息。接收端根据需要在消息里加上识别消息边界的信息。不加就可能出现粘包问题。
  • TCP 粘包跟Nagle算法有关系,但关闭 Nagle 算法并不解决粘包问题。
  • UDP 是基于数据报的传输协议,不会有粘包问题。
  • IP 层也切片,但是因为不关心消息里有啥,因此有不会有粘包问题。
  • TCP 发送端可以发 10 次字节流数据,接收端可以分 100 次去取;UDP 发送端发了 10 次数据报,那接收端就要在 10 次收完。

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

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

相关文章

区块链交易明细中各字段的含义

Transaction Hash:标识本次交易的 hashStatus:交易状态Block:7768188 表示本次块高,217034 表示在 7768188 后面又新挖的区块数量,该数值会随着新区块增加而不断增长Timestamp:交易成功的时间戳From&#x…

直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析

文章目录前言一、转速闭环直流调速系统二、Matlab/Simulink仿真2.1.仿真电路分析2.2.仿真结果分析总结前言 变压调速是直流调速系统的主要调速方法,因此系统的硬件至少包含:可调直流电源和直流电机两部分。可调直流电源多采用直流PWM变换器,…

v-for的用法及key值原理

v-for的用途: (1)关键字: v-for遍历的时候,关键字有两个:in、of:两个关键字没有区别,用哪一个都行; (2)支持对象、数组、数字遍历&#xff1a…

java线程生命周期

如图 java线程的生命周期主要分为 新建: :新建这一刻 他会创建出一个线程对象 这个就是我们通过new线程类 这部操作实现的 当我们通过new出来的线程对象 执行 start方法之后 他就会进入第二个生命周期 就绪: 在这个过程中 他有执行资格 就是他是可以执行线程的程序的 但这个阶…

zk中session的基本原理、create、set、delete命令的使用(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 一、session基本原理 二、创建节点 create [-s] | [-e] 路径 数据 权限 还是一样的连接zk客户端 ./zkCli.sh 使用help查看命令 我们创建一个父节点,并存入数据 使用get来或者它的数据和状态信息 状态参…

【LeetCode】Day187-分割回文串

题目 131. 分割回文串【中等】 题解 如何判断字符串是回文串? 使用动态规划:f[i][j]代表s[i…j]是否是回文串,则有状态转移方程如下, 有了f[i][j],如何分割回文串? 利用回溯搜索,当s[0…i-1…

Spring参数校验

如何使用 Spring提供了简便的参数校验注解&#xff0c;不需要像以前一样if else去判断了&#xff0c;下面记录一下如何使用注解实现参数的校验 导入坐标 要使用各种注解完成参数的校验&#xff0c;需要导入hibernate-validator坐标以实现 <dependency><groupId>…

[Spring Cloud] nacos安装与使用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

密码学消息鉴别

信息安全 完整性 1.数据完整性&#xff1a;数据未被篡改或损坏。数据是不可否认的&#xff0c;发送方和接收方不能抵赖处理了数据。 2.系统完整性&#xff1a;系统未被非授权使用。 真实性 确认实体是它声明的&#xff0c;适用于用户、进程等等的合法的信息&#xff08;是否真…

LVS-DR模式

文章目录一、LVS-DR集群介绍1、LVS-DR 工作原理2、 数据包流向分析3、LVS-DR 模式的特点4、LVS-DR中的ARP问题4.1 问题一4.2问题二二、构建LVS-DR集群的步骤实验环境准备&#xff1a;1、配置负载调度器&#xff08;192.168.2.66&#xff09;1.1 配置虚拟 IP 地址&#xff08;VI…

HTML+CSS+JS网页设计期末课程大作业—— 艺术官网17页(包含登陆注册)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#…

力扣(LeetCode)22. 括号生成(C++)

回溯 括号合法的性质&#xff1a; 任意前缀的左括号数大于右括号数左括号和右括号的数量相等。 根据性质 &#xff0c; 写递归体 。 class Solution { public:vector<string> ans;vector<string> generateParenthesis(int n) {dfs(n,0,0,"");return …

Mosaic数据增强

paper&#xff1a;YOLOv4: Optimal Speed and Accuracy of Object Detection mosaic data augmentation最早是在YOLO v4的文章中提出的&#xff0c;但其实在ultralytics-YOLOv3中就已经实现了。具体就是将4张样本拼接成一张图&#xff0c;具有以下优点&#xff1a;&#xff08…

C++string—常用接口介绍+模拟实现+习题讲解

如果调试一个程序让你很苦恼&#xff0c;千万不要放弃&#xff0c;成功永远在拐角之后&#xff0c;除非你走到拐角&#xff0c;否则你永远不知道你离他多远&#xff0c;所以&#xff0c;请记住&#xff0c;坚持不懈&#xff0c;直到成功。 目录 前言 1.string类的常用接口 1.1s…

c++提高篇——模板(下)

c提高篇——模板&#xff08;下&#xff09;一、类模板二、类模板与函数模板区别三、类模板中成员函数创建时机四、类模板对象做函数参数一、类模板 类模板可以建立一个通用类&#xff0c;类中的成员数据类型可以不具体制定&#xff0c;用一个虚拟的类型来代表。 类模板的语法…

周赛补题

leetcode &#xff1a; 第一题https://leetcode.cn/problems/number-of-unequal-triplets-in-array/可以直接暴力 class Solution { public:int unequalTriplets(vector<int>& nums) {int sum 0;int n nums.size();for(int i 0; i < n; i ){for(int j i …

kmp算法记录

看了如何更好地理解和掌握 KMP 算法?之后&#xff0c;做的整理 相关知识 尽管普通模式匹配的时间复杂度是O(mn)&#xff0c;KMP 算法的时间复杂度是O(mn)&#xff0c;但在一般情况下&#xff0c;普通模式匹配的实际执行时间近似为O(m n)&#xff0c;因此至今仍被采用。KMP算法…

一文弄懂CNN中的BatchNorm

1. 引言 本文重点介绍BatchNorm的定义和相关特性&#xff0c;并介绍了其详细实现和具体应用。希望可以帮助大家加深对其理解。 嗯嗯&#xff0c;闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 什么是BatchNorm&#xff1f; BatchNorm是2015年提出的网络层&#xff0c…

一文讲懂高并发分布式系统,听不懂你来打我

众所周知&#xff0c;在分布式系统的设计与建立中&#xff0c;其中一个要考虑的问题就是高并发。 那么&#xff0c;到底什么是高并发呢? 简单来说高并发就是指通过设计系统&#xff0c;使之实现可以同时处理多个请求的能力。 现在的高并发系统主要存在有两种实现方式&#…

Utilizing Transformer Representations Efficiently

ContentsIntroductionDifferent Pooling StrategiesPooler OutputLast Hidden State OutputHidden States OutputMore...ReferencesIntroduction 在用预训练模型微调时&#xff0c;我们比较习惯于直接用 Transformer 最后一层的输出经过 FC / Bi-LSTM… 后输出最终结果。但实际…