HTTP --tcp和keep-alive

TCP

TCP连接

tcp/ip是全球计算机以及网络设备都在使用的一种常见的分组交换网络分层协议集,客户端可以打开一条tcp/ip连接,连接到可能运行在世界各地的服务器应用程序,一旦连接建立起来了,在客户端和服务器的计算机之间交换的报文就永远不会丢失,受损或者失序。

TCP的可靠数据管道

HTTP连接实际上就是TCP连接以及使用规则,TCP连接是互联网上的可靠连接。
TCP为HTTP提供了一条比较靠谱的比特传输管道,从TCP连接一段填入字节会从另一端以原有的顺序,正确的表达出来。
在这里插入图片描述

TCP会按序,无差错的承载HTTP数据。

TCP流是分段的,由IP分组传送

TCP的数据是通过名为IP分组或者IP数据报的小数据块来发送的,安全版本就是在HTTP和TCP之间插入了一个TLS或者SSL密码加密层
HTTP要传送一个报文的时候,会以流的形式讲报文数据的内容通过一条打开的tcp连接按照时序传输。tcp收到数据流之后,会将数据流砍成叫做段的小数据块,所有的这些工作都是由tcp ip软件来处理的。程序员不会参与。
每个tcp段都是由ip分组承载,从一个ip地址发送到另一个ip地址的,每个ip分组包括

  • 一个ip分组首部
  • 一个TCP段首部
  • 一个TCP数据块
    ip首部包含了源和目的ip地址,长度和其他一些标记。tcp段的首部包含了tcp端口号,tcp控制标记,用于将数据排序和完整性检查的一些数字值。

保持tcp连接持续不断的运行

在任意时间计算机都可以由几条tcp连接处于被打开状态,tcp是通过端口号来保持所有这些连接持续不断的运行
tcp连接是通过4个值来识别的<源ip地址, 源端口号, 目的ip地址, 目的端口号>
两条不同的tcp连接不能拥有4个完全相同的地址组件值。但是不同的部分组件可以有相同的值。
在这里插入图片描述

用tcp套接字编程

在这里插入图片描述

套接字api允许用户创建tcp的端口数据结构,将这些端点与远程服务器的tcp端点进行连接,对数据流进行读写。
tcp的api隐藏了所有网络协议的握手细节,以及tcp数据流和ip分组的分段和重装细节
在这里插入图片描述

一旦建立了连接,客户端就会发送HTTP请求,服务器就会读取请求,一旦服务器获取了整条报文请求,就会对请求进行处理,执行所请求的动作,并将数据写回客户端,客户端读取数据,并对响应的数据进行处理

对tcp性能的考虑

HTTP紧挨着TCP,位于上层,所以HTTP事务的性能很大程序取决于底层tcp通道的性能。

HTTP事务的时延

在这里插入图片描述

建立TCP连接,以及传输请求和响应报文的时间相比,事务时间可能是很短的。除非客户端和服务器超载,或者正在处理复杂的动态资源。狗则http就是由tcp网络时延构成的。
HTTP事务的时延由以下几种原因

  1. 客户端首先需要根据URI确定出web服务器的ip地址和端口号,如果没有对URI中的主机名进行访问,通过DNS解析系统会将URI的主机名转换为一个ip地址,这个可能需要花费数10s的时间。
  2. 接下来,客户端会向服务器发送一条tcp连接请求,并等待服务器回送一个请求接受应答,每条tcp连接都会有连接建立时延,最多只有一二秒钟,但是如果是数百个HTTP事务的话,会叠加上去。
  3. 一旦建立起来了连接,客户端就会通过新建立的tcp管道来发送http请求,数据到达的时候,web服务器就会从tcp连接中读取报文,对请求进行处理。
  4. web服务器回送回HTTP响应,这个也需要花费时间。

性能聚焦的区域

  1. tcp连接建立握手
  2. tcp慢启动拥塞控制
  3. 数据聚集的Nagle算法
  4. 用于捎带确认的tcp延迟确认算法
  5. TIME_WAIT时延和端口耗尽

tcp连接的握手时延

如果建立一条新的tcp连接,甚至是发送任意的数据之前,tcp软件会交换一系列的ip分组,对连接的有关参数会进行沟通,如果连接只是用来传输少量的数据,这些交换过程就会降低http的性能
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
建立tcp的几个步骤

  1. 建立tcp连接时,客户端需要向服务器发送一个小的tcp分组,这个分组中有设置syn标记,表明是一个连接请求
  2. 如果服务器接受了请求,就会对参数进行计算,并向客户端返回一个分组,这个分组中的syn和ack都被置位,说明连接已成功
  3. 客户端向服务器回送一条确认信息,通知它连接已成功建立
    小的HTTP事务可能会在TCP建立上花费50%

延迟确认

每个tcp段都会有一个小的序列号和数据完整性校验和,每个段的接收者受到完整的段的时候,会像发送者会送小的确认分组,如果发送者没有再指定的窗口时间内受到确认的信息,发送者就会认为分组被损坏和损毁,重新发送数据。
延迟算法为了增强确认报文找到通向传输数据分组的可能性。延迟确认算法会在一个特定的窗口时间中将输出确认存放在缓存区中,以寻找能够捎带它的输出数据分组,如果在这个时间段内没有输出分组,就将确认信息放在单独的分组中去。如果没有输出分组,就会将确认信息放在单独的分组中传送。
HTTP具有双峰特征的请求——应答行为,降低了捎带信息的可能,延迟确认算法会引入相当大的时延。

tcp慢启动

tcp会随着时间提高传输的速度。用于防止因特网的突然过载和拥塞。
如果HTTP事务由大量的数据要发送,不能一次将所有的分组都发送出去,发送一个分组,等待确认,就可以发送两个分组,每个分组必须被确认。

Nagle算法和TCP_NODELAY

如果tcp发送了大量含有少量数据的分组,网络的性能就会严重的下降。 发送大量单字节分组的行为称为“发送端傻窗口综合症”。这种行为效率很低、违反社会道德,而且可能会影响其他的因特网流量
Nagle算法鼓励发送全尺寸的段,只有当所有其他分组都被确认之后,才会允许发送非全尺寸的分组。如果其他分组仍然在传输过程中,就将那部分数据缓存起来。只有当挂起分组被确认,或者缓存中积累了足够发送一个全尺寸分组的数据时,才会将缓存的数据发送出去
缺点: 1. 小的HTTP报文可能无法填满一个分组,可能会因为等待那些永远不会到来的额外数据而产生时延
TCP_NODELAY:http应用在自己的栈中设计参数,禁用这个算法,提高性能。但是要确保在tcp中写入大块的数据

TIME_WAIT累积和端口耗尽

当某个TCP端点关闭TCP连接时,会在内存中维护一个小的控制块,用来记录最近所关闭连接的IP地址和端口号,这类信息维持2MSL时间。
TIME_WAIT状态通常会持续2倍的最大报文段生存时间(2MSL),以确保在这段时间内不会创建具有相同地址和端口号的新连接。
当系统中存在大量的短连接时,每个连接在关闭后都会进入TIME_WAIT状态,导致TIME_WAIT状态的数量迅速增加。由于每个TCP连接都需要一个唯一的端口号,而端口资源是有限的,因此大量的TIME_WAIT状态可能会导致端口资源耗尽,从而影响新的连接的建立。

HTTP连接的处理

connection首部

http允许在客户端和最终的源服务器之间存在一串http中间实体,在某些情况下,http的connection首部字段中有一个由都好分割的连接标签列表,这些列表为连接指定了一些不会传播到其他连接中的选项。

  • HTTP首部字段名
  • 任意标签值,用于描述此连接的非标准的选项
  • close: 表示关闭这个持久连接。
    如果连接中包含了一个http首部字段的名称,那么这个首部字段中就包含了一些和连接有关的信息。
    在这里插入图片描述

http引用程序受到一条带有connection首部的报文的时候,接收端会解析发送端请求的所有选项。然后汇集报文转发给下一条的地址之前,删除connection首部和connnection中列出的所有首部。

串行事务处理时延

在这里插入图片描述

并行连接

并行连接可能会提高页面的加载速度

包含嵌入对象的组合页面能够克服单挑连接的空载时间和带宽限制,加载速度也会有所提高。如果单挑链接没有充分利用客户端的带宽,可以利用带宽分配来装载其他对象。
在这里插入图片描述

并行连接不一定更快

如果并行加载多个对象,每个对象都会竞争有限的带宽,每个对象都会以慢的速度比例加载。

持久连接

站点局部性: Web客户端倾向于对同一站点(或服务器)进行连续的、多次的访问
HTTP/1.1允许设备在事务处理结束后将tcp连接保持在打开状态,以便为未来的http请求重用现存的连接。这种tcp连接叫做:持久连接。非持久连接会在每个事务结束之后关闭。持久连接会在不同事务之间保持打开状态。

持久以及并行连接

每个事务打开或者关闭一条新的连接,会消耗时间和带宽。由于tcp的慢启动,每个新的连接的性能会有所降低。可以打开的并行连接数量是有限的。

Keep-Alive操作

HTTP/1.0 keep-alive连接的客户端可以包含connection: Keep-Alive首部请求保持一条连接在打开状态。
在这里插入图片描述

Keep-Alive选项

timeout: 估计了服务器希望将连接保持此连接的活跃时间
max:估计了服务器希望多少个事务保持此连接的活跃状态。
Keep-Alive:首部还可以支持任意未经处理的属性。
Keep-Alive首部是可选的,只有在提供connection: Keep-Alive之后才可以使用。

Keep-Alive连接的限制和规则

代理和网关必须执行Connection首部的规则,代理和网关在报文发出去或者是将其高速缓存之前,删除connection首部中命名的所有首部字段以及connection首部自身。

Keep-Alive和哑代理

客户端正在与一台web服务器对话,客户端可以发送要给connection: Keep-Alive首部来告知服务器保持连接的活跃状态,如果支持keep-alive,就返回要给Connection:Keep-Alive首部

  1. Connection首部和盲中继
  2. 代理和逐跳首部
插入Proxy-Connection
HTTP/1.1 持久连接
持久连接的限制和规则

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA配置创建文件后自动生成注释字段,包括作者、日期和描述等信息。

效果 新建文件自动生成如下文档注释 配置如下&#xff1a; 打开setting 进行如下操作 粘贴的模板内容如下&#xff1a; /*** author developer_ZhangXinHua* date ${YEAR}/${MONTH}/${DAY}* desc ${DESCRIPTION}*/

Nios II 实现流水灯实验

Nios II 实现流水灯实验 一.硬件设计1.新建Quartus项目2. 设计Nios ii 二.软件设计 前言 实验目标&#xff1a; 学习 Quartus 、Platform Designer、Nios-II SBT 的基本操作&#xff1b;初步了解 SOPC 的开发流程&#xff0c;基本掌握 Nios-II 软核的定制方法&#xff1b;掌握 …

期权交易要怎么计算盈亏?期权盈亏平衡点是什么?

今天带你了解期权交易要怎么计算盈亏&#xff1f;期权盈亏平衡点是什么&#xff1f;期权盈利和亏损的计算公式取决于具体的交易策略和期权类型。 期权交易要怎么计算盈亏&#xff1f; 期权买方盈亏计算&#xff1a; 对于期权买方&#xff08;无论是认购期权还是认沽期权&…

逻辑门(与门、或门、非门、异或门)

一、实验目的 了解DE1-SOC开发板一些外设。 掌握常用组合逻辑门电路的基本原理。 学习Verilog HDL的基本语法。 学习使用ModelSim工具对设计的电路进行仿真&#xff0c;包括编写Testbench仿真代码&#xff0c;以及ModelSim工具的使用。 熟悉使用Quartus软件从创建Quartus工…

什么是Swagger UI ,swagger ui 的authorization怎么获取?

什么是Swagger UI Swagger UI 是一个用于可视化和交互式地展示API文档的工具。它是Swagger&#xff08;现称为OpenAPI&#xff09;生态系统的一部分&#xff0c;旨在帮助开发者和API用户更好地理解、测试和调试API。 主要功能和作用 1. API文档自动生成&#xff1a; Swagge…

【Java高级教程】集合部分

参考链接 一、 Java 数据结构 二、 Java 集合框架 三 Java ArrayList 四 Java LinkedList 五 Java HashSet 六 Java HashMap 七 Java Iterator&#xff08;迭代器&#xff09; 八 Java Object 类 ava Object 类是所有类的父类&#xff0c;也就是说 Java 的所有类都继承了 Obj…

常用ai模型和一些术语的科普

本文是早年浏览easyai.tech后留下的笔记。 文章目录 神经网络CNNRNNGANKNNCPU和GPU/TPUNLPNo free lunch theoremtransformer注意力机制自动编码器&#xff0c;自编码器GNN推荐系统附录NFL的两个例子 神经网络 水流&#xff0c;水龙头&#xff0c;流量阀。 可以回想CNN分类MNI…

StretchSense:将手部动作无缝集成到Xsens全身动捕系统中

在动画制作中逼真的手部动作可以大幅提升角色的情感表现能力&#xff0c;这将使观众更加轻易的走进角色&#xff0c;感受角色的情感变化并更加快速的了解角色的性格特点。如性格外向的角色将拥有更加复杂的手部动作表达。因此有效加强角色的手部动画真实度有助于吸引更多的观众…

基于Java+Vue智慧社区管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

22-验证码的处理

验证码这种问题是比较头疼的&#xff0c;对于验证码的处理&#xff0c;不要去想破解方法&#xff0c;这个验证码本来就是为了防止别人自动化登录的。 目前最快速解决的三个手段&#xff1a; 去掉验证码&#xff1a;比较适合新开发但未上线的系统。设置万能码&#xff1a;比较适…

【GD32】06 - SPI (含ST7735S TFT-LCD屏幕驱动)

这篇文章我们看看GD32中如何实现SPI&#xff0c;软件SPI的话可以参考我之前的文章&#xff0c;把对应操作GPIO口的代码从STM32改成GD32就可以使用了。 【快速上手STM32】SPI通信协议&&1.8寸TFT-LCD&#xff08;ST7735S&#xff09;_tftlcdst7735和stm32-CSDN博客文章浏…

docker部署skywalking

skywalking版本下载 1&#xff1a;拉取skywalking的oap镜像(可以选择自己的版本&#xff0c;最好与ui&#xff0c;agent版本一致) docker pull apache/skywalking-oap-server:9.5.02&#xff1a;启动oap docker run -d -p 11800:11800 -p 12800:12800 --name sw_oap apache/…

HCIE数通,为啥是网工的“黄金标准”?

作为网络工程师&#xff0c;你不可能没听说过HCIE&#xff0c;也不可能没听过数通&#xff0c;也可能曾经考虑过要不要挑战这个认证。 HCIE数通为何被誉为网工的黄金标准&#xff1f;聊聊 01 什么是HCIE数通&#xff1f; HCIE数通认证是华为技术有限公司推出的一项高级别认证…

深度学习-05-反向传播理论知识

深度学习-05-反向传播理论知识 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及&#xff0c;明月切身体会到还是 IPSET 最方便了&#xff0c;无论你是 IPv4 还是 IPv6 都可以方便的管理&#xff0c;无论你是加入白名单还是黑名单&#xff0c;都非常的简单高效&#xff01;今天就参照明月自己的实操…

PyQt5串口测试工具

笔者经常会遇到使用上位机进行相关测试的场景&#xff0c;但现成的上位机并不能完全满足自己的需求&#xff0c;或是上位机缺乏使用说明。所以&#xff0c;自己写&#xff1f; 环境说明 pycharm 2023.2.25 python 3.10 anaconda 环境配置 conda create -n envsram ##…

Proxmox Backup Server 命名空间使用

作者&#xff1a;田逸&#xff08;formyz&#xff09; Proxmox Backup Server&#xff08;一下统称PBS&#xff09;从2.2版本开始&#xff0c;新增了命名空间这样一个功能。这个功能大大便利了多Proxmox VE集群或者单节点备份&#xff0c;在以前PBS版本中&#xff0c;如果有多个…

Windows系统下DOS命令

Windows系统下DOS命令 1. 与文件操作相关1.1 mkdir&#xff0c;md命令1.2 rmdir、rd命令1.3 dir命令1.4 start命令1.5 echo命令1.6 type命令1.7 copy命令1.8 move命令1.9 copy和move的区别1.10 del命令1.11 rename命令1.12 attrib命令1.13 fsutil命令1.14 assoc命令 2. 与网络相…

DevOps生命周期的8个阶段和DevOps pipeline 详解

您可能也在探索DevOps pipeline或工作流的概念&#xff0c;这些术语可能会根据不同的解释者而有所交替使用。尽管如此&#xff0c;DevOps生命周期和DevOps pipeline这两个术语更常被提及。 本文将首先阐述DevOps生命周期的概念&#xff0c;然后深入介绍DevOps pipeline。 Dev…

基于4G工业路由器的信息发布系统物联网应用方案

随着物联网技术的快速发展&#xff0c;智能信息发布系统已成为城市管理和信息传播的重要工具。而4G工业路由器作为连接信息发布终端与云平台的关键设备&#xff0c;其在提升信息发布效率方面发挥着至关重要的作用。为了提升智能信息发布系统的效率和智能化水平&#xff0c;智联…