Александр
Чижов
chizh@irk.ru, http://cooler.irk.ru/
Действительно,
все мы пользуемся интернетом, для многих
из нас он уже стал частью жизни, а многие
ли знают, как он устроен? Рассматривая
такой глобальный вопрос, стоит
разделить все повествование, отнюдь не
претендующее на всеобъемлемость и
всеохватность, на три части: 1) компьютер
пользователя плюс его модем, 2) провайдер,
3) множество серверов во всем мире - со
всеми соединениями и сетевыми
устройствами, которые образуют
Всемирную Сеть Интернет.
Начать, конечно, стоит
сначала. То есть, с себя. Потому как в
большинстве своем вы и есть конечный
пользователь, сидящий дома за своим
компьютером, слушающий "пение"
своего модема во время установки связи.
Вы и есть последняя (среди миллионов)
точка интернета. "Первой" точки нет.
Почему – об этом отдельный рассказ.
Следовательно, начинаем с вас, как с
самого крайнего.
Вот схема, на которую я
буду ссылаться далее (1 – компьютер
пользователя с модемом, 2 – модемы
провайдера, 3 – маршрутизатор, 4 –
локальная сеть сервера провайдера, 5 –
сервер провайдера, 1a – локальная сеть
пользователей, 6 – концентратор для
обмена трафиком между локальной сетью и
провайдером).
Что вообще происходит
после того, как вы дома или на работе (если
у вас связь с провайдером не через
локальную сеть) нажимаете кнопку "Установить
связь"? После набора номера, ваш модем
[1] соединится с провайдерским [2]. С этого
момента лучше рассказывать, как это
происходит, глядя "с того конца" - с
провайдерского. К маршрутизатору [3]
подцеплен модемный пул [2] (набор
некоторого количества модемов),
маршрутизатор настраивает их на
автоответ. После поступления звонка и
успешного прохождения handshaking (т.е.
настройки обоих модемов, когда они "договариваются"
о скорости и протоколе обмена), оба
модема, вместе с линией между ними,
начинают представлять уже просто
транспорт для связи маршрутизатор <-->
ваш компьютер. Все, о модемах с этого
момента уже можно не вспоминать. Связь
установлена.
Теперь маршрутизатор
должен договориться с вашей
операционной системой (он ведь пока не
знает, какая у вас стоит) об авторизации
вашего подключения. Для этого
существует несколько специальных
протоколов. Windows использует протокол CHAP.
После того, как маршрутизатор это
сделает, он посылает пакет с вашим
именем и паролем на авторизующий сервер
[5]. Как только авторизация пройдет
успешно (если нет – соединение
закрывается со стороны провайдера),
маршрутизатор должен договориться с
вашим компьютером о протоколе,
посредством которого ваша система будет
общаться с интернетом в дальнейшем.
Конкретно для ОС Windows этот протокол
называется PPP (point-to-point protocol) - это можно
увидеть в настройках.
После получения
положительного ответа с сервера
маршрутизатор еще должен назначить вам
очередной IP-адрес из числа свободных на
данный момент, но только из
определенного, назначенного вашему
провайдеру диапазона. Каждый компьютер
должен иметь свой адрес в сети, чтобы
сеть знала, куда ей отправлять
информацию, предназначенную для этого
компьютера.
Например, к
маршрутизатору подключено 16 телефонных
линий. Внутри маршрутизатора
прописывается диапазон адресов, среди
которых он и может выбирать. Например: с
195.146.60.10 по 195.146.60.25 - как раз 16 адресов. Вот
в этом ранге вам адрес и будет назначен.
С корпоративными сетями
[1a] дела обстоят несколько проще - они
просто напрямую (или через концентратор
[6]) включены в маршрутизатор, и адрес их
сети уже заранее прописан.
Крутая штука - этот
маршрутизатор. Берет, как видите, на себя
достаточно большую часть работы вкупе с
тем, что занимается еще и собственно,
маршрутизацией. По сути дела, это -
отдельный компьютер. У него даже есть
свой IP-адрес. На него можно зайти, как на
сервер, запрограммировать его, как надо
и т.п. В общем, без него - никуда.
Ну и, само собой, у
провайдера есть сервер [5], который
содержит в себе базу пользователей,
занимается обработкой почты, ftp, http и т.п.
В принципе провайдер для предоставления
просто услуг по подключению в интернет
способен обойтись только одним
компьютером, который будет заниматься
авторизацией (тут и 386-й пойдет).
Остальное будет делать маршрутизатор.
Итак, связь установлена,
браузер запущен и ожидает ввода
сетевого адреса. В браузере вы набираете,
к примеру, www.irk.ru в строке URL (заметьте,
здесь - без добавки http:// - она сама
добавится браузером). Полное имя (www.irk.ru)
уходит в пакете запроса на DNS (Domain Name Service),
который должен вернуть нормальный IP-адрес
браузеру, чтобы работать дальше. Чтобы
было понятнее, отвлекусь на термины DNS и
"IP-адрес". Дело в том, что привычные
имена, обозначающие адреса в интернете,
на самом деле предназначены только для
человека - чтобы было удобнее запоминать
имена. Компьютер же оперирует цифровыми
адресами в виде четырех групп чисел,
разделенных точками. Например, 195.160.40.12 –
это одно из представлений IP-адреса. В
принципе, имя ресурса в строке браузера
можно набирать и таким образом, но это
неудобно. Следовательно, должна
существовать система, которая будет
сопоставлять привычные нам имена с
числовым представлением.
Этим как раз и
занимается служба DNS (domain name service).
Преобразования типа cooler.irk.ru -> 195.206.40.164.
называются прямым преобразованием. А
195.206.40.164 -> cooler.irk.ru называется обратным
преобразованием. То есть, существует два
типа сервиса преобразования. У каждого
провайдера должен быть свой DNS, который
преобразовывает ваши запросы, чтобы вы
не лазили далеко за простыми и часто
используемыми именами и чтобы другие DNS
могли у него спрашивать о его
собственных доменах. Но всех имен в
интернете он, конечно, знать не может. На
самом деле, DNS - это распределенная база
данных. При "незнании" какого-либо
адреса DNS провайдер начинает
запрашивать его по частям у других DNS-серверов.
Начинает с главного (или корневого, root)
DNS-сервера, вернее, с нескольких главных
– root-сервер не один.
Сам адрес не таков,
каким мы его привыкли видеть. Например,
www.irk.ru выглядит на самом деле как www.irk.ru. -
с точкой в конце. Точка и указывает на
"корень", т.е. у "главного" DNS
спрашивают: - а кто там у нас отвечает за
зону "ru"? Ему отвечают: такие-то и
такие-то DNS, и он уже теперь у этих DNS
спрашивает: - а кто отвечает за зону irk? -
"такой то"... и так далее, пока не
получит нужный IP. То есть, если где-либо
не на сервере irk.ru запрашивали первый раз
название cooler.irk.ru - то сервер того
провайдера получил окончательную
расшифровку как раз от DNS-сервера с
доменом .irk.ru.
Теперь становится
понятной надпись во время работы
браузера Looking up host... - это он ждет, пока DNS
отыщет нужный IP-адрес.
После этого браузер
получает пакет с настоящим (цифровым) IP-адресом,
и теперь он будет запрашивать ресурс по
уже реальному IP-адресу. И будет
подставлять порт 80 к своим запросам.
Почему подставлять порт, причем именно
80? Это делается для того, чтобы
разграничить типы ресурсов. Ведь FTP-сервер
может находиться на том же IP-адресе, что
и WWW. Протоколу http соответствует по
стандарту порт 80 и браузер по умолчанию
работает с www, т.е. с 80 портом, ведь
написав, например, www.microsoft.com, я попадаю
на WWW, а не на FTP. Кроме того, браузер
пытается определить порт по первому
слову в URL. Если пишется www.microsoft.com, значит
нужно подставить 80 порт, а если ftp.microsoft.com,
то 21 - порт для работы с FTP. Сами вы этот
порт не пишите, он подставляется
автоматом, как и многое другое. Конечно,
можно написать в строке URL вместо
www.microsoft.com - www.microsoft.com:80 - это будет одно и
то же.
Итак, ваш браузер
получил IP-адрес того ресурса, который вы
хотите. Что должен сделать браузер? Он
должен что-либо запросить у того сервера.
Посылается пакет с запросом ресурса на
удаленный сервер (IP-адрес теперь
известен). Но вот интересный момент.
Существует такая вещь, как alias -
виртуальный хост. IP-адреса у разных
хостов могут быть одинаковы. Например, IP-адреса
www.irk.ru и www.dsi.ru – это одно и то же, и
набирая в строке URL "чистый" IP-адрес,
попадать вы будете только на какой-то
один.
Виртуальный хост
делается для того, чтобы вам не пришлось
запоминать длинное название директории,
где бы мог лежать нужный вам файл,
например - www.irk.ru/siberia/ и т.п. Просто
системный администратор так прописал
настройки, что директория на сервере,
где находится siberia, теперь вроде бы как
является отдельным сервером www.siberia.ru. Но,
все же, физически он находится на
основном - www.irk.ru. Хотя, конечно, в
интернете все очень виртуально, и сам
сервер www.irk.ru может находиться еще на
каком-нибудь другом сервере.
Теперь возникает вопрос:
как сервер различает, что именно вы
хотите - www.irk.ru или www.dsi.ru, когда вы честно
пишете в строке URL нормальный адрес? Ведь
IP-адрес у них один и тот же (когда DNS
вернет его после сопоставления). Так вот,
после получения реального IP-адреса,
браузер посылает серверу пакет,
содержащий запрос на ресурс с адреса IP (который
браузер уже получил) и в нем же (в пакете)
обязательно будет присутствовать
строка www.irk.ru, то есть обычное имя. На
самом деле, адрес виртуального хоста
содержится в запросе GET по HTTP-протоколу,
но я описываю общий случай.
Наиболее популярной из
программ www-серверов является программа
Apache, (есть и одноименный проект для
русской версии apache.lexa.ru), которая
работает под операционной системой UNIX.
Названа программа не по имени
индейского племени, а по аббревиатуре
"A PAtCHy sErver" т.е. "сервер,
собираемый из patch-файлов" (из модулей).
Apache занимается непосредственно тем, что
отвечает на ваши запросы и по требованию
выполняет скрипты (script) CGI, отдает
файлики, картинки и сам html-код документа.
Apache - это HTTPd - hypertext transfer protocol daemon, т.е. по
русски – www-сервер.
Так вот, этот самый HTTP-демон,
воспринимая IP-адрес с нормальным именем
ресурса, смотрит у себя в
конфигурационных файлах (слэнговое "конфиги"
- они заранее были настроены сисадмином),
какой именно ресурс отдать пользователю
- с www.irk.ru или www.dsi.ru, ведь имя он получил
вместе с IP-адресом, предварительно
углядев там адрес своего сервера. А вот
если сервер будет не его, то он такой
пакет и не получит вовсе, так как
маршрутизатор отправит его дальше.
Итак, Apache начинает
выдавать ресурс с директории,
содержащей файлы www.irk.ru по порту 80. Что он
должен выдать? Ведь вы явно не указывали,
что именно вы хотите, а просто написали
название сайта (правда, еще и явно или
неявно указали протокол верхнего уровня,
по которому будете общаться – HTTP). В Apache
прописано, что по умолчанию для 80 порта с
такой-то директории всегда выдается
файл index.html. Иногда это может быть default.html
или еще что-либо. Для каждого типа файлов
существует свой заголовок, который
посылается вашему браузеру перед
посылкой самого файла (используя
протокол HTTP). Делается это для того,
чтобы браузер понимал, что именно нужно
делать с этим файлом - показать его в
окне или предложить запись на диск (например,
something.zip - не надо показывать в окне, а
надо сохранить - откуда браузер должен
это узнавать?).
Существуют и другие
указания от сервера браузеру, что ему
делать с файлами, находящимися на
сервере. Например, когда еще тип файлов
.mp3 не был достаточно известен, заголовка
на него, естественно, никто не
прописывал (это делается отдельно в
конфигурациях сервера), поэтому вы могли
замечать, что тыкая на ссылку,
указывающую на файл с расширением mp3,
браузер его добросовестно грузил вам в
окно, как файл html. Приходилось обходить
это, зажимая Shift при щелчке мышкой. Это,
кстати, стандартный прием указания
браузеру записывать указанный ресурс на
свой диск независимо от заголовка.
В принципе, на описании
работы интернета со стороны
пользователя можно приостановиться и
перейти к следующему пункту – работа
систем провайдера… Хотя, все настолько
увязано, что при описании одного всегда
придется затрагивать все части огромной
и сложной системы - интернета.
Продолжение следует.
http://www.computery.ru/upgrade/
|