作为一个程序员,假设我们要在a电脑的进程里发一段数据到b电脑,一般使用socket编程,可选项也就tcp,udp二选一

socket本质上就是一个代码库

tcp有粘包问题(字节流),纯裸tcp不能之际拿来使用

所以我们需要加入一些自定义的规则,用来区分消息边界,比如加入消息头(消息头里写清除一个完整的包长度是多少,还可以放消息体是否被压缩过,消息体格式之类的)

自定义的规则就是所谓的协议,每个使用tcp的项目都可能会定义一套这样的协议,基于tcp衍生了非常多的协议,比如http,rpc。tcp是传输层协议,而基于tcp造出来的http和各类rpc协议只是定义了不同消息格式的应用层协议

http协议

http协议又叫作超文本传输协议

rpc

远程过程调用,本身并不是一个具体的协议,而是一种调用方式,就是希望像调用本地方法那样调用远程方法

一般的软件,客户但需要跟服务端建立连接收发消息,此时都会用到应用层协议,在这种cs架构下,可以使用自家造的rpc协议

但是浏览器,不仅要能访问自家公司的服务器,还需要访问其他公司的网站服务器,所以需要http统一标准。所以多年前,http主要用于bs架构,但是现在已经分的没那么清除。

要向某个服务器发起请求,得先建立连接,所以得先知道ip地址和端口,找到服务对应的ip和端口的过程就是服务发现。http中你知道服务的域名即可通过dns服务去解析。rpc一般会有专门的中间服务去报仇服务名和ip信息

Http 1.1

一次一份是核心,因为发送一个http请求的时候,是需要等收到Http响应才可以发送下一个Http请求。一个网页一般由多个文件组成,最基本的就是html css js和图片文件。对于http协议来说,我们打开一个网页需要进行tcp三次握手,建立起tcp连接,才正式进行请求,服务器会先发送html文件给我们,其他文件不会发送给我们,我们的浏览器在收到html文件以后根据html里面的内容,再向服务器以此请求css js等文件,整个过程都是浏览器在帮我们完成,所以对用户的直接感受就是只有一次请求,如果在请求队伍里,有一个文件没有收到,后面的文件也没法接收了,这就会造成http队头阻塞。对于http1.1来说默认是持久连接的,即保持这个tcp连接,不需要对每个请求再来一轮tcp握手,请求和响应都放在同一个连接里面,但是只有一个连接肯定太慢了,连接太多又怕会造成DDos攻击,因此各家浏览器允许的持久连接数都不太相同

浏览器会限制同一连接的请求数,限制每个域的连接数

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

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

相关文章

C#使用OpenVinoSharp和PP-Human进行行人检测

