Чтобы помочь вам понять как работает Internet, мы посмотрим на то что происходит, когда вы выполняете обычную Internet операцию — указываете браузеру открыть заглавную страницу этого документа, дом которго в Web на Linux Documentation Project. Этот документ:
http://www.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html |
это значит что он живет в файле HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html в каталоге предназначенном для экспорта в World Wide Web на хосте www.tldp.org.
Первое что делает ваш браузер это устанавливет соединение по сети с машиной на которой живет документ. Чтобы сделать это, он во-первых, устанавливает местоположение хоста (host) www.tldp.org (‘хост’ это сокращеное именование ‘узел сети’ или ‘сетевой компьютер’; www.tldp.org это символьное имя хоста (hostname)). Соответсвующее ему местополежение в действительности имеет номер называемый IP адрес (IP address) (что такое ‘IP’ мы объясним чуть позже).
Чтобы сделать это ваш браузер задает вопрос программе называемой сервер имен (name server). Сервер имен может жить на вашей машине, но вероятнее всего он запущен на специальной машине предоставляющей подобный сервис, к которой и обращается браузер. Когда вы заключате договор с вашим Internet провайдером, то частью процедуры установки является настройка в программах работающих с Internet IP адреса сервера имен предоставляемого вашим провайдером.
Сервера имен на разных машинах общаются между собой, обмениваясь информацией и поддерживая ее в должном состоянии необходимом для разрешения имен хостов (перевода их в IP адреса). Ваш сервер имен может отправить запрос в три или четыре различных места в сети в процессе разрешения www.tldp.org, но обычно это происходит очень быстро (менее секунды). Мы рассмотрим работу серверов имен подробнее в следующем параграфе.
Сервер имен даст ответ вашему браузеру, что IP адрес www.tldp.org 152.19.254.81; зная это, ваша машина может обмениваться информацией с www.tldp.org напрямую.
Вся сеть программ и баз данных осуществляющих сотрудничество для преобразования имен хостов в соответствующие им адреса называется ‘DNS’ (Domain Name System) (Система доменных имен). Когда вы видите ссылки на ‘сервер DNS’, это означает то, что мы по простому называем сервером имен. Теперь я объясню целиком как эта система работает.
Имена хостов Internet состоят из частей разделенных точками. Домен (domain) это собрание машин имеющих общий суффикс в имени. Домены могут обитать внутри других доменов. Например, машина www.tldp.org живет на .tldp.org субдомене домена .org.
Каждый домен определен управляющим сервереом имен (authoritative name server), который знает IP адреса других машин в домене. Управляющий (или ‘основной’ (‘primary’)) сервер имен может резервный, на случай выхода из строя; если вы видите ссылки на вторичный сервер имен (secondary name server) или (‘вторичный DNS’) имеется ввиду именно это. Вторичные сервера обычно обновляют свою информацию используя основные каждые несколько часов, таким образом изменения в соответствии имен хостов и IP адресов на основном сервере автоматически распространяется на вторичный.
Сейчас важная часть. Сервера имен домена не знают местоположение всех машин в других доменах (включая их субдомены); им известно только местоположения имен серверов. В нашем примере, управляющий сервер имен для домена .org знает IP адрес сервера имен для .tldp.org но не адреса все других машин в .tldp.org.
Домены в системе DNS расположены как большое перевернутое дерево. На вершине находятся корневые сервера. IP aдреса корневых серверов известны всем, они прикручены к вашему программному обеспечению работающему с DNS. Корневые серверы знают IP адреса серверов имен для доменов верхнего уровня, таких как .com и .org, но не адреса машин внутри этих доменов. Каждому серверу имен доменов верхнего уровня известно где находятся сервера имен располагающихся непосредствено внизу него, и так далее.
DNS разработан заботливо, так каждая машина может хранить минимальный объем знаний, требуемый для формирования дерева, и локальные изменения в поддереве могут осуществляться простым изменением в базе данных имен и IP адресов одного управляющего сервера.
Когда вы запрашиваете IP адрес для www.tldp.org, фактически происходит следующее: во-первых, ваш сервер имен спрашивает у корневого сервера где он может найти сервер имен .org. Узнав это, он обращается к серверу .org за тем чтоб получить IP адрес сервера имен .tldp.org. Получив его, делает запрос к серверу имен .tldp.org и получает адрес хоста www.tldp.org.
На самом деле большую часть времени серверам имен не приходится выполнять столько работы. Серверы имен достаточно много кэшируют; когда вы разрешаете имя хоста, он сохраняет ассоцированный с ним IP адрес в памяти на некоторый промежуток времени. Вот почему, когда вы посещаете новый вебсайт, обычно можно увидеть сообщение вашего браузера "Ищу", он ищет хост с впервые запрошенной вами страницей. В конце концов время хранения связки имя-адрес в кэше сервера истекает и ваш DNS запрашивает ее снова — это важно, в сучае изменения имен и адресов, для того чтобы неверная информация не зависала навсегда. Информация в кэше также сбрасывается если хост оказывается недоступен.
Что хочет сделать браузер, так это послать команду Web-серверу на www.tldp.org, которая выглядит так:
GET /LDP/HOWTO/Fundamentals.html HTTP/1.0 |
Теперь о том, как это происходит. Команда упаковывается в пакет (packet), блок битов типа телеграммы, который является оболочкой для трех важных вещей; адрес источника (source address) (IP адрес вашей машины), адрес места назначения (destination address) (152.19.254.81), и номер сервиса (service number) или номер порта (port number) (80, в этом случае) что указывает на запрос World Wide Web (Всемирной паутины).
Ваша машина отправляет этот пакет в путь по проводам (через вашего провайдера Internet или по локальной сети), и он перемещается к специализированной машине называемой маршрутизатор (router). В памяти маршрутизатора находится карта Internet — не всегда полная, но полностью описывающая ваших сетевых соседей и знающая где в Internet находятся соседние маршрутизаторы.
Ваш пакет может пройти через несколько маршрутизаторов на пути к месту назначения. Маршрутизаторы достаточно умны. Они следят сколько времени потребовалось пакету для достижения другого маршрутизатора и получения подтвержения о получении. Они также используют эту информацию для того чтобы управлять движением пакетов, направляя их быстрешим путем. Используется это и для предупреждения, когда другой маршрутизатор (или кабель) выходит из строя, и балансирования нагрузки, если возможно, через иной маршрутизатор.
Существует урбанистическая легенда, что Internet был спроектирован так, чтобы выжить и продолжать фунционировать в условиях ядерной войны. Это не правда, но именно то как Internet спроектирован дает чрезвычайно хорошую и надежную работу на всех слоях аппаратного обеспечения в этом изменчивом мире. Это прямая заслуга того, что его интеллект распределен в тысячах маршрутизаторов, а не сконцентрирован в нескольких массивных и уязвимых перееключателях (как телефонная сеть). Это позволяет локализовать сбои в работе сети и обойти их.
Когда ваш пакет достигает машины места назначения, она использует номер сервиса для передачи пакета web-серверу. Web-сервер посмотрев на исходный IP адрес пакета знает куда отвечать. Когда web-сервер возвращает этот документ, он разбивается на некоторое количество пакетов. Их размер может менятся в зависимости от вида передаваемой информации и типа сервиса.
Для понимания того как обрабатывается передача множественных пакетов, вам необходимо знать, что Internet, фактически использует два протокола, один из них лежит по верх другого.
Нижний уровень, IP (Internet Protocol) (протокол Internet), отвечает за маркировку индивидуальных пакетов при обмене информацией по сети между с исходным адресом и адресом места назначения. Например, когда вы взаимодействуете с http://www.tldp.org, пакеты посылаемые вами имеют IP адрес вашего компьютера, такой как 192.168.1.101, и IP адрес компьютера www.tldp.org, 152.2.210.81. Эти адреса работают вообщем-то также как почтовые адреса, когда кто-то посылает вам бумажное письмо. В почтовом отделении прочитают ваш адрес, определят где это и как наилучшим способом переслать вам письмо, схоже с маршрутизатором управляющим движением в Internet.
Верхний уровень, TCP (Transmission Control Protocol) (протокол управления передачей), дает вам надежность. Когда две машины создают соединение TCP (используя IP), получатель знает что надо отправить подтверждение о получении пакета отправителю. Если отправитель не увидит подтверждения о получении пакета, то через некоторое время он отправит пакет заново. Более того, отправитель назначает каждому пакету последовательный номер, который получатель использует того чтобы собрать пакеты в нужном порядке, в случае поступления их к нему не попорядку. (Это может легко произойти если во время соединения отдельные участки сети работают то быстрее, то медленнее).
Пакеты TCP/IP содержат также контрольную сумму, для определения повреждения данных из-за плохой связи. (Контрольная сумма вычисляется по всему пакету, таким образом можно вычислить контрольную сумму, сравнить с указанной и обнаружить ошибку, если не совпадают, то либо поврежден пакет либо запись контрольной суммы.) Итак, с любой точки зрения использование TCP/IP и серверов имен выглядит надежным путем передачи потоков байт между парой ‘имя хоста’/‘номер сервиса’. Люди создающие новые сетевые протоколы почти никогда не задумываются обо всем этом: пакетирование, упорядочивание пакетов, проверка ошибок, контрольные суммы и переотправка, все это остантся уровнем ниже.
Теперь вернемся к нашему примеру. Web-бразеры и серверы общаются с помощью протокола приложений (application protocol), которые работает поверх TCP/IP, используя его просто для передачи строк байтов туда и обратно. Этот протокол называется HTTP (Hyper-Text Transfer Protocol) (протокол передачи гипертекста) и мы уже видели одну его команду, это показанный выше GET.
Когда команда GET достигает web-сервер www.tldp.org с номером сервиса 80, она посылается демону сервера прослушивающему 80-й порт. Большинство сервисов Internet осуществляемых демонами сервера, не делают ничего, кроме как ожидают, наблюдая за портами, и выполняют поступившие команды.
Если описать дизайн Internet одним всеобемлющим правилом, то оно будет звучать так: все части должны быть настолько просты и доступны человеку, насколько это возможно. HTTP, его родственники (как Simple Mail Transfer Protocol, SMTP (протокол простой передачи сообщений), используемый для движения электронной почты между хостами) склонны к использованию простых печатных текстовых команд оканчивающихся символом ‘возврат каретки/перевод строки’.
Это крайне малопроизводительно, в некоторых обстоятельствах вы можете получить большую скорость используя плотно закодированный двоичный протокол. Однако, опыт показал, что выгоды от команд легко объяснимых человеческим существам перевешивают любые предельные коэффициенты повышения эффективности, которые можно получить ценой создания мудреных и непрозрачных вещей.
Теоретически, то что демон серевера отправляет вам в ответ посредством TCP/IP также текст. Начало ответа будет выглядеть примерно так (несколько заголовков опущено):
HTTP/1.1 200 OK Date: Sat, 10 Oct 1998 18:43:35 GMT Server: Apache/1.2.6 Red Hat Last-Modified: Thu, 27 Aug 1998 17:55:15 GMT Content-Length: 2982 Content-Type: text/html |
За этими заголовками следует пустая строка и текст веб страницы (после чего соединение обрывается). Ваш браузер просто отобразит эту страницу. Заголовки скажут как это делать (в данном случае заголовок Content-Type говорит, что возвращаемые данные на самом деле HTML).