ГЛАВА 7. СЕТЕВЫЕ ПРИЛОЖЕНИЯ «КЛЕНТ-СЕРВЕР»
Сетевые средства
При увеличении числа компьютеров в организации, для повышения эффективности работы возникает необходимость объединения их в сеть. Сначала все компьютеры в сети равноправны и делают одно и то же — это одноранговая(peer-to-peer) сеть. Потом покупается компьютер с большими и быстрыми жесткими дисками, и все файлы организации начинают храниться на данных дисках — этот компьютер становится файл-сервером, предоставляющим услуги хранения, поиска, архивирования файлов. Остальные компьютеры становятся клиентами этих серверов. Такая архитектура сети называется архитектурой клиент-сервер(client-server).
Сервер постоянно находится в состоянии ожидания, он прослушивает(listen) сеть, ожидая запросов от клиентов. Клиент связывается с сервером и посылает ему запрос(request) с описанием услуги, например, имя нужного файла. Сервер обрабатывает запрос и отправляет ответ (response). После этого связь может быть разорвана или продолжиться, организуя сеанс связи, называемый сессией(session).
Запросы клиента и ответы сервера формируются по строгим правилам, совокупность которых образует протокол(protocol) связи. Всякий протокол должен, содержать правила соединения компьютеров. Итак, все сетевые соединения основаны на трех основных понятиях: клиент, сервер и протокол.
Для обслуживания протокола: формирования запросов и ответов, проверок их соответствия протоколу, расшифровки сообщений, связи с сетевыми устройствами создается программа, состоящая из двух частей. Одна часть программы работает на сервере, другая — на клиенте. Эти части так и называются серверной частью программы и клиентской частью программы, или, короче, сервером и клиентом.
|
|
Обычно на одном компьютере-сервере работают несколько программ-серверов. Одна программа занимается электронной почтой, другая — пересылкой файлов, третья предоставляет Web-страницы. Для того чтобы их различать, каждой программе-серверу придается номер порта(port). Это просто целое положительное число, которое указывает клиент, обращаясь к определенной программе-серверу. Число, может быть любым, но наиболее распространенным протоколам даются стандартные номера, чтобы клиенты были твердо уверены, что обращаются к нужному серверу. Так, стандартный номер порта электронной почты 25, пересылки файлов — 21, Web-сервера — 80. Стандартные номера простираются от 0 до 1023. Числа с 1024 до 65 535, можно использовать для своих собственных номеров портов.
Чтобы равномерно распределить нагрузку на сервер, часто несколько портов прослушиваются программами-серверами одного типа. Web-сервер, кроме порта с номером 80, может прослушивать порт 8080, 8001 и еще какой-нибудь другой.
|
|
В процессе передачи сообщения используется несколько протоколов. В современных глобальных сетях принят стек из четырех протоколов, называемый стеком протоколов TCP/IP.
Сначала мы пишем сообщение, пользуясь программой, реализующей прикладной(application) протокол: HTTP (80), SMTP (25), TELNET (23), FTP (21), РОРЗ (100) или другой протокол. В скобках записан стандартный номер порта.
Затем сообщение обрабатывается по транспортному(transport) протоколу. К нему добавляются, в частности, номера портов отправителя и получателя, контрольная сумма и длина сообщения. Наиболее распространены транспортные протоколы TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). В результате работы протокола TCP получается TCP-пакет(packet), а протокола UDP— дейтаграмма(datagram).
Дейтаграмма невелика — всего около килобайта, поэтому сообщение делится на прикладном уровне на части, из которых создаются отдельные дейтаграммы. Дейтаграммы посылаются одна за другой. Они могут идти к получателю разными маршрутами, прийти совсем в другом порядке, некоторые дейтаграммы могут потеряться. Прикладная программа получателя должна сама позаботиться о том, чтобы собрать из полученных дейтаграмм исходное сообщение. Для этого обычно перед посылкой части сообщения нумеруются. Таким образом, протокол UDP работает как почтовая служба.
|
|
ТСР-пакет тоже невелик, и пересылка также идет отдельными пакетами, но протокол TCP обеспечивает надежную связь. Сначала устанавливается соединение с получателем. Только после этого посылаются пакеты. Получение каждого пакета подтверждается получателем, при ошибке посылка пакета повторяется. Сообщение аккуратно собирается получателем. Для отправителя и получателя создается впечатление, что пересылаются не пакеты, а сплошной поток байтов, поэтому передачу сообщений по протоколу TCP часто называют передачей потоком.
Далее сообщением занимается программа, реализующая сетевой(network) протокол. Чаще всего это протокол IP (Internet Protocol). Он добавляет к сообщению адрес отправителя и адрес получателя, и другие сведения. В результате получается IP-пакет.
Наконец, IP-пакет поступает к программе, работающей по канальному(link) протоколу ENET, SLIP, PPP, и сообщение принимает вид, пригодный для передачи по сети.
На стороне получателя сообщение проходит через эти четыре уровня протоколов в обратном порядке, освобождаясь от служебной информации, и доходит до программы, реализующей прикладной протокол.
|
|
Какой же адрес заносится в IP-пакет? Каждый компьютер или другое устройство, подключенное к объединению сетей Internet, так называемый хост(host), получает уникальный номер — четырехбайтовое целое число, называемое IP-адресом(IP-address). По традиции содержимое каждого байта записывается десятичным числом от 0 до 255, называемым октетом(octet), и эти числа пишутся через точку: 138.2.45.12 или 17.056.215.38.
IP-адрес удобен для машины, но неудобен для человека. Поэтому IP-адрес хоста дублируется доменным именем(domain name).
В Java IP-адрес и доменное имя объединяются в один класс InetAddress пакета java.net. Экземпляр этого класса создается статическим методом getByName (string host) данного же класса, в котором аргумент host— это доменное имя или IP-адрес.
Работа по протоколу TCP
Программы-серверы, прослушивающие свои порты, работают под управлением различных операционных систем. Чтобы сгладить различия в реализациях разных серверов, между сервером и портом введен промежуточный программный слой, названный сокетом(socket). Cлово socket переводится как электрический разъем, розетка. Так же как к розетке при помощи вилки можно подключить любой электрический прибор, к сокету можно присоединить любой клиент, лишь бы он работал по тому же протоколу, что и сервер. Каждый сокет связан (bind) с одним портом, говорят, что сокет прослушивает (listen) порт. Соединение с помощью сокетов устанавливается так.
1. Сервер создает сокет, прослушивающий порт сервера.
2. Клиент тоже создает сокет, через который связывается с сервером, сервер начинает устанавливать (accept) связь с клиентом.
3. Устанавливая связь, сервер создает новый сокет c новым номером, и сообщает этот номер клиенту.
4. Клиент посылает запрос на сервер через порт с новым номером.
После этого соединение становится совершенно симметричным — два сокета обмениваются информацией, а сервер через старый сокет продолжает прослушивать прежний порт, ожидая следующего клиента.
В Java сокет — это объект класса Socket из пакета java.io. В классе шесть конструкторов, в которые разными способами заносится адрес хоста и номер порта. Чаще всего применяется конструктор Socket(String host, int port) .
Многочисленные методы доступа устанавливают и получают параметры сокета. Нам понадобятся методы, создающие потоки ввода/вывода:
getInputStream()— возвращает входной поток типа InputStream;
getOutputStream() — возвращает выходной поток типа OutputStream.
В приведенном примере 7.1 рассматриваются сервер и клиент, работающие по протоколу TCP. Клиент делает запрос на совершение действия, сервер выполняет это действие и возвращает результат. Получив запрос, сервер распознает тип операции по идентификатору, выполняет операцию и возвращает результат клиенту в виде целого числа. При малейшем подозрении на нарушение протокола сервер должен разрывать соединение с клиентом. Помните, что с сервером одновременно могут взаимодействовать тясычи клиентов, и если сервер упал, то все клиенты перестали работать.
Дата добавления: 2018-04-15; просмотров: 363; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!