CLOSE THIS WINDOW TO RETURN TO THE CLASS TEXTS PAGE

How IRC Works

This class is going to cover 5 general areas of IRC Knowledge. The 5 areas are:

1) SERVER RELAYS
2) SERVER LAG
3) SERVER DE-SYNCH
4) SERVER SPLITS
5) SERVER OPS

**This class may LOOK "techie", but it's really not. It will help you understand many of the things you see happen on IRC. :)

IRC stands for Internet Relay Chat. It is a method for people all over the world to connect to their nearest chat servers (IRC servers) which are linked up to all other servers in the Network.

You can also read more about IRC History by visiting Jarrko Oikarinen's (he invented IRC in 1988) own original material on IRC at: http://www.the-project.org/history.html.

There are lots of IRC Networks in the world, each one made up of many IRC servers linked together. They run a common IRC language (protocol.) The biggest ones in the world are DALnet, Efnet, IRCnet and Undernet, but there are hundreds of others.

Most IRC servers are voluntarily donated to be part of a particular network by the server owners who want to link up.

Each IRC Network has a committee that runs it, Admins for each server, and IRCops who deal with the day-to-day network problems (including disruptive users.) You can read all about this by going to each Network's website.

You connect to an IRC network by choosing one of its servers to connect to. Once you have connected to that server you can reach everyone on that network.

You connect using an IRC program or "client". The three most common ones are called mIRC, PIRCH (for Windows) and IRCLE (for Macs). You can also chat on IRC using a javachat link from websites that have it.

1) SERVER RELAYS

IRC servers are connected to one another in what’s called a RELAY - each one is not connected to ALL the others - instead they are in a kind of chain.

Some servers are connected to only ONE other server ("leaves") while other servers are connected to several other servers ("hubs"), forming a web of IRC servers across the world.

Imagine an IRC Network of three servers - we will call them Server A, Server B and Server C. Four people - Pooh, Piglet, Rabbit and Tigger all decide to log on and meet in a channel called #Cyberangels to chat.

Pooh logs onto the Network using a Server A. Piglet logs onto the Network using a Server B. Rabbit and Tigger both log onto the Network using a Server C.

Illustration #1:

 
               #CYBERANGELS
            /       |        \
           /        |         \
          /         |          \
    SERVER A<-->SERVER B<-->SERVER C
       |             |            |
       |             |            |
     Pooh          Piglet      Rabbit 
                               Tigger
 

With all servers linked and "synched" (synchronized) Pooh, Piglet, Rabbit and Tigger all join #CyberAngels. Although they logged on through different servers, they all meet in one channel. Each server keeps its own record of what's happening in the channel. But they have logged on using 3 different servers.

The servers are linked in a chain. A is connected ONLY to B. B is a HUB and is connected to A AND C. And C is connected ONLY to B. A HUB is a server connected to MORE THAN ONE other server. A LEAF is a server connected only to ONE other server.

In the above example B is a HUB. A and C are LEAVES. So when Pooh types words to the channel, his words go first to Server A. Server A then RELAYS his words to Server B, and then Server B relays his words to Server C. That's why it is called Internet Relay Chat.

So when Pooh speaks in the channel, his words make two "hops" before Rabbit and Tigger can see them, as they are passed from server to server.

Piglet actually sees Pooh's words BEFORE Rabbit and Tigger do, because he is nearer to Pooh (his server is one hop away and Rabbit's and Tigger's server is 2 hops). When everything is running smoothly this relay process happens very fast.

The relay system on IRC is two-way. When Piglet chats, HIS words are relayed by Server B to BOTH Server A and Server C.

The /who command will list everyone in the channel. If Pooh types /who #CyberAngels in our example above, this is what he will see:

6:07 PM: #cyberangels Pooh H O
6:07 PM: #cyberangels Piglet H 1
6:07 PM: #cyberangels Rabbit H 2
6:07 PM: #cyberangels Tigger H 2

The letter H in these lists means the person is HERE (in other words they are not marked as "away") If a person is marked as Away the letter G (Gone) will show instead.

The numbers after the letter H refer to how many server hops each person is away from the person doing the /who. In Pooh's case Tigger is 2 servers away.

If Piglet types /who #cyberangels in our example above, this is what he will see:

6:07 PM: #cyberangels Pooh H 1
6:07 PM: #cyberangels Piglet H 0
6:07 PM: #cyberangels Rabbit H 1
6:07 PM: #cyberangels Tigger H 1

In Piglet’s case everyone is only 1 server away.

Now, if Rabbit types /who #cyberangels in our example above, this is what he will see:

6:07 PM: #cyberangels Pooh H 2
6:07 PM: #cyberangels Piglet H 1
6:07 PM: #cyberangels Rabbit H 0
6:07 PM: #cyberangels Tigger H 0

In Rabbit’s case Tigger has a 0 which means he is on the same server as Rabbit is.

2) Server Lag

Our friends are chatting in one channel called #cyberangels, but they are linked to that channel as was shown in Illustration #1.

Each server keeps its own record of #cyberangels, and they constantly update each other by relaying information along the chain. Sometimes, however, one server may slow down and have trouble updating the info from the other servers.

This may happen as a result of heavy server traffic (too many users logging on to it), or temporary freezes in the server's operation system (just like on OUR computers!). When a server is slow to respond it is said to be LAGGED.

When a person is experiencing heavy lag from a server then that person's words take ages to reach other people.

Illustration #2:

              #CYBERANGELS
            /      |       \
           /       |        \
          /        |         \
   SERVER A<-->SERVER B<LAG>SERVER C
     |             |            |
     |             |            |
   Pooh          Piglet      Rabbit 
                             Tigger
 

In our example above, Server C becomes lagged in relation to the other servers. This means that when Rabbit types his words to the channel they come up instantly on HIS computer screen - in other words HIS server has his words and is showing them immediately.

This also means Tigger will see them immediately too because he is using the same server. Piglet and Pooh, however, will not be so lucky. They may not see Rabbit's words come up on THEIR computer screens for many seconds, or even minutes.

Tigger may even leave the server - but Pooh and Piglet will continue to see him there for ages afterwards, because their servers have not yet been updated from Server C about what's happening on it.

Similarly, if Rabbit is lagged and he types a command to his server - for example the /who command - it will take him ages before he sees a reply.

Lag is tested by PINGING other users. A PING is a connection check ("Are you there?") and receives a reply called a PONG to indicate that the other person is still connected ("Yes, I'm here.") The time lapse between the ping and the pong is called LAG, and is usually measured in seconds.

One way to solve lag is for everyone to join using the same server.

3) SERVER DE-SYNCHING

What happens in the example above if Server C develops a technical problem and stops sending or accepting information from the other servers?

This kind of server problem is called a "de-synched" server or de-sychronized server. It means that the servers are no longer updating each other properly, although they ARE still connected.

A de-synch may also mean that a server that is linked to, say, 3 others has lost connection with one of them, thereby slowing down the relay and getting out of "synch" in that way.

This kind of problem can occur after a netsplit, when the servers have broken apart completely. When they re-join, they are suppose to all update each other, but sometimes this doesn't happen properly or quickly.

In this example, let's say that Pooh is the channel Op.

Illustration #3:

              #CYBERANGELS
            /      |        \
           /       |         \
          /        |          \
   SERVER A<--->SERVER B<De-Synch>SERVER C
      |             |              |
      |             |              |
    @Pooh         Piglet        Rabbit 
                                Tigger
 
 

When everything is working properly, the relay from Server to Server is a two-way relay. In this example Server C has become de-synched and is no longer operating a two-way relay.

Instead it is keeping its own record of what's happening in the channel and not sharing it with other servers properly.

