Книга: UNIX: разработка сетевых приложений
8.1. Введение
8.1. Введение
Приложения, использующие TCP и UDP, фундаментально отличаются друг от друга, потому что UDP является ненадежным протоколом дейтаграмм, не ориентированным на установление соединения, и этим принципиально непохож на ориентированный на установление соединения и надежную передачу потока байтов TCP. Тем не менее есть случаи, когда имеет смысл использовать UDP вместо TCP. Подобные случаи мы рассматриваем в разделе 22.4. Некоторые популярные приложения построены с использованием UDP, например DNS (Domain Name System — система доменных имен), NFS (сетевая файловая система — Network File System) и SNMP (Simple Network Management Protocol — простой протокол управления сетью).
На рис. 8.1 показаны вызовы функций для типичной схемы клиент-сервер UDP. Клиент не устанавливает соединения с сервером. Вместо этого клиент лишь отправляет серверу дейтаграмму, используя функцию sendto
(она описывается в следующем разделе), которой нужно задать адрес получателя (сервера) в качестве аргумента. Аналогично, сервер не устанавливает соединения с клиентом. Вместо этого сервер лишь вызывает функцию recvfrom
, которая ждет, когда придут данные от какого-либо клиента. Функция recvfrom
возвращает адрес клиента (для данного протокола) вместе с дейтаграммой, и таким образом сервер может отправить ответ именно тому клиенту, который прислал дейтаграмму.
Рис. 8.1. Функции сокета для модели клиент-сервер UDP
Рисунок 8.1 иллюстрирует временную диаграмму типичного сценария обмена UDP-дейтаграммами между клиентом и сервером. Мы можем сравнить этот пример с типичным обменом по протоколу TCP, изображенным на рис. 4.1.
В этой главе мы опишем новые функции, применяемые с сокетами UDP, — recvfrom
и sendto
, и переделаем нашу модель клиент-сервер для применения UDP. Кроме того, мы рассмотрим использование функции connect с сокетом UDP и концепцию асинхронных ошибок.
- 8.1. Введение
- 8.2. Функции recvfrom и sendto
- 8.3. Эхо-сервер UDP: функция main
- 8.4. Эхо-сервер UDP: функция dg_echo
- 8.5. Эхо-клиент UDP: функция main
- 8.6. Эхо-клиент UDP: функция dg_cli
- 8.7. Потерянные дейтаграммы
- 8.8. Проверка полученного ответа
- 8.9. Запуск клиента без запуска сервера
- 8.10. Итоговый пример клиент-сервера UDP
- 8.11. Функция connect для UDP
- 8.12. Функция dg_cli (продолжение)
- 8.13. Отсутствие управления потоком в UDP
- 8.14. Определение исходящего интерфейса для UDP
- 8.15. Эхо-сервер TCP и UDP, использующий функцию select
- 8.16. Резюме
- Упражнения