ACE通信设计空间指导

ACE通信设计空间

通信是网络应用程序设计的基础。本章就通信设计空间做了领域分析,介绍了网络应用程序之间互相作用的规则、形式和抽象层次。

本章我们将讨论一下设计空间:

一、无连接协议和面向连接协议

所谓协议,就是一组规则,用来指定“控制信息”和“数据信息”如何在通信实体(譬如,在网络计算环境内部相互作用的应用程序进程)之间交换。协议一般分为无连接(connectionsless)和面向连接两种。

在这一设计空间,需要权衡的地方: 延迟、可伸缩性和可靠性。

1.1、无连接协议

无连接协议提供的是“面向消息”的服务。其中,每一条消息都可以独立寻址和发送。无连接协议一般采用“尽力”发送语义。这些语义不保证某组消息会以特定次序到达目的地,甚至根本不会到达目的地!

例如:UDP、 IP、这些协议可以直接被多媒体应用使用。这些应用允许一定程度的数据丢失。UDP/IP还支持多播和广播功能。

1.2、面向连接协议

面向连接协议提供的是可靠、有序、不重复的发送服务。对那些不允许数据丢失的应用程序来说,这种协议十分有用。

为了提高性能并保证可靠性,“面向连接”协议在发送端和接收端交换并维护状态信息。

例如:TCP协议,它被使用到很多“面向会话”的Internet应用中。如Web服务和电子邮件中。

使用面向连接协议时,应用程序和中间件开发者还必须作出以下设计选择:

1.2.1、数据成帧策略(想问问,是防止粘包吗?)

"面向连接"协议提供了不同种类的数据成帧策略。例如, “面向消息”发送策略为某些“面向连接”协议所支持,如TP4和XTP。相反,TCP是一种字节流协议,不保护应用程序消息的边界。因此,在TCP上,如果某一应用程序通过4个send()调用传输4条不同的消息,会有一个或多个TCP数据段被传输给接收端。所以,如果某一应用程序需要"面向消息"发送,发送端和接收端就必须执行额外的处理,以将4条仔TCP上交换的消息分割成帧。如果消息的长度总相同,并且永远没有网络错误发生,成帧相对来说简单:否则,这会成为一个不小的问题。譬如:粘包的处理。

1.2.2、连接多路复用

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

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

相关文章

easyexcel poi根据模板导出Excel

1.导入依赖 <!-- poi依赖--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version> </dependency> <!-- poi对于excel 2007的支持依赖--> <dependency…

基于Spring Boot 的 Ext JS 应用框架之coworkee

Ext JS 官方提供了一个人员管理的完整应用框架 - coworkee。该框架的显示如下: 该框架的布局特点如下: 布局方式: 左右布局, 左侧导航栏默认收合特点:左侧导航区占用空间小, 工作区较大, 适合没有二级导航栏,工作区需要显示的内容较多的系统。如果导航栏是横向底部,就…

typescript基础之never

TypeScript 的 never 类型是一种特殊的类型&#xff0c;它表示的是那些永远不存在的值的类型。例如&#xff0c;一个抛出异常或无限循环的函数的返回值类型就是 never&#xff0c;因为它们永远不会返回任何值。never 类型是所有类型的子类型&#xff0c;也就是说&#xff0c;任…

❤ 给自己的mac系统上安装java环境

❤ 给自己的mac系统上安装java环境 &#x1f353; 作为前端工程师如何给自己的mac系统上安装java环境 &#x1f34e; 最近因为自己的一些项目需求&#xff0c;mac电脑上需要安装一些后台的java环境&#xff0c;用来跑后台的java程序&#xff0c;于是从一个前端工程师的角度安…

域名解析与http服务器实现原理

域名解析函数gethostbyname struct hostent *gethostbyname(const char *name); 主机结构在<netdb.h>中定义如下&#xff1a; 结构的成员包括&#xff1a; h_name&#xff1a;主机的正式名称 h_aliases&#xff1a;主机的备用名称数组&#xff0c;以NULL结尾指针 h_…

C语言——程序执行的三大流程

顺序 : 从上向下&#xff0c; 顺序执行代码分支 : 根据条件判断&#xff0c; 决定执行代码的分支循环 : 让特定代码重复的执行

jsp+servlet+mysql阳光网吧管理系统

项目介绍&#xff1a; 本系统使用jspservletmysql开发的阳光网吧管理系统&#xff0c;纯手工敲打&#xff0c;系统管理员和用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;修改个人信息、修改密码&#xff1b;机房类型管理&#xff1b;机房管理&#xff1b;机位…

