UNIX и Интернет

Алексей Кошелев

Давайте обратимся к истории. Как вообще возник Интернет? Оказывается, он возник благодаря Министерству обороны США. Была поставлена на первый взгляд довольно простая задача. Нужно уметь передавать информацию из пункта А в пункт Б, причем люди в этих пунктах не должны об этом заботиться, и до тех пор, пока хоть один провод еще цел (спутников тогда еще не было), информация должна доходить — пусть долго, но доходить, и при этом без ошибок. При этом неважно, к какому типу относятся компьютеры в сети, то есть в ней должна быть соблюдена аппаратная независимость. И сеть такого типа была создана. Она существует и сейчас и называется ARPA-net. Именно тогда была создана та база, на которой сейчас живет Интернет, в частности появился сетевой протокол IP (Internet Protocol). На мой взгляд, очень важным моментом является то, что сразу был создан набор стандартов (RFC), который впоследствии был оформлен в виде довольно большого (около 2000) количества занумерованных документов. Потом стало ясно, что так можно передавать почти все. Замечательным оказалось то, что не нужно ничего менять и ломать, нужно только дополнять. В том числе дополняли и стандарты новыми номерами, например, когда появилось WWW, Proxy и т.д.

Но чтобы можно было работать, нужна сетевая операционная система. Для этого была создана система UNIX (сейчас существует много реализаций для разных платформ). Что-же это такое? В общих чертах, это — многопользовательская операционная система, в которой изначально имеется поддержка IP-протокола. На самом деле это слишком общее определение. Почти то же можно сказать и про Windows NT. Чтобы все же понять, что отличает UNIX, скажем, что он по определению реализует то, что описано ниже.

Сначала ответим на вопрос, который может возникнуть у человека, впервые увидевшего Интернет после, например, Novell. В Интернете нет какого-либо главного сервера. Тут все равны. Это есть одно из преимуществ Интернета. Но, перейдем к более конкретному рассказу. Любая машина, подсоединенная к сети Интернет, имеет по крайней мере один номер, состоящий из четырех чисел по 8 бит. Этот номер уникален, его повторение не допускается. Информация для передачи формируется в сетевые пакеты, в заголовке которых написано, откуда, куда и что передается, — это тип пакета, которых может быть 65 535. Конечно, там есть еще много служебной информации, но пока нам важна идея. Но послать пакет просто в кабель еще не достаточно - его нужно направить. Чтобы понять, как это происходит, разберем, как устроен тот самый номер. Условно обозначим его как A.B.C.D. Слева направо убывает приоритет подсетей. То есть машины одной подсети, например 102.34.5.x, общаются между собой, а связь с более высоким уровнем происходит через выделенный компьютер – шлюз (Gateway), пусть 102.34.5.7. Еще эти подсети называются доменами первого, второго, третьего и четвертого уровней соответственно. Например, 158. – это домен .su (Soviet Union). Нули в номерах имеют служебный или зарезервированный характер. Если пакет идет в рамках одной подсети, его не надо направлять, но чтобы послать пакет в другую подсеть, необходимо чтобы компьютер, посылающий пакет, знал номер шлюза. Тогда, дойдя до шлюза, пакет будет перенаправлен либо по подсети уровня шлюза, либо на следующий уровень. Потом этот процесс происходит в обратном порядке. Шлюз распознает, что пакет предназначен для его подсети, и запускает его туда. Не очень ясно, где же тут возможность работы до последнего провода. Ведь, казалось бы, путь один. Но это не так. Ведь номер шлюза – дело администратора, и если есть физическая возможность объявить шлюзом другой компьютер, то это можно сделать, и тогда пакеты пойдут туда. Если этот процесс автоматизировать, то компьютер будет сам искать “выход в мир”. Чтобы чуть яснее представить этот процесс, представим такую ситуацию: две машины соединены в сеть. От одной идет кабель в Америку, а другая посылает пакеты на спутник. Пока все работает, пакеты идут и там и там, но если кабель вдруг отключить, то вся передача пойдет через спутник. Конечно, скорость уменьшится, но зато связь останется. Как вы помните, за это и боролись. Такая работа просто необходима при физических неисправностях какого-либо компьютера или кабеля. Пока все, казалось бы, просто. Но есть по крайней мере два вопроса. Как быть с большими пакетами и почему мы можем реально работать с именами, а не с безличными цифрами? Ответ на первый вопрос очевиден. Пакеты нужно нумеровать, а затем склеивать в нужном порядке. Работа с именами несколько хитрее. На любом компьютере можно запустить службу DNS (Domain Name Server). Это просто таблица соответствия номеров и имен. Тогда любой другой компьютер, зная адрес машины, где DNS запущен, будет обращаться туда. Конечно, структура и здесь иерархическая. Ведь никакая машина не сможет, да это и не нужно, хранить примерно 4 миллиарда имен.

