Пропускная способность интерфейса передачи данных (Transfer rate) — это максимальная скорость, с которой данные могут передаваться через данный интерфейс. Не стоит путать пропускную способность интерфейса с пропускной способностью отдельных устройств, которые к нему подключены. Многие интерфейсы не способны передавать данные с максимально возможной скоростью, это связано с присущими им накладными расходами. Некоторые адаптеры обладают аппаратными возможностями для обработки данных без загрузки CPU, что позволяет повысить производительность, управляемость и надежность передачи данных через интерфейс. Для интерфейсов, перечисленных в таблице, пропускные способности считаются из расчета передачи по одному порту в полудуплексном режиме.
Отличия схем кодирования в битах и байтах
Пропускные способности для систем хранения данных обычно указываются в MB/s. Множество интерфейсов использует схему кодирования 8b/10b, которая отображает восьмибитные байты в символы размером 10 бит для передачи на физическом уровне, при этом дополнительные биты используются для управления. Поэтому для таких интерфейсов пропускная способность в MB/s считается как пропускная способность в Mb/s, деленная на 10. Накладные расходы при схеме кодирования 8b/10b составляют 20% (10-8)/10.
Начиная с 10Gb Ethernet и с 10Gb Fibre Channel (для ISL), используется схема кодирования 64b/66b с улучшенной эффективностью. Схема 64b/66b проектировалась для высокой пропускной способности FC и InfiniBand. Само по себе кодирование 64b/66b не совместимо с 8b/10b, но иногда устройства на аппаратном уровне могут поддерживать реализацию старой схемы.
16Gb Fibre Channel имеет линейную скорость 14.025Gbps, но со схемой кодирования 64b/66b имеет в два раза большую пропускную способность, чем 8Gb Fibre Channel, линейная скорость которого равна 8.5Gbps. Кодирование 64b/66b влечет за собой 3% накладных расходов (66-64)/66.
PCIe версий 1.x и 2.x использует схему кодирования 8b/10b. PCIe версии 3 использует 128b/130b, что дает всего 1.5% дополнительных расходов.
Схемы кодирования
Схема кодирования | Накладные расходы | Интерфейсы |
8b/10b | 20% | 1GbE, FC (вплоть до 8Gb), IB (SDR, DDR, QDR), PCIe (1.0 и 2.0), SAS (1.0, 2.0 и 3.0), SATA, USB (вплоть до 3.0) |
64b/66b | 3% | 10GbE, 100GbE, FC(10/16/32Gb), FCoE, IB (FDR и EDR), Thunderbolt 2
|
128b/130b | 1.5% | PCIe (3.0 и 4.0)
|
128b/132b | 3% | USB 3.1 Gen 2 (10Gbps)
|
128b/150b | 14.7% | SAS 4.0 |
Пропускная способность Fibre Channel
Интерфейс | Пропускная способность | Линейная скорость | Схема кодирования | Хост-адаптер |
---|---|---|---|---|
1Gb FC | 100 MB/s | 1.0625 GBaud | 8b/10b | PCI-X |
2Gb FC | 200 MB/s | 2.125 GBaud | 8b/10b | PCI-X |
4Gb FC | 400 MB/s | 4.25 GBaud | 8b/10b | PCI-X 2.0 или PCIe 1.0 x4 |
8Gb FC | 800 MB/s | 8.5 GBaud | 8b/10b | PCI-X 1.0 x8 или PCIe 2.0 x4 |
16Gb FC | 1600 MB/s | 14.025 GBaud | 64b/66b | PCI-X 2.0 x8 или PCIe 3.0 x4 |
32Gb FC | 3200 MB/s | 28.05 GBaud | 64b/66b | PCIe 3.0 x8 |
64Gb FC | 6400 MB/s | 28.9 GBaud | 64b/66b | PCIe 4.0 |
Пропускная способность InfiniBand
| 1X | 4X | 12X | Схема кодирования | Хост-адаптер |
---|---|---|---|---|---|
SDR | 2 Gb/s | 8 Gb/s | 24 Gb/s | 8b/10b | PCIe 1.0 x8 |
DDR | 4 Gb/s | 16 Gb/s | 48 Gb/s | 8b/10b | PCIe 1.0 x16 или PCIe 2.0 x8 |
QDR | 8 Gb/s | 32 Gb/s | 96 Gb/s | 8b/10b | PCIe 2.0 x8 |
FDR-10* только Mellanox | 10.31 Gb/s | 41.25 Gb/s | 123.75 Gb/s | 64b/66b | PCIe 3.0 x8 |
FDR | 13.64 Gb/s | 54.55 Gb/s | 163.64 Gb/s | 64b/66b | PCIe 3.0 x8 |
EDR | 25 Gb/s | 100 Gb/s | 300 Gb/s | 64b/66b | PCIe 3.0 x16 |
Сравнительная таблица интерфейсов
Интерфейс | Количество устройств | Максимальное расстояние (м) | Тип кабеля | Реализация контроллера интерфейса | Скорость передачи (MB/s) | Аттрибуты интерфейса |
---|---|---|---|---|---|---|
FC | 16M | 10 (медный кабель) или более 10 км (оптоволоконный кабель) | Медный или Оптоволоконный | Дополнительный адаптер (HBA) | 100, 200, 400, 800, 1600, 3200 | двухпортовый |
FCoE | 16M | 10 (медный кабель) или очень большое (оптоволоконный кабель) | Медный или Оптоволоконный | Конвергентный сетевой адаптер (CNA) или сетевой адаптер 10GbE (NIC) | 1150, 4600 | двухпортовый |
Infiniband | 48M | 15 (медный кабель) или очень большое (оптоволоконный кабель) | Медный или Оптоволоконный | Дополнительный адаптер (HCA) | 1000, 2000, 4000, 7000, 12500 | |
iSCSI | Много | расстояние соотв. кабелю Ethernet | Медный или Оптоволоконный | Cетевой адаптер (NIC) или дополнительный адаптер (HBA) | 100, 1000, 2500, 4000 | |
SAS (пассивный) | 16K | 10 | Медный | 300, 600, 1200 | полнодуплексный, двухпортовый | |
SAS (активный) | 16K | 20 | Медный | Встроен в чипсет или дополнительный адаптер (HBA) | 300, 600, 1200 | полнодуплексный, двухпортовый |
SAS (активный) | 16K | 100 | Оптоволоконный | Встроен в чипсет или дополнительный адаптер (HBA) | 300, 600, 1200, 2400 | полнодуплексный, двухпортовый |
SATA | 1 | 1 | Медный | Встроен в чипсет или дополнительный адаптер (HBA) | 150, 300, 600 | полудуплексный, однопортовый |
Thunderbolt | 6 | 4 | Медный | Встроен в чипсет | 1000, 2000, 4000
| |
USB | 127 | 5 | Медный или Беспроводное соединение | Встроен в чипсет или дополнительный адаптер (Adapter card) | 0.15, 1.5, 48, 500, 1000 | однопортовый |
Стандарт Gigabit Ethernet с использованием в качестве среды передачи данных кабеля 5-й категории (неэкранированная витая пара), описанный в разделе IEEE 802.3ab, был окончательно утвержден 28 июня 1999 года.
Прошло время, и сейчас уже можно говорить, что гигабитный Ethernet по «меди» прочно вошел в историю развития локальных сетей. Резкое падение цен как на гигабитные сетевые адаптеры 1000Base-T, так и на гигабитные модули к коммутаторам постепенно привело к тому, что установка подобных адаптеров в серверы становится стандартом де-факто. К примеру, некоторые производители серверов уже стали интегрировать гигабитные адаптеры 1000Base-T на серверные материнские платы, а количество компаний, производящих такие адаптеры, в начале этого года достигло 25. Кроме того, стали выпускаться и адаптеры, предназначенные для установки в рабочие станции (они отличаются тем, что рассчитаны на 32-битную 33-мегагерцевую PCI-шину). Все это позволяет с уверенностью говорить, что через год-два гигабитные сетевые адаптеры станут столь же распространенными, как сейчас адаптеры Fast Ethernet.
Рассмотрим принципиальные нововведения, воплощенные в стандарте IEEE 802.3ab и позволившие достичь столь высокой скорости передачи, при сохранении неизменным максимального расстояния между двумя компьютерами в 100 м, как это было в стандарте Fast Ethernet.
Прежде всего напомним, что сетевые адаптеры работают на физическом и канальном уровнях семиуровневой модели OSI (Open System Interconnection). Канальный уровень принято разделять на два подуровня: MAC и LCC. Подуровень MAC (Media Access Control) - это подуровень управления доступом к среде передачи данных, обеспечивающий корректное совместное использование общей разделяемой среды передачи данных, предоставляя ее в соответствии с определенным алгоритмом в распоряжение той или иной станции. Подуровень LCC (Logical Link Control) отвечает за передачу кадров между узлами с различной степенью надежности, а также реализует функции интерфейса с прилегающим к нему третьим (сетевым) уровнем.
Все отличия между Ethernet и Fast Ethernet сосредоточены только на физическом уровне. При этом MAC и LCC не претерпели каких-либо изменений.
Физический уровень можно условно разделить на три элемента: уровень согласования, независимый от среды интерфейс (Media Independent Interface, MII) и устройство физического уровня (Physical layer device, PHY). Устройство физического уровня также можно поделить на несколько подуровней: подуровень физического кодирования, подуровень физического присоединения (Physical Medium Attachment), подуровень зависимости физической среды (Physical Medium Dependent) и подуровень автопереговоров о скорости передачи данных (Auto-Negotiation).
Если отличия между Ethernet и Fast Ethernet минимальны и не затрагивают MAC-уровня, то при разработке стандарта Gigabit Ethernet 1000Base-T разработчикам пришлось не только внести изменения в физический уровень, но и затронуть MAC-уровень (рис. 1).
Тем не менее между всеми тремя технологиями осталось много общего. Прежде всего это метод доступа к среде передачи данных CSMA/CD, полудуплексный и полнодуплексный режимы работы, а также форматы кадров Ethernet. В то же время использование витой пары кабеля 5-й категории потребовало внести серьезные изменения в реализацию физического уровня адаптера.
Первой проблемой реализации скорости 1 Гбит/с стало обеспечение приемлемого диаметра сети при работе в полудуплексном режиме работы. Как известно, минимальный размер кадра в сетях Ethernet и Fast Ethernet составляет 64 байта. Однако размер кадра в 64 байта при скорости передачи в 1 Гбайт/с приводит к тому, что для надежного распознавания коллизий необходимо, чтобы максимальный диаметр сети (расстояние между двумя наиболее удаленными друг от друга компьютерами) составлял не более 25 м. Дело в том, что успешное распознавание коллизий возможно только в том случае, если время между посылкой двух последовательных кадров минимальной длины больше, чем двойное время распространения сигнала между двумя максимально удаленными друг от друга узлами в сети. Поэтому, чтобы обеспечить максимальный диаметр сети в 200 м (два кабеля по 100 м и коммутатор), минимальная длина кадра в стандарте Gigabit Ethernet была увеличена до 512 байт. Для увеличения длины кадра до требуемой сетевой адаптер дополняет поле данных до длины 448 байт так называемым расширением (extention). Поле расширения - это поле, заполненное запрещенными символами, которые невозможно принять за коды данных (рис. 2). В то же время увеличение минимальной длины кадра негативно сказывается при передаче коротких служебных сообщений, например квитанций, так как полезная передаваемая информация становится существенно меньше общей передаваемой информации. С целью сокращения накладных расходов при использовании длинных кадров для передачи коротких квитанций стандартом Gigabit Ethernet допускается возможность передачи нескольких кадров подряд в режиме монопольного захвата среды, то есть без передачи среды другим станциям. Такой монопольный режим захвата называется Burst Mode. В этом режиме станция может передавать подряд несколько кадров с общей длиной не более 8192 байт (BurstLength).
Как уже отмечалось, наряду с изменением MAC-уровня, достижение гигабитных скоростей передачи стало возможным благодаря существенному изменению физического уровня, то есть самой технологии представления данных (кодирования) при передаче данных по витой паре.
Для того чтобы разобраться с теми изменениями, которые были сделаны на физическом уровне, вспомним, что представляет собой кабель для передачи данных и какие помехи возникают при передаче сигналов.
Неэкранированный кабель 5-й категории состоит из четырех пар проводов, причем каждая пара перекручена между собой. Такой кабель рассчитан для работы на частоте 100 МГц (рис. 3).
Из курса физики известно, что любой кабель обладает, кроме активного, также емкостным и индуктивным сопротивлениями, причем два последних зависят от частоты сигнала. Все три типа сопротивления определяют так называемый импеданс цепи. Наличие импеданса приводит к тому, что при распространении сигнала по кабелю он постепенно затухает, теряя часть своей первоначальной мощности.
Если взаимная индукция вычисляется в начале кабеля, то соответствующий тип помех будет называться NEXT (Near-end crosstalk loss). Если же помехи, вызванные взаимной индукцией, рассматриваются в конце кабеля, то они называются FEXT (Far-end crosstalk loss - рис. 4).
Кроме того, при распространении сигнала возникает и другой тип помех, связанный с рассогласованием входного импеданса сетевого адаптера и кабеля. В результате подобного рассогласования возникает отражение сигнала, что также приводит к образованию шума.
Передача сигналов в описанных выше условиях помех требует использования хитроумных способов, позволяющих обеспечить необходимую скорость передачи и в то же время гарантировать безошибочное распознавание передаваемых сигналов.
Прежде всего напомним, какие способы используются для представления информационных сигналов.
При цифровом кодировании битовых «нулей» и «единиц» используют либо потенциальные, либо импульсные коды. В потенциальных кодах (рис. 5) для представления логических нулей и единиц используют только значение потенциала сигнала. Например, единицу представляют в виде потенциала высокого уровня, а нуль - в виде потенциала низкого уровня. Импульсные коды позволяют представлять биты перепадом потенциала определенного направления. Так, перепад потенциала от низкого уровня к высокому может соответствовать логическому нулю.
При использовании прямоугольных импульсов для передачи данных необходимо выбрать такой способ кодирования, который бы одновременно удовлетворял нескольким требованиям.
Во-первых, имел бы при одной и той же битовой скорости наименьшую ширину спектра результирующего сигнала.
Во-вторых, обладал бы способностью распознавать ошибки.
В-третьих, обеспечивал бы синхронизацию между приемником и передатчиком.
Код NRZ
В простейшем случае потенциального кодирования логическую единицу можно представлять высоким потенциалом, а логический нуль - низким. Подобный способ представления сигнала получил название «кодирование без возврата к нулю, или кодирование NRZ (Non Return to Zero)». Под термином «без возврата» в данном случае понимается то, что на протяжении всего тактового интервала не происходит изменения уровня сигнала. Метод NRZ прост в реализации, обладает хорошей распознаваемостью ошибок, но не обладает свойством самосинхронизации. Отсутствие самосинхронизации приводит к тому, что при появлении длинных последовательностей нулей или единиц приемник лишен возможности определять по входному сигналу те моменты времени, когда нужно в очередной раз считывать данные. Поэтому незначительное рассогласование тактовых частот приемника и передатчика может приводить к появлению ошибок, если приемник считывает данные не в тот момент времени, когда это нужно. Особенно критично такое явление при высоких скоростях передачи, когда время одного импульса чрезвычайно мало (при скорости передачи 100 Мбит/с время одного импульса составляет 10 нс). Другим недостатком кода NRZ является наличие низкочастотной составляющей в спектре сигнала при появлении длинных последовательностей нулей или единиц. Поэтому код NRZ не используется в чистом виде для передачи данных.
Код NRZI
Другим типом кодирования является несколько видоизмененный NRZ-код, называемый NRZI (Non Return to Zero with one Inverted). Код NRZI является простейшей реализацией принципа кодирования сменой уровня сигнала или дифференциального кодирования. При таком кодировании при передаче нуля уровень сигнала не меняется, то есть потенциал сигнала остается таким же, как и в предыдущем такте. При передаче единицы потенциал инвертируется на противоположный. Сравнение кодов NRZ и NRZI показывает, что код NRZI обладает лучшей самосинхронизацией в том случае, если в кодируемой информации логических единиц больше, чем логических нулей. Таким образом, этот код позволяет «бороться» с длинными последовательностями единиц, но не обеспечивает должной самосинхронизации при появлении длинных последовательностей логических нулей.
Манчестерский код
В манчестерском коде для кодирования нулей и единиц используется перепад потенциала, то есть кодирование осуществляется фронтом импульса. Перепад потенциала происходит на середине тактового импульса, при этом единица кодируется перепадом от низкого потенциала к высокому, а нуль - наоборот. В начале каждого такта в случае появления нескольких нулей или единиц подряд может возникать служебный перепад потенциала.
Из всех рассмотренных нами кодов манчестерский обладает лучшей самосинхронизацией, поскольку перепад сигнала происходит как минимум один раз за такт. Именно поэтому манчестерский код используется в сетях Ethernet со скоростью передачи 10 Мбит/с (10Ваsе 5, 10Ваsе 2, 10Bаsе-Т).
Код МLТ-3
Код МLТ-3 (Multi Level Transmission-3) реализуется аналогично коду NRZI. Изменение уровня линейного сигнала происходит только в том случае, если на вход кодера поступает единица, однако в отличие от кода NRZI алгоритм формирования выбран таким образом, чтобы два соседних изменения всегда имели противоположные направления. Недостаток кода MLT-3 такой же, как и у кода NRZI, - отсутствие должной синхронизации при появлении длинных последовательностей логических нулей.
Как уже отмечалось, различные коды отличаются друг от друга не только степенью самосинхронизации, но и шириной спектра. Ширина спектра сигнала определяется в первую очередь теми гармониками, которые дают основной энергетический вклад в формирование сигнала. Основную гармонику легко рассчитать для каждого типа кода. В коде NRZ или NRZI максимальная частота основной гармоники (рис. 6) соответствует периодической последовательности логических нулей и единиц, то есть когда не встречается подряд нескольких нулей или единиц. В этом случае период основной гармоники равен временному интервалу двух битов, то есть при скорости передачи 100 Мбит/с частота основной гармоники должна быть 50 Гц.
В манчестерском коде максимальная частота основной гармоники соответствует ситуации, когда на вход кодера поступает длинная последовательность нулей. В этом случае период основной гармоники равен временному интервалу одного бита, то есть при скорости передачи 100 Мбит/с максимальная частота основной гармоники будет 100 Гц.
В коде MLT-3 максимальная частота основной гармоники (рис. 7) достигается при подаче на вход кодера длинных последовательностей логических единиц. В этом случае период основной гармоники соответствует временному интервалу четырех битов. Следовательно, при скорости передачи 100 Мбит/с максимальная частота основной гармоники будет равна 25 МГц.
Как уже отмечалось, манчестерское кодирование используется в сетях Ethrnet 10 Мбит/с, что связано и с хорошими самосинхронизирующими свойствами кода, и с допустимой максимальной частотой основной гармоники, которая при работе на скорости 10 Мбит/с составит 10 МГц. Этого значения достаточно для кабеля не только 5-й, но и 3-й категории, которая рассчитана на частоту 20 МГц.
В то же время использование манчестерского кодирования для более высокоскоростных сетей (100 Мбит/с, 1 Гбит/с) является неприемлемым, так как кабели не рассчитаны на работу при столь высоких частотах. Поэтому используются другие коды (NRZI и MLT-3), но для улучшения самосинхронизирующих свойств кода они подвергаются дополнительной обработке.
Избыточные коды
Такая дополнительная обработка заключается в логическом блочном кодировании, когда одна группа бит по определенному алгоритму заменяется другой группой. Наиболее распространенными типами подобного кодирования являются избыточные коды 4B/5B, 8B/6T и 8B/10T.
В этих кодах исходные группы бит заменяются на новые, но более длинные группы. В коде 4B/5B группе из четырех бит ставится в соответствие группа из пяти бит. Возникает вопрос - для чего нужны все эти усложнения? Дело в том, что такое кодирование является избыточным. К примеру, в коде 4B/5B в исходной последовательности из четырех бит существует 16 различных битовых комбинаций нулей и единиц, а в группе из пяти бит таких комбинаций уже 32. Поэтому в результирующем коде можно выбрать 16 таких комбинаций, которые не содержат большого количества нулей (напомним, что в исходных кодах NRZI и MLT-3 длинные последовательности нулей приводят к потере синхронизации). При этом остальные не используемые комбинации можно считать запрещенными последовательностями. Таким образом, кроме улучшения самосинхронизирующих свойств исходного кода избыточное кодирование позволяет приемнику распознавать ошибки, так как появление запрещенной последовательности бит свидетельствует о возникновении ошибки. Соответствие исходных и результирующих кодов приведено в табл. 1 .
Из таблицы видно, что после использования избыточного кода 4B/5B в результирующих последовательностях не встречается более двух нулей подряд, что гарантирует самосинхронизацию битовой последовательности.
В коде 8B/6T последовательность восьми бит исходной информации заменяется последовательностью из шести сигналов, каждый из которых может принимать три состояния. В восьмибитной последовательности имеется 256 различных состояний, а в последовательности шести трехуровневых сигналов таких состояний уже 729 (3 6 =729), поэтому 473 состояния считаются запрещенными.
В коде 8B/10T каждая восьмибитная последовательность заменяется на десятибитную. При этом в исходной последовательности содержится 256 различных комбинаций нулей и единиц, а в результирующей 1024. Таким образом, 768 комбинаций являются запрещенными.
Все рассмотренные избыточные коды находят применение в сетях Ethernet. Так, код 4B/5B используется в стандарте 100Base-TX, а код 8B/6T - в стандарте 100Base-4T, который в настоящее время практически уже не используется. Код 8B/10T используется в стандарте 1000Base-Х (когда в качестве среды передачи данных используется оптоволокно).
Кроме использования избыточного кодирования широкое применение находит и другой способ улучшения исходных свойств кодов - это так называемое скрэмблирование.
Скремблирование
Скрэмблирование (scramble - перемешивание) заключается в перемешивании исходной последовательности нулей и единиц с целью улучшения спектральных характеристик и самосинхронизирующих свойств результирующей последовательности битов. Осуществляется скремблирование путем побитовой операции исключающего ИЛИ (XOR) исходной последовательности с псевдослучайной последовательностью. В результате получается «зашифрованный» поток, который восстанавливается на стороне приемника с помощью дескрэмблера.
С аппаратной точки зрения скрэмблер состоит из нескольких логических элементов XOR и регистров сдвига. Напомним, что логический элемент XOR (исключающее ИЛИ) совершает над двумя булевыми операндами x и y, которые могут принимать значение 0 или 1, логическую операцию на основе таблицы истинности (табл. 2).
Из данной таблицы непосредственно следует основное свойство операции исключающего ИЛИ:
Кроме того, нетрудно заметить, что к операции исключающего ИЛИ применим сочетательный закон:
На схемах логический элемент XOR принято обозначать так, как показано на рис. 8 .
Как уже отмечалось, другим составным элементом скрэмблера является регистр сдвига. Регистр сдвига состоит из нескольких последовательно связанных друг с другом элементарных запоминающих ячеек, выполненных на основе триггерных схем и передающих информационный сигнал с входа на выход по управляющему сигналу - тактирующему импульсу. Регистры сдвига могут реагировать как на положительный фронт тактирующего импульса (то есть при переходе управляющего сигнала из состояния 0 в состояние 1), так и на отрицательный фронт.
Рассмотрим простейшую запоминающую ячейку регистра сдвига, управляемую по положительному фронту тактирующего импульса С (рис. 9).
В момент изменения тактирующего импульса из состояния 0 в состояние 1 на выход ячейки передается тот сигнал, который был на его входе в предыдущий момент времени, то есть когда управляющий сигнал С был равен 0. После этого состояние выхода не изменяется (ячейка заперта) вплоть до прихода следующего положительного фронта тактирующего импульса.
Используя цепочку, состоящую из нескольких последовательно связанных запоминающих ячеек с одним и тем же управляющим сигналом, можно составить регистр сдвига (рис. 10), в котором информационные биты будут последовательно передаваться от одной ячейки к другой синхронно по положительному фронту тактирующего импульса.
Составным элементом любого скрэмблера является генератор псевдослучайной последовательности. Такой генератор образуется из регистра сдвига при создании обратной связи между входом и выходами запоминающих ячеек регистра сдвига посредством логических элементов XOR.
Рассмотрим генератор псевдослучайной последовательности, изображенный на рис. 11 . Пусть в начальный момент времени все четыре запоминающие ячейки хранят некоторое предустановленное состояние. К примеру, можно предположить, что Q1=1, Q2=0, Q3=0 и Q4=1, а на входе первой ячейки D=0. После прихода тактирующего импульса все разряды сдвинутся на один бит, а на вход D поступит сигнал, значение которого определится по формуле:
Пользуясь данной формулой, нетрудно определить значения выходов запоминающих ячеек на каждом такте работы генератора. В табл. 3 показано состояние выходов запоминающих ячеек генератора псевдослучайной последовательности на каждом такте работы. При этом нетрудно заметить, что в начальный момент времени и через 15 тактов состояние генератора полностью повторяется, то есть 15 тактов работы - это период повторения нашей псевдослучайной последовательности (именно из наличия периода повторения последовательность и называется псевдослучайной). В общем случае, если генератор состоит из n-ячеек, период повторения равен:
Рассмотренный нами генератор использовал некоторое произвольное начальное состояние ячеек, то есть имел предустановку. Однако вместо такой предустановки в скрэмблерах часто используют саму исходную последовательность, подвергающуюся скрэмблированию. Такие скрэмблеры называются самосинхронизирующими. Пример подобного скрэмблера изображен на рис. 12 .
Если обозначить двоичную цифру исходного кода, поступающую на i-м такте работы на вход скрэмблера, через A i , а двоичную цифру результирующего кода, полученную на i-м такте работы, через B i , то нетрудно заметить, что рассматриваемый скрэмблер осуществляет следующую логическую операцию: , где B i -3 и B i -4 - двоичные цифры результирующего кода, полученные на предыдущих тактах работы скрэмблера, соответственно на 3 и на 4 такта ранее текущего момента.
После раскодирования полученной таким образом последовательности на стороне приемника используется дескрэмблер. Самое удивительное, что схема дескрэмблера полностью идентична схеме скрэмблера. В том, что это действительно так, нетрудно убедиться путем простых рассуждений. Если обозначить через B i двоичную цифру исходного кода, поступающую на i-м такте работы на вход дескрэмблера, а двоичную цифру результирующего кода, полученную на i-м такте работы, через С i , то дескрэмблер, работая по той же схеме, что и скрэмблер, должен реализовывать следующий алгоритм:
Следовательно, если схема дескрэмблера совпадает со схемой скрэмблера, то дескреблер полностью восстанавливает исходную последовательность информационных бит.
Рассмотренная четырехразрядная схема скрэмблера является одной из простейших. В технологии 1000Base-T используется значительно более сложный скрэмблер на 33 разряда, что увеличивает период повторения до 8 589 934 591 бит (2 33 –1), то есть формируемые псевдослучайные последовательности повторяются через 68,72 с.
Кодирование PAM-5
Разобравшись с тем, какие коды используются для представления данных, и рассмотрев методы улучшения самосинхронизирующих и спектральных свойств этих кодов, попробуем выяснить, достаточно ли этих мер, чтобы обеспечить передачу данных на скорости 1000 Мбит/с с использованием четырехпарного кабеля 5-й категории.
Как уже отмечалось, манчестерское кодирование обладает хорошими самосинхронизирующими свойствами и в этом смысле не требует каких-либо доработок, однако максимальная частота основной гармоники численно равна скорости передачи данных, то есть количеству переданных бит в секунду. Этого достаточно для передачи данных со скоростью 10 Мбит/с, так как кабель 3-й категории (а в стандарте 10Base-T может использоваться такой кабель) ограничен частотами в 16 МГц. Однако манчестерское кодирование не годится для передачи данных со скоростью 100 Мбит/с и выше.
Использование кода NRZI после дополнительной доработки с помощью избыточного блочного кода 4B/5B и скрэмблирования, а также трехпозиционного кода MLT-3 (с целью уменьшения максимальной частоты основной гармоники) позволяет передавать данные со скоростью 100 Мбит/с по кабелю 5-й категории. Действительно, при использовании кода MLT-3 максимальная частота основной гармоники численно равна одной четвертой от скорости передачи данных, то есть при скорости передачи 100 Мбит/с частота основной гармоники не превосходит 25 МГц, что вполне достаточно для кабеля 5-й категории. Однако такой способ не годится для передачи данных на скорости 1000 Мбит/с.
Поэтому в стандарте 1000Base-T используется принципиально иной способ кодирования. Для уменьшения тактовой частоты до величин, позволяющих передавать данные по витым парам категории 5, данные в линии представляются в так называемом коде PAM-5 (рис. 13). В нем передаваемый сигнал имеет набор из пяти фиксированных уровней {–2, –1, 0, +1, +2}. Четыре из них используются для кодирования информационных битов, а пятый предназначен для коррекции ошибок. На наборе из четырех фиксированных уровней одним дискретным состоянием сигнала можно закодировать сразу два информационных бита, поскольку комбинация из двух бит имеет четыре возможные комбинации (так называемые дибиты) - 00, 01, 10 и 11.
Переход к дибитам позволяет в два раза повысить битовую скорость. Чтобы различать битовую, или информационную, скорость и скорость различных дискретных состояний сигнала, вводят понятие бодовой скорости. Бод - это количество различных дискретных состояний сигнала в единицу времени. Поэтому, если в одном дискретном состоянии кодируется два бита, битовая скорость в два раза больше бодовой, то есть 1 Бод = 2 бит/с.
Если учесть, что кабель 5-й категории рассчитан на частоту 125 МГц, то есть способен работать с бодовой скоростью 125 МБод, то информационная скорость по одной витой паре составит 250 Мбит/с. Вспомним, что в кабеле имеется четыре витые пары, поэтому если задействовать все четыре пары (рис. 14), то можно повысить скорость передачи до 250 Мбит/сх4=1000 Мбит/с, то есть достичь желаемой скорости.
Как уже отмечалось, в кодировании PAM-5 имеется пять дискретных уровней, однако для передачи дибитов используется только четыре уровня. Пятый избыточный уровень кода (Forward Error Correction, FEC) используется для механизма построения коррекции ошибок. Он реализуется кодером Треллиса и декодером Витерби. Применение механизма коррекции ошибок позволяет увеличить помехоустойчивость приемника на 6 дБ.
Треллис-кодирование
Рассмотрим принципы треллис-кодирования на основе простейшего кодера, состоящего из двух запоминающих ячеек и элементов XOR (рис. 15). Пусть на вход такого кодера поступает со скоростью k бит/с последовательность бит 0101110010. Если на выходе кодера установить считывающую ячейку, работающую с вдвое большей частотой, чем скорость поступления бит на вход кодера, то скорость выходного потока будет в два раза выше скорости входного потока. При этом считывающая ячейка за первую половину такта работы кодера считывает данные сначала с логического элемента XOR 2, а вторую половину такта - с логического элемента XOR 3. В результате каждому входному биту ставится в соответствие два выходных бита, то есть дибит, первый бит которого формируется элементом XOR 2, а второй - элементом XOR 3. По временной диаграмме состояния кодера нетрудно проследить, что при входной последовательности бит 0101110010 выходная последовательность будет 00 11 10 00 01 10 01 11 11 10.
Отметим одну важную особенность принципа формирования дибитов. Значение каждого формируемого дибита зависит не только от входящего информационного бита, но и от двух предыдущих бит, значения которых хранятся в двух запоминающих ячейках. Действительно, если принято, что A i - входящий бит, то значение элемента XOR 2 определится выражением , а значение элемента XOR 3 - выражением . Таким образом, дибит формируется из пары битов, значение первого из которых равно , а второго - . Следовательно, значение дибита зависит от трех состояний: значения входного бита, значения первой запоминающей ячейки и значения второй запоминающей ячейки. Такие кодеры получили название сверточных кодеров на три состояния (K = 3) с выходной скоростью ½.
Работу кодера удобно рассматривать на основе не временных диаграмм, а так называемой диаграммы состояния. Состояние кодера будем указывать с помощью двух значений - значения первой и второй запоминающих ячеек. К примеру, если первая ячейка хранит значение 1 (Q1=1), а вторая - 0 (Q2=0), то состояние кодера описывается значением 10. Всего возможно четыре различных состояния кодера: 00, 01, 10 и 11.
Пусть в некоторый момент времени состояние кодера равно 00. Нас интересует, каким станет состояние кодера в следующий момент времени и какой дибит будет при этом сформирован. Возможны два исхода в зависимости от того, какой бит поступит на вход кодера. Если на вход кодера поступит 0, то следующее состояние кодера также будет 00, если же поступит 1, то следующее состояние (то есть после сдвига) будет 10. Значение формируемых при этом дибитов рассчитывается по формулам и . Если на вход кодера поступает 0, то будет сформирован дибит 00 (), если же на вход поступает 1, то формируется дибит 11 (). Приведенные рассуждения удобно представить наглядно с помощью диаграммы состояний (рис. 16), где в кружках обозначаются состояния кодера, а входящий бит и формируемый дибит пишутся через косую черту. Например, если входящий бит 1, а формируемый дибит 11, то записываем: 1/11.
Продолжая аналогичные рассуждения для всех остальных возможных состояний кодера, легко построить полную диаграмму состояний, на основе которой легко вычисляется значение формируемого кодером дибита.
Используя диаграмму состояний кодера, несложно построить временную диаграмму переходов для уже рассмотренной нами входной последовательности бит 0101110010. Для этого строится таблица, в столбцах которой отмечаются возможные состояния кодера, а в строках - моменты времени. Возможные переходы между различными состояниями кодера отображаются стрелками (на основе полной диаграммы состояний кодера - рис. 17), над которыми обозначаются входной бит, соответствующий данному переходу, и соответствующий дибит. Например, для двух первых моментов времени диаграмма состояния кодера выглядит так, как показано на рис. 18 . Красной стрелкой отображен переход, соответствующий рассматриваемой последовательности бит.
Продолжая отображать возможные и реальные переходы между различными состояниями кодера, соответствующие различным моментам времени (рис. 19 , , ), получим полную временную диаграмму состояний кодера (рис. 22).
Основным достоинством изложенного выше метода треллис-кодирования является его помехоустойчивость. Как будет показано в дальнейшем, благодаря избыточности кодирования (вспомним, что каждому информационному биту ставится в соответствие дибит, то есть избыточность кода равна 2) даже в случае возникновения ошибок приема (к примеру, вместо дибита 11 ошибочно принят дибит 10) исходная последовательность бит может быть безошибочно восстановлена.
Для восстановления исходной последовательности бит на стороне приемника используется декодер Витерби.
Декодер Витерби
Декодер Витерби в случае безошибочного приема всей последовательности дибитов 00 11 10 00 01 10 01 11 11 10 будет обладать информацией об этой последовательности, а также о строении кодера (то есть о его диаграмме состояний) и о его начальном состоянии (00). Исходя из этой информации он должен восстановить исходную последовательность бит. Рассмотрим, каким образом происходит восстановление исходной информации.
Зная начальное состояние кодера (00), а также возможные изменения этого состояния (00 и 10), построим временную диаграмму для первых двух моментов времени (рис. 22). На этой диаграмме из состояния 00 существует только два возможных пути, соответствующих различным входным дибитам. Поскольку входным дибитом декодера является 00, то, пользуясь диаграммой состояний кодера Треллиса, устанавливаем, что следующим состоянием кодера будет 00, что соответствует исходному биту 0.
Однако у нас нет 100% гарантии того, что принятый дибит 00 является правильным, поэтому не стоит пока отметать и второй возможный путь из состояния 00 в состояние 10, соответствующий дибиту 11 и исходному биту 1. Два пути, показанные на диаграмме, отличаются друг от друга так называемой метрикой ошибок, которая для каждого пути рассчитывается следующим образом. Для перехода, соответствующего принятому дибиту (то есть для перехода, который считается верным), метрика ошибок принимается равной нулю, а для остальных переходов она рассчитывается по количеству отличающихся битов в принятом дибите и дибите, отвечающем рассматриваемому переходу. Например, если принятый дибит 00, а дибит, отвечающий рассматриваемому переходу, равен 11, то метрика ошибок для этого перехода равна 2.
Для следующего момента времени, соответствующего принятому дибиту 11, возможными будут два начальных состояния кодера: 00 и 10, а конечных состояния будет четыре: 00, 01, 10 и 11 (рис. 23). Соответственно для этих конечных состояний существует несколько возможных путей, отличающихся друг от друга метрикой ошибок. При расчете метрики ошибок необходимо учитывать метрику предыдущего состояния, то есть если для предыдущего момента времени метрика для состояния 10 была равной 2, то при переходе из этого состояния в состояние 01 метрика ошибок нового состояния (метрика всего пути) станет равной 2 + 1 = 3.
Для следующего момента времени, соответствующего принятому дибиту 10, отметим, что в состояния 00, 01 и 11 ведут по два пути (рис. 24). В этом случае необходимо оставить только те переходы, которым отвечает меньшая метрика ошибок. Кроме того, поскольку переходы из состояния 11 в состояние 11 и в состояние 01 отбрасываются, переход из состояния 10 в состояние 11, отвечающий предыдущему моменту времени, не имеет продолжения, поэтому тоже может быть отброшен. Аналогично отбрасывается переход, отвечающий предыдущему моменту времени из состояния 00 в 00.
Продолжая подобные рассуждения, можно вычислить метрику всех возможных путей и изобразить все возможные пути.
При этом количество самих возможных путей оказывается не так велико, как может показаться, поскольку большинство из них отбрасываются в процессе построения, как не имеющие продолжения (рис. 25). К примеру, на шестом такте работы декодера по описанному алгоритму остается всего четыре возможных пути.
Аналогично и на последнем такте работы декодера имеется всего четыре возможных пути (рис. 26), причем истинный путь, однозначно восстанавливающий исходную последовательность битов 0101110010, соответствует метрике ошибок, равной 0.
При построении рассмотренных временных диаграмм удобно отображать метрику накопленных ошибок для различных состояний кодера в виде таблицы. Именно эта таблица и является источником той информации, на основе которой возможно восстановить исходную последовательность бит (табл. 4).
В описанном выше случае мы предполагали, что все принятые декодером дибиты не содержат ошибок. Рассмотрим далее ситуацию, когда в принятой последовательности дибитов содержатся две ошибки. Пусть вместо правильной последовательности 00 11 10 00 01 10 01 11 11 10 декодер принимает последовательность 00 11 11 00 11 10 01 11 11 10, в которой третий и пятый дебит являются сбойными. Попробуем применить рассмотренный выше алгоритм Витерби, основанный на выборе пути с наименьшей метрикой ошибок, к данной последовательности и выясним, сможем ли мы восстановить в правильном виде исходную последовательность битов, то есть исправить сбойные ошибки.
Вплоть до получения третьего (сбойного) дибита алгоритм вычисления метрики ошибок для всех возможных переходов не отличается от рассмотренного ранее случая. До этого момента наименьшей метрикой накопленных ошибок обладал путь, отмеченный на рис. 27 красным цветом. После получения такого дибита уже не существует пути с метрикой накопленных ошибок, равной 0. Однако при этом возникнут два альтернативных пути с метрикой, равной 1. Поэтому выяснить на данном этапе, какой бит исходной последовательности соответствует полученному дибиту, невозможно.
Аналогичная ситуация возникнет и при получении пятого (также сбойного) дибита (рис. 28). В этом случае будет существовать уже три пути с равной метрикой накопленных ошибок, а установить истинный путь возможно только при получении следующих дибитов.
После получения десятого дибита количество возможных путей с различной метрикой накопленных ошибок станет достаточно большим (рис. 29), однако на приведенной диаграмме (с использованием табл. 5 , где представлена метрика накопленных ошибок для различных путей) нетрудно выбрать единственный путь с наименьшей метрикой (на рис. 29
Рассмотренный пример сверточного кодера имел всего четыре различных состояния: 00, 01, 10 и 11. В технологии 1000Base-T используется сверточный кодер уже на восемь различных состояний (с тремя элементами задержки), поэтому он называется восьмипозиционным. Кроме того, поскольку символы передаются по всем четырем витым парам кабеля одновременно с использованием пятиуровневого кодирования PAM-5, такое кодирование получило название четырехмерного 4D/PAM-5.
Другим существенным отличием кодера Треллиса, используемого в технологии 1000Base-T, является алгоритм перехода между различными состояниями кодера. В рассмотренном нами простейшем примере состояние кодера в следующий момент времени определялось исключительно текущим состоянием и входным битом. Так, если текущее состояние 00, а входной бит 1, то следующее состояние, то есть поле сдвига битов по запоминающим ячейкам, будет соответствовать 10. В реальном восьмипозиционном кодере Треллиса, управляющих (входных) битов два, а переходы между различными состояниями определяются по алгоритму наибольшего расстояния между точками сигнального созвездия. Как следует из рис. 30 , кодер Треллиса реализует соотношение:
где d 6 , d 7 и d 8 - соответственно биты данных на линиях 6, 7 и 8.
Поясним это на конкретном примере.
Вспомним, что в коде PAM-5 используется пять уровней для передачи сигналов: –2, –1, 0, +1, +2. При этом уровням +2/–2 соответствует напряжение +1/–1 В, а уровням +1/–1 - напряжение +0,5/–0,5 В. Учитывая, что по четырем витым парам одновременно передается четыре уровня сигнала и каждый из этих уровней может принимать одно из пяти значений, всего получаем 625 (5х5х5х5) разных комбинаций сигналов. Различные возможные состояния сигнала удобно изображать на так называемой сигнальной плоскости. На этой плоскости каждое возможное состояние сигнала изображается сигнальной точкой, а совокупность всех сигнальных точек называют сигнальным созвездием. Естественно, что изобразить четырехмерное пространство не представляется возможным, поэтому рассмотрим для наглядности двухмерное сигнальное созвездие 5х5. Такое созвездие формально может соответствовать двум витым парам. Изобразим вдоль оси Х точки, отвечающие одной витой паре, а вдоль оси Y - другой. Тогда наше 2D-созвездие будет выглядеть так, как показано на рис. 31 .
Обратим внимание, что минимальное расстояние между двумя точками такого созвездия равно 1.
Под воздействием шума и затухания сигнала сигнальное созвездие претерпевает искажения (рис. 32), в результате которых положение каждой сигнальной точки расплывается, а расстояние между ними сокращается. Вследствие этого точки в сигнальном созвездии становятся трудноразличимыми и велика вероятность их перепутывания.
Поэтому одной из задач кодера Треллиса является такое формирование сигнального созвездия, которое обеспечивало бы максимальное расстояние между различными сигнальными точками. Для того чтобы понять, как это делается, обозначим уровни сигналов –1 и +1 через Х, а уровни –2, 0, +2 через Y. Тогда исходное созвездие можно изобразить в виде, показанном на рис. 33 .
Разделив это созвездие на два подсозвездия, одно из которых сформировано из точек XX и YY, а другое - из точек XY и YX, можно увеличить расстояние между сигнальными точками до (рис. 34).
При использовании двух витых пар задача кодера Треллиса заключается в том, чтобы по одной витой паре посылать только символы, принадлежащие какому-либо одному из сигнальных созвездий, например D0=XX+YY, а по второй витой паре - символы, принадлежащие другому созвездию, например D1=XY+YX. Тогда расстояние между посылаемыми символами станет в два раза больше, чем было в исходном созвездии. В результате улучшается распознаваемость точек в сигнальном созвездии, то есть возрастает помехозащищенность.
Приблизительно по такой же схеме работает и реальный треллис-кодер, формирующий символы, посылаемые по четырем витым парам, однако, поскольку каждой точке созвездия отвечают четыре координаты (по одной на каждую пару) и каждая точка может принимать значение X или Y, то всего существует 16 различных комбинаций, из которых можно сформировать восемь подсозвездий:
В полученных подсозвездиях минимальное расстояние между точками в два раза больше, чем в исходном созвездии. Кроме того, минимальное расстояние между точками двух разных подсозвездий также равно 2. Именно эти восемь сигнальных созвездий формируют диаграмму состояний треллис-кодера. К примеру, состоянию кодера 000 соответствует комбинация точек из созвездий D0D2D4D6 в том смысле, что по первой паре передаются точки из созвездия D0, по второй паре - из созвездия D2 и т.д. Следующему возможному состоянию кодера будет соответствовать такая комбинация, при которой минимальное расстояние между посылаемыми символами по каждой паре равно 2.
Использование треллис-кодирования по описанной схеме позволяет снизить соотношение «сигнал/шум» (SNR) на 6 дБ, то есть значительно увеличить помехоустойчивость при передаче данных.
КомпьютерПресс 2"2002
Каждый вид компьютеров имеет свой внутренний вид кодирования для представления данных – символьной и текстовой информации. Наиболее часто используются коды ASCII (American Standard Code for Information Interchange, американский стандартный код для обмена информацией) и EBCDIC (Extended Binary Coded Decimal Interchange Code, расширенный двоично-десятичный код обмена информацией).
ASCII представляет собой 8-битную кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Первую половину кодовой таблицы (0 - 127) занимают символы US-ASCII, которые включают 95 печатаемых и 33 управляющих символа (разработана ANSI – Американским институтом национальных стандартов). Вторая половина таблицы (128 - 255) содержит национальные шрифты (кириллица) и символы псевдографики. Этот код используется в персональных компьютерах и в несовместимых с IBM больших машинах. На больших компьютерах (мейнфреймах) используется 8-битовый код EBCDIC, разработанный компанией IBM. При передаче данных от одного компьютера к другому может потребоваться перекодировка символов, которая осуществляется системным МО передающего или принимающего компьютеров. Эти действия являются функциями уровня представления модели OSI. Далее рассмотрим наиболее часто применяемые методы кодирования на физическом уровне.
Большинство компьютеров для представления «0» и «1» оперирует стандартными уровнями сигналов (логическими уровнями), которые определяются видом микросхем. TTL-логика представляет 0,5В как «0», и 5В как «1». ECL и CMOS-логики представляют -1,75В как «0», и -0,9В как «1». Для передачи данных, например, в оптоволоконных системах, в трансивере (приемопередатчике) устанавливается специальный чип, обрабатывающий любую логику и выдающий управляющий сигнал источнику света с конвертацией 0,5В и 5В TTL в 0 мA и 50 мА соответственно (включи свет, выключи свет).
В большинстве компьютерных сетей цифровые данные передаются при помощи цифрового сигнала, т.е. последовательностью импульсов. Для передачи данных может использоваться более двух уровней сигнала, при этом единичный импульс сигнала может представлять не один бит, а группу бит. Возможна обратная ситуация, когда для передачи одного бита может использоваться два импульса сигнала.
При цифровой передаче используют потенциальные и импульсные коды. В потенциальных кодах для представления логических единиц и нулей используется только значение сигнала в течение битового интервала, а фронты сигнала, формирующие законченные импульсы, во внимание не принимаются. Импульсные коды представляют логический ноль и логическую единицу перепадом потенциала определенного направления. В значение импульсного кода включается весь импульс вместе с его фронтами.
Сигнал в виде импульсной последовательности имеет бесконечный спектр. Основная энергия сигнала сосредоточена в диапазоне частот от нуля до частоты f=1/t о (первый лепесток энергетического спектра сигнала), где t о – бодовый интервал, то есть длительность единичного импульса линейного сигнала.
Теоретически в соответствии с пределом Найквиста максимально допустимая скорость изменения значений дискретного сигнала (B=1/t о, скорость передачи в Бодах) при передаче последовательности прямоугольных импульсов по каналу связи, эквивалентом которого является идеальный ФНЧ с прямоугольной АЧХ и линейной ФЧХ и с частотой среза f гр, равна B max =2f гр. Указанное ограничение связано с наличием переходных процессов на выходе ФНЧ, при этом время нарастания/спада фронта сигнала определяется как
При максимально допустимой скорости передачи сигнала t о =t н. Если интервал t о
Используемый метод физического цифрового кодирования должен достигать несколько целей:
- Обеспечивать наименьшую ширину спектра сигнала при заданной скорости передачи информации N (Бит/с). Минимизировать величину постоянной составляющей в спектре линейного сигнала.
- Обеспечивать приемнику возможность тактовой синхронизации (clocking). Так называемые самосинхронизирующиеся коды позволяют приемнику выделять из принимаемого цифрового потока колебание тактовой частоты и затем формировать из него тактовые импульсы при любой статистике битового потока на входе передатчика.
- Обладать способностью распознавать ошибки
- Обладать низкой стоимостью реализации.
Рассмотрим методы физического цифрового кодирования сигналов.
Потенциальный код без возвращения к нулю NRZ (Non Return to Zero)
Сигнал в линии имеет два уровня: нулю соответствует нижний уровень, единице - верхний. Переходы происходят на границе битового интервала. При передаче последовательности единиц сигнал не возвращается к нулю в течение битового интервала.
Рассмотрим частные случаи передачи данных кодом NRZ (рис.4.1): чередующаяся последовательность нулей и единиц, последовательность нулей и последовательность единиц. Определим частоту основной гармоники спектра сигнала в каждом из этих случаев.
Рис.4.1. Кодирование по методу NRZ
При чередовании единиц и нулей и скорости передачи N (Бит/с) период основной гармоники в спектре сигнала равен T=2t 0 =2/N (с). Частота основной гармоники f 0 равна f о =N/2 (Гц).
При передаче только единиц, или только нулей сигнал в линии представляет собой постоянный ток.
Спектр реального сигнала постоянно меняется в зависимости от того, какова структура данных, передаваемых по линии связи. При передаче длинных последовательностей нулей или единиц, спектр сигнала сдвигается в сторону низких частот. Линейный сигнал NRZ обычно содержит постоянную составляющую и не всегда обеспечивает приемнику возможность синхронизироваться с поступающим сигналом. С другой стороны код NRZ прост в реализации, обладает хорошей помехоустойчивостью (из-за двух резко отличающихся уровней сигнала). Основная энергия сигнала в коде NRZ сосредоточена на частотах от 0 до N/2 (Гц).
В чистом виде код NRZ в сетях не используется. Тем не менее, используются его различные модификации, в которых с успехом устраняют как плохую самосинхронизацию, так и наличие постоянной составляющей.
Потенциальный код с инверсией при единице NRZI (Non Return to Zero with ones Inverted, NRZI)
При этом методе кодирования передаче нуля соответствует уровень сигнала, который был установлен в предыдущем битовом интервале (уровень сигнала не меняется), а при передаче единицы – уровень изменяется на противоположный.
Код используется при передаче по оптоволоконным кабелям, где приемник устойчиво распознает два состояния сигнала - свет и темнота.
Рис.4.2. Кодирование по методу NRZI
Определим частоты основных гармоник линейного сигнала для частных случаев битовых последовательностей.
Для последовательности чередующихся единиц и нулей период сигнала равен T=4t 0 (с), основная частота сигнала f о =N/4 (Гц), при последовательности единиц – f о =N/2 (Гц), при передаче последовательности нулей f о =0 - постоянный ток в линии (или отсутствие света).
Код NRZI использует только два уровня сигнала и поэтому обладает хорошей помехоустойчивостью. Максимальную энергию имеют спектральные составляющие сигнала около частоты N/4 (Гц). Следует отметить, что код NRZI стал основным при разработке улучшенных методов кодирования для систем передачи данных.
Метод биполярного кодирования с альтернативной инверсией (Bipolar Alternate Mark Inversion, AMI, квазитроичный код)
В этом методе используются три значения сигнала –«-1», «0» и «+1». Для различения трех уровней необходимо лучшее соотношение сигнал/шум на входе приемника. Дополнительный уровень требует увеличение мощности передатчика примерно на 3 дБ для обеспечения той же достоверности приема бит на линии. Это общий недостаток кодов с несколькими состояниями сигнала по сравнению с двухуровневыми кодами.
Для кодирования логического нуля используется нулевой потенциал, логическая единица кодируется попеременно либо положительным потенциалом, либо отрицательным.
Рис.4.3. Квазитроичное кодирование (AMI)
При передаче любой битовой последовательности сигнал в линии не содержит постоянную составляющую. При передаче единиц основная гармоника сигнала находится на частоте f o =N/2 (Гц). В случае чередующегося набора единиц и нулей основная гармоника находится на частоте f o =N/4 (Гц), что в два раза меньше чем у кода NRZ. Но остается проблема синхронизации при передаче последовательности нулей.
В целом, для различных комбинаций бит использование кода AMI приводит к более узкому спектру сигнала, чем для кода NRZ. Код AMI предоставляет также некоторые возможности по распознаванию ошибочных сигналов. Так, нарушение строгого чередования полярности сигналов говорит о ложном импульсе или исчезновении корректного импульса.
Манчестерский код (Manchester)
Манчестерский код относится к самосинхронизирующимся кодам и имеет два уровня, что обеспечивает хорошую помехозащищенность. Каждый битовый интервал делится на две части. Информация кодируется перепадом уровня, происходящим в середине каждого интервала.
Единица кодируется перепадом от высокого уровня сигнала к низкому, а ноль - обратным перепадом. В начале каждого битового интервала может происходить служебный перепад сигнала (при передаче несколько единиц или нулей подряд).
Рис.4.4. Манчестерское кодирование
При передаче любой битовой последовательности сигнал не содержит постоянную составляющую. Длительность единичного импульса линейного сигнала t 0 равна половине битового интервала, то есть B=2N. Частота основной гармоники сигнала зависит от характера битовой последовательности и находится в диапазоне f о =N/2 – N (Гц).
Манчестерский код используется в сетях Ethernet со скоростью передачи 10 Мбит/с (спецификация 10Bаsе-Т).
В настоящее время разработчики пришли к выводу, что во многих случаях рациональнее применять потенциальное кодирование, ликвидируя его недостатки с помощью так называемого логического кодирования (см. ниже в этом разделе).
Потенциальный код 2B1Q
Это потенциальный код с четырьмя уровнями сигнала для кодирования данных. Название отражает суть кодирования – каждые два бита (2В) передаются за один такт сигналом определенного уровня (1Q). Линейный сигнал имеет четыре состояния.
Дибиту «00» соответствует потенциал -2,5 В (-3), «01» - потенциал -0,833 В (-1), «11» - потенциал +0,833 В (+1), «10» - потенциал +2,5 В (+3). Скорость передачи сигнала В при таком кодировании в 2 раза меньше скорости передачи информации N. На рис.4.6 изображен сигнал, соответствующий последовательности бит: 01 01 10 00.
Рис.4.6. Сигнал в коде 2B1Q
Основная частота сигнала не превышает f о =N/4 Гц. Однако для реализации этого метода кодирования мощность передатчика должна быть выше, чтобы четыре значения потенциала четко различались приемником на фоне помех.
Код MLT3 (Multi Level Transmission - 3).
Используются три уровня линейного сигнала: «-1», «0», «+1». Логической единице соответствует обязательный переход с одного уровня сигнала на другой. При передаче логического нуля изменение уровня линейного сигнала не происходит.
При передаче последовательности единиц период изменения уровня сигнала включает четыре бита. В этом случае f о =N/4 (Гц). Это максимальная основная частота сигнала в коде MLT-3. В случае чередующейся последовательности нулей и единиц основная гармоника сигнала находится на частоте f о =N/8 (Гц).
Рис.4.7. Сигнал в коде MLT-3
Логическое кодирование выполняется передатчиком до физического кодирования, рассмотренного выше, обычно средствами физического уровня. На этапе логического кодирования борются с недостатками методов физического цифрового кодирования - отсутствие синхронизации, наличие постоянной составляющей. Таким образом, сначала с помощью средств логического кодирования формируются исправленные последовательности данных, которые потом с помощью методов физического кодирования передаются по линиям связи.
Логическое кодирование подразумевает замену бит исходной информационной последовательности новой последовательностью бит, несущей ту же информацию, но обладающей, кроме этого, дополнительными свойствами.
Различают два метода логического кодирования:
- избыточные коды;
- скремблирование.
Избыточные коды основаны на разбиении исходной последовательности бит на группы и замене каждой исходной группы в соответствии с заданной таблицей кодовым словом, которое содержит большее количество бит.
Логический код 4В/5В заменяет исходные группы (слова) длиной 4 бита словами длиной 5 бит. В результате, общее количество возможных битовых комбинаций 25=32 больше, чем для исходных групп 24=16. В кодовую таблицу включают 16 кодовых слов, которые не содержат более двух нулей подряд, и используют их для передачи данных. Код гарантирует, что при любом сочетании кодовых слов на линии не могут встретиться более трех нулей подряд.
Остальные комбинации кода используются для передачи служебных сигналов (синхронизация передачи, начало блока данных, конец блока данных, управление передачей). Неиспользуемые кодовые слова могут быть задействованы приемником для обнаружения ошибок в потоке данных. Цена за полученные достоинства при таком способе кодирования данных - снижение скорости передачи полезной информации на 25%.
Имеются также коды и с тремя состояниями сигнала, например, в коде 8В/6Т для кодирования 8 бит исходной информации используются кодовые слова из 6 элементов, каждый из которых может принимать одно из трех значений. Избыточность кода 8В/6Т выше, чем кода 4В/5В, так как на 28=256 исходных комбинаций приходится 36=729 результирующих комбинаций.
В коде 8B/10В каждые 8 бит исходной последовательности заменяются десятью битами кодового слова. При этом на 256 исходных комбинаций приходится 1024 результирующих комбинаций. При замене в соответствии с кодовой таблицей соблюдаются следующие правила:
- ни одна результирующая комбинация не должна иметь более 4-х одинаковых бит подряд;
- ни одна результирующая комбинация не должна содержать более 6 нулей или 6 единиц;
Все рассмотренные избыточные коды применяются в сетях Ethernet, которые нашли самое широкое распространение. Так, код 4B/5B используется в стандартах 100Base-TX/FX, а код 8B/6T - в стандарте 100Base-T4, который в настоящее время практически уже не используется. Код 8B/10В используется в стандарте 1000Base-Х, код 64/66 в стандарте 10 GbE (когда в качестве среды передачи данных используется оптоволокно).
Осуществляют логическое кодирование сетевые адаптеры. Поскольку, использование таблицы перекодировки является очень простой операцией, метод логического кодирования избыточными кодами не усложняет функциональные требования к этому оборудованию.
Для обеспечения заданной пропускной способности линии передатчик, использующий избыточный код, должен работать с повышенной скоростью (тактовой частотой). Так, для обеспечения скорости передачи информации 100 Мбит/с с использованием кодирования 4В/5В + NRZI передатчик должен работать на скорости 125 МБод. При этом спектр линейного сигнала расширяется. Тем не менее, спектр сигнала избыточного потенциального кода уже спектра сигнала в манчестерском коде, что оправдывает дополнительный этап логического кодирования, а также работу приемника и передатчика на повышенной скорости.
Скремблирование представляет собой "перемешивание" исходной последовательности данных таким образом, чтобы вероятность появления единиц и нулей на линии становилась близкой 0,5. Устройства (или программные модули), выполняющие такую операцию, называются скремблерами (scramble - свалка, беспорядочная сборка).
Скремблер в передатчике выполняет преобразование структуры исходного цифрового потока. Дескремблер в приемнике восстанавливает исходную последовательность бит. Практически единственной операцией, используемой в скремблерах и дескремблерах, является XOR - "побитное исключающее ИЛИ" (сложение по модулю 2).
Рис.4.8. Вариант реализации скремблирования
Пусть, например, скремблер реализует соотношение Вi=Ai+Bi-5+Bi-7.
Здесь Bi – бит результирующего кода, полученный на i-м такте работы скремблера; Ai – бит исходного кода, поступающий в передатчике на вход скремблера на i-м такте; Bi-5 и Bi-7 – биты результирующего кода, полученные на предыдущих тактах работы скремблера, соответственно на «i-5» и «i-7» тактах.
Дескремблер в приемнике восстанавливает исходную последовательность, используя соотношение Ci=Bi+Bi-5+Bi-7=(Ai+Bi-5+Bi-7)+Bi-5+Bi-7=Ai
Выводы
В сетях высокоскоростной передачи данных используются различные виды логического и физического кодирования данных. Логическое кодирование выполняется передатчиком до физического кодирования средствами физического уровня. На этапе логического кодирования борются с недостатками методов физического цифрового кодирования - отсутствие синхронизации, наличие постоянной составляющей. Сформированные исправленные последовательности данных затем с помощью методов физического кодирования передаются по линиям связи.
Дополнительная информация.
Руководство по технологиям объединенных сетей. Cisco systems. Inc. Вильямс. 2004
Контрольные вопросы.
- Какой вид логического кодирования сигнала применяется в высокоскоростных оптоволоконных системах?
- Manchester
- 8B10B
- Декодируйте линейный сигнал 2B1Q: один символ – один элемент сигнала +1 -1 +1 -1 +3 +3 -3 +1
- 1 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1
- 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0
- 0 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0
- 0 1 0 1 1 1 0 0 0 1 0 1 0 0 1 0
- Определите скорость передачи линейного сигнала (В, Бод) при манчестерском кодировании, если скорость передачи информации составляет N=64Кбит/с:
- 131072 Бод
- 65536 Бод
- 64 Кбод
- 128 Кбод
Это продолженеие статьи о помехоустойчивом кодировании, которая очень долго лежала в черновиках. В прошлой части нет ничего интересного с практической точки зрения - лишь общие сведения о том, зачем это нужно, где применяется и т.п. В данной части будут рассматриваться некоторые (самые простые) коды для обнаружения и/или исправления ошибок. Итак, поехали.
Попытался все описать как можно легче для человека, который никогда не занимался кодированием информации, и без каких-либо особых математических формул.
Когда мы передаем сообщение от источника к приемнику, при передаче данных может произойти ошибка (помехи, неисправность оборудования и пр.). Чтобы обнаружить и исправить ошибку, применяют помехоустойчивое кодирование, т.е. кодируют сообщение таким образом, чтобы принимающая сторона знала, произошла ошибка или нет, и при могла исправить ошибки в случае их возникновения.
По сути, кодирование - это добавление к исходной информации дополнительной, проверочной, информации. Для кодирования на передающей стороне используются кодер
, а на принимающей стороне - используют декодер
для получения исходного сообщения.
Избыточность кода
- это количество проверочной информации в сообщении. Рассчитывается она по формуле:
k/(i+k) , гдеНапример, мы передаем 3 бита и к ним добавляем 1 проверочный бит - избыточность составит 1/(3+1) = 1/4 (25%).
k - количество проверочных бит,
i - количество информационных бит.
Код с проверкой на четность
Проверка четности – очень простой метод для обнаружения ошибок в передаваемом пакете данных. С помощью данного кода мы не можем восстановить данные, но можем обнаружить только лишь одиночную ошибку.В каждом пакет данных есть один бит четности
, или, так называемый, паритетный бит
. Этот бит устанавливается во время записи (или отправки) данных, и затем рассчитывается и сравнивается во время чтения (получения) данных. Он равен сумме по модулю 2
всех бит данных в пакете. То есть число единиц в пакете всегда будет четно
. Изменение этого бита (например с 0 на 1) сообщает о возникшей ошибке.
Ниже показана структурная схемы кодера для данного кода
и и декодера
Пример:
Начальные данные: 1111
0 (1 + 1 + 1 + 1 = 0 (mod 2))
Принятые данные: 10 110 (изменился второй бит)
Как мы видим, количество единиц в принятом пакете нечетно, следовательно, при передаче произошла ошибка.
Как говорилось ранее, этот метод служит только для определения одиночной ошибки. В случае изменения состояния двух битов, возможна ситуация, когда вычисление контрольного бита совпадет с записанным. В этом случае система не определит ошибку, а это не есть хорошо. К примеру:
Начальные данные: 1111
Данные после кодирования: 11110 (1 + 1 + 1 + 1 = 0 (mod 2))
Принятые данные: 100 10 (изменились 2 и 3 биты)
В принятых данных число единиц четно, и, следовательно, декодер не обнаружит ошибку.
Так как около 90% всех нерегулярных ошибок происходит именно с одиночным разрядом, проверки четности бывает достаточно для большинства ситуаций.
Код Хэмминга
Как говорилось в предыдущей части, очень много для помехоустойчивого кодирования сделал Ричард Хэмминг . В частности, он разработал код, который обеспечивает обнаружение и исправление одиночных ошибок при минимально возможном числе дополнительных проверочных бит. Для каждого числа проверочных символов используется специальная маркировка вида (k, i), где k - количество символов в сообщении, i - количество информационных символов в сообщении. Например, существуют коды (7, 4), (15, 11), (31, 26). Каждый проверочный символ в коде Хэмминга представляет сумму по модулю 2 некоторой подпоследовательности данных. Рассмотрим сразу на примере, когда количество информационных бит i в блоке равно 4 - это код (7,4), количество проверочных символов равно 3. Классически, эти символы располагаются на позициях, равных степеням двойки в порядке возрастания:первый проверочный бит на 2 0 = 1;
второй проверочный бит на 2 1 = 2;
третий проверочный бит на 2 2 = 4;
но можно и разместить их в конце передаваемого блока данных (но тогда формула для их расчета будет другая).
Теперь рассчитаем эти проверочные символы:
r1 = i1 + i2 + i4
r2 = i1 + i3 + i4
r3 = i2 + i3 + i4
Итак, в закодированном сообщении у нас получится следующее:
r1 r2 i1 r3 i2 i3 i4
В принципе, работа этого алгоритма разобрана очень детально в статье Код Хэмминга. Пример работы алгоритма , так что особо подробно описывать в этой статье не вижу смысла. Вместо этого приведу структурную схему кодера:
![](https://i2.wp.com/habrastorage.org/storage2/2b5/999/a34/2b5999a34ae1bfbd4c9e174399bd3056.png)
и декодера
![](https://i1.wp.com/habrastorage.org/storage2/b29/251/c29/b29251c295cbf6a6631001b9f0af4fb7.png)
(может быть, довольно запутано, но лучше начертить не получилось)
E0,e1,e2 опрделяются как функции, зависящие от принятых декодером бит k1 - k7:
e0 = k1 + k3 + k5 + k7 mod 2
e1 = k2 + k3 + k6 + k7 mod 2
e2 = k4 + k5 + k6 + k7 mod 2
Набор этих значений e2e1e0 есть двоичная запись позиции, где произошла ошибка при передаче данных. Декодер эти значения вычисляет, и если они все не равны 0 (то есть не получится 000), то исправляет ошибку.
Коды-произведения
В канале связи кроме одиночных ошибок, вызванных шумами, часто встречаются пакетные ошибки, вызванные импульсными помехами, замираниями или выпадениями (при цифровой видеозаписи). При этом пораженными оказываются сотни, а то и тысячи бит информации подряд. Ясно, что ни один помехоустойчивый код не сможет справиться с такой ошибкой. Для возможности борьбы с такими ошибками используются коды-произведения. Принцип действия такого кода изображён на рисунке:![](https://i1.wp.com/habrastorage.org/storage2/d44/61f/a74/d4461fa74d5bd4ec90e95ccba6fbab23.png)
Передаваемая информация кодируется дважды: во внешнем и внутреннем кодерах. Между ними устанавливается буфер, работа которого показана на рисунке:
![](https://i0.wp.com/habrastorage.org/storage2/e32/360/f7f/e32360f7f20fe6c848b9ad6e3b205d27.png)
Информационные слова проходят через первый помехоустойчивый кодер, называемый внешним, т.к. он и соответствующий ему декодер находятся по краям системы помехоустойчивого кодирования. Здесь к ним добавляются проверочные символы, а они, в свою очередь, заносятся в буфер по столбцам, а выводятся построчно. Этот процесс называется перемешиванием или перемежением .
При выводе строк из буфера к ним добавляются проверочные символы внутреннего кода. В таком порядке информация передается по каналу связи или записывается куда-нибудь. Условимся, что и внутренний, и внешний коды – коды Хэмминга, с тремя проверочными символами, то есть и тот, и другой могут исправить по одной ошибке в кодовом слове (количество «кубиков» на рисунке не критично - это просто схема). На приемном конце расположен точно такой же массив памяти (буфер), в который информация заносится построчно, а выводится по столбцам. При возникновении пакетной ошибки (крестики на рисунке в третьей и четвертой строках), она малыми порциями распределяется в кодовых словах внешнего кода и может быть исправлена.
Назначение внешнего кода понятно – исправление пакетных ошибок. Зачем же нужен внутренний код? На рисунке, кроме пакетной, показана одиночная ошибка (четвертый столбец, верхняя строка). В кодовом слове, расположенном в четвертом столбце - две ошибки, и они не могут быть исправлены, т.к. внешний код рассчитан на исправление одной ошибки. Для выхода из этой ситуации как раз и нужен внутренний код, который исправит эту одиночную ошибку. Принимаемые данные сначала проходят внутренний декодер, где исправляются одиночные ошибки, затем записываются в буфер построчно, выводятся по столбцам и подаются на внешний декодер, где происходит исправление пакетной ошибки.
Использование кодов-произведений многократно увеличивает мощность помехоустойчивого кода при добавлении незначительной избыточности.
P.S.: Плотно занимался этой темой 3 года назад, когда писал дипломный проект, возможно что-то упустил. Все исправления, замечания, пожелания - пожалуйста через личные сообщения
Часто название протокола доступа к среде передачи в соответствующей конфигурации - «петля с арбитражем доступа» (Fibre Channel Arbitrated Loop, FC-AL) - используют в качестве эквивалента названия технологии Fibre Channel. Однако, по иронии судьбы, получивший такую известность протокол не входил в первоначальный вариант стандарта и лишь впоследствии был принят в качестве дополнения к нему.
Ниже мы рассмотрим основные процедуры, протоколы и технологии уровня передачи FC-1 и сигнального уровня FC-2 и, в частности, непосредственно сам арбитраж доступа.
КОДИРОВАНИЕ 8B/10B
Рисунок 1. Преобразование 8В/10В. |
Уровень FC-1 определяет протокол передачи, в том числе правила кодирования и декодирования, специальные символы и контроль ошибок. В соответствии со схемой кодирования 8B/10B блоки данных из 8 бит преобразуются в блоки данных из 10 бит. Эта схема была изначально разработана компанией IBM для ESCON и позволяет, в частности, обеспечить баланс напряжения постоянного тока.
Некодированная информация разбивается на блоки по 8 бит: A, B, C, D, E, F, G, H, плюс контрольная переменная Z (см. Рисунок 1). Последняя может принимать значение D в случае обычных символов данных (D-типа) или K в случае специальных символов (K-типа). Эта информация преобразуется в соответствии с правилами 8B/10B в так называемый передаваемый символ (Transmission Character) из 10 бит: a, b, c, d, e, i, f, g, h, j. Правила, в частности, предусматривают, что передаваемый символ D-типа должен содержать не менее четырех нулей и единиц, причем число идущих подряд нулей или единиц не должно быть больше четырех. Каждый имеющий смысл передаваемый символ имеет свое обозначение Zxx.y в соответствии со следующим соглашением: Z - контрольная переменная; xx - десятичное значение двоичного числа, составленного из битов E, D, C, B и A, а y - десятичное значение двоичного числа, составленного из битов H, G, F. Так, например, передаваемый символ для специального (т. е. К-типа) байта 10111100 обозначается как K28.5. Иногда он называется также запятой (comma).
Каждый байт данных или специальный символ имеет два (возможно, одинаковых) передаваемых кода, т. е. каждый передаваемый символ имеет два представления, в частности K28.5 может быть представлен и как десятибитовая последовательность 0011111010, и как 1100000101. Какое из двух возможных представлений будет выбрано для передачи, зависит от значения «текущего дисбаланса» (Running Disparity, RD). Двоичный параметр RD вычисляется на основании баланса 0 и 1 в подблоках передаваемого символа. 1 соответствует сигналу с большей оптической мощностью (для оптических каналов) или сигналу с большим напряжением на контакте +, чем на контакте - (в случае медных линий). Текущий дисбаланс вычисляется после первых шести битов каждого передаваемого символа и затем после последних четырех его битов. Дисбаланс может быть положительным (больше единиц, чем нулей) или отрицательным (больше нулей, чем единиц). Такая схема призвана обеспечить равенство нулей и единиц с течением времени.
Всевозможных 10-битовых комбинаций больше, чем реально используется для представления 256 обычных символов. Таким образом, при получении 10-битовой последовательности битов, не соответствующей ни D-типу, ни K-типу, получатель сигнализирует об ошибке кодирования. Кроме того, как отправитель, так и получатель вычисляют новое значение текущего дисбаланса. Если полученный символ имеет отличное от ожидаемого значение дисбаланса (которое получатель определяет на основании предыдущего значения), то получатель сигнализирует об ошибке дисбаланса. Такой подход позволяет реализовать контроль ошибок. Вообще же, вероятность возникновения ошибки при передаче данных составляет ничтожную величину 10-12.
АРБИТРАЖ ДОСТУПА
В отличие от двух других топологий Fibre Channel, в случае петли с арбитражем доступа входящие в нее устройства вынуждены конкурировать друг с другом за доступ к среде передачи. Право передачи предоставляется тому из них, кто выиграет процедуру арбитража. Арбитраж осуществляется следующим образом.
При наличии данных для передачи устройство должно вначале получить контроль над петлей. Для этого оно передает кодовое слово - примитив арбитража ARBx (Arbitrate Primitive Signal), где x соответствует физическому адресу (Arbitrated Loop Physical Address, AL_PA). Если примитив ARBx возвращается обратно, то устройство получает контроль над петлей, после чего оно может передать адресату примитив открытия соединения (Open Primitive Signal, OPN). После этого два устройства взаимодействуют фактически напрямую. Все остальные устройства между ними служат лишь пассивными повторителями передаваемых данных.
Если же доступ к петле хотят получить одновременно несколько устройств, то тогда они сравнивают содержащийся в примитиве ARB адрес со своими собственными. Если участвующее в арбитраже устройство имеет больший адрес, то оно передает полученный примитив дальше без изменений; если же оно имеет меньший адрес, то полученный примитив изымается из обращения, и это устройство передает примитив со своим адресом. Таким образом, арбитраж выигрывает устройство с наименьшим адресом. Получившее контроль над петлей устройство может сохранять его неограниченно долго. Правда, стандарт предусматривает алгоритм обеспечения справедливого доступа (Access Fairness Algorithm), в соответствии с которым устройство не имеет права повторно участвовать в арбитраже, пока всем остальным устройствам не будет предоставлена возможность установить контроль над петлей. К сожалению, реализация этого алгоритма не является обязательной.
ИНИЦИАЛИЗАЦИЯ ПЕТЛИ
Функционирование петли возможно только после ее инициализации, причем после появления в петле нового устройства или отключения от нее имевшегося вся процедура должна повторяться заново. Инициализация состоит в назначении устройствам (точнее, их портам) физических адресов AL_PA.
Адрес AL_PA записывается в младший байт трехбайтного идентификатора адреса (Native Address Identifier, S_ID для отправителя и D_ID для получателя). Однако, в целях соблюдения баланса нулей и единиц, адрес AL_PA может в действительности принимать только 127 разных значений. В случае, если петля связывает более 127 устройств, некоторым из них адреса не достанется, и они будут переведены в пассивный режим (Nonparticipating Mode). В этом режиме устройство только повторяет передаваемые по петле слова. Если петля является автономной, т. е. не подключена к коммутатору, то первые два байта идентификатора остаются пустыми.
Процедура инициализации петли состоит из трех этапов и начинается с передачи примитива инициализации петли (Loop Initialization Primitive, LIP). При включении питания порт передает LIP и тем самым инициирует передачу этого примитива всеми остальными портами. Далее устройства в петле должны выбрать главного (master) для контроля за процессом выбора адресов. Когда петля подключена к коммутатору, главным назначается порт коммутатора; в противном случае главным выбирается порт с наименьшим именем (Port_Name). Наконец, порты выбирают себе адреса в соответствии со следующими приоритетами: назначенный коммутатором, используемый при предыдущей инициализации, запрограммированный производителем, свободный из оставшихся. В конце выбранный главным порт передает примитив CLS о завершении процедуры инициализации.
АДРЕСАЦИЯ
В отличие от многих других технологий локальных сетей, где используется фиксированный MAC-адрес длиной 6 байт, Fibre Channel использует динамически назначаемые при регистрации адреса - так называемые адресные идентификаторы. Адреса в диапазоне от FFFFF0 до FFFFFE (здесь и далее в этом разделе в шестнадцатеричном представлении) закреплены за определенными адресатами - коммутирующей структурой (Fabric), сервером многоадресной рассылки (Multicast Server) и т. д. Адрес FFFFFF зарезервирован для широковещательной рассылки. Адреса назначаются при регистрации в коммутирующей структуре. До регистрации идентификатор адреса не определен и равен 000000.
Как было описано в предыдущем разделе, устройства в петле используют однобайтные физические адреса AL_PA. После завершения инициализации петли и получения адресов AL_PA общедоступные порты типа NL_Port предпринимают попытку зарегистрироваться в коммутирующей структуре, в частности, для получения адресного идентификатора. При этом обычно адрес AL_PA оставляется без изменений и помещает в младший из трех байт адресного идентификатора.
Однако, чтобы инициализация и регистрация вообще были возможны, т. е. чтобы можно было назначить адресные идентификаторы, порты необходимо каким-то образом идентифицировать. Это достигается за счет использования фиксированных именных идентификаторов (Name_Identifier). Именные идентификаторы служат для идентификации портов (Port_Name), узлов (Node_Name) и коммутаторов (Fabric_Name).
КОНТРОЛЬ ПОТОКОВ
Применяемый на уровне FC-2 контроль потоков позволяет согласовать скорость отправки кадров с возможностями коммутирующей структуры и конечных устройств-получателей по их обработке. Лежащая в основе идея достаточно проста: устройство может передавать кадры, только когда другое устройство готово их принять.
В соответствии с правилами Fibre Channel, при установлении соединения между ними устройства должны пройти взаимную регистрацию (login). Одним из результатов регистрации является открытие кредитов. Кредит - это количество кадров, которое отправитель может передать без получения подтверждения об их обработке. Fibre Channel использует два типа контроля потоков: межбуферный (buffer-to-buffer) и сквозной (end-to-end). Какой из механизмов применяется в каждом конкретном случае, зависит от сервисного класса (о сервисных классах см. статью «Fibre Channel» в предыдущем номере LAN). Сквозной контроль потоков используется в случае Класса 1, а межбуферный контроль потоков - для Класса 3; в случае Класса 2 применяются оба типа контроля потоков.
Межбуферный контроль потоков осуществляется по обоим концам прямого канала между узловым портом N_Port и коммутирующим портом F_Port или между двумя узловыми портами N_Port в двухточечной конфигурации. Порты с обеих сторон канала обмениваются друг с другом значениями числа кадров BB_Credit, которые каждый из них готов принять. Например, порт A готов принять X кадров, а порт B - Y кадров. Таким образом, BB_Credit для порта A устанавливается равным Y, а для порта B он будет равным X. Эти значения кредитов остаются неизменными на протяжении всего срока регистрации.
Каждый порт ведет учет числа отправленных им кадров, подтверждение о принятии которых не было получено. Первоначальное значение этого счетчика BB_Credit_CNT устанавливается равным 0 и с каждым отправленным кадром увеличивается на 1. При получении примитива о готовности получателя к приему (Receiver_Ready Primitive Signal, R_RDY) значение счетчика уменьшается на 1. Сигнал R_RDY означает, что получатель обработал кадр, освободил место в буфере и готов к приему следующего кадра. При достижении BB_Credit_CNT значения, равного BB_Credit, передача приостанавливается до получения R_RDY.
Процедура сквозного контроля во многом аналогична вышеописанной, за одним существенным исключением: скорость обмена согласуется двумя конечными устройствами. Как и в предыдущем случае, два взаимодействующих устройства согласуют во время регистрации размер буферов приема EE_Credit. При передаче каждого кадра значение счетчика EE_Credit_CNT увеличивается на 1. При получении кадра с подтверждением (ACK Link Control) значение счетчика уменьшается на указанную в подтверждении величину (кадры ACK позволяют подтвердить получение очередного кадра, нескольких кадров или всей последовательности кадров).
СИНТАКСИЧЕСКАЯ СТРУКТУРА
Вся информация в Fibre Channel передается блоками по четыре передаваемых символа. Эти блоки называются передаваемыми словами (Transmission Word). Начинающиеся с символа K28.5 слова являются служебными (Ordered Set). Сигнальный протокол определяет три типа служебных слов.
Ограничители начала и конца кадра (Start-Of-Frame, SOF и End-Of-Frame, EOF) определяют границы кадра. Отдельные примитивы (Primitive Signal) Idle и Receiver Ready сигнализируют, соответственно, о состоянии готовности порта к приему/передаче и о наличии места в буфере для приема последующих кадров. Последовательности примитивов (Primitive Sequence) Not Operational (NOS), Link Reset (LR) и т. п. представляют собой повторяющиеся служебные слова (не менее 3 раз подряд) и сигнализируют о специфическом состоянии порта.
В свою очередь, при передаче слова (за исключением примитивов) объединяются в кадры (см. Рисунок 2). Кадр начинается с ограничителя начала кадра SOF. За ним следует заголовок кадра длиной в шесть слов, где, в частности, указывается адреса получателя и отправителя. Основное содержимое кадра представляет полезная нагрузка (в принципе, она может и отсутствовать). Поле полезной нагрузки может также содержать вспомогательный заголовок. Завершается кадр контрольной последовательностью CRC и еще одним служебным словом EOF. Таким образом, длина кадра варьируется от 9 слов (36 10-битных байт) до 537 слов (2148 байт) при максимальной полезной нагрузке. Именно кадрами оперирует коммутирующая структура.
Каждый кадр может содержать самодостаточную информацию (например, команду SCSI) или же разбитую для удобства передачи часть целостного информационного массива (например, файла). Такой логически составляющий единое целое блок данных называется последовательностью (Sequence), или, в традиционной терминологии, пакетом. Каждая последовательность идентифицируется с помощью идентификатора Seq_ID в заголовке кадра, а положение кадра в последовательности - с помощью его порядкового номера Seq_Cnt. Таким образом, получатель способен восстановить правильную последовательность кадров, даже если они прибудут в ином порядке по сравнению с тем, в каком были отправлены.
Взаимодействие между приложениями происходит в контексте обмена или сеанса (exchange) между инициатором (originator) и реципиентом (responder). При передаче первого кадра инициатор присваивает данному диалогу номер OX_ID, этот идентификатор затем будет указываться во всех передаваемых реципиентом кадрах в качестве Exchange_ID. В свою очередь, в первом ответном кадре реципиент указывает номер RX_ID, который он присвоил данному обмену, этот идентификатор также будет затем указываться во всех передаваемых инициатором кадрах. Таким образом, и получатель, и отправитель могут однозначно определить, какому именно высокоуровневому протоколу или приложению им следует передать полученные данные.
НА ВСЕ СЛУЧАИ
Технология Fibre Channel находит себе многочисленные применения, в том числе в кластерах и сетях устройств хранения (Storage Area Network, SAN). Основные области применения Fibre Channel мы рассмотрим в следующем номере.
Дмитрий Ганьжа - ответственный редактор LAN. С ним можно связаться по адресу: