SlideShare a Scribd company logo
1 of 20
Download to read offline
Седьмая встреча 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.
Вопросы?

More Related Content

What's hot

Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
Technopark
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3
Technopark
 
World of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source InsideWorld of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source Inside
Maksim Melnikau
 
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
Омские ИТ-субботники
 
Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)
xenoby
 
Снижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINXСнижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINX
Andrii Podanenko
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 

What's hot (19)

Tarantool
TarantoolTarantool
Tarantool
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
 
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
 
7812 hid
7812 hid7812 hid
7812 hid
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
 
Web осень 2012 лекция 3
Web осень 2012 лекция 3Web осень 2012 лекция 3
Web осень 2012 лекция 3
 
More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!More Smoked CTFs для Leet Chicken, пожалуйста!
More Smoked CTFs для Leet Chicken, пожалуйста!
 
World of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source InsideWorld of Tanks: Linux and Open Source Inside
World of Tanks: Linux and Open Source Inside
 
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
2013-10-05 02 Алексей Родионов. Как сделать свой Travis CI - Vagrant + KVM
 
Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)
 
Networks in the cloud on OpenStask: problems we face and their solution
Networks in the cloud on OpenStask: problems we face and their solutionNetworks in the cloud on OpenStask: problems we face and their solution
Networks in the cloud on OpenStask: problems we face and their solution
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 
Снижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINXСнижение нагрузки на сервер с помощью NGINX
Снижение нагрузки на сервер с помощью NGINX
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Blockchain comparison
Blockchain comparisonBlockchain comparison
Blockchain comparison
 
Ddos
DdosDdos
Ddos
 
Red Hat Storage 3.0
Red Hat Storage 3.0Red Hat Storage 3.0
Red Hat Storage 3.0
 
Tarantool 1.6: NoSQL database and application server
Tarantool 1.6: NoSQL database and application serverTarantool 1.6: NoSQL database and application server
Tarantool 1.6: NoSQL database and application server
 
лекция 17
лекция 17лекция 17
лекция 17
 

Viewers also liked

Periodic table
Periodic tablePeriodic table
Periodic table
Vicowe
 

Viewers also liked (16)

1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
3 встреча — Биоинформатика (продолжение) (А. Фединцев)
3 встреча — Биоинформатика (продолжение) (А. Фединцев)3 встреча — Биоинформатика (продолжение) (А. Фединцев)
3 встреча — Биоинформатика (продолжение) (А. Фединцев)
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
2 встреча — Биоинформатика (А. Фединцев)
2 встреча — Биоинформатика (А. Фединцев)2 встреча — Биоинформатика (А. Фединцев)
2 встреча — Биоинформатика (А. Фединцев)
 
12 встреча — Многопоточность-2 (А. Свириденков)
12 встреча — Многопоточность-2 (А. Свириденков)12 встреча — Многопоточность-2 (А. Свириденков)
12 встреча — Многопоточность-2 (А. Свириденков)
 
13 встреча — Сжатие данных (Р. Одинцов)
13 встреча — Сжатие данных (Р. Одинцов)13 встреча — Сжатие данных (Р. Одинцов)
13 встреча — Сжатие данных (Р. Одинцов)
 
Pecha kucha 1
Pecha kucha 1Pecha kucha 1
Pecha kucha 1
 
Grammer book
Grammer bookGrammer book
Grammer book
 
सीमेंट एक महत्
सीमेंट एक महत्सीमेंट एक महत्
सीमेंट एक महत्
 
4b10 ppt
4b10 ppt4b10 ppt
4b10 ppt
 
Ahsan CV
Ahsan CV Ahsan CV
Ahsan CV
 
Ejercicios calcul
Ejercicios calculEjercicios calcul
Ejercicios calcul
 
The Human Brain
The Human BrainThe Human Brain
The Human Brain
 
Periodic table
Periodic tablePeriodic table
Periodic table
 
Mobilefist seminar
Mobilefist seminarMobilefist seminar
Mobilefist seminar
 

Similar to 7 встреча — Программирование компьютерных сетей (А. Свириденков)

Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Ontico
 
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
HLL
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Ontico
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
it-people
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
HighLoad2009
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
Ontico
 

Similar to 7 встреча — Программирование компьютерных сетей (А. Свириденков) (20)

Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
Как не надо писать приложения, основанные на протоколе TCP (Артём Гавриченков)
 
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
Порядок преодоления болота на маршруте: как не надо писать приложения, основа...
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
описание процессор спутник
описание процессор спутникописание процессор спутник
описание процессор спутник
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
Обратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai StructОбратная разработка бинарных форматов с помощью Kaitai Struct
Обратная разработка бинарных форматов с помощью Kaitai Struct
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
 
09. АЦП STM32(2)
09. АЦП STM32(2)09. АЦП STM32(2)
09. АЦП STM32(2)
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
 
введение в Gpu
введение в Gpuвведение в Gpu
введение в Gpu
 
Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
Сокеты
СокетыСокеты
Сокеты
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в Минске
 
Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 

7 встреча — Программирование компьютерных сетей (А. Свириденков)