Алгоритм доступа к сети
После передачи сигнала ПРОБКА абонент, обнаруживший коллизию, увеличивает значение счетчика числа попыток (перед началом передачи счетчик был сброшен в нуль). Максимальное число попыток передачи должно быть не более 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 байт, то досрочное прекращение передачи и освобождение линии означает заметное повышение эффективности использования ее пропускной способности.
Первым признаком возникновения коллизии является факт получения сигнала ПРОБКА передающим абонентом во время передачи пакета. Другие признаки связаны с неверным форматом пакетов, передача которых была досрочно прекращена из-за возникновения коллизии:
- длина пакета меньше 64 байт (512 бит);
- пакет имеет неверную контрольную сумму FCS (точнее, неверный циклический код);
- длина пакета не кратна восьми.
Наконец, в сетях типа Ethernet используется код Манчестер-П и чисто аппаратный способ определения коллизии, основанный на анализе отклонения среднего значения сигнала от нуля.
Даже при загруженной сети для одного абонента число подряд следующих коллизий обычно не превышает 2-3. Этому способствует случайный характер возникновения запроса на передачу и случайная дискретная величина отсрочки следующей попытки передачи в случае возникновения коллизии. Всего же предусмотрено 16 попыток передачи, после чего возникшая особая ситуация обрабатывается протоколом более высокого уровня. Число коллизий тем больше, чем больше диаметр (размер) сегмента и чем дальше расположены друг от друга абоненты с интенсивным трафиком.