分布式系统通信:TCP与UDP、远程方法调用及部分故障处理
1. TCP与UDP对比
TCP和UDP是传输层的两种重要协议,它们存在诸多显著差异。TCP在连接建立时采用3次握手(SYN、SYN ACK),并会对数据包进行确认(ACK),这样能有效处理数据包丢失问题。此外,TCP还有一个4次握手的连接关闭阶段,但在相关图示中未展示。而UDP则省去了连接建立、拆除、确认和重试等环节。因此,使用UDP的应用程序需要能够容忍数据包丢失以及客户端或服务器故障,并做出相应处理。
2. 远程方法调用(RMI)
可以使用与传输层协议TCP和UDP直接交互的低级API来编写分布式应用程序,最常见的方法是使用标准化的套接字库。不过,套接字复杂且容易出错,通常不建议使用,除非确实需要编写系统级代码。
2.1 套接字概述
套接字是客户端和服务器之间双向网络连接的一个端点,由节点的IP地址和端口组合来标识。每个节点可支持65,535个TCP端口和65,535个UDP端口。连接由源套接字和目标套接字地址组合来识别。套接字库支持TCP和UDP协议,分别使用SOCK_STREAM和SOCK_DGRAM选项。
使用套接字进行通信时,以移动银行应用为例,客户端可能会向服务器发送请求,如查询用户支票账户余额:
{"balance", "000169990"}
服务器接收到消息后,根据消息中的操作标识符和参数执行相应操作,并返回结果,如:
{"000169990