Fred R. Goldstein k1io 25 October 1988 Preface This is a draft description of a potential protocol for providing the Data Link Layer service to packet radio networks in the Amateur Radio Service. This draft presumes a familiarity with the AX.25 protocol adopted by the American Radio Relay League. Actual implementation is not suggested at this time. Intended audience: Amateur packet radio operators. This draft is leading towards an "ARFC". The A802 Metropolitan Area Network Protocol for Amateur Packet Radio I. Introduction Amateur Packet Radio has been practically synonymous with the AX.25 protocol since the early 1980s. While AX.25 has allowed packet operation to become quite popular, it has not proven to be fully sufficient for the task. Instead, it has created a minor industry in Terminal Node Controllers, which have isolated their users, and their computers, from the protocols themselves. A totally different protocol can take the place of AX.25, especially when used with more sophisticated upper layers such as TCP/IP. A candidate for such a protocol can be loosely based upon Local Area Networks which operate over shared cable; A802 takes such an approach. I.1. AX.25 is itself a misnomer AX.25 takes its name from Recommendation X.25 of the CCITT, the international consultative body that makes standards for telephone networks. X.25 itself is a definition for a standard interface into packet switched networks. It defines, in detail, two different layers of software. Layer 2 (or Level 2, in X.25's original terminology) is the Data Link layer, responsible for ensuring error- free transmission between adjacent entities. Layer 3 is the Network layer (originally the Packet layer) which operates across the boundaries of the network, establishing virtual circuits (connections) between users. (Layer 1, the Physical Link layer, simply transfers bits across a data connector, like the widely used RS-232 interface. Modem standards fall within the bounds of Layer 1, but are not part of X.25. Packet radio standards for Layer 1 are only partially covered within this document.) X.25's Data Link layer uses a protocol called LAP-B (Link Access Protocol - Balanced). This has been adapted, with much change, into AX.25. While X.25's network layer has been implemented in some connection-oriented networks, it is not part of AX.25. So the name AX.25 is really a misnomer; it is simply a much modified LAP-B. Like LAP-B, AX.25 is a member of the HDLC (High Level Data Link Control) family of protocols. HDLC frames (which is the correct term for packets at Layer 2) begin and end with a flag character, and allow data transparency by a bit insertion (stuffing) procedure. The last two bytes of the frame are the checksum, or cyclic redundancy check (CRC). Bit stuffing (and removal, on receive) is easily accomplished with specialized hardware, but next to impossible using standard personal computer modem interfaces. Hence the need for a TNC with its HDLC chip. While X.25 is widely used, it really has little in common with packet radio. For one thing, X.25 networks run over point to point wire lines. And LAP-B doesn't worry about addressing (there are only two stations on the wire, one at each end); lengthy address strings were added to create AX.25. II. The data link, the LAN and the MAN Packet radio operators know that their networks are not derived from X.25 wireline networks, as packet networks are often called Local Area Networks (LANs). This is not strictly accurate, since a LAN operates only within a building or campus, but packet radio MANs (metropolitan area networks) are still a lot more like LANs than like X.25 links. LAN protocols don't exactly follow the same layered model as X.25 or LAP-B, either: They don't strictly map into the traditional Layer 1 and Layer 2. The most widely used LAN standards are defined by IEEE committee 802, and include 802.3 (based on Ethernet), 802.4 (token bus) and 802.5 (token ring). Since token-passing has not been successfully demonstrated on packet radio, 802.3 comes closest to modeling radio. Indeed, the name "Ethernet" was coined by its inventors who noted that the coaxial cable was a broadcast medium not entirely unlike radio. Alas, it is also quite different from radio: Not only does it run much faster, but it is virtually lossless. II.1 LAN layers The lowest layer in a LAN, roughly within the physical link layer, is called the Physical Medium Dependent (PMD) layer. This, of course, differs greately between the different types of 802 LANs. The PMD layer is concerned with how bits are transmitted. The next layer up is the Medium Access Control (MAC) layer; this is where the stations on the LAN address each other, and determine when they can transmit. Finally, the Logical Link Control (LLC) layer provides the same types of services as a Data Link layer. There are two LLCs defined in IEEE 802.2; LLC1 provides a datagram service (like UI frames), while LLC2 provides a virtual circuit service (like I frames). LLC2 procedures (the types of frames and how they interact) are very close to LAP-B. II.2 The A802 protocols The LAN protocols found in IEEE 802 provide a model for packet radio. For the sake of discussion, these are herein called "A802"; the IEEE 802 protocols are merely an inspiration, but provide a model, just as X.25's Layer 2 provided a model for AX.25. A802 starts with a different premise than AX.25. It does not use HDLC, so there is no bit stuffing, and ordinary PC asynchronous communications hardware can be used. It also pays a bit less attention to terseness -- LAP-B headers cram a lot into a few bytes, but lack flexibility. As a further note, A802 can be run in either asynchronous or synchronous mode -- a low-end implementation can be sent using a standard asynchronous modem port, and monitored without special hardware. However, net throughput will be higher if synchronous transmission is used, and the two modes are not compatible. Thus any given transmission channel must be either synchronous or asynchronous or some stations will not be able to contact others. II.3 The A802 frame structure An A802 frame takes the following format: Frame { Sync_characters Literal "^V"s Mandatory MAC_header Structure Mandatory LLC_header Structure Mandatory Data String Optional Frame_checksum 2 bytes Mandatory } The sync_character is not part of the A802 frame itself, but is always transmitted at least twice before every frame. It has the literal decimal value of 22, or control-V; its purpose is to allow the receiving modem to establish synchronization. In synchronous mode, it establishes both byte and frame synchronization; in asynchronous mode, it only establishes frame sychronization. Note that HDLC protocols such as AX.25 can send any number of flag characters between frames; IEEE 802.3 precedes each frame with a stream of alternating 1 and 0 bits for synchronization. The A802 "header" consists of two separate sub-layers. The MAC sublayer provides addressing functions, while the LLC sublayer provides both connection-oriented and connectionless options. AX.25's basic functions are still provided, including support for digipeating. II.4 The MAC layer The Medium Access Control layer allows stations to address frames to one another. It is possible for a connection-oriented protocol to have a very small address field; instead of putting a full address (typically here, a call sign) in each frame, a data link control indicator (DLCI) refers to a previously-created connection. This has been done in the pioneering VADGC (Vancouver) packet radio protocols, and is done in both LAP-D (the ISDN follow-on to LAP-B) and X.25's Network Layer, which are connection-oriented. Like AX.25, however, A802 puts the source and destination addresses in every frame, allowing them to be handled as datagrams. A802 also supports digipeating. The fundamental components of a MAC header are the sender's and receiver's addresses. For example, Ethernet (and its follow-on IEEE 802.3) have a 48-bit address, so 96 bits of the MAC header are taken up by addressing. But digipeating makes life more complicated! Digipeating is more precisely referred to as source routed MAC relay: Source routed because the path is specified by the source of the packet, and MAC relay because the frame is simply relayed by the intermediate stations without looking at layers above MAC. (Source routing is supported in IEEE 802.5, the token ring LAN.) The MAC header can be described as MAC_header { Hop_pointer Integer (Mandatory) Destination_address Structure (Mandatory) Intermediate_address_1..7 Structure (Optional) Source_address Structure (Mandatory) Protocol_discriminator Alpha (Mandatory) } II.4.1 Addresses Each address field typically contains a call sign. In a simple two- station connection, the sender of the packet puts its call sign in the Source_address field and puts the other station's call in the Destination_address field. Secondary station IDs can be appended to the callsigns, as can portable identifiers, as the address is not constrained to 8 bytes (unlike AX.25 Version 2.0). II.4.2 Source routing Digipeating is accomodated via the Intermediate_addresses and the hop_pointer. The hop_pointer indicates which of the addresses (destination or intermediate) the frame is being directed to. In a two-station (no digipeater) packet, the Hop_pointer always has a value of 1. If there is one digipeater, then it begins with a value of 2; this means that the receiver recognizes the packet as its own when its own address is in the Intermediate_address_1 position. Likewise, if there are two digipeaters, the first digipeater increments the hop_pointer to 3 so that the second digipeater recognizes its address in the intermediate_address_2 position. And the last digipeater sets the hop_pointer to 1, the position of the destination address. A multicast or broadcast frame is sent with the hop_pointer set to 0. Thus the hop_pointer can have any value from 0 to 8. The hop_pointer is designed to reduce the processing load on receivers; they only have to listen to see if the pointed-to address is their own, and if it is not, then the frame can be ignore. The most common value will be 1; when this occurs, receiving stations may ignore subsequent addresses. (Conversely, when a frame has a hop_pointer value of 8, then every digipeater that hears it must wait until Intermediate_address_8 is sent. This is, of course, a degenerate case, as it is highly unlikely that a chain of 8 digipeaters will work! For identification purposes, the sender (as contrasted with the originator) of each transmitted frame is identified by determining the previous hop in the source routing chain. II.4.3 The protocol discriminator One final field in the MAC header is the protocol discriminator. This allows the upper layers to know what type of protocol the A802 frame is carrying in its data field. It should be noted that in the current Open Systems Interconnection Reference Model, protocol discriminators are taboo -- different protocols at the same node should be distinguished by different addresses. But AX.25 uses a protocol discriminator, Ethernet (pre-802) uses a protocol discriminator, and most TCP/IP users have grown to expect a protocol discriminator. So A802 has one too. (This does not rule out using distinctive addresses, if one chooses to do so.) The protocol discriminator is a single upper-case letter (A-Z). Tentatively values are as follows: Letter Protocol type I IP (as in TCP/IP) R ARP (Address Resolution Protocol) X X.25 Packet layer or OSI CONS (ISO 8208) O OSI Internet Protocol (ISO 8473) T Plain text Other values will be assigned as required. II.4.4. Parsing the MAC header Since some of the header fields are of variable length, they must be separated from one another. There are several techniques that could be used for this. LAP-B uses only fixed-length fields, while AX.25 uses fixed-length addresses with a bit set to indicate whether or not each has already been digipeated and another set to indicate which address is the last. Some protocols (notably those used in Open Systems Interconnection, the OSI program of the International Organization for Standardization) use a tag-length-value technique, which is very flexible but frequently takes at least 3 octets to do anything. A802 is a bit more like natural language -- it relies on taking each byte's values in context. Individual fields can only have certain values, so they end when a separator character, or one which cannot be part of that field, occurs. In A802, the MAC header is encoded using printable ASCII characters. The first octet of the MAC header is always a numeral, in the range 0-9 (although value 9 is presently reserved). This hop_pointer is followed by the destination_address. This can contain the characters A-Z, 0-9, plus the hyphen "-" and slash "/". The secondary station ID field, an AX.25 artifact whose value can be 0 through 15, can further be encoded using one ASCII character representing a hexadecimal digit, in the ranges 0-9 plus a-f, immediately following the call sign. Or a hyphen can be used, noting that K1IO-10 and K1IOa are two different addresses, though both represent the same ss_id. (Should these be equated? This requires further study.) Terse format (K1IO3) is recommended. Intermediate_address fields are optional, inserted only as required. Each one begins with the ASCII character "v", and then encodes call sign the same way as the destination_address. The source_address field, using the same encoding technique, is preceded by the ASCII character "<" (less than, or left-pointing angle bracket). This character is equivalent to the Morse code "DE". II.4.5 Examples of MAC header addressing A packet addressed to K1IO from 4X/WB2ZJQ1 without a digipeater: 1K1IO<4X/WB2ZJQ1 A packet addressed to FG0/K1IO/FS7-3 (K1IO operating portable on St. Martin using an FG0 authorization and the informal suffix FS7, SSID 3) from KA9Q8 via digipeaters WB2ZJQ and NP4XYZ would be initiated: 2FG0/K1IO/FS7-3vWB2ZJQvNP4XYZ<KA9Q8 This would be picked up by WB2ZJQ would would transmit: 3FG0/K1IO/FS7-3vWB2ZJQvNP4XYZ<KA9Q8 and it would finally be transmitted to FG0/K1IO/FS7-3 from NP4XYZ: 1FG0/K1IO/FS7-3vWB2ZJQvNP4XYZ<KA9Q8 It is possible to identify the sender (not originator, but the digipeater) of each packet, by following the process backwards! This is not particulaly human-friendly, but unambiguous to a computer. Note that the protocol discriminator is not shown above; it is the byte immediately preceding the LLC separator ":" (colon). II.5 The Logical Link Control header Logical Link Control provides the rest of the protocol's functions. A connection-oriented LLC (like IEEE 802's LLC2) provides an error- corrected, sequenced stream of frames -- a virtual circuit. AX.25's virtual circuit mode does the same thing; this is the usual way X.25 networks use LAP-B. A connectionless LLC (like IEEE 802's LLC1) does not try to make up for losses in the physical medium, but it is simpler and often adequate. This corresponds to UI frames in AX.25. Two LLCs are defined in A802. LLC-U is essentially similar to LLC1, providing an unsequenced datagram delivery service. LLC-C provides a connection-oriented (sequenced) service similar to that provided by LLC2. It does not, however, follow LLC2's specific procedures. The A802 LLC header also helps provide the frame integrity. It includes a frame length field and a header checksum. Since A802 does not follow the HDLC flag-delimiting technique or reserve any characters for "end of packet", it needs a way to indicate the end of a frame: The frame length field indicates how many bytes of data are in the frame, so the receiver simply counts bytes to determine the end of the frame. The header checksum decreases the chance that an error in the address or frame length causes the rest of the frame to be incorrectly framed, with the chance that an incorrect frame checksum is accepted. The LLC header takes this structure: LLC_header { Separator Lit. ":" Mandatory Control Alphabetic Mandatory Receive_sequence Alphabetic Optional Transmit_sequence Alphabetic Optional Length Integer Mandatory Header_Checksum Integer Mandatory } Note that the Control, Receive_sequence and Transmit_sequence fields will be described in Section III, below. All header fields up to and including Transmit_sequence are encoded in printable ASCII character; the remaining portion of the LLC header, and the rest of the frame, may have any arbitrary value. II.5.1 Length A802 is a byte-count protocol. The length field is not encoded in ASCII; it is a two-byte integer, with the high order byte followed by the low order byte. This allows large frames, though many or most frames will have a zero value in the high-order byte. The length field counts the number of bytes in the data field, following (not including) the header checksum. Some frames do not contain a data field. In such a case the length field remains, with a value of 0. II.5.2 Header Checksum The header checksum field is only intended to detect some number of header errors. It is a simple, one-byte value computed by adding up the binary value of every previous byte in the header plus the total number of bytes in the header (not including the checksum). If the checksum does not match when computed by the receiver, then the frame is discarded. The receiver also does not have confidence in the length field, and may lose frame synchronization (see below). II.5.3 The data field The whole point of this protocol is to exchange data; the header simply facilitates it. The data field in A802 begins six bytes after the separator (":") in I frames, four bytes after the separator in U frames, and five bytes after the separator in S, G and R frames. The maximum length of the data field is subject to negotiations by the two parties, and should be restrained in order not to "hog" a channel, but in a high-speed network can be as long as 8191 bytes. (This value is for further study.) On a 1200 bps half-duplex channel, however, a maximum of 256 bytes is recommended. There are no constraints on the contents of the data field, except that it must be an integral number of octets long. Segmentation of packets to accomodate different maximum data field lengths is for further study. II.5.4 The frame checksum At the end of every frame, following the data field (and not included within the length field) is the frame checksum. This is computed on the entire frame, beginning with the hop pointer and ending with the last byte before the frame checksum. The frame checksum uses the 16-bit CRC-CCITT cyclic redundancy checksum, identical with the one in AX.25. While computationally rather intensive, it will detect essentially all errors of fewer than sixteen bits and most longer errors. (Since A802 is intended for use in the absence of dedicated "TNC" hardware, which would normally implement CRC in hardware, use of a different checksum is for further study.) III. LLC procedures III.1 LLC-U operation: Connectionless The A802 connectionless mode of operation has a very simple LLC sublayer. The Control field has a value of "U", corresponding to Unnumbered Information (UI) frames in AX.25. All such frames stand alone. They do not have a receive_sequence or transmit_sequence. Thus the LLC-U header begins with the separator ":", followed immediately by the Length field and Checksum. If the frame checksum (as well as the header checksum) is valid, then the data is passed to the next layer up. If the checksum is invalid, then the data is not passed. III.2 LLC-C operation: Connection oriented A connection-oriented Logical Link Control provides sequenced, error-corrected packets. This isn't so simple: If a packet isn't acknowledged, it must be retransmitted by the sender. And since it might take some time for this to occur, the sender may wish to send more than one packet at a time. This is called a window, and is a feature of both AX.25, LAP-B and many higher layer protocols. A802's LLC-C defines three phases of data communications: Connection establishment, data exchange, and connection release. Connection establishment uses a three-way handshake (unlike AX.25's two-way handshake). Connection release uses a two-way handshake (more like AX.25). Each step can be described as a change in the connection state. These stages are initiated by values in the Control field. III.2.1 Connection establishment A802's connection establishment begins with the connection in a null state. The station which initiates the connection sends a frame with the Control field set to "A" ("ask for connection"). That station moves into the connection initiated state. The recipient station, if it chooses to accept the request, immediately responds with the Control field set to "B" ("begin to connect"). Neither A nor B frames may contain data. (A802 does not support "fast connect". You want fast, you use U frames!) The recipient, who sent the "B", is now in the connection pending state. If the receiver does not want to accept a connection request, then it responds not with a "B" but with a No Contact frame (Control value of "N"). The receiver stays in the null state. After receiving a "B" frame, the initiator sends a Connect frame (Control value of "C"). This step allows the recipient of the connect request to know that its "B" frame was received. Upon sending the C frame, the initiator moves into connected state; the receiver moves into connected state when it receives the C frame. As you can see, connection establishment is as simple as A-B-C! But of course, there are complications, mainly a number of necessary timers. When the initiator moves into the connection initiated state, it starts Timer A to await a response. If Timer A expires without any response, then the connection is assumed to have failed. It may re-initiate with another A frame. Once the recipient sends a B frame, it starts Timer B. If it does not receive a C frame before Timer B expires, then it retransmits the B frame once and restarts Timer B. If no C frame is received, then it assumes that the connection is lost and returns to the null state. If the C frame was lost, the originator will not know it until another B frame is received. It may have begun transmitting I frames in the meantime, but I frames must be acknowledged, and the receipt of a second B frame implies that the I frames have been rejected. Similarly, I frames received before a C frame are discarded by the receiver as being out of sequence. III.2.2 Data exchange Once a connected state is achieved, data exchange may begin. A802's connected mode makes use of sliding windows, not unlike AX.25. But in keeping with A802's alphabetic nature, it adopts a modulus of 26; letters are used to indicate the send and receive variables. The receive_sequence is encoded using lower-case ASCII letters; the transmit_sequence is encoded in upper case. During information exchange, the receive_sequence is transmitted in I, S and G frames; it has the downcased version of the next letter (a-z, wrapping z to a) after the last correctly-received frame's transmit_sequence. The transmit sequence (A-Z, wrapped) identifies each unique sequenced frame. Thus the first station to transmit information after connection establishment sends the I frame with sequence variables "IaA", inviting the other side to send its own frame A. If side X has received five frames frpm side Y and not transmitted any, then sends one frame, it sends "IeA". If X has a second frame to transmit right away, that frame is sequenced "IeB". Then, if Y sends its sixth frame, it sends IcF, which acknowledges X's frame B. In theory this allows up to (modulus - 1) 25 frames to be outstanding at once. This window size value k is typically much lower; in some half-duplex packet radio environments, it may need to be as low as 1, whence every frame must be acknowledged before another can be sent. Windows belong to the transmitting side only and need not be symmetrical; a station simply doesn't transmit more than k frames ahead of the last acknowledged frame. Every I frame must be acknowledged within the duration of the sender's timer I. If there is a relatively constant flow of data in both directions, then each side's I frames acknowledge the other side's. If, however, the recipient does not have data to send, then it still needs to acknowledge the received data before the sender's timer I expires. This is accomplished by sending a G (Go) frame with the appropriate receive sequence_value (the transmit_sequence value one after that of the last received I frame). Timer G determines how long the recipient waits before sending this G frame. If a frame is not acknowledged within timer I, then the station retransmits the frame. If a station retransmits the same frame r times without being acknowledged, then it assumes that the connection has been lost. It then transmits a D frame. III.2.3 Flow control Sometimes one side of a connection is incapable of handling any additional I frames. This may occur because of congestion further down the network, or because its receiver has filled (or anticipates imminently running out of) its buffers. When a station expects to be unable to handle additional traffic, it sends an S (Stop) frame. This contains a receive sequence value but not a transmit sequence. The sender of the S frame is now in a stopped state. Any I frame data received at this time is expected be discarded. (U frames may be accepted or rejected at the recipient's option.) Upon receipt of an S frame, the sender enters halted state. A station in halted state may not send further I frames, but may itself acknowledge receipt of I frames via S frames. A station in stopped state may, however, send I frames. Once the station is again able to receive traffic, it sends a G frame, moving from stopped to connected state. Its receive_sequence value should be the next one after that of the last I frame and match the one in the S frame which it cancels; however, at the receiver, value of the G frame takes precedence in case of mismatch. (This allows the receiver to accept additional I frames after sending an S frame, at its discression. S and G frames correspond loosely to RNR and RR frames in AX.25 and LAP-B.) III.2.4 Out of sequence packets If a valid frame is received whose transmit sequence is not exactly one more (modulo 26 from the A-Z sequence) than the last correctly received frame, then it is out of sequence. A802 is intended to operate only over simple point to point links, or over static digipeater chains, so sequence should always be preserved. Thus out of order packets imply that intervening packets have been lost. The recipient of an out of sequence frame should send an R frame with the receive_sequence value one greater than the correctly received frame's transmit_sequence. III.2.5 Connection release When either side of a connection wishes to release the connection, it sends a D (Disconnect request) frame. This contains a receive_sequence value one ahead of the last correctly received frame's transmit_sequence. It goes into the disconnect pending state. The recipient of a D frame immediately acknowledges it with an E (End) frame, which has no associated sequence variables. At this point both stations go into the disconnected mode. If the sender of the D frame does not receive an E frame within the time specified by timer A, then it should retransmit the D frame up to r times. III.3 Header checksum errors For every received frame, the header checksum should be computed and compared to the received value. If it is incorrect, then the frame is simply discarded. Since the number of bytes in the frame is part of the header checksum, the receiver must resynchronize. This is accomplished by waiting for two successive bytes with the decimal value of 22 (control-V) followed immediately by an ASCII representation of a numeric value, which could represent the first byte of a frame. This may or may not mark the beginning of a new frame. The receiver must then see if the potential new frame has a valid header checksum. Other heuristic means of determining frame breaks are for further study. Frame synchronization can typically be re-attained from the beginning of a new transmission, as noted from the Data Carrier Detect signal or squelch signal. III.4 Frame checksum errors If the frame checksum of any frame but an I frame is correct but the frame checksum is incorrect, then the receiver discards the frame. If the header checksum of an I frame is correct but the frame checksum is incorrect, then the receiver can have a fair degree of confidence that the frame in question comes from the sender identified in the MAC header, even if the data itself is valid. If the recipient of this corrupted data field has data to transmit, then it sends an I frame with the receive sequence value of the next anticipated frame following the last received valid frame. For example, if frame M was received correctly and a corrupt frame N was then received, the receiver's next outgoing I frame should have a receive sequence of "n". The transmitter then resumes from its frame N. If the recipient of the corrupted data does not have data to transmit, it should, without further waiting, send an R (Reject) frame with its receive_sequence value one after the last valid received frame's transmit_sequence value. (This will typically be the transmit sequence of the corrupt frame, but that may not be the case if other frames were lost.) III.5 Channel Access Procedures Packet radio does not exactly resemble any wireline medium. Different packet radio configurations, in turn, have different physical characteristics which impact procedures. The purpose of the channel access procedures is to guarantee that a shared channel does not reach a state where additional demand causes net throughput to decrease precipitously, a condition known as congestion collapse. This has been a significant problem in AX.25 networks. It is essentially impossible, however, in properly operated Ethernet networks. III.5.1 CSMA operation If it were not for the "hidden transmitter" problem, packet radio half-duplex operation would resemble carrier sense multiple access operation. CSMA operation can, however, be achieved when half- duplex packet stations operate through a repeater (a two-frequency repeater, not a digipeater). The repeater regenerates everyone's transmitted bits so that everyone else can hear them; this prevents any station from transmitting on top of another station unless they both start transmitting at almost exactly the same time. In CSMA operation, an A802 station with data to transmit first waits until the channel is free. It then waits for a random period of time t in the range m < t < s, where s is the slot time. Slot time is represented by TXdelay + Df: The sum of the transmitter keyup delay (TXdelay in some packet radio TNC operation) added to a constant Df. (Ideally, in a system where TXdelay is not long, Df represents the duration of a minimum-length frame; initially here, it should be at least equal to TXdelay, so that slot time is at least twice TXdelay. This value requries further study.) The minimum wait, m, is equal to TXdelay. On retransmissions, however, slot time increase exponentially: TXdelay + (Df*(2^t)), where t is the retransmission number beginning with 0 (for the first transmission) and ending with r. Thus each retransmission delay will take, on average, almost twice as long as the previous delay. But this is only the outer bound of a random function. III.5.2 CSMA/CD operation IEEE 802.3 and Ethernet use a contention technique called carrier sense multiple access / collision detection, or CSMA/CD. This is based on the concept that every transmitting station is simultaneously listening, so it knows if its signal was "clobbered" -- it compares the received signal to the transmitted one. (Ethernet, keeping it simple, uses a current source into a fixed 50 ohm load. If the voltage goes above the transmitter's own output voltage -- i.e., it detects 6 v when it transmits at 3 v -- then it knows a collision has occurred. This obviously does not work when an antenna is used.) Stations must listen before they transmit. However, it is possible that two stations choose to transmit at almost exactly the same time. This causes a collision. Since the station is listening, though, it does not complete sending the packet. It stops transmitting and waits a random interval within (2^n * slot_time), where n is the retransmission count. This leads to a conclusion that, given sufficient received signal strengths (i.e., low bit error rate exclusive of collision), LLC-U operation is appropriate for CSMA/CD operation, while LLC-C operation is most desirable for CSMA operation. If CSMA operation is used, then a collision-caused error can only be recovered by an end-to-end layer, either operating across a digipeater chain or at a higher layer. From a practical perspective, CSMA/CD operation requires all stations to operate using full-duplex radios, listening to a repeater output even as they transmit to the input. Hence very little amateur packet radio operation is true CSMA/CD. III.5.3 Single-frequency operation With a single frequency and no repeater, even true CSMA is not possible. Stations must still listen before transmitting, but the sender might not hear a third station that blocks its transmission from reaching the receiver. This is the "hidden transmitter" problem. Single-frequency operation thus has a lower maximum channel throughput than true CSMA operation, though higher than Aloha operation, in which stations transmit without listening. The same procedures as used in CSMA operation should be used in single-frequency operation. However, it may be necessary to use longer initial slot times. This is for further study.