Основы создания сетевых приложений
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

В течение последних нескольких десятилетий размеры и количество сетей значительно выросли. В 80-х годах имелось множество типов сетей. И практически каждая из них была построена на своем типе оборудования и программного обеспечения, зачастую не совместимых между собой. Это приводило к значительным трудностям при попытке соединить несколько различных типов сетей (например, различный тип адресации делал эти попытки практически безнадежными). Эта проблема была рассмотрена Всемирной Организацией по Стандартам (International Organization for Standardization, ISO), и в результате в 1984 г. была разработана модель OSI - модель взаимодействия открытых систем (Open Systems Interconnected). Эта модель состоит из семи уровней:

Физический уровень. Этот уровень описывает среду передачи данных. Стандартизируются физические устройства, отвечающие за передачу электрических сигналов (разъемы, кабеля и т.д.) и правила формирования этих сигналов. Физический уровень также отвечает за преобразование сигналов между различными средами передачи данных. Например, при необходимости соединить сегмент сети, построенной на оптоволокне и витой паре применяют т.н. конверторы (в данном случае они преобразуют световой импульс в электрический).

Уровень соединения (канальный уровень). На физическом уровне пересылаются просто набор сигналов - битов. При этом не проверяется, что несколько компьютеров могут в одну среду передачи данных одновременно передавать информацию в виде битов. Поэтому одной из задач канального уровня является проверка доступности среды передачи. Также этот уровень отвечает за доставку между источником и адресатом в пределах сети с одной топологией.

Сетевой уровень. Одним из ограничений канального уровня является использование “плоской” модель адресации. Протокол, который поддерживается сетевым уровнем, использует иерархическую структуру для уникальной идентификации компьютеров. Для примера представим себе телефонную сеть. Она также имеет иерархическую адресацию. Например, в номере +7-095-101-12-34 первая цифра обозначает код страны, далее идет код области/города(095), а затем указывается сам телефон (101-12-34). Последний номер также является составным. 101 - это код станции, куда подключен телефон, а 12-34 определяет местоположение телефона. Благодаря такой иерархической структуре мы можем определить расположение требуемого абонента с наименьшими затратами. Иерархическая адресация для сети также должна позволять передавать данные между разрозненными и удаленными сетями.

Транспортный уровень. Рассмотрим TCP/IP протокол транспортного уровня модели OSI. TCP/IP имеет два протокола - TCP и UDP. Transmission Control Protocol TCP – основанный на соединениях протокол, обеспечивающий надежную передачу данных между двумя компьютерами с сохранением порядка данных. Используется в HTTP, FTP. User Datagram Protocol UDP – не основанный на соединениях протокол, реализующий пересылку независимых пакетов данных, называемых дейтаграммами, от одного компьютера к другому без гарантии их доставки).

Сеансовый уровень. Обеспечивает установку, контроль и окончание сессии между приложениями. Уровень сессий координирует приложения, когда они взаимодействуют между двумя хостами.

Уровень представления. Уровень представлений отвечает за представление данных в форме, понятной получателю. Например, для представления данных могут быть использованы такие кодировки, как Extended Binary Coded Decimal Interchange Code (EBCDIC) или American Standard Code for Information Interchange (ASCII). Если компьютеры, между которыми установлено сетевое соединение, используют различные протоколы, то presentation layer обеспечивает их корректное взаимодействие. Уровень представлений также отвечает за шифрацию и сжатие данных.

Прикладной уровень. Уровень приложений определяет, какие ресурсы существуют для связи между хостами.

Каждый уровень взаимодействует только с соседними уровнями, протокол взаимодействия стандартизован. Это позволяет использовать реализации сетевого и программного обеспечения от разных производителей в различных комбинациях. Например, протоколы высокого уровня (HTTP, FTP) не зависят от физических параметров используемой сети.

Большинство сетевых приложений можно классифицировать как клиент-серверные приложения.

Модель «Клиент-сервер»

Каждая из сторон виртуального соединения называется «сокет» (socket). Приложение-сервер инициализируется при запуске и далее бездействует, ожидая поступления запроса от клиента. Типы приложений-серверов - Сервер последовательной обработки запросов и Сервер параллельной обработки запросов. Процесс-клиент посылает запрос на установление соединения с сервером, требуя выполнить для него определенную функцию.

Понятие порта

Компьютер (обычно) имеет только одно физическое соединение с сетью. Соединение описывается, например, IP-адресом (32 бита на сегодняшний день). Как различать информацию для различных приложений? Сокет привязывается к порту. Порт описывается 16-битным числом. Порты 0-1023 зарезервированы

Рисунок 39. Понятие порта

Абстракция сокета

Сетевое соединение – это процесс передачи данных по сети между двумя компьютерами или процессами. Сокет – конечный пункт передачи данных. Для программ сокет – одно из окончаний сетевого соединения. Для установления соединения каждая из сетевых программ должна иметь свой собственный сокет. Связь между двумя сокетами может быть ориентированной или не ориентированной на соединение. Сокет связан с номером порта.

Рисунок 40. Абстракция сокета

А что же на Java ?

Сокеты инкапсулированы в экземпляры специальных классов. Все низкоуровневое взаимодействие скрыто от пользователя. Существует семейство классов, обеспечивающих настройку сокетов и работу с ними. Классы для работы с сетью в Java располагаются в пакете java.net.

Пакет java.net

• Адресация.

• Установление TCP-соединения.

• Передача/прием дейтаграмм через UDP.

• Обнаружение/идентификация сетевых ресурсов.

• Безопасность: авторизация / права доступа.

Адресация

Рисунок 41. Адресация

Класс InetAddress является интернет-адресом, или  IP. Экземпляры этого класса создаются не с помощью конструкторов, а с помощью статических методов:

• InetAddress getLocalHost() - возвращает IP-адрес машины, на которой исполняется Java-программа.

• InetAddress getByName(String name) - возвращает адрес сервера, чье имя передается в качестве параметра. Это может быть как DNS-имя, так и числовой IP, записанный в виде текста, например, "67.11.12.101".

• InetAddress[] getAllByName(String name) - определяет все IP-адреса указанного сервера.

Класс Inet4Address служит для описания адреса, состоящего из 4 байтов, с помощью класса Inet6Address описывается адрес, состоящий из 16 байтов. Начиная с JDK 1.4. существует класс InetSocketAddress(String hostname, int port), который создаёт объект адреса для указанного узла и порта.

Общая схема соединения

Рисунок 42. Общая схема соединения

Класс Socket

Реализует клиентский сокет и его функции

Конструкторы

– Socket()

– Socket(InetAddress address, int port)

– Socket(InetAddress address, int port, InetAddress localAddr, int localPort)

– Socket(String host, int port)

– Socket(String host, int port, InetAddress localAddr, int localPort)

Методы

– void close() – закрывает используемый сокет.

– InetAddress getLocalAddress() -

– InputStream getInputStream() – возвращает поток, позволяющий читать данные, переданные по сети.

– OutputStream getOutputStream() - возвращает поток, позволяющий передавать данные по сети.

– static void setSocketImplFactory(SocketImplFactory fac)

– И прочие…

Дата: 2019-02-19, просмотров: 249.