This means a number of strange things can happen. (This info is mainly so you don't have a heart attack if you have kickbanned someone...and they are still in the channel 10 minutes later...and other strange things that happen in the channel. Now you will know what is going on.)

For example:

a). Words typed by Piglet and Pooh may not be shown for ages on Rabbit or Tigger's screen, or may not even be shown at all.

b). Server C may have no channel topic showing. Rabbit says, "I can't see a topic", but Pooh says, "The topic is there." That is a clear indication of a de-synch.

c). Tigger may op up. Now the channel has two ops, but Pooh and Piglet won't see that Tigger now has ops, because as far as Server A and B are concerned Tigger does NOT have ops.

d). Tigger uses his Ops powers to kickban Piglet. According to Server C Piglet is now kicked and banned from #Cyberangels, but according to Servers A and B Piglet is still there and was never banned or kicked, because according to Server A and B Tigger is NOT an Op.

e). Rabbit leaves the channel, and Tigger says goodbye to him. But Pooh and Piglet still see Rabbit in the channel and continue talking to him.

f). Pooh sets the channel mode to +i (invite only). The channel is now +i for Pooh and Piglet but it is not +i on Server C, which means users can continue to join #Cyberangels even though Pooh has set it +i. To Pooh it will look as if people are just walking through his mode setting and ignoring it.

g). Pooh kickbans Rabbit and Rabbit kickbans Pooh. According to Pooh's server Rabbit has been kickbanned and is gone from the channel. According to Rabbit's server Pooh has been kickbanned and HE is gone from the channel.

On large nets you will see these things happen often!

The best way to resynch the channel is for everyone on all servers to leave the channel so that it closes, then everyone rejoins. This allows the servers to "clean slate" and start fresh with the relays.

One other note here: If 2 servers have been de-synch for 30 minutes, it's impossible for them to send 30 minutes worth of info to one another.... You have lost the info, meaning you won't see the posts from others. If you had done a kickban, it may be a good idea to do it again, to make sure.

4) SERVER SPLITS

Sometimes due to heavy traffic or technical problems servers do more than just de-synch - they actually disconnect/break apart temporarily. This is called a SPLIT. Imagine that suddenly Server C splits from the relay completely. The Network now looks like this:

Illustration #4:

          #CYBERANGELS       #CYBERANGELS
            /       |              |
           /        |              |
          /         |              |
   SERVER A<--->SERVER B       SERVER C
      |             |              |
      |             |              |
    @Pooh         Piglet        Rabbit 
                                Tigger
 

Remember that each server keeps a record of the channel and what's happening in it. Once server C has split there are now TWO #cyberangels on this IRC network.

One #cyberangels has Rabbit and Tigger in it. The other #cyberangels has Pooh and Piglet in it - because Servers A and B are still connected and sharing information.

When a server splits it LOOKS like people logged off IRC. In the example above, Pooh and Piglet will see the following server messages as Rabbit and Tigger "signoff":

6:47 PM: ***Quit: Rabbit (Server C Server B)
6:47 PM: ***Quit: Tigger (Server C Server B)

Pooh and Piglet can see from that message that the other two haven't actually logged off of IRC. The message tells them that the two servers have split.

For Rabbit and Tigger however it looks like Pooh and Piglet were the ones who left. Rabbit and Tigger see THIS message:

6:47 PM: ***Quit: Pooh (Server B Server C)
6:47 PM: ***Quit: Piglet (Server B Server C)

That's why when servers eventually rejoin, everyone always says to the others "Welcome Back!" To each person it looks like the OTHERS left.

While the servers are split new people may join either channel. Let's say, for example, that now with the servers split, Eeyore joins #CyberAngels using server C and Owl joins #cyberangels using Server A. The network NOW looks like this:

