Файл: Понятие прикладных протоколов и серверы приложений (Сетевой сокет и многопоточный вариант сервера).pdf
Добавлен: 19.06.2023
Просмотров: 513
Скачиваний: 3
СОДЕРЖАНИЕ
Глава 1. Взаимодействие компьютеров в сети
1.1 Общие понятия взаимодействия
1.3 Функции уровней модели ISO/OSI
1.4 Сетевой сокет и многопоточный вариант сервера
Глава 2. Разработка сети передачи данных
2.1 Протоколы передачи данных в компьютерных сетях
Глава 3 Исследование стандартных стеков коммуникационных протоколов
Введение
Протоколы передачи данных – это то, что делает возможным передачу информации с использованием правил модели взаимодействия открытых систем. Каждый из семи уровней описанной в прошлой статье модели взаимодействия открытых систем обслуживается своим набором протоколов, или, как еще говорят, стеком протоколов. Существует достаточно много стеков протоколов. Например, в сетях стандарта Ethernet используется стек TCP/IP (Transmission Control Protocol/Internet Protocol – Протокол управления передачей/Протокол Интернета).
По аналогии с моделью OSI протоколы также делятся на низкоуровневые и высокоуровневые: низкоуровневые работают на двух-трех нижних уровнях, высокоуровневые – на высших. При этом низкоуровневые протоколы, как правило, имеют аппаратную реализацию, а высокоуровневые обычно реализуются программным путем.
В отличие от протоколов нижнего уровня протоколы высших уровней постоянно модернизируются или к ним добавляются новые. Это позволяет использовать новые методы обработки и шифрования данных, которые соответствуют современным требованиям безопасности передачи информации.
На физическом уровне протоколов как таковых нет, за исключением модемных. Используется другое понятие – стандарт. Из наиболее известных стандартов можно отметить X.24, RS-232, EIA-422, RS-485. Примерами модемных являются протоколы V.21, ZyX, PEP.
Канальный уровень представлен множеством протоколов, в том числе ARP, Ethernet, Token Ring, FDDI, X.25, SMT, SNAP, Frame relay, PPP.
Представителями протоколов сетевого уровня являются такие протоколы, как IPX, IP, DDP, RTMP, CLNP, RARP и др.
Транспортный уровень как представитель более интеллектуальных уровней содержит в своем составе множество разных протоколов, яркими представителями которых являются протоколы NetBIOS, UDP, TCP, ATP, SPX, SKIP.
Представителями протоколов сеансового уровня являются такие протоколы, как RPC, SSL, WSP. На самом деле они представляют собой интерфейс – связующее звено между протоколами высших и низших уровней.
На уровне представления работают такие протоколы, как LDAP, XDR и др. Действия этих протоколов практически повторяют друг друга. Их задача – организация процесса преобразования данных в тот вид, который понятен как источнику, так и отправителю.
Прикладной уровень характеризуется наибольшим количеством разнообразнейших протоколов, их яркими представителями являются HTTP (протокол передачи гипертекста), FTP (протокол передачи файлов), SMTP (протокол передачи почты), X.400, Telnet, SNMP, POP3, IMAP4 и др.
Объектом данной работы яляются протоколы передачи данных в сети. Предметом выступают компьютерные сети.
Целью данной работы является изучение взаимодействия компьютеров в сети..
Для реализации поставленной цели необходимо выполнить ряд задач:
- Изучить общие понятия взаимодействия;
- Рассмотреть сетевой сокет и многопоточный вариант сервера;
- Изучить функции уровней модели ISO/OSI;
- Рассмотреть протоколы передачи данных в компьютерных сетях и т.д.
В работы используются современные научные и учебные источники следующих авторов: Малыгин А.С., Михеев В.П., Лутфуллина А.Б., Поляк-Брагинский, Семенов А. Б., Смирнова, Е.В., Таненбаум, Э.С. и другие.
Глава 1. Взаимодействие компьютеров в сети
1.1 Общие понятия взаимодействия
Главная цель, которая преследуется при соединении компьютеров в сеть - это возможность использования ресурсов каждого компьютера всеми пользователями сети. Для того, чтобы реализовать эту возможность, компьютеры, подсоединенные к сети, должны иметь необходимые для этого средства взаимодействия с другими компьютерами сети.[1] Задача разделения сетевых ресурсов является сложной, она включает в себя решение множества проблем - выбор способа адресации компьютеров и согласование электрических сигналов при установление электрической связи, обеспечение надежной передачи данных и обработка сообщений об ошибках, формирование отправляемых и интерпретация полученных сообщений, а также много других не менее важных задач.
Протокол — это по сути правила обмена информацией, которые описывают каким образом обмениваются информацией взаимодействующие стороны.[2] Если вспомнить достаточно распространенную фразу “дипломатический протокол”, то суть та же — вы в определенных случаях должны говорить фразы из определенного набора слов, фраз и другая сторона делает то же самое.[3] В ИТ-сфере все очень похоже -вы посылаете определенные байты и ждете в ответ определенные байты. Этот обмен и есть протокол. Если он соблюдается обеими сторонами, то они смогут о чем-нибудь договориться.
Если рассматривать полную сетевую модель OSI (Open System Interconnection — взаимодействие открытых систем), то прикладного программиста на Java затрагивают в основном протоколы Прикладного уровня — HTTP, FTP, SMTP, SNMP и протоколы Транспортного уровня — TCP и UDP.
В этой статье я хочу поговорить именно о транспортном уровне, а точнее о протоколе TCP — Transmission Control Protocol (Протокол Управления Передачей).[4] Именно этот протокол является основой для очень широкого круга задач — подключения к базам данных, работа через Интернет, web-сервисы. Это очень важный протокол и на мой взгляд, крайне важно знать инструменты, которые позволяют с ним работать. Java имеет вполне зрелый инструментарий для этой работы, и мы с ним сейчас будем знакомиться.[5]
Что касается протокола UDP, то он тоже важен и нужен, но в моей практике он встречается реже. Хотя конечно же многое зависит от того, какую задачу вы решаете. Были у меня проекты, где мы работали с UDP достаточно плотно.
Работа с TCP — сокеты
Для прикладного программиста на Java работа с TCP — это работа с сокетами. Сокет — это специальная структура на уровне операционной системы, которая в упрощенном понимании может быть описана следующим образом:[6]
В памяти выделяется структура, которая описывается двумя главными параметрами:
IP-адрес — это по сути адрес компьютера в сети. Опять же — это упрощенно, но для первого знакомства вполне подойдет
Порт — это число, которое должно быть уникально в рамках указанного компьютера. Только какое-то одно приложение должно владеть этим портом в рамках операционной системы.[7]
Можно провести достаточно простую аналогию, где компьютер — это многоквартирный дом, и каждое приложение может занять одну и более квартиру с телефоном. Дом — это IP-адрес, квартира с телефоном — порт.
TCP позволяет передавать данные из одного приложения на одном компьютере в приложение на другом компьютере путем указания пары IP-адрес + порт источника и пары IP-адрес + порт для приемника. Причем эта возможность обеспечивается операционной системой — обычная программа просто использует эту возможность. И java-программа не является исключением.[8]
С точки зрения прикладного программиста все достаточно несложно — надо открыть сокет на своем компьютере и соединить его с сокетом на другом. У вас появится соединение (не физическое конечно,а виртуальное), но тем не менее — по этому соединению можно передавать байты в обе стороны.
Выглядит так, как-будто вы позвонили по телефону и кто-то на другом конце снял трубку. Если такого номера нет — соединения не будет. Точно так же — если на другом компьютере нет приложения, которое заняло указанный порт — вы при попытке соединиться получите ошибку.[9]
Ну что же — давайте поробуем написать программу, которая создает сокет и сделает запрос на какой-нибудь компьютер в Интернете. Наша программа будет клиентом — она подключается к существующему сокету (например к сайту java-course.ru) и попробует “поговорить” с ним.
Мы пока не говорили о Web-программировании, но для понимания примера нам потребуются некоторые дополнительные сведения.
Во-первых, нам потребуется порт — мы только что говорили об этом. По умолчанию номер порта для приема запросов от браузеров равен “80”.[10]
Во-вторых — сайт java-course.ru имеет совершенно конкретный IP-адрес, который может быть найден с помощью системы DNS — Domain Name System (система доменных имен). В упрощенном варианте это большой список, в котором каждому имени в Интернете соответствует определенный IP-адрес.[11] Итак, адрес и порт у нас есть — осталось разобраться, что надо послать и что можно принять. Давайте пока примем как данность, что для того, чтобы получить определенный текст с указанного сайта, нам надо послать определенную строку. Кому любопытно — может попробовать почитать про протокол HTTP и попробовать разобраться, почему именно такая строка будет передана серверу в качестве запроса.[12]
Сокет — пишем и читаем
Перед тем, как мы начнем смотреть код, скажу несколько слов о классе, который мы будем использовать — а именно о классе Socket. Что, не ожидали?
Работать с этим классом достаточно просто. При создании вы передаете ему имя хоста и номер порта, с которым хотите соединиться. При таком варианте Java сама ищет нужный IP по DNS, самостоятельно получает порт на локальном компьютере (мы об этом говорили выше — соединение требует двух сокетов и каждый имеет адрес и порт) и делает соединение с указанным хостом. Если все прошло успешно и соединение установлено, то дальше наступает очередь потоков ввода-вывода. Сокет предоставляет два потока: один на чтение — InputStream, другой на запись — OutputStream.
1.2 Модель ISO/OSI
Из того, что протокол является соглашением, принятым двумя взаимодействующими объектами, в данном случае двумя работающими в сети компьютерами, совсем не следует, что он обязательно представляет собой стандарт.[13] Но на практике при реализации сетей стремятся использовать стандартные протоколы. Это могут быть фирменные, национальные или международные стандарты.
Международная Организация по Стандартам (International Standards Organization, ISO) разработала модель, которая четко определяет различные уровни взаимодействия систем, дает им стандартные имена и указывает, какую работу должен делать каждый уровень. Эта модель называется моделью взаимодействия открытых систем (Open System Interconnection, OSI) или моделью ISO/OSI.[14]
В модели OSI взаимодействие делится на семь уровней или слоев (рис.1). Каждый уровень имеет дело с одним определенным аспектом взаимодействия. Таким образом, проблема взаимодействия декомпозирована на 7 частных проблем, каждая из которых может быть решена независимо от других. Каждый уровень поддерживает интерфейсы с выше- и нижележащими уровнями. Модель OSI описывает только системные средства взаимодействия, не касаясь приложений конечных пользователей. [15]Приложения реализуют свои собственные протоколы взаимодействия, обращаясь к системным средствам. Следует иметь в виду, что приложение может взять на себя функции некоторых верхних уровней модели OSI, в таком случае, при необходимости межсетевого обмена оно обращается напрямую к системным средствам, выполняющим функции оставшихся нижних уровней модели OSI.[16]
Кроме термина "сообщение" (message) существуют и другие названия, используемые сетевыми специалистами для обозначения единицы обмена данными. В стандартах ISO для протоколов любого уровня используется такой термин как "протокольный блок данных" - Protocol Data Unit (PDU). Кроме этого, часто используются названия кадр (frame), пакет (packet), дейтаграмма (datagram).
1.3 Функции уровней модели ISO/OSI
Физический уровень. Этот уровень имеет дело с передачей битов по физическим каналам, таким, например, как коаксиальный кабель, витая пара или оптоволоконный кабель. Функции физического уровня реализуются во всех устройствах, подключенных к сети. Со стороны компьютера функции физического уровня выполняются сетевым адаптером или последовательным портом.[17] Примером протокола физического уровня может служить спецификация 10Base-T технологии Ethernet, которая определяет в качестве используемого кабеля неэкранированную витую пару категории 3 с волновым сопротивлением 100 Ом, разъем RJ-45, максимальную длину физического сегмента 100 метров, манчестерский код для представления данных на кабеле, и другие характеристики среды и электрических сигналов.[18]