Метод управления обменом CSMA/CD (Carrier-Sense Multiple Access with Collision Detection – множественный доступ с контролем несущей и обнаружением коллизий) относится к децентрализованным случайным (точнее, квазислучайным) методам. Он используется как в обычных сетях типа Ethernet, так и в высокоскоростных сетях (Fast Ethernet, Gigabit Ethernet). Поскольку характеристики и области применения этих популярных на практике сетей связаны именно с особенностями используемого метода доступа, его стоит рассмотреть более подробно.
Сначала о названии метода. В ранней сети типа Alohanet, работавшей с 1970 г. на Гавайских островах, использовался радиоканал и установленный на спутнике ретранслятор (отсюда слово "несущая" в названии метода), а также сравнительно простой метод доступа CSMA (без обнаружения коллизий). В сетях типа Ethernet и Fast Ethernet в качестве несущей выступает синхросигнал, "подмешиваемый" к передаваемым данным таким образом, чтобы обеспечить надежную синхронизацию на приемном конце. Это реализуется за счет организации (при необходимости) дополнительных принудительных переходов сигнала между двумя (как в коде Манчестер-II) или тремя электрическими уровнями (как в коде типа 8В6Т, используемом в сегменте Fast Ethernet 100BaseT4 на основе четырех неэкранированных витых пар). По сравнению с классическим методом CSMA в методе CSMA/CD добавлено обнаружение конфликтов (коллизий) во время передачи, что повышает скорость доставки информации.
При описании временных диаграмм сетей типа Ethernet и Fast Ethernet, а также предельных размеров пакетов (кадров) широко используются следующие термины:
RAND(0,2min(N,10)) x 512 x ВТ
где N – значение счетчика попыток, RAND(a, b) – генератор случайных нормально распределенных целых чисел в диапазоне а...b, включая крайние значения. Дискрет изменения данного параметра равен минимальной длине пакета или максимально допустимой двойной задержке распространения сигнала в сети (PDV).
На рис. 1 показана структурная схема алгоритма доступа к сети в соответствии с методом CSMA/CD для одного из абонентов, имеющих данные (кадры) для передачи.
В начале из кадра, предназначенного для передачи, абонент (узел) формирует пакет. Далее при обозначении блоков информации, передаваемых по сети при использовании алгоритма CSMA/CD, понятия "кадр" и "пакет" не различаются, что не совсем правильно, но соответствует сложившейся практике.
Если после подготовки пакета сеть свободна, то абонент (узел) имеет право начать передачу. Но в первую очередь он должен проверить, прошло ли минимально допустимое время IPG после предыдущей передачи (блок 1 на рисунке). Только по окончании времени IPG абонент может начать передачу битов своего пакета (блок 2 на рисунке).
После передачи каждого бита абонент проверяет наличие конфликта (коллизии) в сети. Если коллизий нет, передача битов продолжается до окончания пакета (блок 4 на рисунке). В этом случае считается, что передача прошла успешно.
Если после передачи какого-то бита обнаружена коллизия, то передача пакета прекращается. Абонент (узел) усиливает коллизию, передавая 32-битовый сигнал ПРОБКА (JAM) и начинает готовиться к следующей попытке передачи (блок 3 на рисунке). Сигнал ПРОБКА гарантирует, что факт наличия коллизии обнаружат все абоненты, участвующие в конфликте.
После передачи сигнала ПРОБКА абонент, обнаруживший коллизию, увеличивает значение счетчика числа попыток (перед началом передачи счетчик был сброшен в нуль). Максимальное число попыток передачи должно быть не более 16, поэтому если счетчик попыток переполнился, то попытки передать пакет прекращаются. Считается, что в этом случае сеть сильно перегружена, в ней слишком много коллизий. Эта ситуация – аварийная, и обрабатывается она на более высоких уровнях протоколов обмена.
Если же количество попыток не превысило 16, то производится вычисление величины задержки по приведенной формуле, а затем и выдержка вычисленного временного интервала. Случайный характер величины задержки с высокой степенью вероятности гарантирует, что у всех абонентов, участвующих в конфликте, задержки будут различными. Затем попытка передать пакет повторяется с начала. Абонент, у которого вычисленная задержка будет меньше, начнет следующую передачу первым и заблокирует все остальные передачи.
Если в момент возникновения заявки на передачу (после окончания подготовки пакета) сеть занята другим абонентом, ведущим передачу, то данный абонент ждет освобождения сети (блок 5 на рисунке). После освобождения сети он должен выждать время IPG после предыдущей передачи по сети до начала собственной передачи. Это связано с конечным быстродействием узлов, осуществляющих проверку наличия несущей (занятости среды каким-либо передающим абонентом).
Таким образом, получается, что метод CSMA/CD не только не предотвращает коллизии, наоборот, он их предполагает и даже провоцирует, а затем разрешает. Например, если заявки на передачу возникли у нескольких абонентов во время занятости сети, то после ее освобождения все эти абоненты одновременно начнут передачу и образуют коллизию. Коллизии появляются и в случае свободной сети, если заявки на передачу возникают у нескольких абонентов одновременно. В обоих случаях под словом "одновременно" понимается "в пределах интервала двойного прохождения сигнала по сети", то есть в пределах 512-битовых интервалов. Точно так же в пределах 512-битовых интервалов обнаруживаются все коллизии в сети.
Если коллизия обнаруживается раньше 480 – битового интервала, то в результате в сети образуются пакеты, длина которых меньше нижнего установленного предела в 512 – битовых интервалов (64 байта) даже с добавлением сигнала ПРОБКА. Такие пакеты (кадры) называются карликовыми (runt frames). Если же коллизия обнаруживается в конце 512-битового интервала (после 480 – битового интервала), то в результате может получиться пакет допустимой длины (вместе с сигналом ПРОБКА). Такие пакеты называть карликовыми не совсем корректно. Сигнал ПРОБКА, образующий 32 последних бита пакета, выступает в виде контрольной суммы пакета. Однако вероятность того, что ПРОБКА будет соответствовать правильной контрольной сумме пакета, бесконечно мала (примерно 1 случай на 4,2 миллиарда).
Коллизии (наложения пакетов в процессе передачи) могут и должны обнаруживаться до окончания передачи. Действительно, анализ принятого в конце каждого пакета поля FCS, фактически содержащего помехоустойчивый циклический код CRC (Cyclic Redundancy Check), привел бы к неоправданному снижению скорости передачи.
Практически коллизии обнаруживаются либо самим передающим абонентом, либо повторителями в сети, возможно, задолго до окончания передачи заведомо испорченного пакета. Если учесть, что длина пакетов в локальной сети типа Ethernet / Fast Ethernet может лежать в диапазоне от 64 до 1518 байт, то досрочное прекращение передачи и освобождение линии означает заметное повышение эффективности использования ее пропускной способности.
Первым признаком возникновения коллизии является факт получения сигнала ПРОБКА передающим абонентом во время передачи пакета. Другие признаки связаны с неверным форматом пакетов, передача которых была досрочно прекращена из-за возникновения коллизии:
Наконец, в таких сетях как Ethernet используется код Манчестер-II и аппаратный способ определения коллизии, основанный на анализе отклонения среднего значения сигнала от нуля.
Даже при загруженной сети для одного абонента число подряд следующих коллизий обычно не превышает 3. Этому способствует случайный характер возникновения запроса на передачу и случайная дискретная величина отсрочки следующей попытки передачи при возникновении коллизии. Число коллизий тем больше, чем больше диаметр (размер) сегмента и чем дальше расположены друг от друга абоненты с интенсивным трафиком.