Как работает UDP
Что проверяют
Понимаете ли вы, каких гарантий UDP не даёт и как это отражается на тестировании. Для QA следом обычно спрашивают, как вы проверите поведение приложения при потере и перестановке пакетов и какими инструментами.
Как отвечать
UDP это протокол транспортного уровня без установления соединения. Приложение отправляет датаграмму, протокол добавляет заголовок в 8 байт: порт отправителя, порт получателя, длина и контрольная сумма. Больше UDP ничего не делает:
- нет рукопожатия: первая же датаграмма уже несёт данные;
- нет подтверждений и повторов: потерянный пакет пропадает, если приложение само не запросит его снова;
- нет порядка: пакеты могут прийти перемешанными или в двух копиях;
- нет управления перегрузкой: отправитель не притормаживает, когда сеть забита;
- границы сообщений сохраняются: одна отправка равна одному чтению, в отличие от потока байтов в TCP.
Где применяется: DNS (порт 53, большие ответы уходят в TCP), DHCP, NTP, голос и видео по RTP, WebRTC, онлайн-игры. Отдельно стоит назвать QUIC: на нём работает HTTP/3, а надёжность, порядок и шифрование он реализует сам поверх UDP.
Что это значит для тестирования:
- эмуляция плохой сети:
tc qdisc add dev eth0 root netem loss 5% delay 100msна Linux, Clumsy на Windows, Network Link Conditioner на macOS и iOS; - наблюдение: Wireshark с фильтром
udp.port == 53, ручная отправка черезnc -u, замер потерь и джиттера черезiperf3 -u; - проверки: как ведут себя звук и видео при потерях, не падает ли клиент на дубликатах и пакетах не по порядку, что будет с датаграммой больше MTU (около 1500 байт в Ethernet), проходит ли трафик через фаервол и NAT.
Где спотыкаются
Говорят, что UDP «гарантирует скорость». Он лишь не тратит время на подтверждения, а при перегрузке сети его пакеты просто теряются, повторять их некому.
Путают уровни и считают, что UDP нумерует пакеты. Номера последовательности есть в RTP и QUIC, то есть в протоколах поверх UDP.
Тестируют только в идеальной локальной сети. Потерь там почти нет, и проблемы видеосвязи всплывают уже у пользователей в мобильном интернете.