7 встреча — Программирование компьютерных сетей (А....
-
Upload
smolensk-computer-science-club -
Category
Education
-
view
426 -
download
2
description
Transcript of 7 встреча — Программирование компьютерных сетей (А....
Седьмая встреча SC{2}
Введение в программирование компьютерных сетей
Анатолий СвириденковCodedgers
Март 2013
Два типа связи
Сети:
● телекоммуникационные сети;● компьютерные сети.
Коммутация:
● канальная коммутация;● пакетная коммутация.
Канальная коммутация
● Элементарный канал – T1 ~ 2Mb;
● Составной канал – T3;
● Кратность каналов;
● Алло девушка? “Рубин” срочно!
Пакетная коммутация
● Заголовок, тело, хвост;
● Буферизация;
● Сохранение с продвижением.
Методы продвижения пакетов
● Дейтаграмма;
● Логическое соединение;
● Виртуальный канал.
В чем сила, брат?
Дейтограммы (udp)
● Нет соединений;
● Не гарантируется порядок;
● Доставка не гарантируется.
Логическое соединение (TCP)
● Установление и разрыв соединения;
● Тройное рукопожатие;
● “Гарантия” доставки.
Виртуальный канал (тоннель)
● Разный носитель (tcp, udp, http);
● Base 64;
● Возможно шифрование;
● XXX over YYY.
Взгляд со стороны разработчика
● Беркли API или блокирующий режим работы сокетов;
● BSD-like или не блокирующий режим работы сокетов;
● Асинхронный режим работы.
Berkeley API
● Выпущены в 1983-м году;
● 4.2BSD Unix;
Cокетыint socket(int domain, int type, int protocol);
domain:● PF_INET – IPv4;● PF_INET6 - IPv6;● PF_UNIX – файлы в unix.
type:● SOCK_STREAM - TCP;● SOCK_DGRAM – UDP;● SOCK_RAW – IP.
protocol:● IPPROTO_TCP;● IPPROTO_UDP;● и т.д., например - IPPROTO_DCCP.
Получение IP по имени (DNS запрос)
● hostent *gethostbyname(const char *name);
● Иерархические запросы;
● Кеширование.
http://www.root-servers.org/
Установление связи
● int connect(int sockfd, const sockaddr *serv_addr, socklen_t addrlen);
● int bind(int sockfd, const sockaddr *my_addr, socklen_t addrlen);
● int listen(int sockfd, int backlog);
● shutdown(int sockfd, int flag);
● close(int sockfd);
Передача данных
● send● recv● sendto● recvfrom● sendmsg● recvmsg
Прием входящих соединений
int accept(int sockfd, sockaddr *cliaddr, socklen_t *addrlen);
while(true){ HANDLE newSocket = accept( sock, 0, 0 ); ProduceSocket(newSocket);}
BSD-like сокеты
int select( _In_ int nfds, _Inout_ fd_set *readfds, _Inout_ fd_set *writefds, _Inout_ fd_set *exceptfds, _In_ const struct timeval *timeout);
Асинхронные сокеты
● WSAXXXX функции;
● boost::asio.
Вопросы?