|
|
Строка 1: |
Строка 1: |
− | == Компьютерные сети ==
| + | Segeralah Mendaftar langsung di |
− | | + | * [https://macanplay.net/ Macanslot] |
− | Продвинутый курс по компьютерным сетям для специальности РС.
| + | * [https://paradox3d.net/ InaTogel] |
− | | + | * [https://macanwin.net/ QqMacan] |
− | === План курса ===
| + | * [https://lechers.cc/ RoyalToto] |
− | | + | * [https://xenogames.net/ JayaTogelUp] |
− | # Современное состояние сети Интернет и актуальные технологические тренды. Веб как новый десктоп, мобильные клиенты, Интернет вещей.
| + | * [https://eeooii.info/ Raja Slot4D] |
− | # Модельный пример №1 – веб-приложение. Цепочка технологий, которые обеспечивают функционирование современного веба. От протоколов HTTP (HTTPS) вниз через DNS и TCP к канальной сети.
| + | * [https://139.180.153.95/ Raja Slot4D] |
− | # (Две лекции) Принципы работы основных веб-технологий: протокола HTTP, мехнизма реализации сеансов cookies, набора технологий HTML 4 (объектная модель документа + CSS + язык javascript). Эволюция HTTP. Современная экосистема протоколов, обслуживающих веб. Протокол DNS. Перспективы – HTTP/2.
| + | * [https://209.58.183.93/ JayaTogelUp] |
− | # Особенности функционирования веб-приложений в современной сетевой инфраструктуре, высоконагруженные приложения, поддержка на стороне механизмов операционных систем и инфраструктуры. Основы BGP маршрутизации, IP anycast, CDN.
| + | * [https://ronin138.com/ Ronin138] |
− | # Защита соединения. Семейство протоколов SSL/TLS. Аутентификация пользователей в сетевых приложениях на примере веб-приложений. HTTP basic auth, digest, аутентификация по сертификатам. Способы представления и хранения парольной информации в нагруженных сервисах.
| + | * [https://addicthealious.website/ slot 4d] |
− | # Протокол TCP в деталях. Механизмы управления потоком и перегрузками – варианты протокола для различных условий канальной среды. Эволюция протокола, современные расширения, аппаратная поддержка – large segments, tcp offloading.
| + | * [https://18.142.23.191/ Macan Slot] |
− | # Нагрузочное тестирование сетевых приложений на примере веб-приложения. Шаблоны настройки производительности сетевых приложений. Варианты архитектур приложений, разделение на фронтенд и бэкенд части, протоколы взаимодействия сервера с бэкендом (CGI/FastCGI/бинарные). Защита от атак «отказ в обслуживании».
| + | * [https://royaltotopedia.com RoyTop88] |
− | # Два варианта реализации сетевого приложения – централизованный и распределенный. Обмен файлами, обмен мгновенными сообщениями, разделение контента между клиентами. P2P протоколы. BitTorrent. DHT. Системы мгновенного обмена сообщениями, сравниваем централизованные и распределенные (P2P) сети. Signal/OTR, TorChat. Типовые проблемы распределенных сетей и их решение.
| + | * [https://macanplay.com MacanSlot] |
− | # Обзорное введение в виртуализацию сетей, MPLS, Overlay сети – VPN, CDN, архитектура сетей в ЦОД и эволюция коммутационных протоколов, SDN. Заключение.
| + | * [https://macantoto88.com Toto 88] |
− | | + | * [https://jayatogelup.com.com jayatogelup] |
− | === Материалы лекций ===
| + | [https://ronin19.com/ Ronin138] |
− | | + | [https://addicthealing.website/ slot 4d] |
− | Лекционные материалы публикуются по мере продвижения по курсу.
| + | [https://jayatogelcc.cc/ jayatogel] |
− | | + | [https://jayatogelcc.cc/ jayatogelcc] |
− | * [https://docs.google.com/presentation/d/1t2IDq0I6ne-YydWgSKZDzeHIO9iAAN0KLPZseXqwX-Q/edit?usp=sharing Лекция 1] | + | [http://northcoaststeelhead.com/ northcoaststeelhead.com] |
− | * [https://docs.google.com/presentation/d/1yA6CH1IVsOyNaYA_o7bHKIdvn_TsyrWnm78du_bhzLI/edit?usp=sharing Лекция 2] | + | [http://supremeoutlet.us/ supremeoutlet.us] |
− | * [https://docs.google.com/presentation/d/12ZxUgvwsELDMLRqKG42DihYnXflbO0fesa5IfZ6s77Y/edit?usp=sharing Лекция 3] | + | [http://208.78.220.231/ freebet] |
− | * [https://docs.google.com/presentation/d/126_iNg3x7B2pKHtpZBx-cOnpzDs7QaGbBzJTI-0HTYk/edit?usp=sharing Лекция 4] | + | [http://blackfridaymichaelkors.us/ freebet] |
− | * [https://docs.google.com/presentation/d/1af_FQ8Pvxn0hBTH7G1bOxqc4HrG0tMOhbnQN32vybRQ/edit?usp=sharing Лекция 5] | + | [https://supremeshirtshop.us/ supremeshirtshop.us] |
− | * [https://docs.google.com/presentation/d/1KbDPmvUIaZUvpKnqDhYZkKgPZ_r8Q1eecwzi2fBVR8E/edit?usp=sharing Лекция 6] | + | [https://macanplayslot.web.fc2.com/ macanplay] |
− | * [https://docs.google.com/presentation/d/1_4Rn45tAEROq43zXQhwAWzU55Gjmb0QNlPSIoZfQ0M8/edit?usp=sharing Лекция 7] | + | [https://royaltotopedia4d.web.fc2.com/ royaltotopedia] |
− | * [https://docs.google.com/presentation/d/1xaX0ZiE6uBH84hRwuR3fVoEBeHcbv-JaVQ41wbQ392k/edit?usp=sharing Лекция 8] | + | [https://macanplay8.web.fc2.com/ macanplay slot] |
− | | + | [https://royaltotopedia88.web.fc2.com/ royaltoto] |
− | === Практические задания ===
| + | [https://olxtotos.web.fc2.com/ olxtoto] |
− | | + | [https://linklist.bio/OLX.TOTO olxtoto] |
− | Дедлайн по заданиям: задание 1 - 9 июня 2017 г., задание 2 - 12 июня 2017 г.
| + | [https://c.mi.com/thread-4131553-1-0.html olxtoto] |
− | | + | [https://heylink.me/FAFA138 fafa138] |
− | В рамках курса нужно написать два приложения, на которых исследовать поведение стека протоколов и сетевого стека операционной системы.
| + | [https://heylink.me/FaFa138 fafa138] |
− | | + | [https://heylink.me/Fafa138 fafa138] |
− | ==== Задание 1: Динамическое веб-приложение ====
| + | [https://magic.ly/FAFA138 fafa138] |
− | | + | [https://fafa138slot.web.fc2.com fafa138] |
− | В первом задании нужно разработать асимметричное клиент-серверное приложение вида "много клиентов, один сервер" и побенчмаркать его в различных условиях. Код приложения вместе с бенчмарками и результатами тестов опубликовать на github.
| + | [https://heylink.me/FAFA138 fafa138] |
− | | + | [http://ec2-13-250-3-146.ap-southeast-1.compute.amazonaws.com/ fafa138] |
− | Описание задачи:
| + | |
− | Вам нужно разработать веб-приложение со статической и динамической частью. Динамическая часть должна быть реализована с использованием базовых средств выбранного языка программирования и его стандартной библиотеки для реализации 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 браузерный мессенджер ====
| + | |
− | | + | |
− | Нужно реализовать распределенный P2P чат поверх peerjs/WebRTC, который позволяет обмениваться сообщениями между пирами в чате и файлами. В библиотеке peerjs есть развернутый example пример чата, который можно взять за основу.
| + | |
− | | + | |
− | (простая часть):
| + | |
− | * взять готовый example чат, и реализовать поверх него распределенный алгоритм вычисления минимума из множества чисел
| + | |
− | * каждый "клиент" при запуске случайно выбирает целое число
| + | |
− | * между клиентами задана некоторая произвольная топология, т.е. каждый знает, кто у него является соседом, топологию можно задать статически в коде, но это не должен быть полносвязный граф
| + | |
− | * с помощью волнового алгоритма эха ([http://mk.cs.msu.ru/images/b/b7/DistrAlg_7.pdf Лекция] или "Введение в распределенные алгоритмы", Жерар Тель, страница 206) посчитать минимум из этих чисел, передавая их между соседями в виде сообщений
| + | |
− | | + | |
− | (сложная часть, опциональная):
| + | |
− | * В чате должна храниться key-value таблица соответствия id - Name, Surname, email для участников чата, в виде distributed hash table (DHT), для этого нужно выбрать алгоритм DHT (Kademlia?)
| + | |
− | * Новые пиры должны подключаться с помощью bootstrap-процесса через известный id участника P2P чата, получать DHT-идентификатор, и хранить у себя часть общей DHT в соответствии с выбранным алгоритмом реализации DHT.
| + | |
− | * Сообщения в чате должны маршрутизироваться по-разному, в зависимости от префикса сообщения - если сообщение начинается с команды /msg DHT-id или какой-то из частей value (Name, Surname, email) через спецсимвол @, то отправлять его следует только тому пиру, который является адресатом (для этого надо уметь делать поиск по DHT). Обычные сообщения отправляются всем пирам.
| + | |
− | * Аналогично с отправкой файла - через команду /sendfile или без команды.
| + | |
− | | + | |
− | ==== Общее ====
| + | |
− | | + | |
− | Для практических заданий рекомендуется использовать python и javascript, разрешено использовать любую другую комбинацию серверного и клиентского языков программирования (erlang + coffeescript, nodesj + js, go + actionscript, etc).
| + | |
− | | + | |
− | Рекомендованные фреймворки и библиотеки:
| + | |
− | * http://flask.pocoo.org/
| + | |
− | * http://yaws.hyber.org/
| + | |
− | * https://github.com/peers/peerjs
| + | |
− | | + | |
− | Для тестирования:
| + | |
− | * https://github.com/yandex/yandex-tank
| + | |
− | * http://phantomjs.org/
| + | |
− | * http://tinydns.org/
| + | |
− | * atop - сбор информации об используемых ресурсах в системе, изучить фоновый режим работы
| + | |
− | * htop, lsof, netstat
| + | |
− | | + | |
− | === Итоговый тест ===
| + | |
− | | + | |
− | https://docs.google.com/forms/d/e/1FAIpQLSfRaxJwQn4yz2BUJy9zOt3a1D8viBk35GglSzVN9AynIaIZFw/viewform | + | |
− | | + | |
− | === Оценки ===
| + | |
− | https://docs.google.com/spreadsheets/d/1BYUds4FV1pxtAVoUIYcwvDBxa6XcsoD0TcxTWDUsnP4/edit?usp=sharing | + | |
− | | + | |
− | === Расчет оценки ===
| + | |
− | Вклад в оценку:
| + | |
− | * Практические задания (2 штуки) - 80%, для зачета обязательно нужно выполнить все задания
| + | |
− | * Итоговый тест (как домашняя работа) - 20%
| + | |
− | | + | |
− | === Литература ===
| + | |
− | Основная литература:
| + | |
− | * Michał Zalewski. The Tangled Web: A Guide to Securing Modern Web Applications.
| + | |
− | * James F. Kurose and Keith W. Ross, Computer Networking: A Top-Down Approach, Addison-Wesley, 5th edition.
| + | |
− | * Douglas Comer. Internetworking with TCP/IP: Principles, protocols and architecture. Prentice Hall, 2006.
| + | |
− | * Æleen Frisch. Essential system administration. O’Reilly Media Inc., 2002.
| + | |
− | | + | |
− | Дополнительная литература:
| + | |
− | * [http://istina.msu.ru/media/diplomas/diploma/aaf/25a/52857264/article-glebius_epasSZw.pdf Глеб Смирнов. Новая неблокирующаяся на дисковом вводе реализация системного вызова sendfile() для FreeBSD]. Магистерская диссертация. МГУ, 2014
| + | |
− | * [http://www.openwall.com/presentations/Passwords12-The-Future-Of-Hashing/ Solar Designer. Passwords: The Future Of Hashing].
| + | |
− | * [https://www.cs.cornell.edu/~shmat/shmat_oak14.pdf C. Brubaker et al. Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations]
| + | |
− | * [https://www.joyent.com/blog/tcp-puzzlers TCP Puzzlers]
| + | |
− | * [https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf Kademlia DHT - оригинальная статья]
| + | |
− | * [https://pdfs.semanticscholar.org/3885/812a092ff0aad3d45c0464660075e98d0231.pdf The Power of Two Choices in Randomized Load Balancing by Michael David Mitzenmacher, 1996]
| + | |
− | | + | |
− | === Контакты ===
| + | |
− | * Почта: gamajun@gmail.com
| + | |
− | * Tg: @jamadharma
| + | |