IP и его дно
Сегодня мы будем не только читать, но и ощупывать работу сетей. Для этого нам понадобится эмулятор сетевого оборудования GNS3. Его надо скачать, установить запустив установочный файл и везде соглашаясь. В нем мы будем оттачивать мастерство :)
Пролог
Многие знают что Интернет - это сеть сетей. Но как же эти сети объединяются. В этом им помогают маршрутизаторы, которые являются основным связующим элементом. Однако одними только маршрутизаторами тут не обойтись. Для того, чтобы информация из одной сети попадала в другие необходимо было придумать общий межсетевой язык (протокол). Такой протокол был благополучно изобретен и имя ему IP (Internet Protocol). Кстати говоря само название Интернет протокол, как и сам протокол, было придумано еще до появления Интернета. Т.о. следует полагать - Интернет назван в честь этого протокола, а не наоборот.
Как работает протокол IP
В Интернете протокол IP не одинок, ему помогают еще несколько протоколов. Сам IP служит для передачи информации между сетями, а другие протоколы управляющие - они служат для настройки аппаратных средств (хостов и маршрутизаторов), а также управления сетевым оборудованием на канальном уровне.
Протокол IP работает так: берет данные с транспортного уровня, и добавляет к ним заголовки, сетевого уровня, описанные протоколом IP. Всего в заголовке IP версии 4 13 полей, но могут быть и дополнительные. Они помогают маршрутизаторам передавать пакет по сети. Каждый маршрутизатор получая пакет читает эти заголовки и принимает решение, как этот пакет обработать и самое для нас важное, куда этот пакет передать дальше. Поэтому основные поля в заголовке - это те которые содержат IP адрес отправителя и получателя. По ним маршрутизаторы определяют маршрут следования пакета.
IP - адрес сам по себе никакого отношения к самим компьютерам не имеет. Эти адреса нужны только программам сетевого уровня, для пересылки пакета. IP-адрес подобен СИМ-карте телефона. Вы можете использовать разные сим-карты на одном телефоне или даже несколько, если есть куда вставлять. Для правильной работы сетей надо только, чтобы эти адреса были разные, не совпадающий с другими. Для локальной сети можно выбрать любые понравившиеся. Если дело доходит до пересылке в Интернете, то ситуация похожа больше на принцип выдачи MAC-адресов. Специальная служба разным провайдерам выдает отдельные диапазоны адресов - первые цифры - адреса сетей. Это как коды телефонных операторов. Об этом далее. Разберемся в начале с локальными сетями.
Для начала разберем управляющий протокол ARP (работающий с IPv4)
Помните когда я рассказывал про канальный уровень я делал акцент, на то, что у каждого компьютера есть свой УНИКАЛЬНЫЙ MAC-адрес, который никогда не совпадает с другими (Хотя это можно устроить, если нужно). На самом деле этот адрес относится не столько к компьютеру, сколько к его сетевой карте. То есть если у компьютера несколько сетевых карт, то и MAC-адресов столько же. Уникальность нужна для того, чтобы в одной локальной сети случайно не получилось 2 одинаковых MAC-адреса. К тому же у маршрутизаторов обычно много сетевых карт, а следовательно и MAC-адресов.
Для того, чтобы связать MAC и IP адреса, они оприходуются протоколом ARP (Протокол разрешения адресов). Взглянем как это происходит.
Запустим GNS3 и слева с панели перетащим на рабочую область Ethernet hub (1 штуку) и VPCS (2 штуки) чтобы их соединить щелкаем по иконки с проводом и протягиваем две линии от компьютеров к хабу. Это аналогично как если бы вы втыкали провода от компьютером в свободные разъемы концентратора. Ну то есть в хабе вы должны втыкать линии в свободные (красные) разъемы. Зеленые - те куда уже воткнуты провода.
Затем нажимаем на зеленую стрелку сверху на панели под оконным меню и тем самым у нас включатся все компьютеры, которые мы перетащили в рабочую область.
Теперь наведя курсор на одну из линий (любую - у нас же хаб) вызовем контекстное меню. Например нажав правую кнопку мыши. Затем выбираем пункт Start capture, появится окно с предложением выбрать порт - нажимаем OK. Это запустит программу отслеживания сетевого трафика Wireshark.
Пока программа нам ничего не показывает, потому что сеть еще не настроена.
Для настройки сети нужно назначить каждому компьютеру свой IP-адрес. Начнем с первого компьютера и дважды по нему щелкнем - откроется консоль (по сути программа Putty). Вводим там ip 0.0.0.1 и нажимаем ENTER. И смотрим в программу Wireshark.
И вот что мы там видим.
Это результат посылки кадров канальным уровнем, а также работа протокола ARP.
Здесь произошло следующее. Когда мы назначили IP адрес первому компьютеру он разослал в сеть запрос самому себе, сделал он это для того чтобы остальные компьютеры в этой сети могли с ним познакомиться - сохранить его адрес IP и MAC к себе в кэш. То есть мы обнаружили, что в локальной сети компьютеры как бы сопоставляют адреса IP, задающиеся сетевым администратором и MAC-адреса сетевых карт. Так как пакеты все равно придется передавать через канальный уровень (Кадры или еще их называют фреймы). А канальный уровень ничего не знает про IP-адреса. Он распознает только MAC-адреса.
Если вы введете в консоли первого компьютера show ip то увидите и ваш заданный ему IP и его MAC заданный на заводе.
Для второго компьютера мы не задавали IP еще. Но попробуем его пропинговать. Например написав в консоли первого компьютера ping 0.0.0.2 -c 1
Тут мы видим, что первый компьютер при помощи протокола ARP рассылает в сеть широковещетельное сообщение с вполне резонным вопросом: "Кто такой: 0.0.0.2?" и говорит еще мол ответь 0.0.0.1-му. Прям как по рации.
Ну естественно никто не признается, так как мы еще ни кому IP такой не задали.
Теперь давайте назначим такой IP второму нашему компьютеру также дважды щелкнув по PC2 и введя ip 0.0.0.2. Он также сперва разошлет по ARP всем компьютерам свой IP (0.0.0.2) и MAC. Тем канальный уровень будет знать на какой адрес сетевой карты посылать кадр, содержащий пакет с таким IP.
Затем вернемся в консоль первого компьютера и попробуем доделать задуманное изначально - пропинговать компьютер с IP 0.0.0.2. Для этого повторим команду ping 0.0.0.2 -c 1
Тут мы видим что пришел ответ. Изначально было что хост недоступен. А теперь написано столько-то байт от 0.0.0.2 Пошли разбираться в Wireshark
Здесь у нас по сети из 2-х наших компьютеров прокатилось уже 4 пакета. 2 по протоколу ARP и 2 по ICMP. Первый, как я уже говорил используется для связи аппаратных и IP адресов внутри локальной сети, а ICMP - это протокол, который используют маршрутизаторы для настройки связи и отлова нештатных ситуаций. По сути ICMP это набор сообщений, который понимают маршрутизаторы, например HELLO рассылается по этому протоколу когда включается новый маршрутизатор в сети, чтобы остальные о нем узнали. Так вот. Команда ping отсылает по протоколу ICMP сообщение "Запрос отклика" Echo request. Его назначение проверить способен ли отвечать хост или маршрутизатор с указанным IP на запросы. По русски - "0.0.0.2, ты живой?"
У компьютеров на сетевом уровне этот протокол также поддерживается. Например, если маршрутизатор захочет перезапросить пакет у хоста или попросит изменить размер передаваемого ему пакета.
И так о чем там в Wireshark речь в нашей ЛВС. На этот раз история повторяется, но поскольку мы настроили IP 0.0.0.2 то ход событий меняется.
Первый компьютер посылает всем компьютерам сети (хотя у нас их всего два, но не важно) по протоколу ARP - "Кто имеет 0.0.0.2" (подразумневая IP-адрес)
Кстати обратили внимание на названия колонок сверху таблицы с пакетами. Сначала идет номер пакета, затем время отсылки, далее источник (отправитель) и приемник (получатель), потом название протокола, длина пакета и специально отформатированная информация о содержании пакета.
Итак, после того как первый разослал по сети "Who has 0.0.0.2?". Ему по тому же протоколу приходит ответ от компьютера с IP 0.0.0.2, и заметьте уже не широковещательным (broadcast), а "личным сообщением". То есть пакет предназначен для сетевой карты с MAC-адресом первого компьютера. Как мы помним он его послал вместе со своим вопросом про IP. Если не верите - разверните внизу вкладку с пакетом ARP.
Как не сложно догадаться второй компьютер отвечая первому, присылает по ARP-у свой MAC-адрес. С этого момента, можно считать, что связь между ними установлена (они нашли друг друга в своей локальной сети).
Чтобы каждый раз не запрашивать MAC-адреса, которые уже были получены по ARP-протоколу, компьютеры их сохраняют в кэше.
После этого по ICMP первый спрашивает второго, сообщением ECHO REQUEST, а второй отвечает, что все хорошо (Иначе бы он просто не ответил, как в первой нашей попытке).
Кстати как вы заметили из Wireshark, во всем вышесказанном протокол IP для пересылки данных мы так и не использовали еще, зато его настроили.
Суть сей басни такова: Для локальных сетей IP адреса компьютерам назначают сетевые администраторы или сами пользователи. Компьютерам в этой сети для пересылки кадров нужны MAC-адреса. Чтобы определить MAC - адрес по заданному IP компьютеры используют протокол ARP.
Во второй части разберем, как IP адреса работают в Интернете.