- •Разработка сетевых приложений
- •План
- •Сокеты (socket)
- •Поддержка всех типов протоколов
- •Домены сокетов
- •Семейства протоколов
- •Примеры семейств протоколов /usr/include/linux/socket.h
- •Типы сокетов домена Интернет
- •Функция socket()
- •Привязка сокета к сетевому адресу и порту
- •Функция bind()
- •Формат адреса для семейства протоколов Интернет
- •Порядок байт сети и локальной машины
- •Пример привязки адреса
- •Возможности получения адресов
- •Использование службы доменных имен
- •Режимы сокетов
- •Соединение сокетов
- •Функция connect()
- •Серверный сокет в режиме прослушивания (LISTEN)
- •Сокет в режиме приема входящих соединений (accept)
- •Прием и передача информации
- •Диаграмма работы с
- •Класс sock_1
- •Пример сервера
- •Пример клиента
- •Пример выполнения
- •Синхронное и асинхронное выполнение
- •Проверка наличия данных
- •Удаленные вызовы процедур
- •Extended data representation
- •Использование компилятора RPCGEN
- •Пример описания интерфейсов
- •Создание тела процедуры
- •Создание клиента
- •Компиляция клиента и сервера
- •Пример работы
- •CORBA
- •Процесс создания распределенной программы
- •Пример – описание интерфейса
- •Создание тела функции (test- skelimpl.c)
- •Создание сервера
- •Пример сервера (test- skelimpl.c)
- •Создание клиента (test_client.c)
- •Пример клиента
- •Компиляция сервера и клиента
- •Запуск клиента и сервера
- •Вопросы
Разработка сетевых приложений
Судаков А.А.
“Параллельные и распределенные вычисления” Лекция 21
План
Сокеты
Удаленные вызовы процедур
CORBA
Сокеты (socket)
Сокеты – аппаратно и протокольно независимый интерфейс для создания сетевых приложений
Появились в BSD 4.4
Работа как с файлом
Создать
Открыть (привязать к адресу, соединить)
Чтение
Запись
Поддержка всех типов протоколов
сокет
Домен – семейства адресов и протоколов
Тип сокета - протокол
Домены сокетов
Сокеты могут использоваться для обмена
По сети
В рамках локальной машины
В рамках кластера
…
Область видимости сокета называется доменом
Домен Интернет INET
Домен Unix UNIX
…
Семейства протоколов
Домену соответствует набор (семейство) протоколов и адресов
Домен сокетов Интернет
Семейство протоколов и адресов Интернет (PF_INET, AF_INET)
Протокол TCP
Протокол UDP
Домен сокетов IPX
семейство протоколов и адресов IPX (PF_IPX,AF_IPX )
Протокол IPX
Протокол SPX
Примеры семейств протоколов /usr/include/linux/socket.h
/* Supported address families. */ |
|
|
||
#define AF_UNSPEC |
0 |
|
|
|
#define AF_UNIX |
1 |
/* |
Unix domain sockets |
*/ |
#define AF_LOCAL |
1 |
/* |
POSIX name for AF_UNIX |
*/ |
#define AF_INET |
2 |
/* |
Internet IP Protocol |
*/ |
#define AF_AX25 |
3 |
/* |
Amateur Radio AX.25 |
*/ |
#define AF_IPX |
4 |
/* |
Novell IPX |
*/ |
#define AF_APPLETALK |
5 |
/* |
AppleTalk DDP |
*/ |
#define AF_NETROM |
6 |
/* |
Amateur Radio NET/ROM |
*/ |
#define AF_BRIDGE |
7 |
/* |
Multiprotocol bridge |
*/ |
#define AF_ATMPVC |
8 |
/* |
ATM PVCs |
*/ |
#define AF_X25 |
9 |
/* |
Reserved for X.25 project |
*/ |
#define AF_INET6 |
10 |
/* |
IP version 6 |
*/ |
#define AF_ROSE |
11 |
/* |
Amateur Radio X.25 PLP |
*/ |
#define AF_DECnet |
12 |
/* |
Reserved for DECnet project |
*/ |
#define AF_NETBEUI |
13 |
/* |
Reserved for 802.2LLC project*/ |
|
#define AF_SECURITY |
14 |
/* |
Security callback pseudo AF */ |
|
#define AF_KEY |
15 |
/* |
PF_KEY key management API */ |
|
#define AF_NETLINK |
16 |
|
|
|
#define AF_ROUTE |
AF_NETLINK |
/* Alias to emulate 4.4BSD */ |
|
|
#define AF_PACKET |
17 |
/* |
Packet family |
*/ |
#define AF_ASH |
18 |
/* |
Ash |
*/ |
#define AF_ECONET |
19 |
/* |
Acorn Econet |
*/ |
Типы сокетов домена Интернет
Сокеты ориентированные на соединения
Потоковый сокет
Гарантированная и надежная доставка данных
Транспортный протокол TCP или аналогичный
Тип SOCK_STREAM
Сокеты не ориентированные на соединения
Дейтаграмный сокет
Негарантированная, ненадежная, быстрая доставка данных
Транспортный протокол UDP (или аналогичный)
Тип SOCK_DGRAM
Низкоуровневый сокет
Доступ к низкоуровневым протоколам Интернет
IP
ICMP
IGMP
Заголовкам транспортных протоклов
SOCK_RAW
Доступен только администратору
Функция socket()
Создание сокета заданного домена, семейства и протокола
int socket(int domain, int type, int protocol);
int fd = socket(PF_INET,SOCK_STREAM, IPPROTO_TCP)
Привязка сокета к сетевому адресу и порту
Большинство протоколов требуют указания адреса конечной точки коммуникации
IP – сетевой адрес
TCP – порт
Тип и формат адреса зависит от протокола
Для сокетов разных семейств протоколов и адресов необходимо указывать свои параметры