网络编程(1)

来源:互联网 发布:seo代理 编辑:程序博客网 时间:2024/04/28 09:37

通信(communication)是网络应用程序设计的基础。

通信设计空间(design dimension)的领域分析(domain analysis),网络应用程序之间相互作用的规则(rule)、形式(form)和抽象层次。 

1.1无连接协议与面向连接协议

所谓协议(protocol),就是一组规则,用来指定“控制信息”和“数据信息”如何在通信实体(譬如,在网络计算环境内部相互作用的应用程序进程)之间交换。协议一般分为无连接(connectionless)和面向连接(connection-oriented)两种。在这一设计空间,需要权衡的地方主要涉及延迟(latency)、可伸缩性(scalability)和可靠性(reliability)。

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

广泛使用无连接协议的例子有:用户数据报协议(UDP,User Datagram Protocol)和网际协议(IP,Internet Protocol)。这些协议可直接被多媒体应用程序(例如,IP语音或视频流[MSK00])使用,这些应用允许一定程度的数据丢失。UDP/IP还支持不可靠的多播(multicast)[DC90]和广播(broadcast)功能,允许一个发送者和一组接收者进行通信。

面向连接协议提供的是可靠、有序、不重复的发送服务。对那些不允许数据丢失的应用程序来说,这种协议十分有用。为了提高性能并保证可靠性,“面向连接”协议在发送端和(或)接收端交换并维护状态信息。传输控制协议(TCP,Transmission Control Protocol)是一种面向连接协议,它被运用于很多“面向会话(session-oriented)”的Internet应用中,如Web服务和电子邮件。.

1.2同步及异步消息交换

在很多网络应用程序中,客户向服务器发送一个请求,后者处理这个请求,然后返回一个应答。这种请求/应答协议既可以在无连接协议上实现,也可以在面向连接协议上实现。管理请求/应答协议交换的可选策略有两种:同步(synchronous)和异步(asynchronous).

是选择同步还是异步消息交换策略,要考虑以下两个因素:

1.        请求之间的关联性(interrelatedness);

2.        底层协议或传输介质的延迟。

         这些因素如何影响到策略的选择

同步请求/应答协议。这是最容易实现的形式。在这种协议中,请求(request)和应答(response)是以锁步(lock-step)次序交换的。每一个请求必须同步地接收到一个应答,然后才能发送下一个请求,如图1.2(1)所示。同步请求/应答协议适用于以下场合。

l  请求的结果决定后续的请求。例如,某一应用程序需要交换验证信息,那么,在安全认证信息成功交换之前,它不会发送机密信息请求。

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

l  较之后文介绍的异步请求/应答协议有可能获得的“性能上的提高”,“实现(implementation)的简易性”或“协议交换的少量性”更为重要。

异步请求/应答协议。它将请求从客户连续发送至服务器,无需同步地等待应答[AOS+00]。多个客户请求可以在服务器应答到达之前发送,如图1.2(2)所示。因此,异步请求/应答协议往往需要一种策略,用来检查请求的丢失或失败,然后重新发送。异步请求/应答协议适用于以下场合:

l  无需应答就可以决定后续请求。例如,Web浏览器可以使用异步策略,用于从同一服务器获取多个嵌入图像。因为每一个请求都是独立的,它们全都可以异步发送,不必等待应答。浏览器利用每一个应答中包含的信息,将应答匹配至相应的请求——即使应答的顺序不同于请求的发送顺序。

l  “通信的延迟”和“请求所需的处理时间”密切相关。异步请求策略有助于有效地利用网络,减少高延迟带来的影响。较之将“应答”和“请求”关联起来并实现“重试”策略所带来的额外复杂度,它在性能上的提高更为重要。

 

 

原创粉丝点击