Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec.doc
Скачиваний:
16
Добавлен:
05.12.2018
Размер:
2.61 Mб
Скачать

1.6.2 Порты и сокеты

За передачу данных в сети Интернет отвечают два протокола транспортного уровня - UDP (User Datagram Protocol) и TCP (Transmission Control Protocol). Данные передаются программами-приложениями этим протоколам, помещаются в "конверты" с набором соответствующих заголовков и только после этого передаются по сети.

UDP - это не очень надежная служба передачи данных. Отправитель данных не получает подтверждения их доставки получателю. Этот протокол не упорядочивает передаваемые пакеты, некоторые из них могут быть потеряны или, наоборот, возможно дублирование пакетов без попыток уведомления об ошибках отправителя данных. Протокол IP ведет себя так же. Единственное достоинство UDP - это поддержка номеров портов, что обеспечивает абсолютную идентификацию конкретных программ - приложений, работающих на компьютере, подключенном к сети, и подсчет контрольной суммы для простейшего контроля над ошибками. Но UDP работает быстрее, чем TCP (ведь заголовки пакетов у него в пять раз короче - 8 против 40 байт!), и используется приложениями, которым не нужен надежный транспорт, например управляющими сетью, службой определения сетевых адресов либо приложениями со встроенной надежностью. Каждая программа, которая использует в качестве транспорта протокол UDP, должна сама позаботиться о подтверждении получения данных и об упорядочивании и сортировке пакетов принимающей стороной.

Протоколы транспортного уровня имеют свой заголовок, и его формат не зависит от других протоколов. Вот общий вид заголовка UDP пакета:

Длина сообщения - это сумма размера заголовка (8 байт) и передаваемого блока данных. Минимальный размер пакета UDP равен восьми байтам, размеру заголовка. Если контрольная сумма не используется, значение этого поля может быть равным нулю.

Протокол транспортного уровня (UDP или TCP) получает данные от программы-приложения, форматирует их (формирует заголовок) и передает их IP протоколу для передачи по сети. Если UDP получает данные от сети (от IP протокола), то в зависимости от порта назначения он передает их соответствующему приложению.

Обратимся к сетевым стандартам (а конкретно - к RFC 814). Так как различные сетевые приложения могут выполняться на одном компьютере, имеющем один IP адрес, возникает необходимость в способе адресации пакетов данных этим приложениям. Один IP адрес и много приложений? Как разобраться, какому приложению адресовать какой пакет???

Может быть, раздать уникальные IP адреса всем приложениям и сетевым процессам или изменить саму систему адресации в сети Интернет и включить в нее указатель - идентификатор приложения? Вместо этого, протоколы UDP и TCP предлагают понятие, известное как "номер порта", port number. Комбинация IP адреса компьютера и номера порта позволяет абсолютно точно идентифицировать любую программу или приложение, выполняемую на любом компьютере, подключенном к сети.

Существует три вида номеров портов:

- назначенные ( assigned)

- зарегистрированные ( registered)

- динамические ( dynamic)

Назначенные и зарегистрированные номера портов регламентируются отдельным серьезным документом - RFC 1700. Первые 1024 номера (с 0 по 1023) отведены под назначенные и не могут использоваться другими приложениями, кроме тех, за которыми они закреплены. Оставшаяся область делится между зарегистрированными и динамическими номерами (отведенные на номер порта 16 бит дают возможность использовать всего 65535 виртуальных портов). А следит за порядком в этой области специальная организация - IANA (Internet Assigned Numbers Authority). Именно к ее услугам прибегают все компании-производители сетевого программного обеспечения, когда хотят зарезервировать за своим продуктом определенный номер порта.

Примеры назначенных номеров портов:

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

Например, если рабочая станция хочет использовать простой протокол передачи файлов, известный как TFTP (Trivial File Transfer Protocol), на компьютере с адресом 192.1.1.1, то пакеты будут адресованы этому компьютеру, но с указанием номера порта назначения (69 для протокола TFTP) в заголовке UDP пакета.

Порт источника будет указывать на приложение, работающее на этой рабочей станции и отправившее запрос на передачу файла, и все пакеты, полученные из сети для этого приложения, будут идентифицированы по этому номеру порта. Обычно номер порта источника выбирается случайным образом из диапазона динамических номеров. Если порт источника не используется его значение равно "0".

Недостаток при использовании динамических номеров портов может проявиться при широковещательной рассылке по сети пакетов данных, в которых в качестве порта назначения используется динамический адрес. Ведь этот порт может уже использоваться любой программой на любом компьютере в локальной сети и пакет будет доставлен "не по адресу".

Случай это весьма редкий, но все же иногда происходит.

Динамические номера портов назначаются сетевыми программами - приложениями на компьютере - рабочей станции, причем различные приложения на различных компьютерах могут использовать одни и те же номера портов, так как любое приложение на любом компьютере может быть идентифицировано при помощи комбинации IP адреса компьютера и номера порта программного приложения.

Вот эта комбинация и называется сокетом (socket), например, 192.1.1.1:25 - это адрес SMTP сервера на компьютере с адресом 192.1.1.1.

Если для упрощения провести аналогию между взаимодействием двух компьютеров по сети и телефонным соединением, то сокет выступает в роли телефонной линии, а номер порта заменяет номер телефона.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]