分布式系统学习笔记(三)——进程间通信

TCP/UDP与IP的区别

IP协议支持两台计算机间通信
TCP/UDP协议提供两个进程间通信,通过端口号完成目标计算机上特定进程的寻址。
UDP的应用程序接口提供了消息传递的抽象。不需要创建开销和确认消息,适用于不需要可靠传输单个或多个消息的服务和应用。
TCP的应用程序提供了进程对之间的双向流抽象。TCP是基于流,面向连接的编程,发送进程和接收进程间建立双向的通信通道,该连接只针对端到端,与中间的路由无关。TCP是可靠传输,其机制包括:排序、流控制、重传、缓冲、校验和。
套接字提供进程间通信的一个端点,它绑定了计算机IP地址和其一个本地端口。除IP组播意外,一个进程可以利用多个端口接受消息,但是一个端口只能为一个进程服务。
UDP数据报的故障类型:遗漏、排序。

TCP流通信
  • 规定数据大小,分割消息
  • 丢失消息确认方案与重传机制
  • 流控制
  • 检测消息重复和排序
  • 消息目的地。在流通信之前,需先建立连接(connect-accept),建立连接后,进程不需要IP地址和端口,即可读和可写
  • 客户和服务器的套接字对由一对流 连接,每个方向一个流,因此每个套接字都拥有输入流和一个输出流
    学习TCP详解
CORBA

CORBA(common object request broker architecture 公共对象请求代理结构)是独立于语言的RMI(远程方法调用)框架,主要包含以下部分:

  • 接口定义语言
  • 体系结构
  • 外部数据表示
  • 远程对象引用的标准格式

此处需要第五章RMI的概念
CORBA的公共数据表示CDR—外部数据表示。只包含所传对象的值,不包含值的类型。

类型表示示例
string字符串的字符数,后面依次是字符smith => 5 s m i t h
sequence长度,后面依次是元素
unsigned long无符号长整型1898 => 1 8 9 8
RMI与RPC

RMI:远程方法调用,客户端Java虚拟机上的对象像调用本地对象一样调用服务器Java虚拟机上的方法,涉及对象的序列化和解序列化。
如果对象中包含对其他对象或者数组的引用,则该引用将被序列化为句柄。
反射 实现了通过类名创建类,为给定的类创建具有给定参数的构造函数。
RPC:远程过程调用,通过网络从远程计算机上请求调用某种服务。

远程对象引用

远程对象引用是远程对象的标识符,在分布式系统的所有进程中是唯一的。
构造远程对象引用的一种方法是拼接计算机的互联网地址、创建远程对象引用的进程的端口号、创建时间、本地对象编号。
注意: 远程对象引用不是远程对象的地址
插图

IP组播

IP组播使IP数据包传送给组播组内计算机中。IP数据包能在局域网和互联网上组播,在互联网组播时,受到存活时间(TTL)的限制,限制组播数据报传输的距离。
组播组由D类互联网地址制定,前4位是1110的地址。组播组中的计算机既可接收IP数据包 也可发送IP数据包。应用通过将套接字加入到组,以加入到一个组播组中,因此IP组播属于应用编程级。
当一个组播消息到达计算机时,消息副本被转发到所有已经加入到指定组播地址和指定端口号的本地套接字上。

网络虚拟化

网络虚拟化是在一个已有的网络上构造多个不同的虚拟网络。每个虚拟网络被设计成支持特定的分布式应用,并为特定的应用进行优化,且不改变底层网络的特征。
覆盖网络是一个结点和虚拟链接组成的虚拟网络,位于底层网络(IP网络)之上。一个覆盖网络是一层,是在标准体系结构(TCP/IP)外存在的一层。开发者可以重新定义网络的核心元素、包括寻址、协议、路由。
示例:分布式散列表
以业务数据的散列值作为key(data key),业务数据本身位value, 装入分布式系统(bucket)中,这样系统不需要中心节点,可以达到去中心化,同时,如果hash 算法得当且哈希桶数足够多,可以达到数据均摊效果。分布式散列表中,有多个节点(主机),可令节点Id = data key (散列值足够大 不存在散列碰撞的情况,key 可作为唯一值),那么该系统的路由算法可采用“key-based routing” 也就是再分布式系统的物理层之上,构造分布式自己的拓扑结构,即 覆盖网络,其数据通讯是依赖互联网实现的。系统在路由是,只需按照节点Id路由,无需根据下层的网络属性路由(协议类型,IP地址,端口号)。

MPI

MPI(message passing interface 消息传递接口)是消息传递标准,包括协议和语义说明。多应用于并行计算。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!感谢提问。下面是有关 K210 学习笔记五中串口通信的一些内容: 在 K210 开发板上,串口是一种常见的通信接口,用于将数据从一个设备传输到另一个设备。串口通信通常使用 UART (Universal Asynchronous Receiver/Transmitter) 协议。 要在 K210 上进行串口通信,首先需要使用两个引脚:一个用于接收数据(RX),一个用于发送数据(TX)。这些引脚可以通过 GPIO 端口与外部设备连接。 在 K210 的开发环境中,可以使用 MaixPy 或者 Kendryte Standalone SDK 进行串口编程。 在 MaixPy 中,可以使用 `uart` 模块来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```python from machine import UART uart = UART(UART.UART1, 115200) ``` 然后,可以使用 `uart.write()` 函数发送数据,使用 `uart.read()` 函数接收数据。例如: ```python uart.write("Hello, world!\n") data = uart.read(10) ``` 在 Kendryte Standalone SDK 中,可以使用 `uart.h` 头文件中的函数来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```c #include "uart.h" uart_init(UART_DEVICE_1, 115200); ``` 然后,可以使用 `uart_send_data()` 函数发送数据,使用 `uart_receive_data()` 函数接收数据。例如: ```c uart_send_data(UART_DEVICE_1, "Hello, world!\n", 14); char buffer[10]; uart_receive_data(UART_DEVICE_1, buffer, 10); ``` 以上是关于 K210 学习笔记五中串口通信的简要介绍。如果你有更具体的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值