Server linking

From IRC Wiki
Jump to navigation Jump to search

Server linking is the technical process of linking multiple IRC servers together through (mostly) TCP/IP connections and sharing events and the global network state (Users, channels, ...) between them. It allows for users to connect to any of the linked servers and still find the same users and channels there[1] so that effectively only the latency and connectivity of a server is a criteria for choosing it, given users and channels are distributed everywhere. The uniform space created by multiple servers linked together is called a multi-server IRC network.

Netsplits

See also the main article → Netsplit

Due to the nature of the internet, connections aren't always reliable and might break up. Therefore, it is common that networks are split up at some point with two smaller temporary sub nets being created (the common Tree linking structure supports this problem by not providing multiple routes to another server to which one can fall back to). This becomes a problem when those two subnets merge again as it may allow Channel Takeovers and causes a lot of traffic.

Linking structures

Cyclic linking

In theory, one could link multiple servers over multiple routes together. That means server A could be linked to server B and C, while B and C could also have a link between them (which would make up a circle).

This imposes huge problems with duplicate messages though as each server is forwarding all messages it receives through the link to all the others behind it, which means that servers would get events twice and even again and again when each server forwards them. A lot of overhead would be needed to keep the events in order while they are spread over multiple routes multiple times to a target, as also different routes might run at different speed so that the order might be messed up depending on the route used for sending.

Therefore, most or even all of today's networks still use non-cyclic linking.[Source?]

Tree linking

Up to today, IRC servers are linked in trees, that means in a non-cyclic manner (see explanation of cyclic linking with multiple possible routes to a target and why it still isn't commonly used by today). This causes a weak point in IRC, because a single server-to-server connection (as it is the only route to another server and all the servers linked to it due to the non-cyclic nature) dropping out can separate a huge branch of servers in a network which aren't reachable anymore including the users on them. Cyclic links are so far not in use by any popular IRC daemon because of their complicated nature.

Those so-called netsplits are also problem for channel owners, because while the net is split separate instances of a channel occur on both split up parts of the net where others might try to gain op and take over a channel. This is successfully fighted by techniques like timestamping or the delay technique.

Takeover prevention

As channel takeovers as a result of a Netsplit are generally undesired, there are multiple techniques to prevent this from happening. IRC daemons usually implement one of the two techniques and the difference in the approaches and disagreement over the best method also was one of the reasons for the great split of [1][2].

Timestamping

Delay technique

References

See also