IP-сети с самого начала
Только ветер гудит в проводах
(физический уровень)
Чтобы наладить какое бы то ни было взаимодействие между несколькими устройствами, необходимо установить между ними физический контакт, выбрать способ передачи информационных сигналов. В качестве носителя сигнала в настоящее время обычно выбирают электромагнитное поле, которое распространяется в среде проводной или кабельной линии, оптического волновода, в атмосфере или безвоздушном пространстве. Реализация конкретного способа сопровождается согласованием параметров среды (волновое сопротивление, затухание сигнала и т. д.) и самого сигнала (уровень напряжения, частота и т. д.), а также выработкой правил осуществления приемо-передачи (порядок доступа к среде, установления и завершения соединения, способ кодирования сообщений, обнаружения ошибок и т. д.). Такие соглашения, которые детально описывают процедуру обмена сообщениями, называются протоколами.
После того как физический контакт между устройствами установлен, можно приступать к передаче информации. Однако не все так просто, как кажется на первый взгляд.
Вспомним сюжет из фильма, в котором разведчики устанавливают между собой радиосвязь. Наличия радиостанций с возможностью отправлять и принимать сигналы для осуществления информационного обмена недостаточно. Необходимы дополнительные соглашения о "логической" стороне этой процедуры. Упрощенно это выглядит следующим образом. Процесс инициируется многократным повторением вызывающей стороной позывного вызываемой стороны. После получения отклика и подтверждения контакта осуществляется обмен сообщениями. О завершении каждого сообщения передающая сторона извещает фразой: "Прием!". После того как обмен всеми сведениями будет завершен, сеанс контакта завершается фразой: "Конец связи!". Когда устанавливается связь между двумя компьютерами (соединение "точка-точка"), они общаются между собой примерно по такой же схеме. Однако вспомним, что в локальной сети одновременно работают и обмениваются сообщениями десятки узлов, что вносит дополнительные сложности при реализации взаимодействия.
У нас все узлы пронумерованы!
(сетевой уровень)
Предположим, несколько компьютеров соединены посредством кабеля в локальную сеть, по которой могут распространяться электрические сигналы. Поскольку все они разделяют одну и ту же среду, то сообщение, которое передает один из компьютеров, "читается" всеми его соседями. Иногда этого и требуется достичь, например, при реализации трансляции радио или телевидения. Однако чаще всего передаваемое сообщение имеет конкретного адресата в лице вполне определенного устройства, подключенного к сети. Поэтому в сети необходимо ввести систему адресов -– уникальных идентификаторов устройств, к ней подключенных. При изготовлении сетевых контроллеров им присваивается уникальный номер -– MAC-адрес. По этим номерам соединенное в сеть оборудование может различать отдельные устройства. Но использование аппаратных MAC-адресов при развертывании сетевого программного обеспечения не совсем удобно.
В вычислительных сетях MAC-адреса сетевых контроллеров играют примерно ту же роль, что и аппаратные коды IMEI в случае мобильных телефонов. По идее, вместо телефонного номера, по которому мы вызываем нужного нам абонента, можно было бы использовать IMEI. Но если бы у человека испортился аппарат или он просто приобрел себе более новую модель, то для связи с ним необходимо было бы узнать аппаратный код его нового телефона. Существующая система "логической" адресации с помощью телефонных номеров позволяет избежать лишних хлопот: достаточно установить в любой аппарат соответствующую SIM-карту, чтобы снова быть на связи.
В ситуации с компьютерами это означало бы, что в случае поломки сервера всем остальным участникам сети для восстановления связи с ним необходимо было бы прописать в настройках своего программного обеспечения MAC-адрес нового устройства, выполняющего роль сервера. Введение же "логической" (в противоположность "физической") адресации позволяет установить программное обеспечение сервера на другой аппаратной платформе (с другим MAC- адресом), прописать логический адрес неисправного сервера – и работа сети будет восстановлена.
Поэтому прикладные программы для обмена сообщениями используют систему логической адресации, выстраивая над протоколами физического уровня следующий уровень, который называется сетевым. Когда речь идет о протоколах Интернета, на сетевом уровне работает протокол IP (Internet Protocol).
Физика и лирика
Обратимся к примеру о радиосвязи. О физическом взаимодействии аппаратуры позаботились конструкторы радиопередатчиков. После согласования таких физических параметров, как частота радиосигналов и способ модуляции, можно наладить контакт. Мы рассмотрели процедуру сеанса связи "голосом". Однако с использованием той же приемо-передающей аппаратуры можно общаться и посредством кода Морзе. Получается, что поверх одного и того же физического соединения могут функционировать различные логические протоколы информационного обмена. С другой стороны, код Морзе может применяться и без радиопередающей аппаратуры, а, к примеру, c помощью прожекторов-семафоров или посредством акустического взаимодействия (так называемого "перестукивания"). Логический протокол может работать поверх различных физических систем. Принцип независимости протоколов различных уровней положен в основу концепции построения открытых систем и широко используется при организации информационного обмена в вычислительных сетях.
Вот что значит маскировка!
(сети и подсети)
Протокол IP требует, чтобы каждому устройству, которое подключено к сети, был назначен IP-адрес, представленный 32-битным числом (рассмотрение протокола IPv6 — тема для отдельной статьи, однако основные принципы останутся неизменными). Для удобства использования это число обычно разбивают на четыре части по 8 бит, названные октетами, и записывают их десятичными цифрами. Например, IP-адрес сервера www.mail.ru, равный (С24339E216), запишется как 194.67.57.226, а сервера www.yandex.ru, равный 57FAFB0B16, — как 87.250.251.11.
Поскольку Интернет представляет собой "сеть сетей", IP-адрес несет несколько большую смысловую нагрузку, чем просто уникальный номер устройства. В нем можно выделить следующие элементы: адрес сети, адрес подсети и адрес узла. Адрес сети — это первая часть IP-адреса, которая наряду с маской подсети определяет остальные компоненты. Чтобы узнать, какая часть IP-адреса обозначает сеть и подсеть, нужно на полный IP-адрес наложить маску подсети с помощью поразрядной операцию конъюнкции (логического "И"). Оставшаяся после наложения маски часть IP-адреса будет обозначать сетевой адрес, а та, что подверглась обнулению, — номер устройства в подсети. Рассмотрим два примера.
Пример 1:
IP-адрес (A): 192.168.4.10
Маска подсети (M): 255.255.255.0
A and M = 192.168.4.0
Получили: сетевой адрес -– 192.168.4.0, адрес устройства в подсети — 0.0.0.10.
Пример 2:
IP-адрес (A): 192.168.4.10
Маска подсети (M): 255.255.255.248
A and M = 192.168.4.8
Получили: сетевой адрес — 192.168.4.8, адрес устройства в подсети — 0.0.0.2.
Замечание. Маска подсети в двоичной записи обычно представляет собой 32-разрядное число, старшие разряды которого заполнены непрерывной последовательностью единиц, за которой следуют нули. Для первого примера она может быть записана так: 111111112.111111112.111111112.000000002, а для второго — так: 111111112.111111112.111111112.111110002. Поэтому когда требуется записать IP-адрес с указанием маски подсети, поступают следующим образом: после IP-адреса через наклонную черту пишут, сколько единиц находится в старших разрядах маски. В первом случае IP-адрес будет выглядеть: 192.168.4.10/24, а во втором: 192.168.4.10/29.
Прочитал —- передай другому!
(маршрутизация в IP-сетях)
Возникает вопрос: а зачем нужно делить IP-адрес на какие-то части? Ведь адрес компьютера определяется не какой-то частью, а целым. Чтобы получить ответ, надо разобраться с тем, как осуществляется передача данных в IP-сетях. Предположим, что у нас есть локальная сеть из нескольких компьютеров. Протокол Интернета построен таким образом, что все компьютеры, входящие в эту локальную сеть, могут отправлять сообщения непосредственно друг другу, потому что известно соответствие между их логическими IP- и физическими MAC-адресами, а сетевое оборудование в этом случае способно обеспечить доставку. Но помимо нашей локальной сети, в Интернете существуют еще миллионы рабочих станций и серверов. Дело усложняется тем, что наша сеть, как правило, не имеет непосредственного физического соединения с нужным сервером Интернета. В процессе информационного обмена данные должны пройти по цепочке сетевых узлов, прежде чем попадут по назначению. Длина этой цепочки может составлять десятки станций. Получить соответствия IP- и MAC-адресов для этого конгломерата было бы проблематично, а поддерживать эти данные в актуальном состоянии -- и вовсе невозможно. Поэтому разработчики протокола Интернета поступили весьма изобретательно. Было решено, что в том случае, если адрес получателя информации лежит вне пределов локальной сети, эта информация перенаправляется специальному сетевому устройству — маршрутизатору, которое затем должно передать его следующему маршрутизатору и так далее до тех пор, пока данные не попадут в локальную сеть, к которой подключен компьютер-получатель. Тогда уже маршрутизатор той локальной сети отправит нужную информацию непосредственно получателю. Именно для того, чтобы определить, относится ли адрес получателя к локальной сети, и используется деление IP-адреса на условные части. Если после наложения маски подсети на IP-адрес отправителя и на IP-адрес получателя получается одно и то же число, то считается, что оба компьютера находятся в одной локальной сети и предпринимается попытка непосредственной передачи данных. В противном случае информация отправляется маршрутизатору, который должен решить, что с ней делать дальше.
Долгая дорога в дюнах
Чтобы получить наглядное представление о том, какой путь проделывает информация, когда мы работаем в Интернете, можно воспользоваться командой tracert (в среде ОС семейства Windows) или traceroute (для ОС семейства Unix). Пример:
Трассировка маршрута к www.yahoo-ht3.akadns.net [69.147.114.210]
с максимальным числом прыжков 30:
1 114 ms 124 ms 109 ms as1773.minsktelecom.by [82.209.253.247]
2 124 ms 109 ms 109 ms r1773-fe00.minsktelecom.by [82.209.254.161]
3 140 ms 140 ms 139 ms 82.209.252.161
4 124 ms 140 ms 124 ms 193.232.249.174
5 140 ms 140 ms 124 ms 193.232.249.76
6 156 ms 155 ms 155 ms if-7-0.core2.FR1-Frankfurt.teleglobe.net [80.231.65.13]
7 171 ms 171 ms 187 ms if-7-0-0.core1.AD1-Amsterdam.teleglobe.net [80.231.65.70]
8 171 ms 171 ms 171 ms if-0-0.core2.AD1-Amsterdam.teleglobe.net [80.231.80.14]
9 240 ms 247 ms 249 ms if-3-0-0.core1.NTO-NewYork.teleglobe.net [216.6.82.69]
10 249 ms 249 ms 249 ms if-4-0-0.core2.NTO-NewYork.teleglobe.net [216.6.82.66]
11 249 ms 249 ms 249 ms if-1-0-0.core3.AEQ-Ashburn.teleglobe.net [216.6.51.5]
12 249 ms 249 ms 249 ms ix-3-0-9.core3.AEQ-Ashburn.teleglobe.net [216.6.51.30]
13 1453 ms 249 ms 249 ms ge-2-1-0-p150.msr2.re1.yahoo.com [216.115.108.21]
14 265 ms 249 ms 250 ms gi1-22.bas-a2.re3.yahoo.com [66.196.112.27]
15 250 ms 265 ms 247 ms f1.www.vip.re3.yahoo.com [69.147.114.210]
Трассировка завершена.
Как Вы лодку назовете — так она и поплывет!
(система доменных имен)
Несмотря на все достоинства IP-адресов, их использование для человека не совсем удобно. Адрес 207.46.192.254 не так-то легко запомнить, а уж спорить с тем, что говорит он гораздо о меньшем, нежели www.microsoft.com, никто точно не будет. Чтобы упростить обращение к ресурсам сети, был введен следующий уровень абстракции — система символических доменных имен. Для этого в интернет-сети были размещены специальные серверы, которые на запрос, содержащий URL (Universal Resource Location) нужного узла сети Интернет, отвечают его IP-адресом. Такие серверы получили название серверов доменных имен (Domain Name Server, DNS). Если при работе в Интернете отсутствует связь с сервером DNS, то при попытке обращения к интересующему ресурсу с использованием его URL появляется сообщение о недоступности этого ресурса. Хотя если указать его IP-адрес, то все заработает.
Кого позвать?
(транспортный уровень)
Итак, все устройства, которые подключаются к вычислительной сети (будь то телефоны, игровые приставки, серверы или персональные компьютеры), имеют физический адрес, данный им изготовителем, и логический адрес, который устанавливается администратором в зависимости от конфигурации конкретной сети. Понятно, что, отправляя информацию по указанному адресу, мы можем надеяться на ее получение... кем или чем? IP-адрес позволяет указать на конкретный компьютер, однако на компьютере может одновременно выполняться несколько программ, осуществляющих обмен данными через сеть. Например, вполне рядовой является ситуация, когда пользователь просматривает web-странички в Opera, в то же время Outlook Express принимает электронную почту, а антивирус обновляет свои базы. Какая же из программ получит адресованные компьютеру данные?
Чтобы устранить неопределенность, каждой программе, работающей с сетью, присваивается число — номер порта. Поскольку протокол IP ничего не знает о портах, над ним выстраивается следующий уровень протоколов — транспортный, который позволяет передавать данные уже не между компьютерами, а между выполняющимися на них программами.
IP-адрес компьютера с номером порта образуют отдельное понятие — сокет. Обмен данными между программами может осуществляться двумя способами: непрерывным потоком с установлением виртуального канала и гарантией доставки или эпизодически отдельными пакетами. Первый способ обеспечивается протоколом TCP, а второй — протоколом UDP. Оба протокола работают на одном уровне, оба оперируют понятиями порта, но множества их портов не пересекаются. То есть порт 2264 протокола UDP не мешает работе протокола TCP с его портом с таким же номером. Программы, которые предоставляют услуги сети, используют принятую в протоколах транспортного уровня систему адресации в своих нуждах, выстраивая свои, более высокоуровневые протоколы. Некоторые номера портов традиционно ассоциированы с сетевыми сервисами. Например, TCP-порты 20 и 21 — с протоколом передачи файлов FTP, 25 и 110 — с протоколами электронной почты SMTP и POP3 и т. д. Порты с номерами старше 1023, как правило, не имеют такой жесткой интерпретации и могут использоваться по мере необходимости.
Полученная физическим адаптером информация поднимается по уровням протоколов до тех пор, пока не достигнет приложения, которому предназначалась.
Практическое упражнение
(построение интранет-сети)
В примерах, которые присутствуют в этой статье, часто используются IP-адреса вида: 192.168.0.0/24. Это неспроста. В спецификации протокола IP такие адреса, начинающиеся на 192.168, зарезервированы для применения в локальных сетях. Стандартная маска сети с номером 192.168.0.0 равна 255.255.255.0, что позволяет организовать 256 подсетей (с адресами от 192.168.0.0 до 192.168.255.0) с 254 узлами в каждой (с адресами от 192.168.xxx.1 до 192.168.xxx.254, где "xxx" -- номер подсети). Что это дает на практике? Информация, отправленная по таким адресам, не может выйти за пределы локальной сети (без применения трансляции адресов), что в некоторой степени повышает безопасность. Кроме того, использование "внутренних" адресов гарантирует от конфликтов с другими адресами в случае, если локальная сеть будет подключена к Интернету.
Поэтому при построении небольшой вычислительной сети правильным будет первому компьютеру назначить адрес 192.168.0.1, второму — 192.168.0.2 и т. д. Маршрутизатору, выполняющему роль посредника между локальной сетью и Интернетом, можно присвоить внутренний IP-адрес 192.168.0.254 и прописать его на всех компьютерах в качестве шлюза по умолчанию. После того как адреса будут распределены, операционные системы настроены, а компьютеры объединены в сеть, можно проверить прохождение информации от одного компьютера к другому. Проще всего сделать это с помощью команды ping, которая доступна во всех сетевых операционных системах. Например, если на компьютере с адресом 192.168.0.1 дать команду
ping 192.168.0.2,
то в случае работоспособной сети должно быть получено сообщение об отклике опрашиваемого компьютера. Если отклика нет, то необходимо снова проверить физические соединения и настройки операционной системы.
Куда бежать и где искать удачи?..
(заключение)
Приведенных в этой статье начальных сведений о работе сетей, построенных по принципу Интернета, достаточно, чтобы осознанно подойти к настройке программ, которые для своей работы получают доступ к ресурсам сети: клиентов электронной почты, чатов, интернет-браузеров. Однако тема IP-сетей была только затронута. Заинтересовавшемуся читателю можно посоветовать обратиться к дополнительным источникам, чтобы разобраться с маршрутизацией в IP-сетях, познакомиться с преобразованиями адресов NAT и proxy, изучить принципы работы брэндмауэров. Знание особенностей протоколов, по которым передается информация, позволит найти новые сферы применения вычислительных сетей, сохранив при этом необходимый уровень безопасности.
Игорь Орещенков 2009 г.
(физический уровень)
Чтобы наладить какое бы то ни было взаимодействие между несколькими устройствами, необходимо установить между ними физический контакт, выбрать способ передачи информационных сигналов. В качестве носителя сигнала в настоящее время обычно выбирают электромагнитное поле, которое распространяется в среде проводной или кабельной линии, оптического волновода, в атмосфере или безвоздушном пространстве. Реализация конкретного способа сопровождается согласованием параметров среды (волновое сопротивление, затухание сигнала и т. д.) и самого сигнала (уровень напряжения, частота и т. д.), а также выработкой правил осуществления приемо-передачи (порядок доступа к среде, установления и завершения соединения, способ кодирования сообщений, обнаружения ошибок и т. д.). Такие соглашения, которые детально описывают процедуру обмена сообщениями, называются протоколами.
После того как физический контакт между устройствами установлен, можно приступать к передаче информации. Однако не все так просто, как кажется на первый взгляд.
Вспомним сюжет из фильма, в котором разведчики устанавливают между собой радиосвязь. Наличия радиостанций с возможностью отправлять и принимать сигналы для осуществления информационного обмена недостаточно. Необходимы дополнительные соглашения о "логической" стороне этой процедуры. Упрощенно это выглядит следующим образом. Процесс инициируется многократным повторением вызывающей стороной позывного вызываемой стороны. После получения отклика и подтверждения контакта осуществляется обмен сообщениями. О завершении каждого сообщения передающая сторона извещает фразой: "Прием!". После того как обмен всеми сведениями будет завершен, сеанс контакта завершается фразой: "Конец связи!". Когда устанавливается связь между двумя компьютерами (соединение "точка-точка"), они общаются между собой примерно по такой же схеме. Однако вспомним, что в локальной сети одновременно работают и обмениваются сообщениями десятки узлов, что вносит дополнительные сложности при реализации взаимодействия.
У нас все узлы пронумерованы!
(сетевой уровень)
Предположим, несколько компьютеров соединены посредством кабеля в локальную сеть, по которой могут распространяться электрические сигналы. Поскольку все они разделяют одну и ту же среду, то сообщение, которое передает один из компьютеров, "читается" всеми его соседями. Иногда этого и требуется достичь, например, при реализации трансляции радио или телевидения. Однако чаще всего передаваемое сообщение имеет конкретного адресата в лице вполне определенного устройства, подключенного к сети. Поэтому в сети необходимо ввести систему адресов -– уникальных идентификаторов устройств, к ней подключенных. При изготовлении сетевых контроллеров им присваивается уникальный номер -– MAC-адрес. По этим номерам соединенное в сеть оборудование может различать отдельные устройства. Но использование аппаратных MAC-адресов при развертывании сетевого программного обеспечения не совсем удобно.
В вычислительных сетях MAC-адреса сетевых контроллеров играют примерно ту же роль, что и аппаратные коды IMEI в случае мобильных телефонов. По идее, вместо телефонного номера, по которому мы вызываем нужного нам абонента, можно было бы использовать IMEI. Но если бы у человека испортился аппарат или он просто приобрел себе более новую модель, то для связи с ним необходимо было бы узнать аппаратный код его нового телефона. Существующая система "логической" адресации с помощью телефонных номеров позволяет избежать лишних хлопот: достаточно установить в любой аппарат соответствующую SIM-карту, чтобы снова быть на связи.
В ситуации с компьютерами это означало бы, что в случае поломки сервера всем остальным участникам сети для восстановления связи с ним необходимо было бы прописать в настройках своего программного обеспечения MAC-адрес нового устройства, выполняющего роль сервера. Введение же "логической" (в противоположность "физической") адресации позволяет установить программное обеспечение сервера на другой аппаратной платформе (с другим MAC- адресом), прописать логический адрес неисправного сервера – и работа сети будет восстановлена.
Поэтому прикладные программы для обмена сообщениями используют систему логической адресации, выстраивая над протоколами физического уровня следующий уровень, который называется сетевым. Когда речь идет о протоколах Интернета, на сетевом уровне работает протокол IP (Internet Protocol).
Физика и лирика
Обратимся к примеру о радиосвязи. О физическом взаимодействии аппаратуры позаботились конструкторы радиопередатчиков. После согласования таких физических параметров, как частота радиосигналов и способ модуляции, можно наладить контакт. Мы рассмотрели процедуру сеанса связи "голосом". Однако с использованием той же приемо-передающей аппаратуры можно общаться и посредством кода Морзе. Получается, что поверх одного и того же физического соединения могут функционировать различные логические протоколы информационного обмена. С другой стороны, код Морзе может применяться и без радиопередающей аппаратуры, а, к примеру, c помощью прожекторов-семафоров или посредством акустического взаимодействия (так называемого "перестукивания"). Логический протокол может работать поверх различных физических систем. Принцип независимости протоколов различных уровней положен в основу концепции построения открытых систем и широко используется при организации информационного обмена в вычислительных сетях.
Вот что значит маскировка!
(сети и подсети)
Протокол IP требует, чтобы каждому устройству, которое подключено к сети, был назначен IP-адрес, представленный 32-битным числом (рассмотрение протокола IPv6 — тема для отдельной статьи, однако основные принципы останутся неизменными). Для удобства использования это число обычно разбивают на четыре части по 8 бит, названные октетами, и записывают их десятичными цифрами. Например, IP-адрес сервера www.mail.ru, равный (С24339E216), запишется как 194.67.57.226, а сервера www.yandex.ru, равный 57FAFB0B16, — как 87.250.251.11.
Поскольку Интернет представляет собой "сеть сетей", IP-адрес несет несколько большую смысловую нагрузку, чем просто уникальный номер устройства. В нем можно выделить следующие элементы: адрес сети, адрес подсети и адрес узла. Адрес сети — это первая часть IP-адреса, которая наряду с маской подсети определяет остальные компоненты. Чтобы узнать, какая часть IP-адреса обозначает сеть и подсеть, нужно на полный IP-адрес наложить маску подсети с помощью поразрядной операцию конъюнкции (логического "И"). Оставшаяся после наложения маски часть IP-адреса будет обозначать сетевой адрес, а та, что подверглась обнулению, — номер устройства в подсети. Рассмотрим два примера.
Пример 1:
IP-адрес (A): 192.168.4.10
Маска подсети (M): 255.255.255.0
A and M = 192.168.4.0
Получили: сетевой адрес -– 192.168.4.0, адрес устройства в подсети — 0.0.0.10.
Пример 2:
IP-адрес (A): 192.168.4.10
Маска подсети (M): 255.255.255.248
A and M = 192.168.4.8
Получили: сетевой адрес — 192.168.4.8, адрес устройства в подсети — 0.0.0.2.
Замечание. Маска подсети в двоичной записи обычно представляет собой 32-разрядное число, старшие разряды которого заполнены непрерывной последовательностью единиц, за которой следуют нули. Для первого примера она может быть записана так: 111111112.111111112.111111112.000000002, а для второго — так: 111111112.111111112.111111112.111110002. Поэтому когда требуется записать IP-адрес с указанием маски подсети, поступают следующим образом: после IP-адреса через наклонную черту пишут, сколько единиц находится в старших разрядах маски. В первом случае IP-адрес будет выглядеть: 192.168.4.10/24, а во втором: 192.168.4.10/29.
Прочитал —- передай другому!
(маршрутизация в IP-сетях)
Возникает вопрос: а зачем нужно делить IP-адрес на какие-то части? Ведь адрес компьютера определяется не какой-то частью, а целым. Чтобы получить ответ, надо разобраться с тем, как осуществляется передача данных в IP-сетях. Предположим, что у нас есть локальная сеть из нескольких компьютеров. Протокол Интернета построен таким образом, что все компьютеры, входящие в эту локальную сеть, могут отправлять сообщения непосредственно друг другу, потому что известно соответствие между их логическими IP- и физическими MAC-адресами, а сетевое оборудование в этом случае способно обеспечить доставку. Но помимо нашей локальной сети, в Интернете существуют еще миллионы рабочих станций и серверов. Дело усложняется тем, что наша сеть, как правило, не имеет непосредственного физического соединения с нужным сервером Интернета. В процессе информационного обмена данные должны пройти по цепочке сетевых узлов, прежде чем попадут по назначению. Длина этой цепочки может составлять десятки станций. Получить соответствия IP- и MAC-адресов для этого конгломерата было бы проблематично, а поддерживать эти данные в актуальном состоянии -- и вовсе невозможно. Поэтому разработчики протокола Интернета поступили весьма изобретательно. Было решено, что в том случае, если адрес получателя информации лежит вне пределов локальной сети, эта информация перенаправляется специальному сетевому устройству — маршрутизатору, которое затем должно передать его следующему маршрутизатору и так далее до тех пор, пока данные не попадут в локальную сеть, к которой подключен компьютер-получатель. Тогда уже маршрутизатор той локальной сети отправит нужную информацию непосредственно получателю. Именно для того, чтобы определить, относится ли адрес получателя к локальной сети, и используется деление IP-адреса на условные части. Если после наложения маски подсети на IP-адрес отправителя и на IP-адрес получателя получается одно и то же число, то считается, что оба компьютера находятся в одной локальной сети и предпринимается попытка непосредственной передачи данных. В противном случае информация отправляется маршрутизатору, который должен решить, что с ней делать дальше.
Долгая дорога в дюнах
Чтобы получить наглядное представление о том, какой путь проделывает информация, когда мы работаем в Интернете, можно воспользоваться командой tracert (в среде ОС семейства Windows) или traceroute (для ОС семейства Unix). Пример:
Трассировка маршрута к www.yahoo-ht3.akadns.net [69.147.114.210]
с максимальным числом прыжков 30:
1 114 ms 124 ms 109 ms as1773.minsktelecom.by [82.209.253.247]
2 124 ms 109 ms 109 ms r1773-fe00.minsktelecom.by [82.209.254.161]
3 140 ms 140 ms 139 ms 82.209.252.161
4 124 ms 140 ms 124 ms 193.232.249.174
5 140 ms 140 ms 124 ms 193.232.249.76
6 156 ms 155 ms 155 ms if-7-0.core2.FR1-Frankfurt.teleglobe.net [80.231.65.13]
7 171 ms 171 ms 187 ms if-7-0-0.core1.AD1-Amsterdam.teleglobe.net [80.231.65.70]
8 171 ms 171 ms 171 ms if-0-0.core2.AD1-Amsterdam.teleglobe.net [80.231.80.14]
9 240 ms 247 ms 249 ms if-3-0-0.core1.NTO-NewYork.teleglobe.net [216.6.82.69]
10 249 ms 249 ms 249 ms if-4-0-0.core2.NTO-NewYork.teleglobe.net [216.6.82.66]
11 249 ms 249 ms 249 ms if-1-0-0.core3.AEQ-Ashburn.teleglobe.net [216.6.51.5]
12 249 ms 249 ms 249 ms ix-3-0-9.core3.AEQ-Ashburn.teleglobe.net [216.6.51.30]
13 1453 ms 249 ms 249 ms ge-2-1-0-p150.msr2.re1.yahoo.com [216.115.108.21]
14 265 ms 249 ms 250 ms gi1-22.bas-a2.re3.yahoo.com [66.196.112.27]
15 250 ms 265 ms 247 ms f1.www.vip.re3.yahoo.com [69.147.114.210]
Трассировка завершена.
Как Вы лодку назовете — так она и поплывет!
(система доменных имен)
Несмотря на все достоинства IP-адресов, их использование для человека не совсем удобно. Адрес 207.46.192.254 не так-то легко запомнить, а уж спорить с тем, что говорит он гораздо о меньшем, нежели www.microsoft.com, никто точно не будет. Чтобы упростить обращение к ресурсам сети, был введен следующий уровень абстракции — система символических доменных имен. Для этого в интернет-сети были размещены специальные серверы, которые на запрос, содержащий URL (Universal Resource Location) нужного узла сети Интернет, отвечают его IP-адресом. Такие серверы получили название серверов доменных имен (Domain Name Server, DNS). Если при работе в Интернете отсутствует связь с сервером DNS, то при попытке обращения к интересующему ресурсу с использованием его URL появляется сообщение о недоступности этого ресурса. Хотя если указать его IP-адрес, то все заработает.
Кого позвать?
(транспортный уровень)
Итак, все устройства, которые подключаются к вычислительной сети (будь то телефоны, игровые приставки, серверы или персональные компьютеры), имеют физический адрес, данный им изготовителем, и логический адрес, который устанавливается администратором в зависимости от конфигурации конкретной сети. Понятно, что, отправляя информацию по указанному адресу, мы можем надеяться на ее получение... кем или чем? IP-адрес позволяет указать на конкретный компьютер, однако на компьютере может одновременно выполняться несколько программ, осуществляющих обмен данными через сеть. Например, вполне рядовой является ситуация, когда пользователь просматривает web-странички в Opera, в то же время Outlook Express принимает электронную почту, а антивирус обновляет свои базы. Какая же из программ получит адресованные компьютеру данные?
Чтобы устранить неопределенность, каждой программе, работающей с сетью, присваивается число — номер порта. Поскольку протокол IP ничего не знает о портах, над ним выстраивается следующий уровень протоколов — транспортный, который позволяет передавать данные уже не между компьютерами, а между выполняющимися на них программами.
IP-адрес компьютера с номером порта образуют отдельное понятие — сокет. Обмен данными между программами может осуществляться двумя способами: непрерывным потоком с установлением виртуального канала и гарантией доставки или эпизодически отдельными пакетами. Первый способ обеспечивается протоколом TCP, а второй — протоколом UDP. Оба протокола работают на одном уровне, оба оперируют понятиями порта, но множества их портов не пересекаются. То есть порт 2264 протокола UDP не мешает работе протокола TCP с его портом с таким же номером. Программы, которые предоставляют услуги сети, используют принятую в протоколах транспортного уровня систему адресации в своих нуждах, выстраивая свои, более высокоуровневые протоколы. Некоторые номера портов традиционно ассоциированы с сетевыми сервисами. Например, TCP-порты 20 и 21 — с протоколом передачи файлов FTP, 25 и 110 — с протоколами электронной почты SMTP и POP3 и т. д. Порты с номерами старше 1023, как правило, не имеют такой жесткой интерпретации и могут использоваться по мере необходимости.
Полученная физическим адаптером информация поднимается по уровням протоколов до тех пор, пока не достигнет приложения, которому предназначалась.
Практическое упражнение
(построение интранет-сети)
В примерах, которые присутствуют в этой статье, часто используются IP-адреса вида: 192.168.0.0/24. Это неспроста. В спецификации протокола IP такие адреса, начинающиеся на 192.168, зарезервированы для применения в локальных сетях. Стандартная маска сети с номером 192.168.0.0 равна 255.255.255.0, что позволяет организовать 256 подсетей (с адресами от 192.168.0.0 до 192.168.255.0) с 254 узлами в каждой (с адресами от 192.168.xxx.1 до 192.168.xxx.254, где "xxx" -- номер подсети). Что это дает на практике? Информация, отправленная по таким адресам, не может выйти за пределы локальной сети (без применения трансляции адресов), что в некоторой степени повышает безопасность. Кроме того, использование "внутренних" адресов гарантирует от конфликтов с другими адресами в случае, если локальная сеть будет подключена к Интернету.
Поэтому при построении небольшой вычислительной сети правильным будет первому компьютеру назначить адрес 192.168.0.1, второму — 192.168.0.2 и т. д. Маршрутизатору, выполняющему роль посредника между локальной сетью и Интернетом, можно присвоить внутренний IP-адрес 192.168.0.254 и прописать его на всех компьютерах в качестве шлюза по умолчанию. После того как адреса будут распределены, операционные системы настроены, а компьютеры объединены в сеть, можно проверить прохождение информации от одного компьютера к другому. Проще всего сделать это с помощью команды ping, которая доступна во всех сетевых операционных системах. Например, если на компьютере с адресом 192.168.0.1 дать команду
ping 192.168.0.2,
то в случае работоспособной сети должно быть получено сообщение об отклике опрашиваемого компьютера. Если отклика нет, то необходимо снова проверить физические соединения и настройки операционной системы.
Куда бежать и где искать удачи?..
(заключение)
Приведенных в этой статье начальных сведений о работе сетей, построенных по принципу Интернета, достаточно, чтобы осознанно подойти к настройке программ, которые для своей работы получают доступ к ресурсам сети: клиентов электронной почты, чатов, интернет-браузеров. Однако тема IP-сетей была только затронута. Заинтересовавшемуся читателю можно посоветовать обратиться к дополнительным источникам, чтобы разобраться с маршрутизацией в IP-сетях, познакомиться с преобразованиями адресов NAT и proxy, изучить принципы работы брэндмауэров. Знание особенностей протоколов, по которым передается информация, позволит найти новые сферы применения вычислительных сетей, сохранив при этом необходимый уровень безопасности.
Игорь Орещенков 2009 г.
Компьютерная газета. Статья была опубликована в номере 06 за 2009 год в рубрике сети