Illustration #5:

 
           #CYBERANGELS      #CYBERANGELS
            /       |              |
           /        |              |
          /         |              |
   SERVER A<--->SERVER B       SERVER C
      |             |              |
      |             |              |
    @Pooh         Piglet        Rabbit 
    Owl                         Tigger
                                Eeyore
 

For Rabbit and Tigger their channel only has 3 people in it. They don't see Owl join Server A because they are not connected right now to Server A. Likewise Pooh, Piglet and Owl can't see Rabbit, Tigger and Eeyore.

During a split BOTH versions of the channel are correct. It's just that the servers have not yet relayed all the information correctly. Eventually, of course, the servers rejoin and then all update themselves with the missing servers' information.

5) SERVER OPS

Lets look at another scenario: Pooh is on Server A and Piglet is on Server B and no one is on Server C - all Servers are CONNECTED:

Illustration #6:

               #CYBERANGELS
              /     |      \
             /      |       \
            /       |        \
   SERVER A<--->SERVER B<--->SERVER C
      |             |            |
      |             |            |
    @Pooh          Piglet      
 
 

Now Server C splits. Server C is NOT CONNECTED to the others, and no one is logged onto it:

Illustration #7:

         #CYBERANGELS     #CYBERANGELS
          /        |              |
         /         |              |
        /          |              |
  SERVER A<--->SERVER B       SERVER C
     |             |              |
     |             |              |
   @Pooh          Piglet        
 
 

So according to Server C, #Cyberangels is an empty channel. If channel services is running from Server A then at this time Channel Services do NOT protect Server C because it has broken off.

On Server C the channel is empty. First one IN gets "server ops". Now Kanga, who is a complete stranger, logs onto Server C and joins #Cyberangels:

Illustration #8:

        #CYBERANGELS       #CYBERANGELS
          /        |              |
         /         |              |
        /          |              |
  SERVER A<--->SERVER B       SERVER C
     |             |              |
     |             |              |
   @Pooh         Piglet         @Kanga
 
 

Because Kanga is first one entering the channel (on HER split server), Kanga gets opped by Server C as the first user into a channel. This opping by the split server is called "Server OPs".

Even if the IRC Network has Channel Protection services, they may not be protecting Server C users, because when a server split, Channel Services split also and the split server can be cut off from Channel Services, and it will read in the channel info that the channel is newly created.

When the servers all rejoin, Pooh and Piglet will be surprised to see an Op joining their channel that they do not know.

Remember the last illustration...you had Pooh and Piglet on one side of the split and Kanga on the other...

THEN Kanga changes HER nick to Pooh:

Illustration #9:

         #CYBERANGELS       #CYBERANGELS
          /        |              |
         /         |              |
        /          |              |
  SERVER A<--->SERVER B       SERVER C
     |             |              |
     |             |              |
   @Pooh         Piglet         @Pooh
 
 

Kanga then waits for the rejoin. Once they are all back together the servers will fight over which Pooh is the right one and often BOTH get disconnected. That's how attackers use splits to mess with channels.

But if the IRC Network runs Channel Services, then when Channel services connect back up to the split server they will immediately De-Op anyone getting Server Ops - that's for channel protection.

If you are chatting, however, on an IRC Network without any channel services (For example, IRCNet or Efnet), then when channels rejoin the server ops will NOT be auto-deopped.

=========================
That is basically the class...here are some references:

Resource links for your bookmarks:

IRC Help Page:
http://www.irchelp.org/

Saint's list of Net and servers:
http://www.geocities.com/southbeach/pier/6875/

MIRC:
http://www.mirc.com/

pIRCh:
http://www.pirchat.com/

IRCLE Users (Mac)
http://www.ircle.com/

IRCII (UNIX)
http://www.irchelp.org/irchelp/ircii/

*Content copyrighted to Cyberangels and can not be copied or distributed without expressed written permission from Parry Aftab Esq.*

CLOSE THIS WINDOW TO RETURN TO THE CLASS TEXTS PAGE