Режим приема пакетов длиной менее 64 байт
Минимальная длина пакета в 802.3 сетях равна 64 байтам. Пакеты длиной менее 64 байт в нормальном режиме отбрасываются. Зачастую, в некоторых приложениях может быть полезно принимать подобные пакеты. Это возможно установкой AR бита RCR регистра в единицу.
Режим приема пакетов с ошибками
В целях диагностики может возникнуть необходимость принимать пакеты, при приеме которых возникли какие-либо ошибки. При установкее SEP бита RCR регистра в единицу, подобные пакеты сохраняются и перемещаются в память.
Буферная память
После приема пакеты помещаются в буферную память, и после обработки удаляются из нее. Буферная память представляет собой кольцевой буфер, который выделяется при начальной инициализации контроллера. После выделения NIC котроллер берет на себя все операции с буферной памятью и работает с ней через указатели, расположенные в нем самом.
Для перемещения данных меду буферной памятью и очередью (FIFO) используются специальные DMA каналы, которые могут работать со скоростью до 10 мегабайт в секунду.
Для перемещения данных между буферной памятью и системной памятью используются дополнительные внешние DMA каналы.
Используемая схема работы с буферной памятью эффективно работает как FIFO очередь для больших пакетов и хорошо подходит для большинства сетевых приложений в связи с тем, что пакеты обрабатываются в том же порядке, в котором были получены.
Для управления кольцевым буфером используются четыре указателя:
§ PSTART указатели на начальную страницу (page start, PSTART)
§ PSTOP указатели на конечную страницу (page stop, PSTOP) определяют размер кольцевого буфера;
§ CURR указатель на текущую страницу (current page, CURR) определяет адрес, с которого следующий пакет будет загружен;
§ BNRY и адрес границы (boundary pointer, BNRY) определяет адрес, с которого будут происходить следующая выгрузка пакета. После приема пакета, текущий указатель перемещается вперед к граничному указателю по кругу. Адреса начальной и конечной страницы в процессе работы с буферной памятью не изменяются.
Кольцевая буферная память состоит из набора 256-байтных областей, и эти области могут быть объединены вместе для приема пакетов, превышающих 256 байт. Может быть объединено одновременно до 256 подобных областей, т.е. размер максимальной области, которую можно выделить в буферной памяти, равен 64-ем килобайтам. Это ограничение объясняется тем, что все регистры контроллера имеет размер, равный 8 битам, и указатели, используемые при работе с буферной памятью, не могут адресовать свыше 256 областей.
При приеме, пакет помещается в кольцевой буфер начиная с текущего адреса (CURR) + смещение в четыре байта. Пакет последовательно помещается из очереди контроллера (FIFO) в кольцевой буфер через локальный DMA канал, в соответствии с накоплением в очереди контроллера определенного количества байт (threshold). При необходимости 256-байтные области объединяются вместе в процессе приема пакета. После окончания передачи, значение RCR регистра, указатель на следующий пакет, и длина принятого пакета в байтах записываются в зарезервированное ранее 4-байтное смещение.
Если при приеме пакета возникли ошибки (FAE, CRC), текущий указатель (CURR) не изменяется, то есть следующий пакет перезаписывает предыдущий плохой пакет. Эта особенность может быть отключена установкой SEP бита RCR регистра для получения возможности изучения ошибочных пакетов.
Если кольцевой буфер полностью заполнен и при операции по локальному DMA каналу достигается адрес границы (boundary pointer), контроллер прерывает прием пакета. Таким образом, предыдущие принятые и все еще находящиеся в буферной памяти пакеты не повреждаются. При переполнении буферной памяти устанавливается OVW бит регистра состояния прерывания. Для корректной обработки переполнения
Протокол ARP
Рассмотрим как при посылке IP-пакета определяется Ethernet-адрес назначения. Для отображения IP-адресов в Ethernet адреса используется протокол ARP (Address Resolution Protocol - адресный протокол). Отображение выполняется только для отправляемых IP-пакетов, так как только в момент отправки создаются заголовки IP и Ethernet.
ARP-таблица для преобразования адресов
Преобразование адресов выполняется путем поиска в таблице. Эта таблица, называемая ARP-таблицей, хранится в памяти и содержит строки для каждого узла сети. В двух столбцах содержатся IP- и Ethernet-адреса. Если требуется преобразовать IP-адрес в Ethernet-адрес, то ищется запись с соответствующим IP-адресом. Ниже приведен пример упрощенной ARP-таблицы.
IP-адрес | Ethernet-адрес |
223.1.2.1 223.1.2.3 223.1.2.4 | 08:00:39:00:2F:C3 08:00:5A:21:A7:22 08:00:10:99:AC:54 |
Табл.1. Пример ARP-таблицы
ARP-таблица необходима потому, что IP-адреса и Ethernet-адреса выбираются независимо, и нет какого-либо алгоритма для преобразования одного в другой. IP-адрес выбирает менеджер сети с учетом положения машины в сети internet. Если машину перемещают в другую часть сети internet, то ее IP-адрес должен быть изменен. Ethernet-адрес выбирает производитель сетевого интерфейсного оборудования из выделенного для него по лицензии адресного пространства. Когда у машины заменяется плата сетевого адаптера, то меняется и ее Ethernet-адрес.