Как сетевая карта определяет какой код исправления ошибок использовать?
=========================================================================

 Пытаюсь разобраться по какому принципу определяются коды обнаружения и исправления ошибок на сетевой карте.  
  
**Вопрос 1. Как сететевая карта понимает какой полином использовать для расчета контрольной суммы CRC?**  
  
**Вопрос 2. Как сетевая карта понимает какой код исправления ошибок ей использовать?**  

Например, на сетевую карту прийдет сообщение с избыточной информацией которую вставили по типу Хэмминга, а она будет проверять по принципу, допустим, Витерби, то ничего не получиться   

(ну если вы мне не скажите, что для всех кодов исправления ошибок применяется одинаковый алгоритм вставки избыточной информации, но только разная реализация проверки).  
  
**Вопрос 3. Как сетевая карта отличает форматы кадров?**  

Даже у самого популярного формата Ethernet есть разные виды с разной формой записи, так как сетевая карта их отличает?  
  
**Вопрос 4. На чем сетевая карта исполняет команды? На С/С++ или сразу на ассемблере?**  

Видел, что все примеры кодов исправления ошибок иллюстрируют работы с регистрами и операциями типа XOR и задумался: а под средством чего сетевая карта выполняет команды?  
  

Прошу, по возможности, отвечаете как можно подробнее) 

 1. Есть стандарты для протоколов низкого уровня. Для ethernet это вроде IEEE\_802.3 - там описаны и структура пакетов и алгоритмы как работать с CRC. Сетевая карточка умеет работать с этими пакетами.  
  

2. 3. 4. <https://en.wikipedia.org/wiki/Network_processor> Все обрабатывается микрокодом процессора карточки, там есть и поддержка стандартов и самое начало, когда два устройства договариваются друг с другом о протоколах передачи и так далее. Физический адрес - это как раз то, о чем знает сетевая карточка еще до операционной системы.  

На сетевой карте есть чипсет. От него зависит в том числе и скорость работы. например в свое время 100мбитные карточки были заметно дороже 10мбитных именно из-за более дорогого чипсета, коториый бы успевал обрабатывать пакеты. А серверные карточки брали на себя много полезных вещей, до того как информация уходила уже в драйвер tcp на основной процессор.