РНР 5 в подлиннике

Страница 24 из 554


50

Часть I. Основы Web-программирования

До сих пор мы расценивали машины, подключенные к Интернету, как некие неделимые сущности. Так оно, в общем-то, и есть (правда, с некоторыми оговорками) с точки зрения протокола IP. Но TCP использует в своей работе несколько другие понятия. А именно, для него отдельной сущностью является процесс — программа, запущенная где-то на компьютере в Интернете.

Важно понимать разницу между программой и процессом. Программа — просто исполняемый файл на диске. Процесс же— это программа, которую загрузили в память и передали ей управление. Вы можете представить, что программа — текст книги, который существует в единственном экземпляре. Процесс же — это читатель книги, и не просто вяло водящий глазами по строчкам, а вникающий в написанное и делающий свои собственные выводы. Сколько людей— столько мнений, поэтому каждый из читателей уникален и неповторим, даже если они все читают одну и ту же книгу. Точно так же и процессы одной и той же программы различаются между собой.

Именно между процессами, а не между машинами, и осуществляется обмен данными в терминах протокола TCP. Мы уже знаем, как идентифицируются отдельные компьютеры в Сети. Осталось рассмотреть, как же TCP определяет тот процесс, которому нужно доставить данные.

Пусть на некоторой системе выполняется программа (назовем ее Клиент), которая хочет через Интернет соединиться с какой-то другой программой (Сервером) на другой машине в Сети. Для этого должен выполняться ряд условий, а именно:

□ программы должны "договориться" о том, как они будут друг друга идентифици-

□ программа Сервер должна находиться в режиме ожидания, что сейчас к ней кто-то подключится.

Установка соединения

Остановимся на первом пункте чуть подробнее. Термин "договориться" тут не совсем уместен (примерно так же милиция "договаривается" с только что задержанным бандитом о помещении его в тюрьму). На самом деле, как только запускается программа Сервер, она говорит драйверу TCP, что собирается использовать для обмена данными с Клиентами некоторый идентификатор, или порт, — целое число в диапазоне от 0 до 65 535 (именно такие числа могут храниться в ячейке памяти размером 2 байта). TCP регистрирует это в своих внутренних таблицах — разумеется, только в том случае, если какая-нибудь другая программа уже не "заняла" нужный нам порт (в последнем случае происходит ошибка). Затем Сервер переходит в режим ожидания поступления запросов, приходящих на этот порт. Это означает, что любой Клиент, который собирается вступить в "диалог" с Сервером, должен знать номер его порта. В противном случае TCP-соединение невозможно: куда передавать данные, если не знаешь, к кому подключиться?

Теперь посмотрим, какие действия предпринимает Клиент. Он, как мы условились, знает:

□ IP-адрес машины, на которой запущен Сервер;

□ номер порта, который использует Сервер.

ровать;

Глава 1. Принципы работы Интернета

51

Как видим, этой информации вполне достаточно, поэтому Клиент посылает драйверу TCP команду на соединение с машиной, расположенной по заданному IP-адресу, с указанием нужного номера порта. Поскольку Сервер "на том конце" готов к этому, он откликается, и соединение устанавливается.

Только что было употреблено слово "откликается", означающее, что Сервер отправляет какое-то сообщение Клиенту о своей готовности к обмену данными. Но вспомним, что для TCP существует только два понятия для идентификации процесса: адрес и порт. Так куда же направлять "отклик" Сервера? Очевидно, последний должен каким-то образом узнать, какой порт будет использовать Клиент для приема сообщений от него (ведь мы знаем, что принимать данные можно, только зарезервировав для этого у TCP номер порта). Эту информацию ему как раз и предоставляет драйвер TCP на машине Клиента, который непосредственно перед установкой соединения выбирает незанятый порт из списка свободных на данный момент портов на клиентском компьютере и "присваивает" его процессу Клиент. Затем драйвер информирует Сервер о номере порта (в первом же сообщении). Собственно, это и составляет смысл такого сообщения —- передать Серверу номер порта, который будет использовать Клиент.

Обмен данными

Как только обмен "приветственными" сообщениями закончен (его еще называют "тройным рукопожатием", потому что в общей сложности посылается 3 таких сообщения), между Клиентом и Сервером устанавливается логический канал связи. Программы могут использовать его, как обычный канал Unix (это напоминает случай файла, открытого на чтение и запись одновременно). Иными словами, Клиент может передать данные Серверу, записав их с помощью системной функции в канал, а Сервер —- принять их, прочитав из канала. Впрочем, мы вернемся к этому процессу ближе к концу книги, когда будем рассматривать функцию РНР fsockopen().

Терминология

Далее в этой книге будут применяться некоторые термины, связанные с различными "сущностями" в Интернете. Чтобы не было разногласий, сразу условимся, что понимается под конкретными понятиями. Перечислим их в том порядке, в котором они идут по логике вещей, чтобы ни одно предыдущее слово не "цеплялось" за следующее. Это — порядок "от простого к сложному". Собственно, именно по данному принципу построена вся книга, которую вы держите в руках.

Сервер

Сервер — любой отдельно взятый компьютер в Интернете, который позволяет другим машинам использовать себя в качестве "посредника" при передаче данных. Также все серверы участвуют в вышеописанной "лавине" поиска компьютера по ее IP-адресу, на многих хранится какая-то информация, доступная или нет извне. Сервер — это именно машина ("железо"), а не логическая часть Сети, он может иметь несколько различных IP-адресов (не говоря уже о доменных именах), так что вполне может выглядеть из Интернета как несколько независимых систем.



  • профессиональный shared хостинг в Украине

  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006