效果 项目依赖 OpenCvSharp 4.11.0.20250507 OpenVINO.CSharp.Windows 2024.0.0.1 主要代码 using OpenCvSharp; using OpenVinoSharp; using System; using System.Windows.Forms;namespace HelloPPHuman {public partial class Form1 : Form{public Form1(){InitializeCo…

四、Scala深入面向对象:类、对象与伴生关系

在前几节中,我们学习了 Scala 的基础语法和流程控制。现在,我们将深入探索 Scala 作为一门纯粹的面向对象语言的核心。在 Scala 中,万物皆对象,没有像 Java 那样的原始类型和静态成员的区分。本节将重点介绍如何定义对象的蓝图&am…

【大语言模型 58】分布式文件系统:训练数据高效存储

分布式文件系统:训练数据高效存储 关键词:分布式文件系统、HDFS、Lustre、GlusterFS、数据本地性、I/O优化、存储架构、大数据存储、训练数据管理、存储性能调优 摘要:本文深入探讨大语言模型训练中的分布式文件系统技术,从存储架…

【科研绘图系列】R语言绘制散点图以及线性回归拟合曲线图

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍 加载R包 数据下载 函数 导入数据 数据预处理 画图 总结 系统信息 介绍 数据导入 代码的开始部分涉及多个数据集的导入,这些数据集涵盖了不同类型的生态学数据,包括实验室培养…

SQL 数据库操作语言详解

1. SQL 语言概述SQL(Structured Query Language)是用于管理关系型数据库的标准语言,主要分为以下几个子语言:- DQL(数据查询语言):SELECT - 用于数据查询 - DML(数据操作语言&#x…

积分变换的前世今生

积分变换常应用于解微分方程微分方程的解法:时域经典法;频域变换法;“积分变换”最初并不是为了解微分方程,而是出于更“纯粹”的数学动机——理解函数的结构、求解代数或几何问题,以及简化复杂的积分运算。微分方程的…

《Linux——gflags》

一、什么是gflags? gflags 是一个由 Google 开发的命令行参数解析库,主要用于在 C(也支持其他语言)程序中便捷地处理命令行参数。它的核心作用是帮助开发者快速定义、解析和使用命令行选项,避免手动编写繁琐的参数解析…

编译器的前端中端和后端

前面说的词法分析和语法分析,确实是编译器前端 (Front End) 最核心的两个部分。但前端的工作还没有结束。编译器各阶段划分 一个完整的编译器通常可以分为三个部分:前端、中端 (Middle End)、后端 (Back End)。 前端 (Front End) 核心职责: 理解源代码。…

黑马Java进阶教程,全面剖析Java多线程编程,并发和并行,笔记02

黑马Java进阶教程,全面剖析Java多线程编程,并发和并行,笔记02 一、并发和并行 并发:在同一时刻,有多个指令在单个CPU上交替执行 并行:在同一时刻,有多个指令在多个CPU上同时执行 二、为什么有…

20250908 背包DP总结

引子 ~ 我们都有一个家,名字叫背包 ~ 背包DP 顾名思义,背包DP是用来解决背包最值问题的。题目会给出背包的容量,以及几个物品的属性,比如重量,价值,限额等等,具体是什么看题目。 01背包 01…

Redis持久化之RDB:快照机制原理、配置与最佳实践

Redis持久化之RDB:快照机制原理、配置与最佳实践 1. RDB持久化概述 1.1 什么是RDB RDB(Redis Database)是Redis的默认持久化方式,它在指定的时间间隔内生成数据集的快照(snapshot),并将快照保…

daily notes[44]

文章目录基础references基础 hello,world是几乎所有编程语言的第一例子,rust也不例外。但和其它语言不一样,Rust的源码最好拥有自己的项目目录。 $ mkdir ~/pro $ cd ~/pro $ mkdir helloWorld $ cd helloWorld源代码文件名为main.rs,内容如…

JavaScript对象创建方式完全指南:从原始到现代的演进之路

前言 作为一名前端开发者,JavaScript中对象创建是很重要。在JavaScript这门基于原型的语言中,对象几乎无处不在。今天,我将带领大家回顾JavaScript对象创建的7种方式,从最原始的字面量到现代的ES6 class,每一步演进都解…

基于单片机的无线水塔监控系统设计(论文+源码)

本设计为基于单片机的无线水塔监控系统设计,主要由以下几部分组成:均采用STC89C52RC单片机为主控;主机:NRF24L01无线通讯模块,1602LCD液晶显示屏。从机:NRF24L01无线通讯模块,水位传感器&#x…

凌晨0-3点不睡,你熬的不是夜,是人生!

“熬夜”这个词,早已成为现代生活的常态。有人为了工作加班到深夜,有人为了娱乐刷剧到天明,但你知道吗?熬夜最“要命”的时间段,其实是凌晨0点到凌晨3点。别以为只是少睡几个小时而已,这个时间段不睡&#…

大语言模型基石:Transformer

一、引言 如今火爆的 GPT、LLaMA、通义千问、ChatGLM 等大语言模型,背后都离不开一个核心架构——Transformer。 2017 年,Google 在论文《Attention Is All You Need》中首次提出 Transformer 模型,彻底改变了自然语言处理的发展方向。它摒…

【算法】【链表】160.相交链表--通俗讲解

算法通俗讲解推荐阅读 【算法–链表】83.删除排序链表中的重复元素–通俗讲解 【算法–链表】删除排序链表中的重复元素 II–通俗讲解 【算法–链表】86.分割链表–通俗讲解 【算法】92.翻转链表Ⅱ–通俗讲解 【算法–链表】109.有序链表转换二叉搜索树–通俗讲解 【算法–链表…

MySQL——库的操作

1、创建数据库语法:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name这里的CHARACTER SET表示指定数据库采用的字符集…

Python ast模块(Abstract Syntax Trees,抽象语法树)介绍及使用

文章目录 核心概念 基本使用流程 常用节点类型 示例代码 实际应用场景 注意事项 `ast.literal_eval()` 功能说明 适用场景 使用示例 限制与安全特性 与 `eval()` 的对比 总结 Python 的 ast 模块( Abstract Syntax Trees,抽象语法树)允许你解析、分析和修改 Python 代码的…