Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

7 встреча Smolensk Computer Science Club
Презентация Анатолия Свириденкова про программирование компьютерных сетей
ВКонтакте: http://vk.com/scsc7
Видео: http://www.youtube.com/watch?v=WebX_8mUc1o

More Decks by Smolensk Computer Science Club

Other Decks in Programming

Transcript

  1. Два типа связи Сети: • телекоммуникационные сети; • компьютерные сети.

    Коммутация: • канальная коммутация; • пакетная коммутация.
  2. Канальная коммутация • Элементарный канал – T1 ~ 2Mb; •

    Составной канал – T3; • Кратность каналов; • Алло девушка? “Рубин” срочно!
  3. Виртуальный канал (тоннель) • Разный носитель (tcp, udp, http); •

    Base 64; • Возможно шифрование; • XXX over YYY.
  4. Взгляд со стороны разработчика • Беркли API или блокирующий режим

    работы сокетов; • BSD-like или не блокирующий режим работы сокетов; • Асинхронный режим работы.
  5. 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.
  6. Получение IP по имени (DNS запрос) • hostent *gethostbyname(const char

    *name); • Иерархические запросы; • Кеширование.
  7. Установление связи • 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);
  8. Прием входящих соединений int accept(int sockfd, sockaddr *cliaddr, socklen_t *addrlen);

    while(true) { HANDLE newSocket = accept( sock, 0, 0 ); ProduceSocket(newSocket); }
  9. BSD-like сокеты int select( _In_ int nfds, _Inout_ fd_set *readfds,

    _Inout_ fd_set *writefds, _Inout_ fd_set *exceptfds, _In_ const struct timeval *timeout );