Firstly, very important update: As of 5.0, CTC capping is no longer possible, since block is now on its own special roll. Second important update: Block now suffers from diminishing returns.
1. The Combat Table
So, firstly, we look at how attacks on WoW are calculated. For normal attacks, WoW uses what's called a single roll system, so basically, when you or a mob attacks, a single random number is generated and the results of the attack are determined based on that. Think of it like rolling a dice. Say, for example, you have a 1/6 chance to be missed, you have a 1/6 chance to dodge and a 1/6 chance to parry. If you roll a 1, the attack is a miss, if you roll a 2, the attack is dodged, if you roll a 3, the attack is parried. Anything else and the attack lands.
This might seem unimportant but it has two very important results.
Firstly, avoidance is additive, not multiplicative. One of the common mistakes people make in coming into the game is getting that wrong. What's the difference? Well, if it were multiplicative, it would mean that first the game would calculate if the attack was missed. If it wasn't, it would then calculate if the attack was dodged. If it wasn't, it would then calculate if the attack was parried. This results in a different total avoidance to what it actually is. For the maths, you'd get
Avoidance total = (1 - (1 - dodge) x (1 - parry) x (1 - miss)
This is wrong. Don't use this. To get your total avoidance, you can simply add your avoidance stats together. Which leads to the second very important result: It's theoretically possible to become what is referred to as "unhittable". What this means is simply that any attack made against you will be avoided. If avoidance were multiplicative, this would only be possible if you had a move like Evasion (Which gives 50% dodge chance) on top of 50% dodge. With a combat table, you can have, say, 50% dodge, 45% parry and 5% miss and you'd be completely unhittable. With a multiplicative system, you'd still be hit roughly 25% of the time. This isn't too important unless you're interested in the maths of it, so to sum up, basically to get your total avoidance you simply add your avoidance stats (ie, miss, dodge and parry).
The combat table is filled out in that order, from top to bottom. Now, criticals are kept in for the sake of completion here (I've left out a few things that tanks need never worry about, such as glancing or crushing blows) but against bosses, the critical chance is always 0% due to your spec passives. There are mobs, however, who can crit despite having those talents but that's not going to be covered in this thread.
It's worth noting here that player attacks use the same sort of combat table (I'll touch on this later)
So, to fill out the table with some generic avoidance stats, we get this:
Anyone who's done any basic maths knows a list of percent chances needs to add up to 100, so whatever's not avoidance is chance to be fully hit:
This is where being unhittable comes in. If you can increase your avoidance stats high enough, you can reduce that hit chance to 0%. At this point, you're unhittable, but like I said, this will only ever be possible with short term buffs.
It's worth pointing out here, that mobs higher levelled than you have an innately higher chance to hit. It works out to be a 1.5% decrease to each avoidance stat per level above you, so for a mob one level above you, you lose 4.5% avoidance (Or 3% if you're a bear, since you can't parry anyway), and for mobs two levels above you, you lose 9% avoidance (Or 6% if you're a bear), and for mobs three levels above you (ie, raid bosses), you lose 12%. Wait! What's that? Shouldn't it be 13.5%, because it's 1.5% x 3 levels (4.5%) x 3 avoidance stats? (13.5%)? Well not quite, because you only have a 3% chance to be missed. You can't have a -1.5% chance to be missed, so it's 3% less miss chance, plus 4.5% each for parry and dodge. Or, well, 7.5% for a bear.
So the way this works in combat is similar to the dice roll I mentioned earlier. Every time a monster hits you, the computer calculates a random number between 0.00% and 100%, then based on that, looks up what that number corresponds to in the attack table and then does whatever with it. So, say, if it rolls a 3.67%, that becomes a miss. If it rolls a 17.91%, it becomes a dodge and so on.