【腾讯云 Cloud studio 实战训练营】真正做到让你的开发成本只在编码

文章目录 写在前面CODINGCloud studio工具在线编码运行项目代码上传Cloud Studio 开发贪吃蛇写在最后 写在前面 期待已久的体验活动终于来了&#xff0c;Clound Studio用了才知道有多爽&#xff0c;Cloud Studio 是基于浏览器的集成式开发环境 (IDE)&#xff0c;为开发者提供了…

HTTP 服务器(基于go实现)

编写一个 HTTP 服务器&#xff0c;接收客户端 request&#xff0c;并将 request 中带的 header 写入 response header 解析HTTP请求头 import ("fmt""net/http" )func headers(w http.ResponseWriter, r *http.Request) {// 将request中的信息写入到 w中…

leetcode 17.电话号码字母组合

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/ 代码&#xff1a; class Solution { public:const char * letterCombine(int i) {static const char *letter[] { "" , …

Python的for循环

for语法&#xff1a; """ for 临时变量 in 待处理数据集(序列):循环满足条件时执行的代码 """ 例子&#xff1a; name "itheima is a brand of itcast" count 0 for i in name:if i "a":count 1 print(f"a的数量…

maven推包The environment variable JAVA_HOME is not correctly set

解决办法&#xff1a; 打开idea查看jdk安装位置 1.在/etc下面创建&#xff08;如果存在就是更新&#xff09;launchd.conf。里面添加一行&#xff1a; setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home #JAVA_HOME后面是我的java安装路径…

一文讲透:低代码平台是什么?低代码平台应该如何挑选?

低代码平台是什么&#xff1f;低代码平台的边界在哪&#xff1f;低代码平台的优势&#xff1f;低代码平台哪个好用&#xff1f;2023年有哪些国内值得关注的低代码平台&#xff1f;本文将深入浅出的带大家了解低代码平台&#xff0c;并且为大家带来2023年国内最热六款低代码平台…

【SpringBoot】接口实现:SpringBoot实现博客系统的文章列表页接口代码

以下是一个简单的Spring Boot博客系统的文章列表页接口代码示例&#xff1a; java RestController RequestMapping("/articles") public class ArticleController {Autowiredprivate ArticleService articleService;GetMapping("/")public List<Artic…

Lora升级!ReLoRa!最新论文 High-Rank Training Through Low-Rank Updates

目录 摘要1 引言2 相关工作3 方法4 实验5 结果6 结论7 局限性和未来工作 关注公众号TechLead&#xff0c;分享AI与云服务技术的全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0…

Django-跨域

一、基础概念 cors 跨域资源共享 二、跨域请求-简单请求 满足以下全部条件的请求为 简单请求 1.请求方法如下&#xff1a; GET or HEAR or POS 2.请求头仅包含如下&#xff1a; Accept、Accept-Language、Content-Language、Content-Type 3.ConTent-Type 仅支持如下三种&…

【LeetCode】28 . 找出字符串中第一个匹配项的下标

28 . 找出字符串中第一个匹配项的下标&#xff08;简单&#xff09; 方法&#xff1a;双指针法 思路 使用 find 函数枚举原串 ss 中的每个字符作为「发起点」&#xff0c;每次从原串的「发起点」和匹配串的「首位」开始尝试匹配&#xff1a; 匹配成功&#xff1a;返回本次匹配…

【大模型】基于 LlaMA2 的高 star 的 GitHub 开源项目汇总

【大模型】基于 LlaMA2 的高 star 的 GitHub 开源项目汇总 Llama2 简介开源项目汇总NO1. FlagAlpha/Llama2-ChineseNO2. hiyouga/LLaMA-Efficient-TuningNO3. yangjianxin1/FireflyNO4. LinkSoul-AI/Chinese-Llama-2-7bNO5. wenge-research/YaYiNO6. michael-wzhu/Chinese-LlaM…

c#值类型和引用类型

在C#中&#xff0c;变量可以是值类型或引用类型。下面是一些常见的值类型和引用类型 值类型&#xff1a; 基本数据类型&#xff1a;bool、byte、sbyte、char、short、ushort、int、uint、long、ulong、float、double、decimal 枚举类型&#xff1a;enum 结构体类型&#xff1…

List<Map>操作汇总

分组 List<Map> mapList new ArrayList<>(); Map<String,List<Map>> mapListGroup mapList.stream().collect(Collectors.groupingBy(e->e.get("xxx").toString())); 最大值最小值 int max maps.stream().mapToInt(e -> new Inte…