Разберём типовую ситуацию: приложение «плавает» по скорости, задержки нормальные, потерь нет, а throughput падает.
Часто причина, что ECN по пути работает неправильно: биты стираются, игнорируются или не ставится CE при перегрузке.
ECN (Explicit Congestion Notification) - это механизм сигнализации о перегрузке без дропа.
Если одно устройство ломает поле DSCP/ECN, TCP начинает откатывать скорость так, будто сеть нестабильна.
Чтобы ECN работал корректно, нужно:
Если один элемент цепочки «портит» поле ToS — ECN фактически отключён.
Практика на Cisco:
show policy-map interface Gi1/0/1
Если видим set dscp … → ECN скорее всего теряется.
show policy-map interface Gi1/0/1 | i ECN|marked
CE-marking должен расти при нагрузке. Ноль - значит CE не ставится.
monitor capture ...
tcpdump ip[1] & 0x03 != 0
ECT0/ECT1/CE должны присутствовать. Если исчезают — кто-то чистит ToS.
show platform hardware qfp active statistics drop | i ECN
Если есть дропы ECN - проблема внутри платформы или ASIC.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Ловим «ломаный» QoS по DSCP
Бывает так: сеть чистая, задержки нормальные, потерь нет - а приложения вдруг притормаживают.
Часто проблема не в каналах, а в том, что DSCP меняется там, где никто не планировал.
В итоге QoS работает “криво”, а трафик оказывается в неверном классе.
QoS по DSCP держится на трёх вещах:
⏺ Правильный trust на портах (где мы доверяем меткам)
⏺ Классификация, соответствующая реальному трафику
⏺ Политики, которые не перетирают DSCP по пути
Если одно звено даёт сбой - весь QoS превращается в best-effort.
Проверяем trust на интерфейсе:
Если trust отсутствует → DSCP переписывается на входе.
Смотрим, что делает политика QoS:
Нежелательный сигнал: set dscp default или любое фиксированное значение.
Проверяем, куда реально попадает трафик:
Если приложение идёт в class-default → классификация сломана.
Сверяем DSCP на входе/выходе:
Если метка меняется по пути - виновник найден.
N.A.
Бывает так: сеть чистая, задержки нормальные, потерь нет - а приложения вдруг притормаживают.
Часто проблема не в каналах, а в том, что DSCP меняется там, где никто не планировал.
В итоге QoS работает “криво”, а трафик оказывается в неверном классе.
QoS по DSCP держится на трёх вещах:
Если одно звено даёт сбой - весь QoS превращается в best-effort.
Проверяем trust на интерфейсе:
show mls qos interface Gi1/0/1
Если trust отсутствует → DSCP переписывается на входе.
Смотрим, что делает политика QoS:
show policy-map interface Gi1/0/1
Нежелательный сигнал: set dscp default или любое фиксированное значение.
Проверяем, куда реально попадает трафик:
show policy-map interface Gi1/0/1 | i match|packets
Если приложение идёт в class-default → классификация сломана.
Сверяем DSCP на входе/выходе:
monitor capture ...
Если метка меняется по пути - виновник найден.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2❤1
Как вычислить сломанный FIB/CEF на магистрали
В реальности сбоит CEF/FIB, когда ASIC-программирование нарушено, есть баг платформы, переполнение adjacency, или MPLS label stack формируется неправильно.
CEF ломается тихо: маршруты в RIB корректны, но forwarding - нет.
На что смотреть: корректность adjacency, наличие glean-энтри, переполнение таблиц, несовпадение RIB/FIB, MPLS labels и программирование hardware-ASIC.
Проверяем конкретный префикс в FIB:
Признаки проблемы: incomplete, glean, unexpected next-hop, adjacency punted в CPU.
Проверяем, как выглядит hardware FIB:
Если entry отсутствует или отличается от CEF - ошибка ASIC программирования.
Проверяем MPLS label stack:
Неверный out-label или отсутствие LFIB записи приводит к silent-drop.
Проверяем consistency между RIB/CEF/FIB:
Если есть mismatch - проблема не в маршрутах, а в forwarding plane.
N.A.
Сложные сетевые проблемы часто выглядят как «плавающие» потери или нестабильный RTT, хотя маршрутизация на уровне RIB выглядит идеально.
В реальности сбоит CEF/FIB, когда ASIC-программирование нарушено, есть баг платформы, переполнение adjacency, или MPLS label stack формируется неправильно.
CEF ломается тихо: маршруты в RIB корректны, но forwarding - нет.
На что смотреть: корректность adjacency, наличие glean-энтри, переполнение таблиц, несовпадение RIB/FIB, MPLS labels и программирование hardware-ASIC.
Проверяем конкретный префикс в FIB:
show ip cef 10.20.50.1 detail
Признаки проблемы: incomplete, glean, unexpected next-hop, adjacency punted в CPU.
Проверяем, как выглядит hardware FIB:
show platform hardware qfp active forwarding ip route
Если entry отсутствует или отличается от CEF - ошибка ASIC программирования.
Проверяем MPLS label stack:
show mpls forwarding-table 10.20.50.1
Неверный out-label или отсутствие LFIB записи приводит к silent-drop.
Проверяем consistency между RIB/CEF/FIB:
show tech cef consistency
Если есть mismatch - проблема не в маршрутах, а в forwarding plane.
N.A.
👍6🔥1
Как найти порты с неправильными Storm Control-лимитами
Иногда Storm Control включён, но лимиты выставлены слишком жёстко - и коммутатор начинает резать обычный трафик как «шторм».
Типичный признак - порты рандомно падают в suppression, появляются жалобы на «плавающий» доступ, особенно в сетях с VoIP, камерой или IoT.
Важно понять две вещи:
⏺ где включён Storm Control,
⏺ и не слишком ли низкий порог стоит для конкретного трафика.
1️⃣ Проверяем текущее состояние лимитов:
Если по порту suppression счётчик растёт — порог занижен.
2️⃣ Смотрим конфигурацию интерфейса:
Обрати внимание на kbit/s или процент - именно они определяют, как быстро порт будет уходить в ограничение.
3️⃣ Проверяем, были ли события suppression:
Если suppression last occurred недавно - лимит стоит пересматривать.
4️⃣ Через SNMP можно вытянуть статистику по всем портам:
OID Cisco Storm-Control вернёт counters broadcast/multicast/unicast для каждого порта, что удобно для массового анализа.
N.A.
Иногда Storm Control включён, но лимиты выставлены слишком жёстко - и коммутатор начинает резать обычный трафик как «шторм».
Типичный признак - порты рандомно падают в suppression, появляются жалобы на «плавающий» доступ, особенно в сетях с VoIP, камерой или IoT.
Важно понять две вещи:
show storm-control
Если по порту suppression счётчик растёт — порог занижен.
show running-config interface Gi1/0/10 | include storm
Обрати внимание на kbit/s или процент - именно они определяют, как быстро порт будет уходить в ограничение.
show storm-control interface Gi1/0/10Если suppression last occurred недавно - лимит стоит пересматривать.
snmpwalk -v3 -u user -l authPriv -a SHA -A authpass -x AES -X privpass <switch> .1.3.6.1.4.1.9.9.187
OID Cisco Storm-Control вернёт counters broadcast/multicast/unicast для каждого порта, что удобно для массового анализа.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
Иногда трафик вроде классифицирован правильно, но на пиках появляются задержки или пакеты «теряются» без видимых drop’ов.
Причина часто в неправильно настроенном shaping или drift token-bucket - hardware ограничивает throughput неравномерно, либо буфер переполняется.
Важно понимать, что QoS работает только если shaping и token-bucket настроены согласованно по всей цепочке.
show policy-map interface Gi1/0/1
Ищем drops, match, transmitted packets и rate-limits.
show queueing interface Gi1/0/1
Если токены расходуются быстрее, чем refill → пиковый трафик режется.
show platform hardware qfp active statistics drop
Если есть drop на ASIC — shaping реально ограничивает throughput, возможно, неправильно выставлен burst.
monitor capture ...
Сравниваем пиковый traffic с лимитами QoS. Если падает на microburst — лимит слишком жёсткий или token-bucket «дрейфует».
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Как найти «утекающий» DHCP‑трафик
Когда клиенты жалуются, что «IP не выдаётся», причина часто не в сервере, а в том, что DHCP broadcast где‑то теряется по пути. Это трудно заметить, потому что обычный трафик при этом работает.
Вот короткая схема проверки:
1️⃣ Проверяем Snooping
Если включён DHCP Snooping, он может блокировать сервер или relay на недоверенном порту.
Если сервер сидит на untrusted‑порту - DISCOVER не проходит.
2️⃣ Ищем зону, где режется broadcast
Storm Control, ACL или неправильные VLAN могут «убивать» DHCP‑кадры.
Если на порту агрессивный storm‑control или ACL с deny udp 67/68 - пакеты не доходят.
3️⃣ Проверяем Relay (IP Helper): Если используется relay, проверяем, что он настроен на правильный сервер.
Если ip helper указывает на старый/неправильный адрес - OFFER/ACK «теряются».
4️⃣ Смотрим счётчики на интерфейсах: На некоторых портах могут быть drops именно по L2 broadcast.
Если broadcast-drops растут - DHCP Discover там «тонет».
5️⃣ Тестируем вручную
На Linux:
Если DISCOVER уходит, а OFFER не приходит - проблема выше по цепочке.
N.A.
Когда клиенты жалуются, что «IP не выдаётся», причина часто не в сервере, а в том, что DHCP broadcast где‑то теряется по пути. Это трудно заметить, потому что обычный трафик при этом работает.
Вот короткая схема проверки:
Если включён DHCP Snooping, он может блокировать сервер или relay на недоверенном порту.
show ip dhcp snooping
show ip dhcp snooping binding
Если сервер сидит на untrusted‑порту - DISCOVER не проходит.
Storm Control, ACL или неправильные VLAN могут «убивать» DHCP‑кадры.
show storm-control
show vlan brief
show access-lists
Если на порту агрессивный storm‑control или ACL с deny udp 67/68 - пакеты не доходят.
show running-config interface <uplink>
Если ip helper указывает на старый/неправильный адрес - OFFER/ACK «теряются».
show interface Gi1/0/15 counters
Если broadcast-drops растут - DHCP Discover там «тонет».
На Linux:
tcpdump -ni eth0 port 67 or port 68
Если DISCOVER уходит, а OFFER не приходит - проблема выше по цепочке.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Как вычислить «молчаливый» ARP-флуд в сети
Даже если обычный трафик нормальный, сеть может испытывать проблемы из-за частого повторного ARP-запроса, который почти не виден в интерфейсных counters, но забивает CPU коммутатора или broadcast-домен.
Особенно важно для IoT, камер и массовых DHCP-сетей.
Проверим👇
1️⃣ Счётчики ARP на коммутаторе
Если количество ARP-запросов растёт неравномерно - возможен флуд.
2️⃣ Логи и события ARP
Ищем «arp request rate» или warnings от CPU.
3️⃣ Сетевой capture
На Linux или коммутаторе с capture:
Смотрим частоту ARP-запросов. Если сотни/тысячи в секунду - это перегрузка.
4️⃣ Проверяем защиту
На Cisco можно включить ARP Inspection/Snooping, чтобы ограничить flood:
N.A.
Даже если обычный трафик нормальный, сеть может испытывать проблемы из-за частого повторного ARP-запроса, который почти не виден в интерфейсных counters, но забивает CPU коммутатора или broadcast-домен.
Особенно важно для IoT, камер и массовых DHCP-сетей.
Проверим
show ip arp summary
show interfaces Gi1/0/10 counters
Если количество ARP-запросов растёт неравномерно - возможен флуд.
show logging | include ARP
Ищем «arp request rate» или warnings от CPU.
На Linux или коммутаторе с capture:
tcpdump -nn -i eth0 arp
Смотрим частоту ARP-запросов. Если сотни/тысячи в секунду - это перегрузка.
На Cisco можно включить ARP Inspection/Snooping, чтобы ограничить flood:
show ip arp inspection
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👎1
Что происходит при ping 127.0.0.1: путь ICMP-пакета в loopback
ping
Пакет проходит через iptables/netfilter и может быть отброшен или модифицирован (например, логгирован или помечен). Если политика DROP — ICMP даже на localhost не дойдет.
Ядро направляет пакет в loopback-интерфейс lo, где он сразу попадает обратно в приемный путь — физически никуда не выходит.
Приемный стек получает ICMP Echo Request и отправляет в ответ Echo Reply — снова через loopback.
Как можно сломать
Отключен интерфейс lo: ifconfig lo down — ping не будет работать, хотя кажется, что это локальный вызов.
ICMP фильтруется iptables -A INPUT -p icmp -j DROP — даже пинг 127.0.0.1 будет теряться.
Полезные команды для диагностики
N.A.
ping
127.0.0.1 кажется банальной вещью, но под капотом — полноценный сетевой стек. Вот что происходит по шагам:Сначала утилита ping создает RAW-сокет и формирует ICMP Echo Request. Пакет получает IP-адрес источника 127.0.0.1 и тот же адрес в качестве получателя.
Пакет проходит через iptables/netfilter и может быть отброшен или модифицирован (например, логгирован или помечен). Если политика DROP — ICMP даже на localhost не дойдет.
Ядро направляет пакет в loopback-интерфейс lo, где он сразу попадает обратно в приемный путь — физически никуда не выходит.
Приемный стек получает ICMP Echo Request и отправляет в ответ Echo Reply — снова через loopback.
Утилита ping ловит Echo Reply и выводит строку с временем RTT, даже если интерфейс lo отключен — это чисто внутренняя маршрутизация.
Как можно сломать
Отключен интерфейс lo: ifconfig lo down — ping не будет работать, хотя кажется, что это локальный вызов.
ICMP фильтруется iptables -A INPUT -p icmp -j DROP — даже пинг 127.0.0.1 будет теряться.
Сломана маршрутизация: удалена запись 127.0.0.0/8 dev lo — пакеты просто не найдут путь.
Полезные команды для диагностики
ip route get 127.0.0.1 — какая таблица маршрутов применяетсяiptables -L -v -n — проверка, не режется ли ICMPtcpdump -i lo icmp — убедиться, что пакеты доходятss -npi — посмотреть, что происходит с сокетомN.A.
1👍14❤4
Ping внешнего IP: что происходит с ICMP-пакетом
На первый взгляд ping
Шаги прохождения пакета:
1️⃣ Формирование пакета
Ping создаёт ICMP Echo Request через RAW-сокет. Источник - твой IP, цель - 8.8.8.8.
2️⃣ Локальный стек
Пакет проходит через iptables/netfilter. Если политика DROP - даже локально он не уйдёт.
3️⃣ Маршрутизация
Ядро выбирает интерфейс и next-hop для внешнего IP. NAT может поменять исходный адрес.
4️⃣ Физический путь
Пакет выходит на интерфейс, проходит коммутаторы и маршрутизаторы. TTL уменьшается на каждом hop.
5️⃣ Удалённый узел
Echo Reply создаётся на хосте и идёт обратно по пути, определённому его routing table.
6️⃣ Возврат и RTT
Пакет возвращается, ping фиксирует RTT и выводит результат.
Что может сломать ping:
Пинг может не работать, если на локальной машине или по пути к цели блокируют ICMP пакеты (firewall/ACL), отсутствует маршрут к внешнему IP, некорректно настроен NAT, или TTL пакета слишком мал, чтобы достичь удалённого узла.
Полезные команды:
N.A.
На первый взгляд ping
8.8.8.8 прост, но под капотом - целый путь через стек и сеть.Шаги прохождения пакета:
Ping создаёт ICMP Echo Request через RAW-сокет. Источник - твой IP, цель - 8.8.8.8.
Пакет проходит через iptables/netfilter. Если политика DROP - даже локально он не уйдёт.
Ядро выбирает интерфейс и next-hop для внешнего IP. NAT может поменять исходный адрес.
Пакет выходит на интерфейс, проходит коммутаторы и маршрутизаторы. TTL уменьшается на каждом hop.
Echo Reply создаётся на хосте и идёт обратно по пути, определённому его routing table.
Пакет возвращается, ping фиксирует RTT и выводит результат.
Что может сломать ping:
Пинг может не работать, если на локальной машине или по пути к цели блокируют ICMP пакеты (firewall/ACL), отсутствует маршрут к внешнему IP, некорректно настроен NAT, или TTL пакета слишком мал, чтобы достичь удалённого узла.
Полезные команды:
traceroute 8.8.8.8
tcpdump -i eth0 icmp
iptables -L -v -n
ip route get 8.8.8.8
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤝2
Как проверить, что BGP-маршрут анонсируется, но не используется
Ситуация классическая: префикс в BGP есть, а трафик упорно идёт другим путём.
Почти всегда причина - не в самом анонсе, а в выборе best path или в том, как маршрут попал (или не попал) в RIB/FIB.
1️⃣ Проверяем, что маршрут вообще пришёл по BGP
Сначала убеждаемся, что апстрим реально его отдал.
Cisco:
Важно смотреть:
• есть ли несколько путей
• какой помечен как *> (best)
Если маршрута нет, дальше можно не копать.
2️⃣ Сравниваем BGP vs routing table
Маршрут может быть в BGP, но не установлен в основную таблицу.
Если вместо BGP стоит: static, OSPF или connected, то BGP просто проиграл по административной дистанции.
Смотрим атрибуты best path
Часто маршрут есть, но проигрывает по атрибутам.
Обращаем внимание на:
⏺ Local Preference (самая частая причина)
⏺ AS_PATH (длиннее — хуже)
⏺ MED
⏺ Weight (Cisco)
Даже разница в LocalPref 100 vs 200 полностью меняет путь.
4️⃣ Проверяем policy: route-map / filter
Маршрут может быть принят, но «искажён» политикой.
Иногда route-map не режет маршрут, но меняет LocalPref или MED.
5️⃣ Проверяем CEF / FIB
Бывает, BGP и RIB ок, а в forwarding таблице другое.
Если next-hop не тот, что ожидается — проблема на этапе установки в FIB.
N.A.
Ситуация классическая: префикс в BGP есть, а трафик упорно идёт другим путём.
Почти всегда причина - не в самом анонсе, а в выборе best path или в том, как маршрут попал (или не попал) в RIB/FIB.
Сначала убеждаемся, что апстрим реально его отдал.
Cisco:
show ip bgp <prefix>
Важно смотреть:
• есть ли несколько путей
• какой помечен как *> (best)
Если маршрута нет, дальше можно не копать.
Маршрут может быть в BGP, но не установлен в основную таблицу.
show ip route <prefix>
Если вместо BGP стоит: static, OSPF или connected, то BGP просто проиграл по административной дистанции.
Смотрим атрибуты best path
Часто маршрут есть, но проигрывает по атрибутам.
show ip bgp <prefix>
Обращаем внимание на:
Даже разница в LocalPref 100 vs 200 полностью меняет путь.
Маршрут может быть принят, но «искажён» политикой.
show run | section route-map
show ip bgp neighbors <IP> received-routes
Иногда route-map не режет маршрут, но меняет LocalPref или MED.
Бывает, BGP и RIB ок, а в forwarding таблице другое.
show ip cef <prefix>
Если next-hop не тот, что ожидается — проблема на этапе установки в FIB.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Эмуляция RPL-сети на Linux через Docker Compose
Цель — поднять небольшую IoT-сеть с 5 узлами, построить DAG и проверить маршрутизацию.
Docker Compose конфигурация
Создаём файл docker-compose.yml:
Каждому контейнеру нужен privileged: true для работы с сетевыми интерфейсами.
Настройка виртуальных интерфейсов внутри контейнеров
Заходим в каждый контейнер и создаём veth-пары для имитации соседних узлов:
Можно автоматизировать для всех 5 узлов, чтобы получить полносвязную топологию.
Запуск RPL демона
На корневом узле (например, rpl-node1):
На остальных узлах:
-r на корне DAG, остальные просто присоединяются.
Проверка DAG и reachability
Можно менять порядок включения узлов, поднимать и опускать интерфейсы, чтобы увидеть автоматическое перестроение DAG.
N.A.
Цель — поднять небольшую IoT-сеть с 5 узлами, построить DAG и проверить маршрутизацию.
Docker Compose конфигурация
Создаём файл docker-compose.yml:
version: '3.9'
services:
rpl-node1:
image: ubuntu:22.04
container_name: rpl-node1
privileged: true
network_mode: "bridge"
command: bash -c "apt update && apt install -y iproute2 iputils-ping rpl-tools && sleep infinity"
rpl-node2:
image: ubuntu:22.04
container_name: rpl-node2
privileged: true
network_mode: "bridge"
command: bash -c "apt update && apt install -y iproute2 iputils-ping rpl-tools && sleep infinity"
rpl-node3:
image: ubuntu:22.04
container_name: rpl-node3
privileged: true
network_mode: "bridge"
command: bash -c "apt update && apt install -y iproute2 iputils-ping rpl-tools && sleep infinity"
rpl-node4:
image: ubuntu:22.04
container_name: rpl-node4
privileged: true
network_mode: "bridge"
command: bash -c "apt update && apt install -y iproute2 iputils-ping rpl-tools && sleep infinity"
rpl-node5:
image: ubuntu:22.04
container_name: rpl-node5
privileged: true
network_mode: "bridge"
command: bash -c "apt update && apt install -y iproute2 iputils-ping rpl-tools && sleep infinity"
Каждому контейнеру нужен privileged: true для работы с сетевыми интерфейсами.
Настройка виртуальных интерфейсов внутри контейнеров
Заходим в каждый контейнер и создаём veth-пары для имитации соседних узлов:
ip link add veth1 type veth peer name veth1-peer
ip addr add 2001:db8:1::1/64 dev veth1
ip link set veth1 up
ip link set veth1-peer netns <container> # подключаем к соседнему контейнеру
Можно автоматизировать для всех 5 узлов, чтобы получить полносвязную топологию.
Запуск RPL демона
На корневом узле (например, rpl-node1):
rpld -i veth1 -r
rpld -i veth2
rpld -i veth3
rpld -i veth4
На остальных узлах:
rpld -i veth1
rpld -i veth2
-r на корне DAG, остальные просто присоединяются.
Проверка DAG и reachability
rplctl -i veth1 show
ping6 2001:db8:1::2 -I veth1
Можно менять порядок включения узлов, поднимать и опускать интерфейсы, чтобы увидеть автоматическое перестроение DAG.
N.A.
👍10❤1
Документирование сети кажется рутинной задачей, но на практике - это ключ к быстрому восстановлению, анализу и масштабированию. Вот как делать это по шагам.
Фиксируем все устройства, IP, VLAN, интерфейсы и протоколы маршрутизации.
Команды:
ip addr show # список интерфейсов
ip route show # таблица маршрутов
vtysh -c "show running-config" # конфиги роутеров
show vlan brief # VLAN на коммутаторах
Пример таблицы IP:
Устройство | Интерфейс | IP | VLAN | Примечание
-----------|-----------|--------------|------|------------
r1 | eth0 | 10.0.1.1/24 | 10 | WAN
sw1 | vlan10 | 10.0.1.2/24 | 10 | серверная зона
sw2 | vlan20 | 10.0.2.1/24 | 20 | офисная зона
server1 | eth1 | 10.0.1.10/24 | 10 | база данных
server2 | eth1 | 10.0.1.11/24 | 10 | веб-сервер
git init
git add configs/
git commit -m "Добавлен новый VLAN 20 на sw2"
Пример Mermaid:
graph TD
R1 --> SW1
SW1 --> Server1
SW1 --> Server2
Полезные команды для контроля
git log --oneline --graph # история изменений
diff old_config new_config # что изменилось
ping 10.0.1.2 # проверить доступность после изменений
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤2
ICMP: тестируем не только ping
Что можно делать:
⏺ Traceroute через ICMP помогает локализовать узкие места: задержки, потерю пакетов и переполненные маршрутизаторы.
⏺ Даже если ping запрещён firewall, ICMP показывает, какие пакеты проходят, а какие блокируются.
⏺ Анализ ICMP Time Exceeded и Destination Unreachable помогает понять поведение маршрутизаторов и Path MTU.
Как проверить:
Как можно сломать:
➖ Firewall блокирует все ICMP → даже ping до localhost не покажет проблем маршрутизации.
➖ MTU mismatches → пакеты теряются, но стандартный ping не всегда это показывает.
➖ Неправильная маршрутизация → ICMP показывает только, что узел недоступен, но не где именно.
N.A.
На первый взгляд ping кажется простой командой, но ICMP - полноценный инструмент для диагностики сети и анализа маршрутов.
Что можно делать:
Как проверить:
# Traceroute через ICMP
traceroute -I 8.8.8.8
# Ping с разным TTL
ping -t 10 -c 5 8.8.8.8
# Проверка Path MTU
ping -M do -s 1472 8.8.8.8
Как можно сломать:
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
BFD vs OAM: мониторинг линка
✅ BFD (Bidirectional Forwarding Detection) и OAM (Operations, Administration, Maintenance) выглядят похоже, оба следят за состоянием канала, но работают по разному и для разных целей.
Если OSPF или BGP видят потерю маршрута за миллисекунды, трафик сразу переключается на резерв. Это незаменимо, когда важна скорость реакции сети и минимальные простои.
⏺ OAM проверяет качество канала глубже. Он измеряет задержки, jitter, потери пакетов и целостность цепочки, не вмешиваясь в маршрутизацию.
OAM полезен для Ethernet, MPLS и сервисных линков, когда важно понять, почему соединение работает медленно или нестабильно.
Примеры. BFD на FRR:
OAM на Ethernet:
Суть в том, что BFD следит за «живостью» маршрутов, мгновенно подсказывая, что линк упал, а OAM позволяет увидеть качество канала, измерить реальные параметры передачи и понять, где появляются задержки или потери.
N.A.
BFD мгновенно реагирует на падение соседнего узла.
Если OSPF или BGP видят потерю маршрута за миллисекунды, трафик сразу переключается на резерв. Это незаменимо, когда важна скорость реакции сети и минимальные простои.
OAM полезен для Ethernet, MPLS и сервисных линков, когда важно понять, почему соединение работает медленно или нестабильно.
Примеры. BFD на FRR:
bfd
peer 10.0.0.2
minimum-interval 300
detection-multiplier 3
OAM на Ethernet:
ethtool -S eth0
Суть в том, что BFD следит за «живостью» маршрутов, мгновенно подсказывая, что линк упал, а OAM позволяет увидеть качество канала, измерить реальные параметры передачи и понять, где появляются задержки или потери.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁23😨5
Почему сеть сложнее приложений?
Обычно страдает один сервис, и то временно.
✋ С сетью так не получается. Она общая для всех. Один неудачный маршрут, ACL или изменение MTU - и сразу начинают сыпаться десятки сервисов, которые между собой вообще никак не связаны.
⏺ Вот обычный пример: добавили «временное» firewall-правило или поменяли порядок ACL. Вроде бы для одного сервиса. Через час перестаёт работать авторизация, потом отваливается мониторинг, а позже выясняется, что часть трафика пошла асимметрично и stateful firewall начал резать ответы.
⏺ Или другой кейс - поменяли MTU на одном сегменте. Ping ходит, интерфейсы up, но крупные TCP-сессии рвутся, VPN начинает вести себя странно, а приложение выглядит «нестабильным», хотя с ним ничего не делали.
Любое изменение требует понимания, куда реально пойдёт трафик, кто от этого зависит и как быстро вернуть всё назад, если что-то пошло не так.
N.A.
Приложение можно уронить и поднять обратно. В худшем случае - откатить релиз или перезапустить контейнер.
Обычно страдает один сервис, и то временно.
Поэтому сеть не любит эксперименты в продакшене. Здесь нельзя просто «задеплоить и посмотреть».
Любое изменение требует понимания, куда реально пойдёт трафик, кто от этого зависит и как быстро вернуть всё назад, если что-то пошло не так.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👌5
Когда L2-ошибка страшнее L3
L3 ломается громко и понятно. Нет маршрута - трафик не идёт. traceroute обрывается, логика очевидна: ищем, где потерялся next hop.
Петля в сети, флапающий порт или неправильный STP priority не отключают сервис сразу, а медленно разрушают всё вокруг.
⏺ Классический пример - L2-петля. Один лишний кабель или неправильно настроенный trunk, STP не сработал или был выключен «временно». В результате бродкаст и unknown unicast начинают размножаться, CPU на коммутаторах улетает в 100%, ARP-таблицы постоянно меняются. Сервисы вроде бы живы, но соединения рвутся, задержки скачут, пользователи жалуются на «рандом».
⏺ Другой кейс - MAC-flapping. Один и тот же MAC адрес прыгает между портами. Для L3 всё выглядит нормально, IP есть, маршруты на месте. А на самом деле кадры ходят туда-сюда, сессии TCP рвутся, а причина скрыта глубоко на втором уровне.
🔥 Поэтому L2-ошибки опасны не масштабом, а коварством. Они не выключают сеть сразу, а превращают её в нестабильную среду, где всё вроде бы работает, но ничего не работает надёжно.
N.A.
L3 ломается громко и понятно. Нет маршрута - трафик не идёт. traceroute обрывается, логика очевидна: ищем, где потерялся next hop.
L2 ведёт себя иначе. Ошибка может существовать долго и выглядеть как «плавающая» проблема.
Петля в сети, флапающий порт или неправильный STP priority не отключают сервис сразу, а медленно разрушают всё вокруг.
Ещё хуже, когда проблема затрагивает control-plane. STP пересчитывается слишком часто, порты то блокируются, то открываются, и сеть сама себя дестабилизирует. Это выглядит как деградация приложений, хотя корень проблемы — обычный L2.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🎄5🤔1🤩1
Зачем ограничивать MAC-адреса на порту, если есть VLAN
VLAN изолирует трафик, но никак не ограничивает количество устройств за портом.
⏺ Типовой сценарий - под столом появляется неуправляемый свитч. Всё продолжает «работать», но на один порт внезапно приходит много MAC-адресов. CAM-таблица начинает активно обновляться, часть трафика уходит в unknown unicast, появляются задержки и странные обрывы сессий.
Port security нужен, чтобы зафиксировать ожидания от порта: здесь должно быть одно устройство или, максимум, телефон + ПК. Всё остальное — не штатная ситуация.
Как это выглядит в конфигурации (Cisco-подобный синтаксис):
Здесь порт примет максимум два MAC-адреса и запомнит их автоматически. При появлении третьего - трафик будет резаться и логироваться, без мгновенного падения порта.
Если нужен жёсткий вариант:
Порт уйдёт в err-disable при нарушении. Полезно там, где точно не должно быть никаких сюрпризов.
Проверка состояния:
N.A.
VLAN изолирует трафик, но никак не ограничивает количество устройств за портом.
Для коммутатора access-порт по умолчанию готов принять десятки MAC-адресов, если они в одном VLAN.
Port security нужен, чтобы зафиксировать ожидания от порта: здесь должно быть одно устройство или, максимум, телефон + ПК. Всё остальное — не штатная ситуация.
Как это выглядит в конфигурации (Cisco-подобный синтаксис):
interface GigabitEthernet1/0/10
switchport mode access
switchport access vlan 20
switchport port-security
switchport port-security maximum 2
switchport port-security violation restrict
switchport port-security mac-address sticky
Здесь порт примет максимум два MAC-адреса и запомнит их автоматически. При появлении третьего - трафик будет резаться и логироваться, без мгновенного падения порта.
Если нужен жёсткий вариант:
switchport port-security violation shutdown
Порт уйдёт в err-disable при нарушении. Полезно там, где точно не должно быть никаких сюрпризов.
Проверка состояния:
show port-security interface Gi1/0/10
show mac address-table interface Gi1/0/10
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤3
Почему ACL лучше писать длиннее, но понятнее
Одно правило с кучей wildcard вроде «разрешить всё, кроме…» потом трудно проверить. Часто думаешь, что всё нормально, а в реальности блокируются нужные сервисы или остаются дыры.
⏺ Длинный ACL читается как карта: каждое правило понятно, есть комментарий, сразу видно, кто и что может. Менять его проще, отлаживать проще, а шанс случайно сломать сеть падает к нулю.
Пример на Cisco:
Теперь ACL сам объясняет, что делает. Добавлять новые сервисы или проверять старые проще, а коллега через месяц сразу поймёт, что и зачем разрешено.
N.A.
Короткий ACL выглядит красиво и экономит строки, но на практике это почти всегда ловушка.
Одно правило с кучей wildcard вроде «разрешить всё, кроме…» потом трудно проверить. Часто думаешь, что всё нормально, а в реальности блокируются нужные сервисы или остаются дыры.
Пример на Cisco:
! Короткое ACL — вроде работает, но что именно разрешено?
access-list 101 permit tcp any any eq 80
access-list 101 permit tcp any any eq 443
access-list 101 permit udp any any range 5000 6000
! Длинное ACL — сразу понятно, для чего каждая строка
! Веб-трафик
access-list 101 permit tcp any any eq 80 comment Web HTTP
access-list 101 permit tcp any any eq 443 comment Web HTTPS
! UDP для приложений
access-list 101 permit udp any any range 5000 6000 comment App UDP
Теперь ACL сам объясняет, что делает. Добавлять новые сервисы или проверять старые проще, а коллега через месяц сразу поймёт, что и зачем разрешено.
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👎4❤3😁1
Зачем на транках отключать DTP, даже если соседи свои
DTP хорош, пока сеть маленькая и все помнят, что где включено.
Обычно это выглядит так: линк up, VLAN’ы «вроде» работают, но где-то появляется лишний трафик, а потом выясняется, что порт сам договорился не о том режиме. Формально никто ничего не ломал.
Проще сразу зафиксировать поведение порта и не надеяться на автодоговорённости.
Здесь порт всегда trunk и только с нужными VLAN. Никаких сюрпризов от соседнего устройства.
Для access-портов логика та же:
Даже если на другом конце кто-то случайно включит trunk, порт не «переобуется» сам.
Проверка простая:
Меньше автоматики - меньше неочевидных проблем. В сетях это почти всегда плюс.
N.A.
DTP хорош, пока сеть маленькая и все помнят, что где включено.
В реальной жизни это редкость. Достаточно один раз перепутать порт или скопировать конфиг - и access внезапно начинает вести себя как trunk.
Обычно это выглядит так: линк up, VLAN’ы «вроде» работают, но где-то появляется лишний трафик, а потом выясняется, что порт сам договорился не о том режиме. Формально никто ничего не ломал.
Проще сразу зафиксировать поведение порта и не надеяться на автодоговорённости.
interface GigabitEthernet1/0/24
switchport mode trunk
switchport trunk allowed vlan 10,20,30
switchport nonegotiate
Здесь порт всегда trunk и только с нужными VLAN. Никаких сюрпризов от соседнего устройства.
Для access-портов логика та же:
interface GigabitEthernet1/0/10
switchport mode access
switchport access vlan 20
switchport nonegotiate
Даже если на другом конце кто-то случайно включит trunk, порт не «переобуется» сам.
Проверка простая:
show interfaces Gi1/0/24 switchport
Меньше автоматики - меньше неочевидных проблем. В сетях это почти всегда плюс.
N.A.
👍20
Почему лучше явно задавать STP root, а не оставлять «по умолчанию»
Типичная ситуация: заменили коммутатор, обновили прошивку или просто перезагрузили часть сети.
⏺ У нового устройства оказался ниже BID - и root bridge тихо переехал. STP пересчитался, часть портов ушла в blocking, а трафик пошёл по менее удачному пути.
Снаружи это выглядит как деградация сервисов. Увеличились задержки, появились таймауты, где-то просел throughput. Маршруты есть, линков хватает, но сеть стала «чуть медленнее», и искать начинают в приложениях.
Явно заданный root фиксирует логику сети. Вы заранее решаете, где должна сходиться L2-топология и через какие устройства идти основной трафик. Любые изменения в сети тогда либо не влияют на STP, либо сразу заметны.
Пример на Cisco:
Или проще:
Проверка:
N.A.
Когда STP root не задан, сеть выбирает его сама - по наименьшему BID. Пока топология не меняется, всё выглядит стабильно и «работает». Проблемы начинаются в момент изменений.
Типичная ситуация: заменили коммутатор, обновили прошивку или просто перезагрузили часть сети.
Снаружи это выглядит как деградация сервисов. Увеличились задержки, появились таймауты, где-то просел throughput. Маршруты есть, линков хватает, но сеть стала «чуть медленнее», и искать начинают в приложениях.
Явно заданный root фиксирует логику сети. Вы заранее решаете, где должна сходиться L2-топология и через какие устройства идти основной трафик. Любые изменения в сети тогда либо не влияют на STP, либо сразу заметны.
Пример на Cisco:
spanning-tree vlan 10,20 priority 4096
Или проще:
spanning-tree vlan 10,20 root primary
Проверка:
show spanning-tree vlan 10
N.A.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2