221 lines
7.0 KiB
HTML
Executable File
221 lines
7.0 KiB
HTML
Executable File
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
|
<!-- CSMA.html (C) K. J. Turner 18/12/14 -->
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
|
|
<head>
|
|
|
|
<title>CSMA/CD ("Ethernet")</title>
|
|
|
|
<link rev="made" href="http://www.cs.stir.ac.uk/~kjt/"/>
|
|
|
|
<script type="text/javascript" language="JavaScript">
|
|
|
|
<!--
|
|
var simulator;
|
|
var serviceCount;
|
|
var serviceMode;
|
|
|
|
function validInteger(name, value, min, max) {
|
|
if (!value.match("\\d+") || value < min || value > max) {
|
|
alert("Value for " + name + " must be in range " + min + " to " + max);
|
|
return false;
|
|
}
|
|
else
|
|
return true;
|
|
}
|
|
|
|
function set() {
|
|
retryLimit = document.settings.retryLimit.value;
|
|
if (validInteger("Retry Limit", retryLimit, 0, 5)) {
|
|
simulator.setParameter("retryLimit", retryLimit);
|
|
simulator.restart();
|
|
}
|
|
}
|
|
//-->
|
|
|
|
</script>
|
|
|
|
</head>
|
|
|
|
<body background="simulator.jpeg"
|
|
onload="simulator=document.ProtocolSimulator; set();">
|
|
|
|
<div style="text-align: center">
|
|
|
|
<h1>CSMA/CD (Ethernet)</h1>
|
|
|
|
<img src="simulator.gif" alt="Simulator Logo"/>
|
|
|
|
</div>
|
|
|
|
<h2>Protocol Description</h2>
|
|
|
|
<p>
|
|
CSMA/CD (Carrier Sense, Multiple Access, Collision Detection) illustrates
|
|
how multiple systems can share a common communications medium. CSMA/CD is
|
|
best known in the form of Ethernet - a kind of LANs (Local Area Network).
|
|
LANs have a MAC layer (Medium Access Control) that operates the data link
|
|
protocol.
|
|
</p>
|
|
|
|
<p>
|
|
Many systems (known as stations) can be attached to an Ethernet - the
|
|
Multiple Access aspect. A station will not transmit if it finds that another
|
|
station is already using the Ethernet - the Carrier Sense aspect. However,
|
|
it is still possible for two stations to transmit at almost the same time.
|
|
While a station is transmitting, it may find that another station has
|
|
already begun its own transmission - the Collision Detection aspect. In such
|
|
a case, each station backs off and tries again - hopefully avoiding a
|
|
collision on the second or later attempt.
|
|
</p>
|
|
|
|
<p>
|
|
An Ethernet is a broadcast medium: whatever one station sends is received by
|
|
all others. Each message carries the address of its intended destination;
|
|
only the station with this address will act on the message. A transmission
|
|
takes a very short (but not zero) time to arrive at its destination. Since
|
|
stations will be at different distances from each other, the transmission
|
|
time between them varies. The maximum transmission time between any two
|
|
stations is called the slot time.
|
|
</p>
|
|
|
|
<p>
|
|
Ethernet does not provide any guarantee of correct delivery, so its protocol
|
|
can be simple. Instead, a higher-level protocol such as TCP (Transmission
|
|
Control Protocol) is responsible for detecting and correcting errors.
|
|
</p>
|
|
|
|
<p>
|
|
Transmission proceeds in one of the following ways:
|
|
</p>
|
|
|
|
<dl>
|
|
|
|
<dt><b>Normal:</b></dt>
|
|
<dd>
|
|
The station transmits its message from start to finish. When the message
|
|
has been fully received at the intended destination, that station
|
|
processes the message.
|
|
</p>
|
|
</dd>
|
|
|
|
<dt><b>Deferral:</b></dt>
|
|
<dd>
|
|
<p>
|
|
In fact, a station listens for a transmission from another station
|
|
before beginning its own transmission. If it hears such a transmission,
|
|
it defers to the other station. Once that transmission has finished, the
|
|
station begins its own transmission.
|
|
</p>
|
|
</dd>
|
|
|
|
<dt><b>Collision:</b></dt>
|
|
<dd>
|
|
<p>
|
|
However, this does not avoid interference. For example, a distant
|
|
station may have started transmission but its signal has not yet
|
|
arrived. The local station may therefore think the network is not in use
|
|
and begin its own transmission. Both transmissions will then collide in
|
|
the network. This can be detected by the transmitting stations, but this
|
|
is not always fully reliable. The stations therefore ensure that the
|
|
collision is properly detected by sending a jam signal.
|
|
</p>
|
|
|
|
<p>
|
|
Following this, each station backs off a random delay (a number of slot
|
|
times) before retrying its transmission. Ideally, one station should
|
|
choose a smaller delay and so start retransmitting before the other one.
|
|
</p>
|
|
|
|
<p>
|
|
For the first retransmission, the random delay is 0 or 1 slot times.
|
|
Since two stations may choose the same delay, there is a 50% chance that
|
|
they retry at the same point (and therefore collide again). On further
|
|
collisions, the maximum delay is doubled (0 to 2, 0 to 4, etc.). A limit
|
|
is set on the maximum number of retries.
|
|
</p>
|
|
</dd>
|
|
|
|
</dl>
|
|
|
|
<p>
|
|
For this simulation, only two stations are involved; addresses are therefore
|
|
not required. For simplicity, the protocol simulation below assumes that the
|
|
LAN works perfectly (no message corruption, loss or misordering). However,
|
|
interference among transmissions is still a source of potential error that
|
|
the protocol must cope with.
|
|
</p>
|
|
|
|
<h2>Protocol Parameters</h2>
|
|
|
|
<p>
|
|
By default, the simulation has a retry limit of 0. Since this means that
|
|
retries are not allowed, the simulation internally ensures that collisions
|
|
cannot occur. Retry limits from 1 to 5 can be used, but the possibility of
|
|
collisions complicates the behaviour. Click Change Settings after altering
|
|
the retry limit. This will restart the whole simulation.
|
|
</p>
|
|
|
|
<form name="settings">
|
|
|
|
<center>
|
|
|
|
<table cellspacing="5">
|
|
|
|
<tr>
|
|
<td align="right">Retry Limit (0 = no collisions, 5 maximum):</td>
|
|
<td><input name="retryLimit" size="4" value="0"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" colspan="2">
|
|
<input type="button" name="btnSet" value="Change Settings"
|
|
onclick="set()"/>
|
|
</td>
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
</center>
|
|
|
|
</form>
|
|
|
|
<h2>Protocol Simulation</h2>
|
|
|
|
<p>
|
|
The protocol simulation shows a time-sequence diagram with two stations, the
|
|
MAC entities that support them, and a LAN that carries messages between
|
|
them. Stations transmit messages in the format <var>DATA(Dn)</var>. Data
|
|
messages are numbered <var>D0</var>, <var>D1</var>, etc.; no explicit data
|
|
content is given. If the retry limit is reached, this is reported to a
|
|
station with the message <var>FAIL(Retry Limit)</var>. Protocol messages
|
|
have the form <var>START(Dn)</var> to start a transmission,
|
|
<var>FINISH(Dn)</var> to finish the transmission, and <var>JAM</var> to jam
|
|
transmission.
|
|
</p>
|
|
|
|
<center>
|
|
|
|
<applet code="simulator.ProtocolSimulator.class"
|
|
archive="ProtocolSimulator.jar" width="750" height="700"
|
|
name="ProtocolSimulator">
|
|
<param name="protocol" value="CSMA"/>
|
|
</applet>
|
|
|
|
</center>
|
|
|
|
<hr/>
|
|
|
|
<p>
|
|
<a href="index.html"><img src="uparrow.gif" alt="Up Arrow"/></a>
|
|
Up one level to <a href="index.html">Protocol Simulators</a>
|
|
</p>
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|