Основы «соединения» UDP
Что такое UDP
Во многом протокол пользовательских датаграмм (User Datagram Protocol, UDP) - противоположность TCP. Если TCP обеспечивает надёжную потоковую передачу, то UDP отправляет данные отдельными пакетами, или «датаграммами». Это похоже на «пейджинг» (отправку сообщения на «пейджер» - помните такие?). Отправляется пакет с некоторыми данными. Нет гарантии, что другая сторона его получит, а отправитель не узнает, дошёл пакет или нет.
Каждая датаграмма UDP живёт своей жизнью: вы сами отвечаете за разбиение данных на фрагменты разумного размера и отправку их отдельными датаграммами. В UDP нет установки и завершения соединения - датаграмму можно отправить сразу, без всякой подготовки.
В отличие от TCP, UDP не является протоколом «точка-точка». Например, несколько хостов могут отправлять датаграммы на один сокет вашего устройства, и все они могут быть приняты - при TCP такое невозможно. Есть и возможность разослать датаграмму всем хостам, подключённым к тому же сегменту сети, - при TCP это тоже невозможно.
А теперь о «соединениях» UDP...
После сказанного может показаться неожиданным, что мы развернёмся на 180 градусов и заговорим о «соединениях» UDP. Разве мы только что не сказали, что их нет? И да, и нет. В физической сети их действительно нет. Однако на уровне объекта sock. мы намеренно сделали связь по UDP более похожей на соединения TCP. А поскольку «соединение» UDP - не более чем абстракция объекта sock., слово «соединение» мы берём в кавычки.
Считается, что активное открытие выполнено, когда наш хост отправил первую датаграмму UDP получателю. Пассивное открытие - это когда мы получили первую входящую датаграмму UDP от другого хоста (при условии, что эта датаграмма была принята; подробнее в разделе Приём входящих соединений).
Для соединений UDP плавного разъединения нет. Соединение можно только отбросить (наш хост о нём «забывает»). Соединение UDP также может быть закрыто по тайм-ауту.