First, we define two types of links:

  • A point-to-point link is a direct link between two devices, like between an Ethernet switch and a host.
  • A broadcast link is a shared wire or medium, like old-fashioned Ethernet, wireless LAN, 4G/5G.

A multiple access protocol is defined as a distributed algorithm that determines how nodes share a single shared broadcast channel, i.e., when they can transmit. Two or more concurrent transmissions by nodes results in interference. We define a collision as happening when a node receives two or more signals at the same time. The protocol communications about channel sharing must use the channel itself!

We define a couple of constraints for how MAC protocols can be designed.

  • We’re given a multiple access channel (MAC) of rate bps.
  • When one node wants to transmit, it can send at a rate .
  • When nodes want to transmit, each can send at an average rate of .
  • It is fully decentralised: there is no special node to coordinate transmissions, and there is no clock synchronisation.
  • And it must be simple!

There are three broad classes of MAC protocols:

  • Channel partitioning divides the channel into smaller pieces (time, frequency, or code). Here, we allocate a piece to the node for exclusive use.
    • These protocols can share the channel efficiently and fairly at high loads.
    • At low loads, it’s incredibly inefficient. 1/N bandwidth allocated even if only 1 active node.
  • Random access is when the channel isn’t divided and collisions are allowed. But there must be a scheme to detect and recover from collisions.
    • There’s no a priori coordination among nodes, so there may be collisions in case of concurrent transmissions.
    • Such a protocol specifies how to detect collisions and how to recover from them.
    • Very efficient at low load: a single node can fully utilise the channel.
    • At high load, there’s a significant collision overhead.
  • Taking turns, where nodes take turns, but nodes with more to send can take longer turns.
    • Here, we try to get the best of both worlds of the above.
    • The channel is allocated explicitly (no collisions).
    • Nodes won’t hold the channel for long if there’s nothing to send.