Теперь, когда принцип передачи информации ясен, можно перейти к вопросу о том, как происходит работа внутри компьютера. Так что же делает UNIX? Сейчас речь пойдет только о работе с сетью. Выше было сказано, что в пакете есть номер, определяющий тип пакета. Для работы с сетевой картой есть так называемый сетевой интерфейс. Это единственный аппаратно зависимый элемент, так как он зависит от платформы и собственно адаптера. Сетевых интерфейсов можно запустить много, присвоив каждому свой номер. В UNIX все они работают с IP-пакетами. Можно сделать и несколько сетевых адаптеров, тогда номеров может быть еще больше. (Попутно мы отвечаем на вопрос, могут ли быть у машины два номера.) Сетевой интерфейс читает номер пакета. Если он совпадает с ее номером, он забирает пакет из сети. Эта же программа засылает пакеты в сеть. Полученный пакет пересылается программе, отвечающей за обработку этого типа пакетов. Этот тип называется портом, и говорят, что программа “висит” на таком-то порте. Как это ни банально, но такие вещи как e-mail, telnet, http, ftp и многое другое просто обозначают некоторые конкретные порты. Конечно, эти номера не «забиты» на века и можно как-то изощряться, меняя их время от времени, но, к счастью, есть стандарт, которого все придерживаются. Дальше мы поговорим о почте и WWW, а сейчас посмотрим, как работают шлюзы. На компьютерах, которые являются шлюзами, должны быть запущены программы управления потоком пакетов (router). Эти программы не обслуживают конкретный порт, а просматривают все проходящие пакеты. Если пакет имеет адрес не из этой подсети, он отправляется наружу, если из этой, то запускается внутрь. В принципе, возможно дальнейшее дробление подсети (сегментация). Например, можно разделить адреса 102.34.5.D, где D меньше 100, и где больше 100. Это бывает нужно, когда хочется разгрузить сеть или в целях безопасности разделить сети с разными операционными системами на машинах. Упоминавшийся DNS тоже имеет свой порт и методично обрабатывает запросы, приходящие от других машин. Может создаться впечатление, что существует куча систем, каждая из которых отвечает за свое, и неясно, что с этим делать…На самом деле все несколько проще. Все описанное и еще очень много другого объединено в системе UNIX в любой ее реализации, кроме, быть может, самых примитивных. На любой UNIX-машине можно запустить сетевые интерфейсы, DNS, роутеры и т.д. Тут важно скорее суметь разобраться, что не нужно, а что нужно на данной конкретной машине. Например, зачем запускать роутер, если это не шлюз, или зачем нужен DNS, если он есть на соседней машине. Кроме того, что это отбирает ресурсы компьютера, это может привести к сбоям в работе сети. Одна из бед начинающих администраторов – это неправильно настроенный роутер. При желании его можно настроить так, что пакеты будут ходить вечно или просто не туда. Есть еще один довольно важный вопрос: а что происходит, если пакет не IP, а, скажем, IPX или вообще от Windows-сети? Скажем прямо, что обработать их UNIX не сможет, но переслать перешлет. Например, можно настроить роутер так, что IPX-пакеты не будут выходить из своего сегмента.

Отметим еще одну важную особенность организации сетевой работы. В UNIX реализован принцип «клиент-сервер», то есть, когда два компьютера работают друг с другом, то один из них всегда является главным. Поясним на примере. Запустим программу удаленного доступа telnet на машине 1, вызывая при этом машину 2. Тогда при установлении связи машина 2 станет сервером, а машина 1 — клиентом, что в данном случае очень сходно с терминалом. В UNIX это тоже так, но только для данного конкретного порта в данный момент. Например, если в то же время на машине 2 запустить telnet, вызывая машину 1, то ситуация будет зеркальной. Здесь важно, что UNIX — реально многозадачная система. В ней можно легко запустить много копий одной программы, и все они будут работать независимо. И конечно же, параллельно можно запускать много других программ. Но о программных аспектах мы поговорим в следующий раз. Сейчас же для нас важно знать, что имея UNIX, мы можем запустить много всего, и при этом как клиент- так и сервер-части. Расскажем о конкретных программах.

Начнем с почты и на ее примере разберем типичную работу программы, обрабатывающей некоторый порт. Как мы уже сказали, почта имеет свой номер порта. На этом порте «висит» почтовая программа, которая принимает и отправляет письма. До сих пор мы говорили о пакетах. Конечно, программа принимает пакеты, но по мере их поступления она собирает их в письма. Тут важен порядок пакетов, но это сделать, как мы говорили, легко. Более важно получить информацию без ошибок. Очевидно, что дать стопроцентную гарантию нельзя, но существуют методы контрольных сумм, проверки четности и т.д., обеспечивающие более или менее высокую вероятность безошибочной передачи данных. Проверка происходит на каждом этапе пересылки на всех шлюзах. Если пакет пришел испорченный, то он возвращается назад. До тех пор пока не придет хороший пакет, он будет отражаться. Когда компьютер-получатель соберет все пакеты, относящиеся к письму, без ошибок, письмо будет получено. Но это еще не все. Обычно письма идут не компьютеру, а пользователю. До сих пор почтовая программа проверяла лишь, что адрес машины правильный. Теперь она будет пытаться положить письмо в почтовый каталог пользователя. Если такого пользователя нет, то чаще всего письмо переадресуется пользователю root, который является администратором UNIX-машины. Если пользователь все же есть, то он сможет потом прочитать это письмо с помощью почтовой программы. О том, как забирать письма с другой машины, мы поговорим в другой раз. Посылка писем происходит аналогично. Почтовая программа посылает письмо программе, которая отвечает за обработку почты. После этого письмо разбивается на пакеты, которые последовательно передаются в сеть. Надо отметить, что при посылке писем не проверяется, есть ли такой компьютер в сети. Это дело шлюзов. Если его нет, то письмо рано или поздно вернется. Такая работа является типичной для большинства программ. Несколько отличаются программы, работающие в реальном времени, например telnet или talk. Передаваемая информация должна сразу выводиться на экран. И если после пакета 2 пришел пакет 4, то надо ждать, пока придет пакет 3. Конечно, можно сказать, что описанный механизм довольно прост. Но никто и не обещал суперсложных вещей. Вообще, чем вещь проще, тем она надежнее.

Теперь расскажем про WWW (World Wide Web). Для многих это просто Explorer или Netscape с красивыми картинками... Для UNIX это просто информация, приходящая на 80-й порт или уходящая с него. Но ведь можно все пересылать по почте, большие файлы — по ftp. Конечно, можно, но вопрос теперь уже в другом: насколько это удобно. Сама идея WWW появилась у физиков в CERN. Хотелось более удобно передавать друг другу результаты экспериментов, что не всегда можно сделать в виде текстов. Иногда удобны рисунки, иногда хочется сменить шрифт и т.п. И вся прелесть заключается в том, что в получившейся реализации надо было скорее не посылать, а брать. Информация лежит на компьютере (иногда его называют сайт) в каталоге, куда имеет доступ http-сервер. При запросе он начинает выдавать оттуда информацию, а машина, приславшая запрос, получает и обрабатывает ее. Для написания файлов (их еще называют WWW-страничками) был разработан язык HTML, в котором с помощью нехитрых команд можно было написать довольно удобные вещи типа меню, кнопок, вставить картинки и т.д. Программа, которая называется браузер (browser), должна уметь этот код интерпретировать. Немаловажно то, что поскольку это текст, нет аппаратной зависимости, поэтому с самого начала этот способ был весьма удобен и неприхотлив. Затем появились скрипты, Microsoft придумала asp, но тут возникла небольшая проблема. Ее легко заметить, заходя сейчас на сайты Microsoft с помощью Netscape Communicator. Не все выглядит так красиво, как было задумано (то, что задумано, можно увидеть, используя Internet Explorer). Конечно, беды в этом нет. Просто произошел отход от принципа стандартизации. Не надо быть очень умным, чтобы понять, что здесь на передовые роли выходят деньги, желание завладеть кругом пользователей. Но ведь Windows отнюдь не везде является стандартом де-факто. Большинство научных институтов, особенно связанных с экспериментальной работой, зачастую имеют UNIX-машины. Еще есть Macintosh, со своей уникальной Mac OS, которая все же ближе к UNIX. Весьма популярны реализации UNIX и для x86-процессоров. Особенно известен Linux, хотя еще есть Free BSD, BSDI, Solaris и некоторые другие. Хоть это и тема другого рассказа, заметим, что Linux и Free BSD являются абсолютно бесплатными. При этом для Linux существует довольно большое число программ. Надо отдать должное Microsoft, что она пошла на некоторые уступки: Internet Explorer стал бесплатным и его сделали для многих платформ.

