Урок 22: UDP-датаграммы — sendto и recvfrom
В отличие от TCP, UDP (User Datagram Protocol) не устанавливает соединение, не гарантирует порядок и не гарантирует доставку. Звучит как недостаток — но именно поэтому UDP быстрее и проще, он подходит для сценариев, где можно позволить себе потерю отдельного packet, но нельзя платить за TCP handshak
UDP — это как отправить открытку: пишешь адрес, бросаешь в ящик — и всё, без подтверждения о доставке и без понятия, обогнала ли её другая открытка. TCP же — это посылка с отслеживанием, подтверждением подписи и страховкой. Для метрик GPU, отправляемых каждую секунду, дешёвой и быстрой открытки вполне достаточно.
- UDP
- Транспортный протокол без установления соединения (connectionless). Отправляет datagrams без соединения, без гарантии порядка или доставки. Быстрее и проще, чем TCP.
- sendto()
- Отправляет UDP datagram по адресу назначения, указываемому в каждом вызове. В отличие от send(), заранее установленное соединение не требуется.
- recvfrom()
- Принимает UDP datagram и возвращает как данные, так и адрес отправителя. Позволяет отправить ответ конкретному отправителю.
- datagram
- Независимая единица данных в UDP. Каждый datagram содержит адрес источника, адрес назначения и данные. Он не зависит от предыдущих или будущих datagram.
- без соединения (connectionless)
- Модель связи, в которой каждое сообщение независимо и нет процесса установления соединения (handshake). UDP работает без соединения (connectionless); TCP — с установлением соединения (connection-oriented).