|
ужно доставить данные.
Глава 1. Принципы работы Интернета 19
Пусть на некоторой системе выполняется программа (назовем ее Клиент), которая
хочет через Интернет соединиться с какой-то другой программой (Сервером) на
дру-
гой машине в Сети. Для этого должен выполняться ряд условий, а именно:
r программы должны "договориться" о том, как они будут друг друга идентифици-
ровать;
r программа Сервер должна находиться в режиме ожидания, что сейчас к ней кто-
то подключится;
Давайте остановимся на первом пункте чуть подробнее. Термин "договориться" тут
не совсем уместен (примерно так же милиция "договаривается" с только что задер-
жанным бандитом о помещении его в тюрьму). На самом деле программа Сервер, как
только она запускается, говорит драйверу TCP, что она собирается использовать
для
обмена данными с Клиентами некоторый идентификатор, или порт, целое число в
диапазоне от 0 до 65 535 (именно такие числа могут храниться в ячейке памяти
раз-
мером в 2 байта). TCP регистрирует это в своих внутренних таблицах — разумеется,
только в том случае, если какая-нибудь другая программа уже не "заняла" нужный
нам порт (в последнем случае происходит ошибка). Затем Сервер переходит в режим
ожидания поступления запросов, приходящих на этот порт. Это означает, что любой
Клиент, который собирается вступить в "диалог" с Сервером, должен знать номер
его
порта. В противном случае TCP-соединение невозможно: куда передавать данные,
если не знаешь, к кому подключиться?
Теперь посмотрим, какие действия предпринимает Клиент. Он, как мы условились,
знает следующее:
r IP-адрес машины, на которой запущен Сервер;
r номер порта, который использует Сервер.
Как видим, этой информации вполне достаточно, поэтому Клиент посылает драйверу
TCP команду на соединение с машиной, расположенной по заданному IP-адресу с
указанием нужного номера порта. Поскольку Сервер "на том конце" готов к этому,
он
откликается, и соединение устанавливается.
Только что я употребил слово "откликается", подразумевая, что Сервер отправляет
какое-то сообщение Клиенту о том, что он готов к обмену данными. Но вспомним,
что для TCP существует только два понятия для идентификации процесса: адрес и
порт. Так куда же направлять "отклик" Сервера? Очевидно, последний должен
каким-
то образом узнать, какой порт будет использовать Клиент для приема сообщений от
него (ведь мы знаем, что принимать данные можно, только зарезервировав для
этого
у TCP номер порта). Эту информацию ему как раз и предоставляет драйвер TCP на
машине Клиента, который непосредственно перед установкой соединения выбирает
незанятый порт из списка свободных на данный момент портов на клиентском ком-
пьютере и "присваивает" его процессу Клиент. Затем драйвер информирует о номере
порта Сервер в первом же сообщении о желании установить соединение. Собственно,
это и составляет смысл такого сообщения.
Часть I. Основы Web-программирования 20
Как только обмен "приветственными" сообщениями закончен (его еще называют
"тройным рукопожатием", потому что в общей сложности посылается 3 таких сооб-
щения), между Клиентом и Сервером устанавливается логический канал связи. Про-
граммы могут использовать его, как обычный канал Unix (это напоминает случай
файла, открытого на чтение и запись одновременно). Иными словами, Клиент может
передать данные Серверу, записав их с помощью системной функции в канал, а Сер-
вер — принять их, прочитав из канала. Впрочем, мы вернемся к этому процессу
бли-
же к концу книги, когда будем рассматривать функцию PHP fsockopen().
Терминология
Далее в этой книге я буду часто применять некоторые термины, связанные с
"сущно-
стями" в сети Интернет. Чтобы не было разногласий, сразу условимся, что я буду
по-
нимать под конкретными понятиями. Перечисляю их в том порядке, в котором, на
мой взгляд, они идут по логике вещей, чтобы ни одно предыдущее слово не "цепля-
лось" за следующее. Это — порядок "от простого к сложному". Собственно, именно
по этому принципу построена вся книга, которую вы держите в руках.
Сервер
Сервер — любой отдельно взятый компьютер в Интернете, который позволяет дру-
гим машинам, грубо говоря, использовать себя в качестве "посредника" при
|
|