Рассмотрим простейший пример. Создадим сеть без маршрутизатора из 4х ПК. Чтобы не думать об устройстве коммутатора (свитча), соединим их с помощью концентратора -- были такие древние железки, которые просто отправляли сигнал всем. Сейчас таких не найдешь, но нам сейчас важно понять основы.
Небольшая ремарка, как работает концентратор. Можно пропустить и продлжить читать дальше материал.
[начало ремарки]
Витая пара состоит из пар + и -. В 10 и 100 мегабитных Ethernet из таких 4х пар используется только две. Одна пара используется для передачи информации, вторая для приема. Концентратор -- простая железка, которую можно спаять самостоятельно. Сигнал (красного цвета) отправляется с ввода 1 порта №3 и приходит на ввод 3 портов №2 и №1. Но также этим же сигналом (темно-красный) будет занят и ввод №1 (служащий для передачи) коммутаторов №2 и №1. Поэтому передача при использовании концентратора может быть только полудуплексная (как по рации, по очереди). Более того, мы даже на свой принимающий ввод №3 будем принимать свой же сигнал (фиолетовый).
[конец ремарки]
Самое главное, концентратор (или хаб, hub) отправляет сигнал во все порты, а нам того и надо.
Компьютеры "подпишем" -- вместо их стандартных названий укажем IP-адрес и MAC-адрес.
Айпи-адреса тоже присвоим.
Вот наша схема.
Айпи-адрес мы прописываем в свойствах Config > Interface> FastEthernet0
Например, для 10.0.0.3
В Config>Global прописываем имя
Настройка режима симуляции
Далее мы включим режим Симуляции и выключим все протоколы.
Нажмем кнопку Simulation и далее кнопку Show All/None
Далее нажмем Edit Filters, и выберем ARP и ICMP.
После чего закроем.
Если все правильно сделали, то должно получиться так:
Теперь откроем компьютер 10.0.0.2 и попробуем запинговать 10.0.0.3
Вообще IP-адреса нет
Разберем для начала случай, когда мы забыли присвоить 10.0.0.2 IP-адрес вообще.
Нажимаем Enter и кнопку Play и видим, появился пакет.
Кликаем на IP-пакет и сразу видим, что только уровень 3 и в нем только ICMP.
Если кликнем на Outbound PDU то тоже видим только ICMP
Если пакет сразу удаляется, то нужно посмотреть, а присвоен ли нашему компьютеру адрес? Нашему присвоен.
Пример, когда пакет сразу уничтожается
В консоли тоже не радостно.
Мда.
Проверяем (Desctop > IP Configuration) -- и правда не присвоен.
Что делать? Присваиваем.
Когда IP-адрес присвоили
Повторяем наши действия. Снова симуляция, снова пинг, снова play
Если мы уже ранее что-то отправили, лучше перед этим удалить таблицу сопоставления IP-адресов и MAC-адресов командой arp -d для чистоты эксперимента.
Зачем два пакета?
Итак, в этот раз появилось два пакета.
Кликаем на левый пакет
Видим,что уровень 3 есть, но в нем кроме ICMP есть еще и IP. Понятно, что мы хотим от 10.0.0.2 отправить на 10.0.0.3
Жмем на Outbound PDU.
Видим, что IP-пакет есть, в него вложен ICMP.
Казалось бы, пора отправить? но нет.
Почему? Потому что чтобы отправить IP-пакет, нужно знать, куда его отправить. Да,мы знаем IP-адреса, но мы не знаем какие за этими IP-адресами стоят MAC-адреса.
Поэтому закрываем информацию на левом пакете и кликаем на правый.
Здесь мы видим только уровень 2, в котором мы видим, что от MAC-адреса 0090.215A.29EC мы отправляем на MAC FFFF.FFFF.FFFF. Это широковещательный MAC, то есть буквально "внимание всем".
Посмотрим в Outbound PDU.
Первое что бросается в глаза, кроме всяких не интересных нам заголовков, что сначала идет поле кому (DEST ADDR) и в нем широковещательный адрес, а потом -- поле от кого (SRC ADDR) и там наш MAC -0090.215A.29EC
Вообще MAC адреса похожи на позывные и работают также. Это когда по рации вы говорите ,Первый, я второй ,как слышно. Или внимание всем, я первый, отбой тревоги. Первый, второй это как бы обычные MAC-адреса, а внимание всем -- широковещательный.
Далее мы увидим заголовки ARP-протокола (Address Recolution Prototocol) он нужен буквально чтобы всем задать один и тот же вопрос (какой MAC у 10.0.0.3) и чтобы только один (владелец IP 10.0.0.3) ответил, какой же у него MAC.
Поэтому в полях SOURCE MAC и SOURCE IP мы выставляем наши данные, в поле TARGET IP -- IP для которого мы ищем адрес, а вот TARGET MAC -- все нули. Потому что мы не знаем этот адрес и хотим узнать!
Жмем плей и видим, что IP-пакет был отброшен, а вот ARP-запрос полетел ко всем.
Более того, мы видим, что пакет отвергается теми компьютерами, IP-адрес которых отличается от искомого, и принимается тем, чей совпадает.
А
Он готовит ответ. Он летит обратно и мы можем в него заглянуть
Кликнем на Outbound и увидим подробности
В Ethernet заголовке мы видим, что теперь адресат 0090.2150.29EC -- это 10.0.0.2 и отвечает ему 001.6448.3733. И далее в ARP протоколе видим, что все поля заполнены. Самое главное, что есть SOURCE MAC и содержит искомый MAC-адрес 001.6448.3733
Далее мы увидим, что формируется уже IP-пакет. Нажмем на него.
И нажмем на Outbound PDU
Мы видим что теперь заполнены не только IP и ICMP но и канальный уровен.
Говорится буквально следующее 0001.6448.3733, я 0090.2140.29EC, вот тебе посылка от 10.0.0.2 к 10.0.0.3
Так как мы используем концентратор а не коммутатор, любые сообщения будут отправляться всем.
И здесь мы видим, что интерфейсы, у которых MAC-адрес не совпадает с полем DEST ADDR, будут отбрасывать пакет, а тот интерфейс у кого совпадает -- принимает и отвечает. Это очень похоже на работу нескольких людей по рации.
Третий, я четвертый. Первый, второй, седьмой, десятый, пятый, мятый -- все они проигнорируют мой запрос. Также и сетевые интерфейсы.
Ответы приходят
В другую сеть
А как же, когда сообщение отправляется в другую сеть?
Какой тогда MAC-адрес будет указываться?
Попробуем запинговать 1.1.1.1
Ситуация похожа на тот случай, когда у нас не было IP-адреса на интерфейсе.
Пакет сразу отбрасывается
Чтобы более подробно понять почему, рекомендую мою статью маршрутизация https://dzen.ru/a/Zfx2NbgccxBY1vX7
А пока скажу, что у нас нет адреса шлюза по умолчанию. Все пакеты, которые не принадлежат нашей IP-сети (грубо говоря не имеют вид 10.X.X.X) должны отправиться на адрес шлюза, а у нас его нет.
Потому впишем адрес шлюза
Вписать мало. Нужно его добавить.
И настроить
en
conf t
настроим адрес 10.0.0.1
int fa0/0
ip addr 10.0.0.1 255.0.0.0
no shut
и также настроим адрес, имитирующий Интернет
int lo0
ip addr 1.1.1.1 255.255.255.255
Теперь пробуем отправить пинг на 1.1.1.1
Снова два пакета
Левый
IP есть, ICMP есть, Ethernet с MAC-адресами нет
Правый
Увидели ARP-запрос на IP-адрес роутера
Ротует отвечает
И теперь пакет летит на роутер. Видм что от 10.0.0.2 на 1.1.1.1
Провернем выше окно, и посмотрим на MAC-адреса
Что за 0001.97D8.5702?
А это адрес роутера.
А что будет, если мы не 1.1.1.1 запингуем, а 2.2.2.2
ARP-запрос пока не улетит, так как пока в ARP-таблице есть соответствия IP-адрес MAC-адрес
Легко проверить командой arp -a
Включаем симуляцию и пингуем 2.2.2.2
Пакет сформирован, посмотрим
Все как будто хорошо
Есть и канальный заголовок, и сетевой.
А в Outbound PDU видим -- адресуется на MAC-адрес роутера 0001.97D8.5702 и просит переслать пакет от 10.0.0.2 на 2.2.2.2
Жмем Play и видим, пакет летит до роутера.
А вот роутер не знает, что с этим пакетом делать.
Смотрим внтурь и видим
В поле Ethernet видим что 0090.2151.29EC получает Ethernet-фрейм от 0001.97D8.5702 (т.е. от роутера)
В нем IP-пакет от 10.0.0.1 (от роутера) к 10.0.0.2
В нем ICMP сообщение, тип 0x03 код 0x01 это сообщение означает, что Destination Unreachable.
И внутри ICMP содержится заголовок IP-сообщения, которое не смогли доставить (от 10.0.0.2 до 2.2.2.2)
В консоли мы видим ответы на пинг, что Destination host unreachable.
То есть в данном случае маршрутизатор не знает, куда отправить дальше. Ни на нем этого адреса нет. Ни маршрута далее к этому адресу нет.
Так что далее рекомендую мою статью маршрутизация https://dzen.ru/a/Zfx2NbgccxBY1vX7
Подписывайтесь на мой канал https://dzen.ru/olinux
и читайте заметки о неочевидных моментах в работе GNU/Linux и сетевых протоколов.
Всегда с вами,
Сергей Кручинин,
преподаватель GNU/Linux
и компьютерных сетей