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上交换的消息分割成帧。如果消息的长度总相同,并且永远没有网络错误发生,成帧相对来说简单:否则,这会成为一个不小的问题。譬如:粘包的处理。