Сергей Чистович: интернет в вертикальном разрезе
от протоколов связи до инфорационного сообщества
Технически говоря, интернетом называется множество компьютеров и прочих устройств, логически объединенных в единую сеть. Каждое устройство, подключенное к Интернету, имеет свой уникальный адрес. Одно устройство может послать другому устройству данные, зная его интернет-адрес (IP-адрес), который представляет последовательность чисел. Физически два устройства не соединены (напрямую), данные передаются по длинной цепочке вспомогательных устройств — маршрутизаторов, которые подключены ко многим другим узлам сети, и единственная задача которых — определить, куда следует отправить пакет, чтобы он на один шаг приблизился к получателю. В пакете данных, как и в обычном письме, указывается адрес отправителя и адрес получателя. Обратный адрес — единственная возможность узнать, откуда пришли данные, и его, как и в обычном письме, можно указать неверно (правда, в случае с Интернетом для этого придется воспользоваться самыми низкоуровневыми средствами). Вообще говоря, данные могут потеряться по дороге, поэтому два устройства, кроме собственно данных, обмениваются еще и большим количеством подтверждений. Правила формирования пакетов, передачи данных и обмена подтверждениями, образуют протоколы TCP/IP. Это самое основание Интернета. IP-адрес в настоящее время состоит из четырех байтов, и их уже начинает не хватать, поэтому планируется внедрить новую версию IP-протокола, с большим количеством байтов.
Конечно, использовать цифры в качестве адресов удобно компьютеру, но не человеку. Адрес «на деревню дедушке» запомнить проще, чем 192.168.0.1. Поэтому каждому IP-адресу может быть (а может и не быть) поставлено в соответствие доменное имя, зарегистрированное в службе доменных имен (DNS). DNS тоже не централизованная, а распределенная система, поэтому конкретный DNS-сервер может и не знать, какому адресу соответствует то или иное доменное имя. Но он знает, у кого спросить. Таким образом, когда вы запрашиваете, например, страницу www.microsoft.com, то на деле ваш браузер сначала обратится в службу доменных имен, где ему сообщат IP-адрес интересующего вас сервера, и лишь затем — собственно к серверу MicroSoft. Уровнем выше находятся протоколы уровня приложений. Хотя при слове «Интернет» люди обычно представляют себе веб-страницы, Всемирная Паутина — это только одна из технологий, базирующихся на интернет-технологии. Следует понимать, что и электронная почта, и файловые архивы FTP, и вообще любые средства взаимодействия удаленных компьютеров между собой покоятся на одном основании.
Бесспорно, впрочем, что WWW — наиболее разнообразная, гибкая и интересная часть Сети на данный момент. Поэтому будем говорить о ней. Итак, как же устроен Web? Он построен на стандартной архитектуре клиент-сервер. Это значит, что в процессе взаимодействия есть две неравные стороны: сервер, который постоянно ожидает запросов, и работает в автономном режиме, и клиент, который «выходит на связь» с сервером по мере необходимости, и обычно (хотя и не обязательно) управляется пользователем. Сервер предоставляет услугу, а клиент ею пользуется. Протокол http (hypertext transfer protocol) в общих чертах выгляжит следующим образом. Клиенты посылают запросы, серверы выдают ответы. Структура у них похожая: клиент указывает МЕТОД работы и имя документа, кроме того, запрос может содержать ЗАГОЛОВКИ с какой-нибудь вспомогательной информацией (например, название клиента), и ТЕЛО, в котором могут находиться данные (например, информация, которую пользователь ввел в форму на странице). Ответ сервера содержит заголовки (по крайней мере, один, описываюший тип содержимого документа), и тело, в котором собственно документ и содержится. Важно, что соединение, устанавливается только на время обработки одного запроса, никаких длительных отношений между клиентом и сервером не возникает.
Между прочим, браузер — это клиент.
Но как же это все работает? В основе WWW (с точке зрения данных, а не технологии) лежит язык разметки гипертекста HTML. Существует много языков разметки текста. Некоторые люди не понимают разницу между языками разметки и языкаи программирования — видимо, это те, кто не сталкивался лично ни с теми, ни с другими. На языках програмирования пишут программы. На языках форматирования создают документы. Документ, написанный на каком-либо языке разметки, предназначен для просмотра или печати с помощью программы, которая этот язык понимает. Размеченный документ — это простой текст, в который вставлены указания, как должен интерпретироваться тот или иной фрагмент текста. Так, в HTML основной элемент разметки — так называемые теги — ключевые слова, помещенные в угловые скобки. В других системах разметки это могут быть ключевые слова, предшествуемые спецсимволом \ или еще как-нибудь отмеченные. Важно то, что, в отличие от документов, созданных в специальных программах, например, Word, они состоят только из символов, имеющихся на клавиатуре, и могут быть прочитаны и отредактированы вручную, на любом компьютере и с помощью любого элементарного текстового редактора. Так, в любом браузере в меню есть элемент: просмотреть исходный код страницы. Если вы посмотрите, то увидите тот же самый текст плюс некоторое количество служебной информации (ну, часто довольно большое ее количество…). Если же вы заглянете в содержимое word-документа, то увидите только огроное количество совершенно непонятных закорючек, которые не то, что понять, но и набрать на клавиатуре невозможно. Главное, чем велик язык HTML — концепция гиперссылок. Гиперссылка — это кусок текста, указывающий на другой документ, возможно, находящийся на другом сервере в другом конце мира. Точнее говоря, указывать он может даже не на весь документ, а на отмеченное его место. В современных браузерах это указывание реализуется известным образом: при нажатии мышью на гиперссылку браузер загружает тот документ, на который она указывает. Говорят, что Сеть — это огромная библиотека, или энциклопедия. Исторически это абсолютно верно, поскольку изобретатель HTML Tim Berners-Lee для того и придумал этот язык, чтобы иметь возможность упорядочить большие объемы связанных между собой документов. Гипертекст — это текст без начала и конца, без определенного порядка прочтения. В настоящее время, увы, Сеть больше похожа на огромную рекламную газету с разделом бесплатных объявлений.
Теперь несколько слов о веб-серверах. Веб-сервер — это автономная программа, которая осуществляет выдачу данных обращающимся клиентам. На каждый запрос сервер дает ответ (если, конечно, не случится тяжелого сбоя в его работе). Не всегда клиент получит именно то, что хочет: например, запрошенный документ может отсутствовать или у клиента может быть недостаточно прав для его просмотра. В любом случае, сервер дает ответ: либо это сообщение об ошибке того или иного рода, либо собственно запрошенный документ. Поначалу документы всегда хранились в виде файлов, но довольно быстро у авторов сайтов возникло желание создавать документы «на лету», часто — в зависимости от параметров запроса. Реализуется это следующим образом: веб-сервер «знает», что документы определенного вида (например, имеющие условленное расширение или находящиеся в заранее оговоренной папке) должны браться не из файлов, а из результата работы какой-то программы, вызванной с некоторыми параметрами. Обычно для серверного программирования используются сценарии, т.е. программы, написанные на интерпретируемых языках (в отличие от компилируемых), которые легче переносятся с системы на систему, проще поддаются изменениям и исправлениям, и особенно удобны для подобного рода программирования. Среди минусов стоит отметить меньшую производительность; впрочем, для нужд веб-серверов ее обычно хватает. Итак, что же происходит, когда вы нажимаете на ссылку, указывающую на адрес «http://www.gde-to.com/index.php»? Ваш браузер соображает, что в ответ на ваше нажатие надо загрузить этот документ. Он обращается к ближайшему DNS-серверу: где это — gde-to.com? Тот, опросив своих товарищей, отвечает: адрес такой-то, например, 234.45.56.67 . Тогда ваш браузер посылает свой запрос по этому IP-адресу, говоря веб-серверу: подай-ка мне /index.php ! Сервер, который с вероятностью две трети называется Apache, начинает кумекать: ага, расширение .php , значит, нужно вызвать интерпретатор языка PHP, передав ему этот файл для обработки. Интерпретатор исполняет сценарий, по ходу дела, возможно, читая или записывая данные в служебных файлах, обращаясь к базе данных или делая еще какие-то сложные вещи, и в результате производит последовательность букв и прочих символов, которую передает веб-серверу. Эта последовательность символов и составляет тот HTML-код, который получит ваш браузер в ответ на свой (а точнее, ваш) запрос, обработает и представит в виде красиво оформленного текста с заголовками, рамочками, подчеркиваниями и прочими украшениями, а может быть даже с картинками.
К сожалению, концепция гипертекста не имеет того эффекта, которого можно было бы от нее ожидать. Вместо того, чтобы связывать огромную, содержащую на данный момент много миллиардов документов Сеть воедино, гиперссылки в основном служат для перемещения в пределах одного сайта, редко указывая вовне. Необходимость в отправных точках для путешествий по Сети появилась достаточно быстро. Первыми появились каталоги: они составлялись вручную и содержали ссылки на сайты, разбитые на категории и подкатегории. Каталоги существуют и сейчас, но по понятным причинам они не способны охватить всю Сеть. Фактически, на смену им пришли автоматические поисковые системы.
Поисковая система — весьма непростая вещь. Поисковик состоит, по сути, из трех частей: робота, индексатора и поискового интерфейса. Роботами вообще называют различные автономные программы, а поисковый робот, также называемый web-crawler (а по-русски — попросту «пауком») — это такой робот, который ходит по ссылкам и собирает документы. В простейшем случае он умеет только запросить документ, сохранить его где-то, разобрать его содержание с помощью простенького парсера (т.е. алгоритма разбора данных, в этом конкретно случае — HTML-документов), выбрать все ссылки и поставить их в очередь на обработку. И так до бесконечности. Настоящие «промышленные» краулеры умеют и многое другое: они управляют нагрузкой на серверы, чтобы случайно большим количеством запросов не нарушить работу какого-нибудь сайта, соблюдают «правила поведения роботов», могут входить в защищенные паролем области (если, конечно, хозяин робота знает этот пароль), и так далее. Так или иначе, задача робота — собирать данные. Задача индексатора значительно сложнее: он анализирует собранные данные, взвешивает их так и сяк, самую дрянь отбрасывает, а остальное записывает в базу. Тут есть много проблем, главная из которых состоит в том, что в Сети слишком много хлама, который часто бывает сложно опознать. Существует острая проблема так называемого «поискового спама», то есть страниц и сайтов, которые создаются исключительно для привлечения посетителей обманным путем. Простейший поисковый спам — это страница, наполненная сотнями популярных ключевых слов, например, «несовершеннолетние рефераты бесплатно АБСОЛЮТНО голые». Поначалу такие уловки проходили, и такая страница оказывалась среди первых в результатах поиска по большинству запросов. Началась затяжная война: производители поисковых систем придумывали все новые алгоритмы обнаружения спам-страниц, а спаммеры училиь их обходить. В настоящий момент кроме собственно содержания страницы имеют значение следующие параметры: размер страницы (оптимальным считается объем порядка пятисот слов), количество входящих ссылок (индекс цитируемости), количество исходящих ссылок, «солидность» ссылающихся страниц (как ее вычисляют, вопрос туманный, но в общем понятно, что ссылка с домашней странички моего друга Васи котируется ниже, чем с сайта компании BBC)… Алгоритмы обнаружения спама, разумеется, являются важнейшей коммерческой тайной, но все тайное довольно быстро становится явным.
Выбор наиболее релевантных документов — тоже непростая задача. С одной стороны, количество документов огромно: миллиарды. С другой, условия поиска обычно очень свободные: одно-два ключевых слова. Документов, содержащих эти слова, могут быть сотни тысяч. Так что тут в ход идет все: и размер, и индекс цитируемости, и количество вхождений ключевых слов, и расстояние в тексте между ними… Имейте ещё в виду, что поиск должен производиться с огромной скоростью — несколько секунд, не более.
И все равно, никакой алгоритм не способен заменить человека. Чем больше становится Сеть, тем сложнее найти что-нибудь интересное. Поисковик может помочь ответить на четко поставленный вопрос, но не может развлечь или удовлетворить любопытство: наоборот, зайдяна поисковую страницу, часто испытываешь тоску: Сеть огромна, и непонятно, куда идти. И так поиск в Сети возвращается к началу: к живым людям. Разумеется, теперь составление каталогов уже неактуально. Сейчас получает распространение совершенно другая концепция, так называемые веблоги.
Классический веблог представляет собой бесконечную ленту, куда автор записывает свои мысли вперемешку со сылками на что-то его заинтересовавшее. В настоящее время существует много ресурсов, на которых можно создать себе веблог, а также свободного ПО, чтобы установить его на любом сервере. В отличие от обычных персональных страничек, которые создаются обычно ради изучения HTML, веблог существует ради удовольствия его писать. Кроме того, большинство веблогов имеют всевозможные средства укрепления сообщества: автоматически или вручную составляемые списки «друзей», ссылки на «случайный веблог», средства синдикации, и т.д. В этом коренное отличие хорошего веблога от обычного новостного сайта: он не зациклен на себе, он открывает пути вовне. Всякий «нормальный» сайт, особенно коммерческий, стремится удержать посетителя: он содержит очень мало внешних ссылок, зато предлагает множество внутренних. Веблоггер же не станет направлять вас к старым своим записям, вместо этого он предложит вам множество мест, где вы ещё не бывали и где вам, возможно, будет интересно. А если этот веблоггер вам неинтересен, вы можете почитать любого из его друзей, или вообще кого-нибудь случайного.
Поскольку все общаются со всеми, прямо или опосредованно, то возникает сообщество, причем довольно симпатичное: главным и фактически единственным критерием значимости человека является качество того, что он пишет, а потому наибольшей известности достигают умные, интересные люди с хорошим языком, любопытными мыслями и захватывающими занятиями. Многие из них работают в информационной индустрии (теоретики и практики веб-дизайна, архитекторы ПО, программисты), но есть и другие: от юристов до священников. В Интернете существуют различные сообщества, но обычно они ограничиваются какой-то профессиональной областью. Сообщество веблоггеров в этом смысле уникально своим разнообразием, сохраняя общую для интернет-сообществ черту: то, что человек ценится исключительно по своим интеллектуальным и профессиональным качествам.
Очень интересным способом укрепления сообщества является концепция обратных ссылок. Вот в чем состоит ее суть. Сеть, вообще говоря, анонимна. Протокол HTTP не предусматривает продолжительных сеансов связи между клиентом и сервером, соединение устанавливается только на время выполнения одного запроса. Когда вы обращаетесь к следующему документу с того же сервера, он не знает, что только что общался с вами. Все, что сервер знает о вас — это ваш IP-адрес (да и тот можно при большом желании можно подделать, но тогда вы не увидите ответа на свой запрос), да еще та информация, которую вы саи ему сообщите в заголовках своего запроса. Для того, чтобы какая-то информация сохранялась между запросами, существуют куки, и некоторые другие приемы. Впрочем, они предназначены для работы в пределах одного сервера или группы серверов, поскольку требуют согласованной работы скриптов, т.е. программ создания страниц «на лету». Узнать же что-то о работе пользователя в неподконтрольных вам областях Сети невозможно.
Но есть одно интересное исключение. Это заголовок HTTP-запроса, содержащий адрес ссылающейся страницы, т. н. Referer. Разумеется, он может отсутствовать или содержать неверную информацию, но «приличные» клиенты, например, браузеры, его по возможности выставляют. Сервер, получив запрос, содержащий этот заголовок, может узнать, с какой именно страницы пришел тот или иной пользователь. Эта информация зачастую используется для анализа и оптимизации структуры сайта, позволяя узнать, как именно пролегают пользовательские маршруты по вашему сайту. Но ничуть не менее, а для кого-то и более интересна информация, с каких посторонних сайтов попадают к вам клиенты. Допустим, вы владелец крупного ресурса и вкладываете значительные средства в раскрутку. Проанализировав статистику ссылающихся страниц, вы можете легко определить, какие поисковые системы или каталоги приносят вам мало посетителей, а какие много, и решить, с кем продолжать сотрудничать, а с кем не стоит. Если же вы держите небольшую тематическую страницу, эти данные могут помочь вам найти новых единомышленников с подобными страничками. Но самое интересное состоит в том, что с их помощью укрепляется сетевое сообщество.
Большинство интересных идей рождаются не в гигантских корпорациях, а в головах талантливых энтузиастов. В этом смысле Интернет — идеальное место, поскольку с минимальными затратами любая хорошая мысль может получить широкое распространение. Сообщество интернет-энтузиастов велико и готово принимать самые разнообразные, даже немного сумасшедшие идеи. Пара примеров: 1) Wiki-сайты, где каждый посетитель может отредактировать или полностью изменить содержимое любой страницы. Казалось бы, безнадежная идея: кто будет работать над чужим сайтом? да и любой желающий может взять и все уничтожить одним нажатием мыши; однако таких сайтов много, по самым разным темам, а универсальная энциклопедия, построенная на этом принципе (www.wikipedia.org), уже превосходит по объему знаменитую Encyclopaedia Britannica и содержит огромное количество вполне качественных статей на многих языках. 2) Семантический Веб и Доступный (Accessible) Интернет. Пока большие корпорации думают о том, как оптимизировать свои сайты для двух (трех, четырех…) основных браузеров, активисты Сети давно используют стандарты и принципы доступности информации с тем, чтобы не только любой графический браузер, но и текстовый или звуковой клиент, или вообще автоматический сборщик данных мог легко выделить всю содержащуюся на странице информацию, обработать ее, перейти по ссылкам, и вообще взять максимум возможного от ресурса.
Немного странной выглядит и идея обратных ссылок. Возможно, она и не найдет применения в среде корпоративных порталов, но для человеческого общения она очень и очень интересна. Суть проста: зная, откуда приходят посетители, можно составить список страниц, ссылающихся на вашу страницу. А при желании и некотором умении программировать можно этот список снабдить еще и небольшими фрагментами ссылающихся страниц, контекстом ссылок.
Какой в этом интерес? Владелец ресурса заинтересован потому, что он узнает, где и что о его сайте пишут. Кроме того, ссылки на документы сходной тематики, вообще говоря, повышают рейтинг документа в поисковых системах. Заинтересованы авторы ссылающихся страниц, потому что на каком-то интересном ресурсе (конечно, интересном, иначе стали бы они на него ссылаться?..) есть ссылка на их страницу, что привлекает посетителей как напрямую, так и через поисковые машины (чем больше ссылок на вашу страницу, тем выше рейтинг). Наконец, заинтересованы посетители, поскольку кроме одной страницы по интересующей их теме они получают еще и много интересных ссылок. По большому счету, выигрывают все, потому что Сеть перестает быть скоплением закрытых уголков, хозяева которых пытаются изо всех сил удержать посетителя на своей территории, и становится открытым пространством, где от одной интересной точки до другой расстояние всегда в один шаг.
С другой стороны, всякое изобретение можно использовать и во вред. Так, появление обратных ссылок вызвало немедленное изобретение back-linking spam, использования обратных ссылок для недобросовестной раскрутки собственного ресурса. Суть в том, чтобы с помощью программы-робота генерировать запросы к сайтам, отслеживающим обратные ссылки, в качестве ссылающейся страницы указывая в запросе адрес одной из страниц своего ресурса. Таким образом, повышается индекс цитируеммости, то есть количество внешних ссылок на страницы спаммера, что ощутимо повышает рейтинг в поисковых системах. Разумеется, таким незамысловатым образом можно обмануть только простейшие программы учета обратных ссылок — те, которые не проверяют, действительно ли «ссылающийся» документ содержит требуемую ссылку. Чтобы обмануть более сложные программы, потребуется больше труда. Но ничего невозможного нет и в этом.