Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Сетевые протоколы UDP. Протокол пользовательских дейтаграмм

UDP. Протокол пользовательских дейтаграмм

Протокол пользовательских дейтаграмм (User Datagram Protocol - UDP)  является простым, ненадежным протоколом дейтаграмм, предусматривающим лишь сквозную адресацию и необязательную контрольную сумму данных. В FreeBSD контрольные суммы включаются или отключаются для всей системы в целом и не могут включаться или отключаться для отдельных сокетов.

Заголовки протокола UDP чрезвычайно просты и содержат лишь номера исходного и конечного портов, размер дейтаграммы и контрольную сумму данных. Адреса хостов для дейтаграммы предоставляются псевдозаголовком IP.

Инициализация UDP

Когда в домене Интернета создается новый UDP сокет (socket) дейтаграмм, уровень сокетов находит элемент переключения протокола UDP и вызывает процедуру udp_attach() сокетом в качестве параметра. UDP использует in_pcballoc() для создания нового управляющего блока протокола в своем списке текущих сокетов. Он также устанавливает ограничения по умолчанию для исходящего и входящего буферов.

Хотя дейтаграммы никогда не помещаются в исходящий буфер, в качестве предела устанавливается верхний предел размера дейтаграммы; элемент переключения протокола UDP содержит флаг PRATOMIC, который требует, чтобы все данные при операции отправки представлялись протоколу одновременно.

Если прикладная программа хочет привязать номер порта - например, хорошо известный номер порта для какой-нибудь службы дейтаграмм, - она делает системный вызов bind. Этот запрос достигает UDP в виде вызова процедуры udpbind(). Привязка может также указать определенный адрес хоста, который должен быть адресом интерфейса на данном хосте.

В противном случае адрес будет оставлен неопределенным, отвечающим любому локальному адресу на входе и выбираемым в качестве подходящего для каждой операции вывода. Привязка осуществляется посредством in_pcbbind(), которая проверяет, что выбранный номер порта (или адрес и порт) не используется, а затем записывает локальный порт связи.

Для отправки дейтаграмм система должна знать удаленную часть связи. Программа может указывать этот адрес и порт при каждой операции отправки, используя sendto или sendmsg, или она может заранее определить их с помощью системного вызова connect. В любом случае протокол UDP использует функцию in_pcbconnect() для записи адреса и порта назначения. Если локальный адрес был не привязан и если найден маршрут до места назначения, в качестве локального адреса используется адрес исходящего интерфейса. Если локальный номер порта был не привязан, он выбирается в это время.
 


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 20 гостей онлайн

Реклама на сайте: