cad*_*luk 2 irc networking path-finding
RFC 2810对于一对一通信有以下规定:
一对一的通信通常由客户端执行,
因为大多数服务器到服务器的流量并不是服务器
仅相互通信的结果。为了给客户端提供一种相互通信的方式
,要求所有服务器都能够
沿着生成树向一个方向发送消息,以便到达任何
客户端。因此,消息传递的路径是
生成树上任意两点之间的最短路径。
(强调我的。)
这个“一个方向”是什么意思呢?只针对一位客户?它如何“到达任何客户端”并找到“任意两点[IRC网络上的主机]之间的最短路径”?
为什么不直接存储客户端的 IP 地址并让 IP 完成其工作呢?毕竟,IRC 是建立在 TCP/ IP之上的。
约翰内斯提到了解决方案,但没有完全回答您的问题。然而,他是正确的,图论是答案的很大一部分。
由于EFnet和IRCnet的服务器图中的每个子节点只有一个父节点,因此最短路径是图上两个服务器之间的唯一路径;同一顶点不能在没有回溯的情况下被访问两次。这称为生成树,其中所有节点都连接,但不存在环路。
IRC 不一定像 TCP/IP 那样是单播的。它通过广播与不同服务器上的多个客户端进行通信。需要注意的重要一点是,客户端说“向 #coding 上的每个人发送‘嗨’”,并且消息从客户端传输到连接的服务器。该服务器将消息传递给任何连接的服务器,这些服务器将其传递给订阅 #coding 的任何客户端,然后传递给任何连接的服务器。
实际上并不存在“客户对客户”的沟通。一对一是通过向具有指定名称的用户发送消息来完成的;不是IP地址。NickServs 有助于防止人们劫持名称,并暂时将昵称与 IP 关联起来,拒绝对其他 IP 地址进行身份验证,并在身份验证过期时使用密码保护昵称。
与发送频道消息的方式非常相似,用户向服务器发送消息“发送‘hi’给@nicky”,服务器简单地传递该消息,直到客户端@nicky被列为连接到该频道的客户端。服务器接收消息。机器人为 @nicky 提供了一种在离线时接收消息的方法;他们使用用户名登录。编辑:IRC 实际上为客户与客户之间的沟通开辟了一个仅受邀请的个人频道。
本质上,最短路径保证是IRC广播策略的结果;当消息传播到所需用户的服务器附近时,它就会被转发到所需的用户。如果服务器图中存在循环,时间戳可能会阻止回显消息。
在架构部分,我们发现证据表明“生成树”的使用是正确的。服务器相互了解,以防止环路(保证最短路径)并有效连接:
6.1 可扩展性
人们普遍认为,该协议在大型场合使用时扩展性不够好。主要问题来自于要求所有服务器都知道所有其他服务器、客户端和通道,并且有关它们的信息一旦发生变化就必须更新。
下面这个是由于没有替代路径/弯路可走的结果
6.3 网络拥塞
与可扩展性和可靠性问题以及生成树体系结构相关的另一个问题是 IRC 的协议和体系结构极易受到网络拥塞的影响。
IRC 网络被设计为与 IP 无关,并遵循最短路径,因为消息在整个图中传播,并在到达端点时停止。客户端和服务器有足够的信息来丢弃重复的广播。IRC 是一种非常简单但有效的聊天协议,它不对安全性、IP 或硬件做出任何假设。您实际上可以使用联网电报机连接到 IRC。