Принимаем соединение – создаем клиентский сокет
Download
Report
Transcript Принимаем соединение – создаем клиентский сокет
Сокеты
Сети и системы
телекоммуникаций
Созыкин А.В.
План
Место сокетов в моделях OSI и TCP/IP
Сокеты Беркли
Основные операции над сокетами
Работа сокетов
Пример на Python
ИМКН УрФУ
2
Место в моделях OSI и TCP/IP
Модель OSI
Модель TCP/IP
Прикладной
Представления
Прикладной
Сеансовый
Транспортный
Транспортный
Сетевой
Сетевой
Канальный
Сетевых
интерфейсов
Физический
ИМКН УрФУ
3
Место в моделях OSI и TCP/IP
Сокеты и TCP относятся к
транспортному уровню
Сокеты – интерфейс транспортного
уровня
TCP – протокол транспортного уровня
ИМКН УрФУ
4
Место в моделях OSI и TCP/IP
Приложение
Приложение
Интерфейс
сокетов
Транспортный
Интерфейс
сокетов
Протокол TCP
Транспортный
Сетевой
Сетевой
Сетевых
интерфейсов
Сетевых
интерфейсов
Хост 1
Хост 2
ИМКН УрФУ
5
Сокеты Беркли
Сокеты впервые появились в ОС
Berkeley UNIX 4.2 BSD (1983 г.)
Сокеты – де-факто стандарт
интерфейсов для транспортной
подсистемы
Различные варианты сокетов
реализованы в разных ОС и языках
программирования
ИМКН УрФУ
6
Сокеты Беркли
Сокет в Unix – файл специального типа
В
Unix все устройства представляются файлами
Операции чтения и записи в файл сокета
передают данные по сети
Отправитель
записывает данные в файл сокета
Получатель читает данные их файла сокета
Передача данных по сети скрыта от программиста
ИМКН УрФУ
7
Операции сокетов Беркли
Операция
Назначение
Socket
Bind
Listen
Создать новый сокет
Связать сокет с IP-адресом и портом
Объявить о желании принимать
соединения
Connect
Accept
Send
Установить соединение
Принять запрос на установку соединения
Отправить данные по сети
Receive
Close
Получить данные из сети
Закрыть соединение
ИМКН УрФУ
8
Клиент и сервер
Взаимодействующие стороны сокетов
Беркли:
Сервер
Клиент
Сервер – работает (слушает) на известном
IP-адресе и порту и пассивно ждет запросов
на соединение
Клиент – активно устанавливает соединение
с сервером на заданном IP и порту
ИМКН УрФУ
9
Работа сокетов
Socket
192.168.1.1:80
Bind
Запрос на
соединение
Socket
Connect
Listen
Accept
Receive
Send
Close
Очередь для
соединений
Копия сокета
Соединение
Сервер
Клиент
ИМКН УрФУ
10
Работа сокетов
Передача данных возможна, только если
установлено соединение клиент-сервер
При получении запроса от клиента создается
копия сокета
Соединение
устанавливается с копией
Оригинальный сокет продолжает ждать
запросы от других клиентов
Такой
сокет не может принимать и передавать
данные
ИМКН УрФУ
11
Пример на Python
«Серверный» сокет
Клиентский сокет
Передача данных
ИМКН УрФУ
12
Python. Серверный сокет
Создание сокета:
serversocket = socket.socket( socket.AF_INET,
socket.SOCK_STREAM)
Привязка к IP-адресу:
serversocket.bind(('192.168.0.1', 80))
«Прослушивание»:
serversocket.listen(5)
ИМКН УрФУ
13
Python. Типы сокетов
Протоколы сетевого уровня
socket.AF_INET
– IPv4
socket.AF_INET6 – IPv6
Протоколы транспортного уровня
socket.SOCK_STREAM
– TCP
socket.SOCK_DGRAM - UDP
Есть и другие типы, но они
используются редко
ИМКН УрФУ
14
Python. Ожидание соединений
while 1:
#Принимаем соединение – создаем клиентский сокет
(clientsocket, address) = serversocket.accept()
#Создаем поток для обслуживания запроса клиента
ct = client_thread(clientsocket)
ct.run()
ИМКН УрФУ
15
Python. Клиентский сокет
Создание сокета:
clientsocket = socket.socket( socket.AF_INET,
socket.SOCK_STREAM)
Установка соединения:
clientsocket.connect(('192.168.0.1', 80))
ИМКН УрФУ
16
Python. Передача данных
Отправка данных:
socket.send('Hello, world!')
Получение данных:
socket.recv(1024)
# 1024 – размер буфера
Закрытие сокета:
socket.close
ИМКН УрФУ
17
Итоги
Место сокетов в моделях OSI и TCP/IP
Сокеты Беркли
Основные операции над сокетами
Работа сокетов
Пример на Python
ИМКН УрФУ
18
Вопросы?
ИМКН УрФУ
19