HTTP --tcp

news2024/10/4 18:19:11

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://www.coloradmin.cn/o/1718805.html

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

相关文章

Token的使用(JWT)

客户端用户登录生成token&#xff0c;然后返回给客户端后被存储&#xff0c;然后需要使用时客户端会发送到服务器进行验证。 package com.example.springblog;import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtParser; import io.jsonwebtoken.Jwts; import io.jsonw…

软件测试可发现所有bug吗?有什么样的原则和目的?

在今天的高度数字化时代&#xff0c;软件测试的重要性不可忽视。这是一种系统性的过程&#xff0c;通过对软件系统进行评估和验证&#xff0c;以确定其是否满足预期要求。在软件开发的各个阶段&#xff0c;软件测试都扮演着至关重要的角色。它涉及到软件功能、性能、安全性等多…

HackTheBox-Machines--Cronos

文章目录 0x01 信息收集0x02 命令注入漏洞0x03 权限提升 Cronos 测试过程 0x01 信息收集 1.端口扫描 发现 SSH&#xff08;22&#xff09;、DNS&#xff08;53&#xff09;、HTTP&#xff08;80&#xff09;端口 nmap -sC -sV 10.129.227.2112.53端口开启&#xff0c;进行DNS…

Mysql基础教程(12):JOIN

MySQL JOIN 在 MySQL 中&#xff0c;JOIN 语句用于将数据库中的两个表或者多个表组合起来。 比如在一个学校系统中&#xff0c;有一个学生信息表和一个学生成绩表。这两个表通过学生 ID 字段关联起来。当我们要查询学生的成绩的时候&#xff0c;就需要连接两个表以查询学生信…

姚班带队OpenCSG,超越Devin,创造大模型编程领域新纪录

摘要 来自中国大模型初创公司OpenCSG推出的StarShip CodeGen Agent&#xff0c;以23.67%的成绩刷新了普林斯顿SWEBench(大模型真实独立编程评测)排行榜&#xff0c;取得了全球第二名的成绩&#xff0c;同时创造了非GPT-4o基模的最高纪录&#xff08;SOTA&#xff09;。 SWEBen…

案例|开发一个美业小程序,都有什么功能

随着移动互联网的迅猛发展&#xff0c;美业连锁机构纷纷寻求数字化转型&#xff0c;以小程序为载体&#xff0c;提升服务效率&#xff0c;增强客户体验。 线下店现在面临的困境&#xff1a; 客户到店排队时间过长&#xff0c;体验感受差 新客引流难&#xff0c;老用户回头客…

2024ciscn初赛——easycms

什么是CMS&#xff1f; CMS是“Content Management System”的缩写&#xff0c;意为“内容管理系统”。网站的开发者为了方便&#xff0c;制作了不同种类的CMS&#xff0c;可以加快网站开发的速度和减少开发的成本。 常见的CMS&#xff1a; php类cms系统&#xff1a;dedecms、…

【计算Nei遗传距离】

报错 Warning message: In adegenet::df2genind(t(x), sep sep, ...) : Markers with no scored alleles have been removed 原因&#xff1a; 直接用plink转换为VCF&#xff0c;丢失了等位基因分型&#xff08;REF ALT&#xff09; &#xff08;plink编码的规则&…

【Pytorch 】Dataset 和Dataloader制作数据集

文章目录 Dataset 和 Dataloader定义Dataset定义Dataloader综合案例1 导入两个列表到Dataset综合案例2 导入 excel 到Dataset综合案例3 导入图片到Dataset导入官方数据集Dataset 和 Dataloader Dataset指定了数据集包含了什么,可以是自定义数据集,也可以是以及官方数据集Data…

R语言绘图 --- 饼状图(Biorplot 开发日志 --- 2)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形&#xff0c;如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包&#xff08;Biorplot&#xff09;&#xff0c;用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

基于深度学习的模糊认知图方法

1 文章信息 文章题目为“Deep Fuzzy Cognitive Maps for Interpretable Multivariate Time Series Prediction”&#xff0c;该文于2019年发表于“IEEE TRANSACTIONS ON FUZZY SYSTEMS”。文章提出了深度模糊认知图&#xff08;FCM&#xff09;用于多变量时间序列预测&#xff…

视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述

GA/T 1400协议主要应用于公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在城市的治安监控、交通管理、案件侦查等方面&#xff0c;GA/T 1400协议都发挥着重要作用。 以视频汇聚EasyCVR视频监控资源管理平台为例&#xff0c;该平台…

30-ESP32-S3-WIFI篇-01 FreeRTOS

ESP32-S3-WIFI-FreeRTOS 任务 介绍 FreeRTOS FreeRTOS是一个开源的实时操作系统&#xff08;RTOS&#xff09;内核&#xff0c;以模块化的方式与ESP-IDF集成。这意味着所有的ESP-IDF应用程序和各种ESP-IDF组件都建立在FreeRTOS框架之上。FreeRTOS内核已经被移植到ESP芯片的所…

C/C++|智能指针的shared_from_this和enable_shared_from_this

参考博客(或者叫摘抄的博客&#xff0c;本博客只做为个人学习使用)&#xff1a; 施磊老师牛逼 深入掌握C智能指针 C智能指针的enable_shared_from_this和shared_from_this机制 文章目录 再探 shared_ptr错误一修改错误一错误二修改错误二 enable_shared_from_this和shared_from…

web项目规范配置(husky、eslint、lint-staged、commit)

背景&#xff1a; 团队开发为了保证提交代码格式统一&#xff0c;通常在进行代码提交的时候对暂存区代码进行校验&#xff0c;如没有通过eslint(本例使用eslint)校验&#xff0c;则不能提交到远端。 安装依赖 husky 、eslint 、prettier 、lint-staged npm install husky e…

光环云携手火山引擎共推全栈AI服务,赋能千行百业智能化转型,助力新质生产力发展

5月15日&#xff0c;2024春季火山引擎FORCE原动力大会在北京举办。作为智算云网综合服务提供商&#xff0c;光环云受邀出席大会&#xff0c;与火山引擎共同探索大模型时代下行业发展的新趋势。 会上&#xff0c;光环云数据有限公司正式与火山引擎签署生态伙伴合作协议&#xf…

算法与数据结构:红黑树

ACM大牛带你玩转算法与数据结构-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a; 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度会…

计算机图形学入门04:视图变换

1.MVP变换 将虚拟场景中的模型投影到屏幕上&#xff0c;也就是二维平面上&#xff0c;需要分三个变换。 1.首先需要知道模型的位置&#xff0c;也就是前面提到的基本变换&#xff0c;像缩放、平移&#xff0c;旋转&#xff0c;也称为模型(Model)变换。 2.然后需要知道从…

精选免费在线工具与资源推荐20240531

精选免费在线工具与资源推荐 引言 在互联网高速发展的今天&#xff0c;我们身处一个信息爆炸的时代。为了更好地应对工作和学习中的挑战&#xff0c;我们时常需要借助各种工具和资源来提高效率。幸运的是&#xff0c;网络上存在着大量免费且高效的在线工具和资源&#xff0c;…

告别低效提问:掌握BARD技巧,让AI成为你的智能助手!

今天只聊一个主题&#xff1a;提示词 Prompt。 说到提示词&#xff0c;大家可能都看过GPT的高级示例&#xff0c;那些几百字的提示词&#xff0c;写起来确实不容易。 那么&#xff0c;如何写出同样效果的提示词呢&#xff1f; 有没有什么公式或者系统学习的方法&#xff1f;…