Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
В.И.Воловач, А.В.Савенко. УМКД по дисц. Сети ЭВ....doc
Скачиваний:
232
Добавлен:
17.12.2018
Размер:
9.55 Mб
Скачать

2.1.8.7. Адресация прикладных процессов в сетях эвм

В простой сети адрес получателя можно задать в виде константы. Можно использовать аппаратный адрес сетевого адаптера (уникальный MAC-адрес, 6 байт). Если на машине выполняется несколько процессов, одного MAC-адреса недостаточно. В сложных сетях, состоящих из подсетей, используется IP-адрес (4 байта, намечается переход к 6-байтному адресу). Например, 185.43.117.38. IP-адрес состоит из номера сети и номера узла (машины).

Наибольшее распространение получила система с форматом адреса вида

machine id@local id,

где machine id – это IP-адрес узла, localid – это идентификатор процесса, уникальный для данной машины, т.е. это processid. Возможен также вариант, при котором local_id =service_id. В качестве номера службы service_id используют номер порта из диапазона 1...65535. Для широко распространенных служб service e{FTP, NFS, SMTP, HTTP, SNMP ...} закреплены конкретные (well-known) номера портов, например порт 21 для FTP.

Для повышения прозрачности адреса в Интернете используется универсальный указатель ресурса URL (Universal Resource Locator). Например,

Система Sockets ОС Unix. Система Sockets ОС Unix впервые появилась в версии 4.3 BSD UNIX (Berkley Software Distribution UNIX). В ОС Windows используется Windows Sockets = WinSock. Это удобный и универсальный механизм разработки сетевых распределенных приложений:

– Система Sockets ОС Unix не зависит от нижележащих сетевых протоколов и технологий, так как основана на понятии коммуникационного домена (Communication Domain). Каждый домен характеризуется способом именования сетевых узлов и ресурсов, видом сетевых соединений (надежные, дейтаграммные, упорядоченные), способом синхронизации процессов и т. д.

– Используется абстрактная конечная точка соединения сокет (socket=гнездо). Сообщения уходят в сеть и принимаются из сети через сокеты. Каждый процесс пользуется своим сокетом (сокеты могут быть на одной машине).

– Сокет может иметь как высокоуровневое символьное имя (адрес), так и низкоуровневое, отражающее специфику адресации соответствующего домена. Например, в домене Интернета используется низкоуровневое имя в виде пары (IP-адрес, порт).

– Для каждого домена могут быть сокеты различных типов, определяющих вид взаимодействия (соединения):

√ дейтаграммные (datagram);

√ потоковые, обеспечивающие надежную доставку (stream).

Для работы с сокетами используются следующие примитивы (системные вызовы).

Создание сокета:

s=socket(domain, type, protocol),

где type {TCP, UDP, ...}.

Связывание сокета с адресом:

bind(s, addr, addrlen),

где addr – адрес узла, где расположен сокет, например addr=(IP-адрес, порт).

Связывание требуется только для приема сообщений.

Запрос клиента на установление соединения с удаленным сокетом:

connect(s, serveraddr, server-addrlen).

После установления соединения сообщения могут передаваться в обоих направлениях.

Ожидание запроса на установление соединения:

listen(s, backlog),

где backlog – максимальное число запросов в очереди.

Принятие запроса на установление соединения:

snew= accept(s, clientaddr, clientaddrlen).

Отправка сообщения по установленному соединению:

write(s, message, msglen).

Прием сообщения по установленному соединению:

nbytes=read(snew, buffer, amount).

Сообщения через сокет snew принимаются в буфер buffer в размере amount.

Отправка сообщений без установления соединения:

sendto(s, message, receiver_address).

Прием сообщений без установления соединения

amount=recvfrom(s, message, sender_address).