Но вернемся к WWW. Уже всем ясно, что это наиболее удобный способ представления информации, и нужно лишь быстро передавать данные. Если эти данные статические, например картинки, то можно и подождать. Но если данные динамические, например звук радиостанции, то тут необходим хороший канал. Простой подсчет показывает, что если пытаться слушать звук с частотой 11 кГц и, скажем, 8 бит, притом моно, то нужно передавать 11 Кбайт/c. Для сравнения качество записи на CD-диске: 44 кГц, 20 бит, стерео, то есть примерно 220 Кбайт/с. К тому же, скорость 11 Кбайт/с обычный домашний модем, тем более с нашими АТС, не обеспечит. Иногда, как говорится, в хорошую погоду, бывает килобайт пять. Нетрудно сделать вывод, что посмотреть видеофильм по сети тоже дано не всем. Помочь, если канал плохой, почти невозможно, если вы не его владелец. Несомненно, можно советовать искать аналогичную информацию ближе, не лазить в Америку, потому что нужен спутник, но от этого не легче. И выход был найден. Он имеет загадочное название Proxy. Суть проста. Берется компьютер с большим диском и ставится на пути большого потока проходящих WWW документов. Наиболее часто используемые из них записываются на диск. Можно настроить браузер использовать Proxy. Тогда при повторном обращении страничка будет браться с Proxy-сервера, который ближе расположен. Разумеется, что сам Proxy-сервер должен при этом заботиться о свежести информации. Скажем прямо, это не всегда происходит корректно, и вы можете получать устаревший документ или же неполный файл. Еще раз оговорюсь: такие ошибки нетипичны, но они бывают, поэтому я, например, стараюсь Proxy отключать.

Теперь, когда описаны принципы работы Интернета, кратко, хотя и подробно описаны почта и WWW, и даже неоднократно упоминалось о желании создать сеть, не зависящую почти ни от чего, может возникнуть вопрос: а почему же UNIX? Почему нельзя сделать все то же самое в Windows? На самом деле, часть этой работы уже сделана. Есть возможность запустить в Windows работу с IP-пакетами. В конце концов, ведь есть же Internet Explorer. Проблема заключается в том, что UNIX изначально делался для сетей, а Windows нет. Изначально спланированная как однозадачная система, DOS создала много трудностей при написании Windows. Желая сохранить совместимость со старыми программами, хотелось добавить многозадачность. В некоторой мере это достигнуто, но реально это не то, что нужно. Запустить много копий одной программы не всегда возможно, к тому большинство возможностей появляется только после загрузки графического интерфейса. Это, конечно, красиво, но иногда просто не нужно. Однако пока нет графического интерфейса, нет и многозадачности, потому что она грузится позже. Поэтому, загружая командную строку, вы будете находиться в обычном однозадачном DOS. Система защиты Windows вообще вне всякой критики. Создается впечатление, что многопользовательские возможности просто для виду. То, что в UNIX есть изначально: права доступа к каждому файлу, домашние каталоги, серьезная шифровка паролей, – в Windows почти полностью отсутствует. Кроме такой примитивной вещи, что в Windows 95/98 можно нажать Escape вместо ввода имени и пароля, чтобы получить доступ к ресурсам машины, приведу еще один простой пример. Когда вы создаете новое соединение для удаленного доступа в сеть через модем, вы видите возможность сохранить пароль. Тогда в дальнейшем его не придется набирать. При подключении выполняется скрипт-файл, который обычно лежит в каталоге Program Files\Accessories и имеет расширение .scp. Вы можете убедиться, что после просьбы сохранить пароль он там будет записан открытым текстом. Я не хочу сейчас обсуждать, сколько способов залезть в машину, особенно когда она подключена к сети, но даже если этот пароль прочитают ваши знакомые, которых вы по доброте своей посадили за компьютер, то лучше вам от этого не станет. Поэтому на роль машины, участвующей в работе сети, машины с Windows вряд ли могут претендовать. В лучшем случае это клиенты.

Именно поэтому в большинстве случаев для выхода в Интернет используют шлюз-машины, где ставят UNIX. Если сеть сложная и большая, то нужен хороший роутер, и тут уже подходит не любая реализация даже UNIX. Обычно почту и WWW тоже держат на UNIX-машинах в основном из соображений безопасности. Примером сложных систем являются сети провайдеров Интернета. И мне, честно говоря, не известно ни одного, где бы не было UNIX-машин. Но о конкретных применениях UNIX мы поговорим в следующих выпусках; в том числе попытаемся дать представление о защите и о взломах сетей.

КомпьютерПресс 2'2000

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует