Домашнее задание: Реальный UDP протокол

В рамках данной работы вы будете реализовывать клиентскую и серверную части двух широко используемых протоколов, основанных на UDP:

Основной проверкой будет работа с уже существующими реализациями.

Реализуемые каждым студентом клиент и сервер должны работать с разными протоколами.

RFC

Все выбранные для данного задания протоколы имеют подробно описание в соответствующих Request for Comments (RFC). Стоить отметить, что многие из данных протоколов появились на заре развития интернета и за долгое время претерпели значительные изменения, DNS тому отличный пример.

Для облегчения навигации обсудим важные секции заголовка многих из таких RFC.

  • Obsoleted by: - рассматриваемый RFC целиком устарел и основными документами стоит считать указанные
  • Obsoletes: - ссылка на старую версию RFC, заменяемую текущей
  • Updated by: - список RFC, вносящих коррективы в отдельные части рассматриваемого RFC
  • Updates: - ссылка на основную версию RFC, в которую вносятся данные изменения
  • Errata Exist - для рассматриваемого RFC существуют правки, доступные в шапке - [Errata]

На момент создания данной страницы мы указываем ссылки на последние основные RFC (т.е. для них нет Obsoleted by).

DHCP

RFC: 2131

Клиенту не требуется реально устанавливать ip узла* TODO: проверить не нужно ли клиенту отвечать с нового IP адреса.

Популярные имлементации:

  • Self Hosted серверы:
    • isc dhcp server (dhcpd)

DNS

RFC: 1034, 1035 и 3596

В рамках данного задания не нужно реализовывать все спецификации DNS. Для сервера и клиента требуется реализовать только следующие типы записей: A, MX, AAAA, TXT

Серверу достаточно отвечать только запросы к одному доменному имени и заранее заложенными значениями, т.е. нет необходимости реализовывать полноценный процесс разрешения имени.

Популярные имлементации:

  • Клиенты:
    • drill
    • dig
    • nslookup
  • Публичные серверы:
    • 1.1.1.1
    • 8.8.8.8
  • Self Hosted серверы:
    • bind9 (named)
    • dnsmasq

TFTP

RFC:

Популярные имлементации:

NTP

RFC: 5905

В реализации сервера нет необходимости гарантировать точное время, подходит время сервера.

Популярные имлементации:

  • https://www.pool.ntp.org/ - пул публичных серверов
  • Клиенты встроены в большинство настольных ОС
  • chrony - открытые сервер и клиент

SNMP

RFC: v1: 1157, v2: 1901, v3: 3411

Популярные имлементации:


  • TODO: примеры реализаций для каждого из приведённых протоколов
  • TODO: подробные требования к реализации (subset требуемых фич)
  • TODO(?): готовые сетапы для тестирования (скорее всего vagrant)