网络编程:通信设计空间

2020-05-22  本文已影响0人  wangawu121

通信设计空间

讨论以下网络编程中的通信设计空间:

1.无连接协议与面向连接协议

需要权衡的地方:延迟、可伸缩性、可靠性

无连接协议:

如用户数据报协议(UDP)、网际协议(IP)。

这些协议可以被多倍体应用程序使用,这些应用允许一定程度的数据丢失。

UDP/IP还支持不可靠的多播和广播功能,允许一个发送者和一组接收者进行通信。

面向连接协议

如传输控制协议(TCP),用于很多面向会话的应用,如web服务和电子邮件。

数据成帧策略 & 连接多路复用策略

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

比如TCP,是一种字节流协议,不保护应用程序的边界。

因此在TCP上,如果某一应用程序通过4个send()传输4条不同的消息,会有一个或多个(可能大于四个)TCP数据段(segment)被传输给接收端。

所以,如果需要面向消息发送,发送端和接收端必须执行将4条在TCP上交换的消息分割成帧的处理。

两个一般性策略:

  1. 多路复用

一个进程中的多个线程发出的所有客户请求都通过一条TCP连接传递给一个服务器进程。

优点:节省OS的通信资源(如socket句柄和连接控制块)。

缺点:难以编程,缺乏效率和确定性。

这些问题源自”同步“机制和”环境切换“机制。多路连接上,这些机制用来将请求和应答联系起来。

  1. 非多路复用:

每一个客户都使用不同的连接和对等服务器通信。

优点:可以更好地控制通信地优先级。在非多路复用连接地设计中,每一个连接地优先级可以单独设定,这样一来,即使其他线程之间存在大量低优先级通信任务,高优先级通信也可以快速完成。(这避免了低优先级线程占用一个单独的多路连接,即优先级倒置现象)

此外,因为连接没有被共享,这个策略的同步开销很小,这是因为发送和接收双向请求时不需要额外的锁定工作。

缺点:需要更多OS资源,在某些环境中伸缩性不是很好。

2.同步及异步消息交换

网络应用程序中,客户向服务器发送一个请求,服务器在处理这个请求后返回一个应答。

管理请求/应答协议交换有两种可选策略——同步和异步。

选择同步或者异步需要考虑两个因素:

同步的请求/应答协议

  1. 请求的结果影响后续请求的决定。例如要交换验证信息,需要安全认证信息交换成功后才能发送机密信息请求。

  2. 应用程序中交换的信息需要在低延迟网络中执行短期处理。(如高速LAN中的NFS read()write()操作)

  3. 如果实现的简易性、协议交换的少量性,重要于异步请求/应答协议可能的获得性能上的提高的话,就选择同步的方式。

异步的请求/应答协议

  1. 无需应答就可以决定后续请求。
  2. 通信的延迟与请求所需的处理时间密切相关。此时异步策略有利于有效利用网络以减少高延迟带来的影响。
  3. 对性能提高的侧重大于将应答和请求关联起来并实现重试的策略所带来的额外复杂度。

3.消息传递与内存共享

消息传递

信息在不同计算机的对等体之间传输,称为消息传递。消息传递是明确地通过IPC(进程间通信)机制来交换字节流和面向记录地数据。

内存共享

内存共享允许相同或不同主机上的多个进程访问和交换数据,仿佛数据是位于每个进程的本地地址空间意义。

消息传递IPC模型在实际应用中比分布式内存共享更常见。

上一篇 下一篇

猜你喜欢

热点阅读