HTTP --tcp

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.mzph.cn/bicheng/20385.shtml

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

相关文章

el-date-picker的使用,及解决切换type时面板样式错乱问题

这里选择器的类型可以选择日月年和时间范围&#xff0c;根据类型不同&#xff0c;el-date-picker的面板也展示不同&#xff0c;但是会出现el-date-picker错位&#xff0c;或者面板位置和层级等问题。 源代码&#xff1a; <el-selectv-model"dateType"placeholder&…

BOOST_SREATCH

BOOST Boost是一个由C社区开发的开源库&#xff0c;为C语言标准库提供扩展。这个库由C标准委员会库工作组成员发起&#xff0c;旨在提供大量功能和工具&#xff0c;帮助C开发者更高效地编写代码。Boost库强调跨平台性和对标准C的遵循&#xff0c;因此与编写平台无关&#xff0…

如何防止商业秘密泄露?商业秘密保护措施有哪些?

商业秘密是企业核心竞争力的关键所在&#xff0c;其保密性直接关系到企业的生存和发展。 因此&#xff0c;防止商业秘密泄露&#xff0c;确保商业秘密的安全至关重要。 本文将探讨如何有效防止商业秘密泄露&#xff0c;并重点介绍域智盾软件作为解决方案&#xff0c;在商业秘密…

Jvm(一)之栈、堆、方法区

前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#xff0c;感受周围的世界。让我们一起提醒自己&#xff0c;要适时放慢脚步…

【机器学习系列】掌握随机森林:从基础原理到参数优化的全面指南

目录 目录 一、随机森林简介 (一)随机森林模型的基本原理如下&#xff1a; (二)随机森林模型的优点包括&#xff1a; (三)森林中的树的生成规则如下&#xff1a; (四)在随机森林中&#xff0c;每棵树都使用不同的训练集进行训练&#xff0c;原因如下 随机森林的分类性能&…

点赋科技:建设智能饮品高地,打造数字化产业先锋

在当今数字化时代的浪潮中&#xff0c;点赋科技以其敏锐的洞察力和卓越的创新能力&#xff0c;致力于建设智能饮品高地&#xff0c;打造数字化产业先锋。 点赋深知智能饮品机对于推动社会进步和满足人们日益增长的需求的重要性。因此&#xff0c;他们投入大量资源和精力&#x…

2020 6.s081——Lab1:Xv6 and Unix utilities梦开始的地方

一任宫长骁瘦 台高冰泪难流 锦书送罢蓦回首 无余岁可偷 ——知否知否 完整代码见&#xff1a;6.s081/kernel at util SnowLegend-star/6.s081 (github.com) Lecture 01知识点总结 首先透彻理解Lecture01的知识很是重要 ①pidwait((int *) 0); “wait(int *status)”函数用于…

记一次服务器数据库被攻击勒索

如图&#xff0c;早上一起来就发现&#xff0c;我的MongoDB数据库里面的信息全部没有了&#xff0c;只留下一段话。 大致意思就是&#xff1a;我的数据库的数据被他们备份然后全部删掉了&#xff0c;我必须要支付0.0059的bitcoin&#xff08;折合400美刀&#xff09;来赎回我的…

不是,你不会还在用双层遍历循环来做新旧数组对比,寻找新增元素吧?

目录 一、双层循环遍历 1.1、双循环错误示范 1.2、正确的做法 ①使用array.includes() ②使用set 二、array.includes()的使用与技巧 2.1、基本语法 2.2、返回值 2.3、使用技巧 2.3.1、用户输入验证 2.3.2、权限检查 2.4、兼容问题 三、总结 一、双层循环遍历 1.…

OpenCV学习 基础图像操作(十六):图像距离变换

基础原理 顾名思义&#xff0c;我们可以利用像素之间的距离作为对该像素的一种刻画&#xff0c;并将其运用到相应的计算之中。然而&#xff0c;在一幅图像之中&#xff0c;某种类型的像素并不是唯一的&#xff0c;因此我门常计算的是一类像素到另一类的最小距离&#xff0c;并…

香橙派KunPengPro评测

一、引言 二、开箱 2.1、主要包含说明 1、充电器(赠typec-c线) 2、香橙派kunpengpro(已经带装好带散热器) 3、SD卡(32G)(已经带装好系统openEuler 22.03 (LTS-SP3)) (注意&#xff1a;上电接HDMI线可直接用&#xff0c;账号&#xff1a;openEuler 密码&#xff1a;openEuler)…

vue使用tailwindcss

安装依赖 pnpm add -D tailwindcss postcss autoprefixer创建配置文件tailwind.config.js npx tailwindcss init在配置文件content中添加所有模板文件的路径 /** type {import(tailwindcss).Config} */ export default {content: [./index.html, ./src/**/*.{vue,js,ts,jsx,…

【Linux】开发工具入门指南,轻松掌握你的开发利器

开发工具 1. 软件包管理器yum1.1 软件包安装方式1.2 yum的"三板斧"1.3 yum的周边 2. 开发工具3. 编辑器vim4. 编译器gcc、g5. 项目自动化构建工具make、Makefile6. 进度条小程序7. 调试器gdb 1. 软件包管理器yum 1.1 软件包安装方式 源代码安装&#xff1a;用户手动…

微信小程序 npm构建+vant-weaap安装

微信小程序&#xff1a;工具-npm构建 报错 解决&#xff1a; 1、新建miniprogram文件后&#xff0c;直接进入到miniprogram目录&#xff0c;再次执行下面两个命令&#xff0c;然后再构建npm成功 npm init -y npm install express&#xff08;Node js后端Express开发&#xff…

智慧校园的机遇与挑战

随着5G、物联网、大数据等技能的日渐老练&#xff0c;数字化正在渗透到各行各业中&#xff0c;为事务立异和价值增加供给支撑。在教育职业&#xff0c;运用智能化体系赋能教育办理越来越受欢迎&#xff0c;教育信息化方针一再出台&#xff0c;进一步加快了智慧校园落地的脚步。…

Linux - 文件管理高级 sed

3.处理字符 sed ① sed 默认情况下不会修改原文件内容 ② sed 是一种非交互式的编辑器 3.1 工作原理 将原文件一行一行的进行处理&#xff0c;取出一行&#xff0c;放入“模式空间进行处理”&#xff0c;处理完成之后将结果输出到屏幕上&#xff0c;然后读取下一行&#xf…

彭涛 | 2024年5月小结

5月份还是蛮有刺激的&#xff0c;做了蛮多的事情&#xff0c;但是没赚到钱&#xff0c;真是一屯操作猛如虎&#xff0c;一看账户0.5。 就喜欢创业这种一天天累死累活还不赚钱的感觉&#xff0c;哈哈哈哈 老规矩简单说下这个月的情况&#xff0c;如果对你有收获就最好了。 游学丹…

【Tlias智能学习辅助系统】04 部门管理 删除 和 新增

Tlias智能学习辅助系统 04 部门管理 删除 和 新增 删除部门APIDeptController.javaDeptService.javaDeptServiceImpl.javaDeptMapper.java前端联调 新增部门API有一步简化DeptController.javaDeptService.javaDeptServiceImpl.javaDeptMapper.java前端联调 删除部门API 请求路径…

Selenium+Java 环境搭建

selenium 介绍 Selenium 是 web 应用中基于 UI 的自动化测试框架&#xff0c;支持多平台、多浏览器、多语言。 早期的 selenium RC 已经被现在的 webDriver 所替代&#xff0c;可以简单的理解为selenium1.0webdriver 构成 现在的 Selenium2.0 。现在我们说起 selenium &#xf…

适合学生写作业的台灯有哪些?台灯怎么选详细攻略!

在数字化飞速发展的今天&#xff0c;孩子们的学习和生活越来越离不开电子屏幕。然而&#xff0c;长时间盯着屏幕&#xff0c;不仅容易让眼睛感到疲劳&#xff0c;更是近视问题日益严重的元凶之一。每一位家长都希望孩子能拥有健康的视力&#xff0c;因此会为孩子挑选一台护眼灯…