Компьютерные сети 2 — различия между версиями
Gamajun (обсуждение | вклад) |
Gamajun (обсуждение | вклад) (добавлена презентация по второй лекции) |
||
Строка 20: | Строка 20: | ||
* [https://docs.google.com/presentation/d/1t2IDq0I6ne-YydWgSKZDzeHIO9iAAN0KLPZseXqwX-Q/edit?usp=sharing Лекция 1] | * [https://docs.google.com/presentation/d/1t2IDq0I6ne-YydWgSKZDzeHIO9iAAN0KLPZseXqwX-Q/edit?usp=sharing Лекция 1] | ||
+ | * [https://docs.google.com/presentation/d/1yA6CH1IVsOyNaYA_o7bHKIdvn_TsyrWnm78du_bhzLI/edit?usp=sharing Лекция 2] | ||
=== Практические задания === | === Практические задания === |
Версия 19:26, 11 апреля 2017
Содержание
Компьютерные сети
Продвинутый курс по компьютерным сетям для специальности РС.
План курса
- Современное состояние сети Интернет и актуальные технологические тренды. Веб как новый десктоп, мобильные клиенты, Интернет вещей.
- Модельный пример №1 – веб-приложение. Цепочка технологий, которые обеспечивают функционирование современного веба. От протоколов HTTP (HTTPS) вниз через DNS и TCP к канальной сети.
- (Две лекции) Принципы работы основных веб-технологий: протокола HTTP, мехнизма реализации сеансов cookies, набора технологий HTML 4 (объектная модель документа + CSS + язык javascript). Эволюция HTTP. Современная экосистема протоколов, обслуживающих веб. Протокол DNS. Перспективы – HTTP/2.
- Особенности функционирования веб-приложений в современной сетевой инфраструктуре, высоконагруженные приложения, поддержка на стороне механизмов операционных систем и инфраструктуры. Основы BGP маршрутизации, IP anycast, CDN.
- Защита соединения. Семейство протоколов SSL/TLS. Аутентификация пользователей в сетевых приложениях на примере веб-приложений. HTTP basic auth, digest, аутентификация по сертификатам. Способы представления и хранения парольной информации в нагруженных сервисах.
- Протокол TCP в деталях. Механизмы управления потоком и перегрузками – варианты протокола для различных условий канальной среды. Эволюция протокола, современные расширения, аппаратная поддержка – large segments, tcp offloading.
- Нагрузочное тестирование сетевых приложений на примере веб-приложения. Шаблоны настройки производительности сетевых приложений. Варианты архитектур приложений, разделение на фронтенд и бэкенд части, протоколы взаимодействия сервера с бэкендом (CGI/FastCGI/бинарные). Защита от атак «отказ в обслуживании».
- Два варианта реализации сетевого приложения – централизованный и распределенный. Обмен файлами, обмен мгновенными сообщениями, разделение контента между клиентами. P2P протоколы. BitTorrent. DHT. Системы мгновенного обмена сообщениями, сравниваем централизованные и распределенные (P2P) сети. Signal/OTR, TorChat. Типовые проблемы распределенных сетей и их решение.
- Обзорное введение в виртуализацию сетей, MPLS, Overlay сети – VPN, CDN, архитектура сетей в ЦОД и эволюция коммутационных протоколов, SDN. Заключение.
Материалы лекций
Лекционные материалы публикуются по мере продвижения по курсу.
Практические задания
В рамках курса нужно написать два приложения, на которых исследовать поведение стека протоколов и сетевого стека операционной системы.
- (Уточняется) Задание 1: Динамическое веб-приложение
В первом задании нужно разработать асимметричное клиент-серверное приложение вида "много клиентов, один сервер" и побенчмаркать его в различных условиях. Код приложения вместе с бенчмарками и результатами тестов опубликовать на github.
Описание задачи:
Вам нужно разработать веб-приложение со статической и динамической частью. Динамическая часть должна быть реализована с использованием базовых средств выбранного языка программирования и его стандартной библиотеки для реализации HTTP сервера (для python используйте flask). Приложение должно реализовывать регистрацию и аутентификацию пользователей внутри приложения (не средствами веб-сервера), для хранения пользовательских данных можно использовать файл на диске или любую СУБД. Работа с паролями - scrypt (PBKDF2) и sha256. Аутентифицированный пользователь получает доступ к трем функциям приложения: "быстрая" (поле ввода query к СУБД, POST запрос на приложение, передача query в СУБД, передача результата клиенту), "вычислительная" (факторизовать большое число), "медленная" (обратный ping - клиент через POST запрос отправляет команду серверу пропинговать клиента с параметрами для ping, использовать все поддерживаемые параметры ping, сервер по мере работы ping отправляет клиенту вывод, клиент отрисовывает динамически получаемые данные по мере прихода от сервера). Статическая часть содержит картинки и "большие" файлы (четыре файла по 50Мб). Два варианта раздачи статики - через код приложения и через веб-север (nginx или apache). Бенчмарк для приложения на основе yandex tank и динамического бота на phantomjs. На phantomjs реализовать основные сценарии работы с приложением: регистрация пользователя, логин, выполнение каждой из трех функций, логаут, удаление пользователя. Реализовать нагрузочный тест с тремя различными распределениями "пользовательской" активности:
- Пользователи часто регистрируются и логинятся/выходят из приложения (нагрузка на систему аутентификации и работы с паролями).
- Много пользователей одновременно приходят на одну из функций приложения (отдельно на "быструю", "вычислительную" и "медленную").
- Много пользователей запрашивают статические ресурсы.
Условия функционирования приложения:
Для тестирования приложения нужно создать две виртуальные машины - серверная и клиентская. На серверной машине нужно настроить DNS-сервер, который будет обслуживать домен (например, omg.test) с использованием приватного адресного пространства ваших виртуальных машин. Сервер и клиент должны разрешаться этим DNS сервером по символическим доменным именам в созданной зоне.
- Приложение обслуживает клиентов непосредственно без участия веб-сервера.
- Приложение обслуживает клиентов через веб-сервер nginx (как обратный прокси или через API uWSGI).
- (опционально, бонус) Статику раздавать с файловой системы pingfs: https://github.com/yarrick/pingfs
Результаты тестирования:
В каждом из вариантов нужно прогнать бенчмарк сервера в течение значительного времени (5-10 минут). По каждому прогону бенчмарка необходимо собирать следующие данные:
- Пропускная способность приложения в количестве запросов в секунду (RPS)
- Время отклика (latency)
- Распределение кодов ответа и ошибок
- Использование памяти на сервере
- Использование CPU на сервере
- Количество открытых файловых дескрипторов на сервере
- Для действий регистрации пользователей и аутентификации - количество действий в секунду (отдельно для реализации с PBKDF2, отдельно с SHA256).
По собранным метрикам построить графики и написать аналитический отчет, в котором объяснить полученные результаты (как меняется RPS при разных условиях и почему, как себя ведёт стек операционной системы).
- (Уточняется) Задание 2: Распределенный P2P браузерный мессенджер
Для практических заданий рекомендуется использовать python и javascript, разрешено использовать любую другую комбинацию серверного и клиентского языков программирования (erlang + coffeescript, nodesj + js, go + actionscript, etc).
Рекомендованные фреймворки и библиотеки:
Для тестирования:
- https://github.com/yandex/yandex-tank
- http://phantomjs.org/
- http://tinydns.org/
- atop - сбор информации об используемых ресурсах в системе, изучить фоновый режим работы
- htop, lsof, netstat
Оценки
Расчет оценки
Вклад в оценку:
- Практические задания (2 штуки) - 80%, для зачета обязательно нужно выполнить все задания
- Итоговый тест (как домашняя работа) - 20%
Литература
Основная литература:
- Michał Zalewski. The Tangled Web: A Guide to Securing Modern Web Applications.
- Douglas Comer. Internetworking with TCP/IP: Principles, protocols and architecture. Prentice Hall, 2006.
- Æleen Frisch. Essential system administration. O’Reilly Media Inc., 2002.
Контакты
- Почта: gamajun@gmail.com
- Tg: @jamadharma