СИСТЕМНОЕ И ПРИКЛАДНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Лекция 5. Сети ЭВМ. Принципы организации. Протоколы обмена данными. Принципы организации компьютерных сетей Назначение • Общие ресурсы • вычислительные мощности • принтеры • хранилища данных (бэкапы) • Общий доступ к информации • организация централизованного хранения • коммуникации пользователей - централизованный (e-mail и т.п.) - прямой (обмен сообщениями и данными) 3 Виды сетей • По масштабу и географии: • Персональные (PAN – Personal Area Network) - беспроводное окружение ПК • Локальные (LAN) - частные (предприятия, учреждения, квартиры) • Глобальные сети (WAN) - сети провайдеров - виртуальные частные сети (VPN) • Объединения сетей (Internet и др.) • По каналу связи: • Наземные («проводные») • Беспроводные (стационарные и мобильные) • Виртуальные (абстрагируются от канала) 4 Технологии передачи данных • Широковещательные сети • пакет рассылается всем машинам в сети • два способа адресации: - целевой машине (по конкретному адресу) - всем – многоадресная передача (multicast, по спец. адресу) • Передача от узла к узлу • прокладывается маршрут по цепочке машин • между каждой парой передача по схеме «один отправитель и один получатель» (unicast) 5 Топология сетей • Одноранговые • равноправные участники • Древовидные • часто: - в «листьях» конечные пользователи и серверы, - в «узлах» маршрутизаторы 6 Вопросы выбора топологии • Назначение сети (эффективность взаимодействия) • распределённые вычисления • запросы к серверу • коммуникации peer-to-peer • Баланс надёжности и цены • связность сети стоит денег • низкая связность = риск разрывов сети • Организация адресного пространства • иерархия сетей и вопросы маршрутизации • NAT 7 Сетевая модель OSI • ISO OSI (Open Systems Interconnection) Reference Model (1995 год) Цель: разделение структуры сети по функциональным уровням/уровням абстракции: • • • • Сервис – «что делает уровень» Интерфейс – «как обращаться к уровню» Протоколы – внутренняя специфика уровня (как он обеспечивает сервис) 8 Уровни модели OSI Физический (IEEE 802.15 (Bluetooth), IRDA, EIA RS-232, 802.11 WiFi, GSM,…) 1. • реальная передача битов по каналу связи Канальный (Ethernet, PPP, PPPOE, IEEE 802.11 WLAN) 2. • • защита данных от ошибок передачи разбиение данных на «кадры», обработка «кадров подтверждения» Сетевой (IP/IPv4/IPv6, IPsec) 3. • • определение маршрутов пересылки трансляция логических адресов в физические (IP->MAC) Транспортный (UDP, TCP, SCTP, RTP) 4. • • обеспечение надёжной передачи данных (порядок, сохранность) чаще всего, взаимодействие point-to-point Сеансовый (H.245, NetBIOS, PPTP, PRC, PRCP, SMPP) 5. • обеспечивает сеанс связи, обмен информацией и синхронизацию передачи данных Уровень представления 6. • преобразование протоколов, шифрование/дешифрование данных Прикладной (HTTP, SMTP/POP3/IMAP, FTP, RDP, XMPP, SNMP, …) 7. • уровень взаимодействия пользовательских приложений 9 Стек протоколов TCP/IP 1. Прикладной уровень • HTTP, FTP, DNS, … 2. Транспортный • TCP, UDP, SCTP, … 3. Сетевой • • IP + вспомогательные протоколы 4. Канальный • Ethernet, Wireless Ethernet, … 10 Модель OSI vs. TCP/IP • Теория vs. практика • OSI - Сначала стандарты, потом протоколы - Пришлось дорабатывать модель «под реальность», вводя подуровни - Реализация провалилась • TCP/IP: модель по существующим протоколам - соответствовала только сетям TCP/IP (напр., технологию Bluetooth не описывает) - нет чёткого разграничения концепций служб, интерфейсов и протоколов • Связь с установлением соединений и без: • OSI: на сетевом уровне – оба способа, на транспортном – только соединения • TCP/IP: на сетевом уровне – только связь без установления соединения, на транспортном – оба 11 Сетевое оборудование • Пассивное – передача и ретрансляция сигнала • кабель, розетки, разъёмы и патч-панели, концентраторы (хабы) и т.п. • Активное – управление ретрансляцией • коммутатор (свитч) - целевая ретрансляция (Ethernet) • маршрутизатор (роутер) - в т.ч. беспроводная «точка доступа») - определяет направление ретрансляции по IPадресу и таблице маршрутизации 12 Сетевые устройства по уровням По уровням: • Прикладной – шлюз приложения • Транспортный – транспортный шлюз • Сетевой – маршрутизатор (роутер) • Канальный – мост, коммутатор • Физический – концентратор, повторитель 13 Коммутация • Концентратор (хаб) • «спайка» проводов в одной точке • широковещательная рассылка кадров по сети • Коммутатор (свитч) • «знает», где расположены получатели • организует адресную пересылку 14 Маршрутизация Маршрутизаторы: • работают на сетевом уровне • данные передаются пакетно • оперируют таблицей маршрутов: • адрес – направление (порт) • «алгоритм маршрутизации» • прокладка альтернативных маршрутов - из-за разрывов или задержек на основном 15 Алгоритмы маршрутизации • Статическая маршрутизация • маршруты заложены при загрузке и не меняются • Динамическая маршрутизация • маршрутизация по вектору расстояний (до 1979) • маршрутизация с учётом состояния линий - опрос соседних маршрутизаторов, сбор ответов и вычисление метрик расстояния (возраст пакета) и кратчайших путей 16 Network Address Translation NAT – Трансляция сетевого адреса • диапазоны локальных адресов: • 10.0.0.0 – 10.255.255.255/8 (16 777 216 хостов) • 172.16.0.0 – 172.31.255.255/12 (1 048 576 хостов) • 192.168.0.0 – 192.168.255.255/16 (65 536 хостов) 17 Network Address Translation • Работает для TCP/UDP • Для исходящего пакета: • подменяет IP-адрес источника на свой • поле «порт источника» TCP/UPD-пакета подменяется идентификатором абонента - из таблицы NAT-блока • пересчитываются контрольные суммы заголовков • Для входящего: • по номеру порта восстанавливается IP и порт абонента • пакет корректируется, включая контрольные суммы, и пересылается абоненту 18 Стандартизация сетей Источники стандартов: • ITU – Международный союз электросвязи (ITU-T – сектор стандартизации) • «Рекомендации» по аспектам телекоммуникаций (стандарты для факсов, видеоконференций, видео/аудио кодеков, оптоволоконных сетей и т.п.) • ISO – международная организация по стандартизации • член ITU-T, вырабатывает международные стандарты для всего на свете • IEEE – Институт инженеров электротехники и электроники • стандарты в области электроники и информатики (стандарты локальных сетей, беспроводных и проводных способов связи, USB, POSIX) • IETF – Инженерный совет Интернета (Internet Engineering Task Force) • • Свод RFC (Request For Comments, «рабочие предложения»), некоторые – в статусе стандарта (Internet Standart) Стандарты сетевых протоколов (сетевого-прикладного уровней) • W3C – Консорциум Всемирной паутины • «Рекоммендации» (в статусе стандартов) по технологиям WWW (HTML, CSS, DOM, XML, URI/URL, SOAP, PNG, SVG, …) 19 Сетевые протоколы и работа с ними TCP/IP • Сетевой уровень: • ARP (Address Resolution Protocol) - выяснение MAC по IP для установления получателя • ICMP (Internet Control Message Protocol) - диагностические и сервисные функции • трассировка маршрутов, пинг, управление скоростью передачи • Транспортный уровень • TCP, UDP (организация передачи) • Прикладной уровень • DNS • DHCP 21 User Datagram Protocol 22 Transmission Control Protocol 23 Winsock • Реализация протоколов TCP/IP в Windows • Чтобы использовать Winsock2 : • Добавляем зависимость от библиотеки (Ws2_32.lib) в опциях проекта • Включаем заголовок Winsock2.h с объявлениями функций • Инициализируем библиотеку - WSAStartup • На выходе из приложения завершаем работу с Winsock DLL - WSACleanup 24 #include <iostream> #include <Winsock2.h> int main() { WSADATA wsaData; int err = WSAStartup(MAKEWORD(2, 2), &wsaData); if (err != 0) { // Could not find a usable Winsock DLL return 1; } // Confirm that the WinSock DLL supports 2.2 if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { WSACleanup(); return 1; } // The Winsock DLL is acceptable. // TODO: place code here WSACleanup(); } 25 Winsock: основные функции Name Description accept Permits an incoming connection attempt on a socket. bind Associates a local address with a socket. closesocket Closes an existing socket. connect Establishes a connection to a specified socket. getaddrinfo Provides protocol-independent translation from an ANSI host name to an address. getsockopt Retrieves a socket option. ioctlsocket Controls the I/O mode of a socket. listen Places a socket a state where it is listening for an incoming connection. recv Receives data from a connected or bound socket. recvfrom Receives a datagram and stores the source address. select Determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O. send Sends data on a connected socket. sendto Sends data to a specific destination. setsockopt Sets a socket option. shutdown Disables sends or receives on a socket. socket Creates a socket that is bound to a specific service provider. There are the most common functions. Look MSDN Winsock Reference for full list of functions 26 User Datagram Protocol #include <winsock2.h> int foo() { // Create a socket SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) return exitOnError(); // Bind on 127.0.0.1:20000 sockaddr_in address; address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("127.0.0.1"); address.sin_port = htons(20000); if (SOCKET_ERROR == bind(s, (SOCKADDR*)&address, sizeof(address)) ) { return exitOnError(s); } // … 27 User Datagram Protocol // Receve datagram from "client" sockaddr_in client; int struct_size = sizeof(client); char data[1024]; int received = recvfrom(s, data, sizeof(data), 0, (SOCKADDR*)&client, &struct_size); if ( SOCKET_ERROR == received ) return exitOnError(s); // Send datagram to "client" int sent = sendto(s, data, received, 0, sizeof(client)); if ( SOCKET_ERROR == received ) return exitOnError(s); (SOCKADDR*)&client, // close socket closesocket(s); cleanupSockets(); return 0; } 28 TCP-сервер // Create socket SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) return exitOnError(); // Bind 127.0.0.1:20000 sockaddr_in address; address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("127.0.0.1"); address.sin_port = htons(20000); if ( SOCKET_ERROR == bind(s, (SOCKADDR*)&address, sizeof(address) ) ) { return exitOnError(s); } // Start listening if (listen(s, 1) == SOCKET_ERROR) return exitOnError(s); 29 TCP-сервер // Accept connection SOCKET accepted = accept(s, 0, 0); if (accepted == INVALID_SOCKET) return exitOnError(s); // Receive data from client char data[1024]; int received = recv(accepted, data, sizeof(data), 0); if ( SOCKET_ERROR != received ) { // Send data back to client int sent = send(accepted, data, received, 0); if ( SOCKET_ERROR == sent ) { closesocket(accepted); return exitOnError(s); } } // close sockets closesocket(accepted); closesocket(s); 30 TCP-клиент // Create socket SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (s == INVALID_SOCKET) return exitOnError(); // Connect to server on 127.0.0.1:20000 sockaddr_in target; target.sin_family = AF_INET; target.sin_addr.s_addr = inet_addr("127.0.0.1"); target.sin_port = htons(20000); if ( SOCKET_ERROR == connect(s, (SOCKADDR*)&target, sizeof(target)) ) { return exitOnError(s); } 31 TCP-клиент char data[128]; memset(data, 1, sizeof(data)); // Send data to server int sent = send(s, data, sizeof(data), 0); if ( SOCKET_ERROR != sent ) { // Receive data from server int received = recv(s, data, sizeof(data), 0); if ( SOCKET_ERROR == received ) return exitOnError(s); std::cout << "bytes received: " << received << std::endl; } // close socket closesocket(s); cleanupSockets(); 32 HTTP • Запрос: GET /wiki/страница HTTP/1.1 Host: ru.wikipedia.org Accept: text/html Connection: close (пустая строка) 33 HTTP • Ответ сервера: HTTP/1.1 200 OK Date: Wed, 11 Feb 2009 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close (пустая строка) (далее следует запрошенная страница в HTML) 34 HTTP: пример из MSDN (C#) using System.Net; public class WebRequestGetExample { public static void Main() { WebRequest request = WebRequest.Create( “http://example.my/page.html” ); // If required by the server, set the credentials. request.Credentials = CredentialCache.DefaultCredentials; 35 HTTP: пример из MSDN (C#) // Get the response. HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Display the status. Console.WriteLine(response.StatusDescription); // Get the stream containing content returned by the server. Stream dataStream = response.GetResponseStream(); // Do something with stream (read, print to file) // … dataStream.Close(); response.Close(); } } 36 FTP File Transfer Protocol (пример из Википедии) 220 FTP server ready. USER ftp //анонимный пользователь 230 Login successful. PASV 227 Entering Passive Mode (192,168,254,253,233,92) //Клиент должен открыть соединение на переданный IP LIST 150 <список файлов> 226 Directory send OK. CWD incoming 250 Directory successfully changed. PASV 227 Entering Passive Mode (192,168,254,253,207,56) STOR gyuyfotry.avi 150 Ok to send data. //Клиент передает содержимое файла 226 File receive OK. QUIT 221 Goodbye. 37 FTP: пример для Qt QFtp *ftp = new QFtp(parent); ftp->connectToHost("ftp.qt.nokia.com"); ftp->login(); ftp->cd("qt"); ftp->get("INSTALL"); ftp->close(); 38 World Wide Web Internet • 1969 – первое соединение • 1971 – e-mail и FTP • к 1984 – система доменных имён DNS • 1988 – Internet Relay Chat (IRC) Зарождение World Wide Web: • 1989 – концепция, HTTP, HTML, URI • 1990 – диалап-доступ к Internet • С 1991 WWW доступна в Internet • 1993 – браузер Mosaic • 1995 – W3C, WWW доминирует в Internet, 40 Технологии WWW: гипертекст • Как термин – 1963 (Тед Нельсон) • Как прототип – 9.12.1968, “The Mother of All Demos”, Дуглас Энгельбарт • 80е – первые редакторы • 1986 – стандарт SGML (предшествовал HTML и XML) • 1990 – протокол HTTP и язык разметки HTML (Тим Бернерс-Ли) • 2000 – XHTML (Extensible HTML) • повышенные критерии корректности и валидации 41 Технологии WWW: CGI • Common Gateway Interface (Общий интерфейс шлюза) • 1993 - стандарт интерфейса между веб-сервером и внешними программами • при обработке запроса веб-сервер запускает консольную программу, возвращающую html-страницу в stdout • позволяет динамически генерировать контент script-URI = <scheme> "://" <server-name> ":" <server-port> <scriptpath> <extra-path> "?" <query-string> • Оптимизации и альтернативы: • FastCGI (1996) и SimpleCGI (2006) • модули расширения веб-серверов (напр., mod_php) - запуск стороннего ПО «внутри» сервера 42 Технологии WWW: CSS • Cascading Style Sheets (каскадные таблицы стилей) • Мотив – недостаток HTML: смешение данных и их представления • Принцип наследования - вложенные элементы наследуют стиль «предка» • Принцип каскадирования – правила приоритета при конфликтах: - стиль браузера наименее приоритетен - за ним – пользовательский стиль браузера - выше всех – стиль автора страницы • здесь унаследованный документом стиль стоит «внизу» • над ним – стили подключённых к документу внешних таблиц • выше – стили, заданные селекторами в тегах style • ещё выше – стили тега • самый высокий приоритет – у стилей !important 43 Технологии WWW: DHTML • Dynamic HTML • обобщённое понятие для набора технологий по созданию интерактивных и анимированных веб-сайтов • включает - HTML клиентский скриптовый язык (напр., JavaScript) язык описания представления (напр., CSS) DOM (объектная модель документа) 44 Технологии WWW: DOM • Document Object Model • • • интерфейс доступа к содержимому HTML/XHTML/XML Первый стандарт – в 1998, последующие - 2000 - DOM level 2: getElementById и событийная модель 2004 - DOM level 3: XPath, события клавиатуры, сериализация в XML 45 Технологии WWW: DOM Пример дерева документа Простой пример дерева DOM: |-> Document |-> Element (<html>) |-> Element (<body>) |-> Element (<div>) |-> text node |-> Anchor |-> text node |-> Form |-> Text-box |-> Text Area |-> Radio Button |-> Check Box |-> Select |-> Button 46 Технологии WWW: ECMAScript • ECMA – European Computer Manufacturers Association • ECMAScript – общий стандарт языка, реализуемый различными диалектами • JavaScript, Jscript, ActionScript • Исторически - 2 конкурента: • JavaScript (Netscape Navigator 2.0) • Jscript (MS IE 3.0) – совместимый диалект • Затем Netscape передала JS на стандартизацию в ECMA 47 Технологии WWW: AJAX • Asynchronous JavaScript and XML • фоновый обмен данными с сервером • обновление элементов без полного обновления страницы • Принципы • Динамическое обращение к серверу «на лету» - XMLHttpRequest - динамическое создание: • дочерних фреймов • тега <script> • тега <img> • Использование DHTML для изменения содержания страницы • Форматы передачи данных: • текст, HTML, JSON, XML, … 48 Технологии WWW: AJAX 49 Технологии WWW: JSON • Java Script Object Notation • текстовый формат обмена данными (2001 год) – подмножество JavaScript • применение – сериалиазция и передача структур данных по сети • Пример: { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] } 50 Технологии WWW: jQuery • Мульти-браузерная библиотека на языке JavaScript • цель – упростить написание клиентских скриптов • отделяет поведение от структуры HTML • релиз – январь 2006 • Содержит: • • • • • • перемещение по дереву DOM визуальные эффекты анимация события Ajax манипуляция DOM с помощью CSS-селекторов 51 Технологии WWW: jQuery (пример) <!DOCTYPE html> <html> <head> <script src="jquery.js"></script> <script> $(document).ready(function(){ $("button").click(function(){ $("p").hide(); }); }); </script> </head> <body> <h2>This is a heading</h2> <p>This is a paragraph.</p> <p>This is another paragraph.</p> <button>Click me</button> </body> </html> 52 Технологии WWW: Flash • Мультимедийная платформа Adobe Flash • Flash Player в качестве плагина – виртуальная машина для исполнения кода flash-программы • В HTML-документе – тег object/embed для встроенного контента <!DOCTYPE html> <html> <head> <title>Flash</title> </head> <body> <embed src=“path/flash.swf" width="400“ height="300" type="application/x-shockwave-flash“> </body> </html> 53 Ссылки и материалы • Таненбаум Э., Уэзеролл Д. Компьютерные сети. • Лекции Яндекса по компьютерным сетям: • http://tech.yandex.ru/education/kit/3/talks/526/ • продолжение: http://tech.yandex.ru/education/kit/3/talks/527/ • Учебная площадка по веб-технологиям • http://w3schools.com - HTML, CSS, JavaScript, jQuery, XML, ASP.NET, PHP, SQL, etc 54