Network Admin
Обучающий канал по сетевому и системному администрированию. Сотрудничество: @dad_admin Биржа: https://telega.in/c/networkadm РКН: https://bit.ly/4ioc61C
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Network Admin
تُعد قناة Network Admin (@networkadm) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 12 395 مشتركاً، محتلاً المرتبة 9 781 في فئة التكنولوجيات والتطبيقات والمرتبة 51 817 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 12 395 مشتركاً.
بحسب آخر البيانات بتاريخ 15 سبتمبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -12، وفي آخر 24 ساعة بمقدار 1، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 13.68%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 5.90% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 1 696 مشاهدة. وخلال اليوم الأول يجمع عادةً 731 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 4.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل vlan, arp, интерфейс, ping, dhcp.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Обучающий канал по сетевому и системному администрированию.
Сотрудничество: @dad_admin
Биржа: https://telega.in/c/networkadm
РКН: https://bit.ly/4ioc61C”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 16 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
R1 → R5 → R8 → R12Каждый SID занимает IPv6-адрес, поэтому длинный путь быстро раздувает SRH. Например:
SID 1 SID 2 SID 3 SID 4 SID 5 ...Чем больше сегментов, тем больше служебных данных приходится тащить вместе с пакетом. uSID (micro-SID) решает эту проблему другим способом. Вместо того чтобы использовать полноценный 128-битный SID для каждого шага, несколько коротких инструкций помещаются внутрь одного IPv6-адреса:
IPv6 address ┌──────────────┬───────────────────────────────┐ │ locator │ uSID │ uSID │ uSID │ uSID │ └──────────────┴───────────────────────────────┘Условно:
LOC:R1 | R5 | R8 | R12Когда пакет проходит через очередной SRv6 node, текущий uSID обрабатывается, а следующий становится активным. В результате тот же логический путь:
R1 → R5 → R8 → R12можно закодировать компактнее, чем последовательностью отдельных 128-битных SID. Зачем это вообще нужно? Потому что SRv6 использует IPv6-адреса для инструкций. Если построить длинный traffic-engineered path и записать каждый шаг отдельным SID, служебная часть пакета начинает заметно расти. uSID позволяет уплотнить несколько инструкций в один SID-контейнер, сохраняя модель SRv6. Условно:
обычный SRv6:
[SID][SID][SID][SID][SID]
uSID:
[Locator | uSID | uSID | uSID | uSID]То есть uSID - это не новый routing protocol и не «более быстрый IPv6». Это способ сделать SRv6-путь компактнее, когда количество инструкций становится большим. N.A.
R1 ── R2 ── R4
│
X
│
R3 ── R4
R1 знает, что если линк R2-R4 пропадёт, трафик можно отправить через R3.
При отказе R2 не ждёт полноценного SPF для восстановления forwarding. Он использует заранее рассчитанный backup path.
В SR-сетях этот путь можно выразить через Segment List:
R1 → [SID R3] → R4И пакет сразу получает альтернативный forwarding path. Получается:
обычный convergence: link down ↓ LSA/LSP ↓ SPF ↓ новый маршрут ↓ FIB update ↓ forwarding TI-LFA: link down ↓ локальная защита ↓ backup path ↓ forwardingСамая интересная часть здесь в том, что TI-LFA не пытается быстрее пересчитать всю сеть. Он старается сделать так, чтобы при отказе маршрутизатору вообще не пришлось ждать этого пересчёта для уже идущего трафика. Поэтому TI-LFA особенно полезен в сетях, где несколько десятков миллисекунд уже имеют значение: транспорт, датацентры, backbone и другие чувствительные к потере трафика сервисы. N.A.
show spanning-tree
показывает не просто «какой порт заблокирован». Она позволяет понять, почему именно этот порт проиграл выбор пути.
Например:
VLAN 10
Root ID Priority 24586
Address 0011.2233.4455
Interface Role Sts Cost
Gi1/0/1 Root FWD 4
Gi1/0/2 Altn BLK 4
На первый взгляд кажется:
Gi1/0/2 - резервный линк, всё нормально.
Но STP выбирает не «основной и резервный кабель». Каждый switch сравнивает BPDU и стоимость пути до Root Bridge.
Если два пути имеют одинаковый cost, в дело идут дополнительные tie-breaker:
Root Bridge
↓
Root Path Cost
↓
Sender Bridge ID
↓
Sender Port ID
Поэтому после замены коммутатора или изменения priority один и тот же физический линк вполне может внезапно стать BLK.
Особенно полезно смотреть:
show spanning-tree vlan 10 detailТам можно увидеть изменения topology и понять, почему STP пересчитал дерево, а не просто констатировать, что порт заблокирован. N.A.
65000:100Но делают они совершенно разные вещи. Представим двух клиентов:
Customer A 10.10.10.0/24 Customer B 10.10.10.0/24Для обычного BGP это один и тот же IPv4-префикс. RD добавляет к нему уникальность:
RD 65000:100 + 10.10.10.0/24
↓
65000:100:10.10.10.0/24
У второго клиента:
65000:200:10.10.10.0/24Теперь PE-маршрутизатор может хранить оба маршрута, несмотря на одинаковый IPv4 prefix. Но RD не решает, кому этот маршрут можно импортировать. Для этого используется RT. Например:
VRF-A export RT 65000:100 import RT 65000:200А у другой VRF:
VRF-B export RT 65000:200 import RT 65000:100Получается:
VRF-A │ │ export RT 65000:100 ↓ MP-BGP ↓ │ import RT 65000:100 ↓ VRF-BТо есть логика примерно такая:
RD → «Как сделать этот маршрут уникальным?» RT → «В какие VRF этот маршрут можно импортировать?»И здесь есть важный момент. Одинаковый RD не означает, что VRF должны видеть маршруты друг друга. И наоборот: одинаковый RT не означает, что маршруты имеют одинаковый RD. Их можно даже специально сделать разными:
VRF-A RD: 65000:101 RT export: 65000:100 VRF-B RD: 65000:202 RT import: 65000:100Маршруты будут различаться в VPN control plane благодаря RD, а политика распространения между VRF будет определяться RT. Поэтому RD и RT лучше запомнить не как «две похожие цифры», а как две разные функции: RD - идентичность VPN-маршрута. RT - политика его распространения. N.A.
bpftool prog profile: кто съедает CPU внутри BPF
BPF-программы могут работать в сетевом пути тысячи и миллионы раз в секунду.
Поэтому проблема иногда выглядит странно:
CPU → 100% приложение → почти не грузит network traffic → высокийСмотреть только на процессы в
top здесь недостаточно.
У bpftool есть режим профилирования конкретной BPF-программы:
bpftool prog showНаходим нужную программу и получаем её ID:
123: xdp name firewallПосле этого:
bpftool prog profile id 123Можно получить статистику выполнения программы и понять, сколько процессорного времени она реально потребляет. Почему это полезно? Допустим, на сервере стоит XDP-фильтр. Он должен быстро отбрасывать мусорный трафик, но внутри программы появилась сложная логика: несколько map lookup, дополнительные проверки и работа с большим количеством пакетов. При небольшом трафике это незаметно. А при 5 млн PPS:
5 000 000 packets/sec
×
несколько дополнительных операций
↓
существенная нагрузка CPU
И в итоге администратор видит просто высокий softirq/CPU usage, хотя источник нагрузки находится внутри BPF-программы.
Это особенно интересно тем, что BPF выполняется не как отдельный процесс, который можно найти в top.
То есть искать:
top ps auxв этом случае недостаточно. Логика диагностики получается другой:
CPU ↑ ↓ network/softirq ↑ ↓ BPF подозрителен ↓ bpftool prog show ↓ bpftool prog profileИ это уже позволяет искать не «какой процесс грузит CPU», а какая программа внутри kernel datapath тратит процессорное время. N.A.
ip neigh flush dev eth0
После этого:
ip neigh show dev eth0
может показать:
10.10.10.1 INCOMPLETEЯдро ещё не знает MAC шлюза и отправит ARP-запрос:
Who has 10.10.10.1?После ответа запись снова станет, например:
10.10.10.1 lladdr aa:bb:cc:dd:ee:ff REACHABLEНо есть важный нюанс.
flush не чинит ARP-проблему. Если шлюз не отвечает на ARP, после очистки вы просто получите INCOMPLETE и потерю связи.
Поэтому команда полезна именно как диагностический приём:
ip neigh show dev eth0
ip neigh flush dev eth0
ip neigh show dev eth0
Если после flush сосед снова быстро появляется с правильным MAC - проблема могла быть в устаревшем состоянии neighbor table.
Если остаётся:
INCOMPLETEищите уже ниже:
tcpdump -ni eth0 arp
N.A.eth0 → 10.0.1.10/24 eth1 → 10.0.2.10/24И оба имеют доступ к внешней сети. Когда приложение обращается к:
8.8.8.8Linux не выбирает интерфейс по принципу «первый доступный». Сначала он делает routing lookup:
ip route get 8.8.8.8
Например:
8.8.8.8 via 10.0.1.1 dev eth0 src 10.0.1.10Здесь kernel уже определил:
destination → 8.8.8.8
gateway → 10.0.1.1
interface → eth0
source IP → 10.0.1.10
Но интереснее становится, когда появляются ip rule.
ip ruleНапример:
0: from all lookup local 100: from 10.0.2.0/24 lookup isp2 200: from all lookup mainТеперь два почти одинаковых запроса могут получить разные маршруты:
source 10.0.1.10 → eth0 source 10.0.2.10 → eth1При этом обычный:
ip routeможет вообще не объяснить, почему второй пакет пошёл через
eth1.
Для конкретного источника можно проверить:
ip route get 8.8.8.8 from 10.0.2.10И получить уже другой результат. Поэтому на multi-homed сервере вопрос «какой default route стоит?» часто недостаточен. Нужно смотреть какой routing policy применяется именно к этому пакету. N.A.
192.168.1.50он получает ещё и lease time:
lease: 8 hoursПри обычной работе клиент не ждёт окончания lease. Он пытается продлить его заранее. Упрощённо:
0% ───────── 50% ───────── 87.5% ───── 100%
│ │
renew rebind expire
На этапе T1 клиент обращается к DHCP-серверу, который выдал lease.
Если тот недоступен, позже начинается T2 - клиент уже пытается продлить аренду через broadcast, чтобы найти любой доступный DHCP-сервер.
Посмотреть lease на Linux можно, например, через:
networkctl status eth0
или:
cat /var/lib/dhcp/dhclient.leases
При перезагрузке клиент может попытаться вернуть себе прежний адрес. Но DHCP-сервер не обязан его сохранить: он проверяет актуальность lease и состояние пула.
Поэтому ситуация:
сервер был → 192.168.1.50 перезагрузился сервер снова появился → 192.168.1.73не обязательно означает ошибку DHCP. Между клиентом и сервером существует отдельное состояние аренды, и IP-адрес - только одна его часть. Именно поэтому при проблемах с DHCP полезно смотреть не только
ip addr, а кто выдал lease, когда он истекает и на каком этапе продления находится клиент.
N.A.ip neigh showНапример:
10.0.0.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALEВажно не только наличие MAC, но и состояние записи: REACHABLE, STALE, DELAY, PROBE, FAILED. 2️⃣Проверяем ARP непосредственно до gateway
arping -I eth0 10.0.0.1
Если ответы приходят с неожиданного MAC, проблема уже не в маршрутизации.
3️⃣Смотрим ARP на интерфейсе
tcpdump -ni eth0 arp
Можно увидеть, кто спрашивает:
Who-has 10.0.0.10?и кто отвечает:
10.0.0.10 is-at 11:22:33:44:55:66Если разные устройства получают разные MAC для одного IP - это уже серьёзный признак конфликта или некорректного failover. 4️⃣Наблюдаем изменения neighbor table в реальном времени
ip monitor neighПолезно, когда проблема появляется не постоянно: можно увидеть, как запись меняется между состояниями или удаляется. 5️⃣Проверяем доступность после обновления ARP
ping -c 5 10.0.0.1
Но ping здесь - только финальная проверка. Успешный ICMP сам по себе не говорит, что ARP работает корректно.
Типичный сценарий после замены:
старый сервер
10.0.0.10 → AA:AA:AA:AA:AA:AA
↓ замена
новый сервер
10.0.0.10 → BB:BB:BB:BB:BB:BB
Если где-то ещё осталась старая ARP-запись, трафик может продолжать уходить на AA:AA:AA:AA:AA:AA.
Поэтому после замены сервера полезно проверять не только:
ip addr ip routeно и связку:
IP → ARP/neighbor → MAC → реальный интерфейс
Именно она часто объясняет ситуацию, когда сервер уже заменили, а сеть ещё живёт по старой записи.
N.A.10.10.10.0/24 peer A: AS_PATH 64501 64502 peer B: AS_PATH 64503 64504 64505На первый взгляд BGP должен выбрать A. Но если у маршрута от B выше
LOCAL_PREF, он может стать предпочтительным ещё до того, как длина AS_PATH вообще сыграет роль.
Условно:
A → LOCAL_PREF 100 → AS_PATH 2 B → LOCAL_PREF 200 → AS_PATH 3 BGP выберет B.Это важный момент: BGP ищет не «самый короткий маршрут», а лучший маршрут по последовательности атрибутов. На выбор могут влиять:
LOCAL_PREF
↓
AS_PATH
↓
ORIGIN
↓
MED
↓
eBGP / iBGP
↓
IGP metric
↓
router ID / другие tie-breaker
Поэтому добавление ещё одного AS в путь не обязательно заставит трафик пойти через другого провайдера.
Посмотреть, почему конкретный маршрут победил:
show bgp ipv4 unicast 10.10.10.0/24А в FRRouting удобно смотреть ещё и выбранный best path:
vtysh -c "show bgp ipv4 unicast 10.10.10.0/24"
Именно поэтому при разборе BGP-проблемы вопрос «у какого peer меньше AS_PATH?» часто оказывается слишком ранним.
Сначала нужно понять, какой атрибут сделал маршрут предпочтительнее.
N.A.eth0 → 10.0.0.10/24Приложение выполняет:
curl http://10.0.0.10:8080
Интуитивно кажется, что будет:
application
↓
eth0
↓
switch
↓
eth0
↓
server
Но Linux сначала проверяет destination и видит, что 10.0.0.10 принадлежит самому хосту.
Маршрут будет иметь тип local:
ip route get 10.0.0.10Например:
local 10.0.0.10 dev lo src 10.0.0.10Поэтому физический eth0 в этом обмене вообще не участвует:
application
↓
local routing
↓
lo
↓
local socket
Это важно при диагностике.
Можно поставить:
tcpdump -ni eth0 port 8080
и не увидеть вообще ничего, хотя curl успешно устанавливает соединение.
А вот:
tcpdump -ni lo port 8080покажет этот трафик. Причём это не означает, что
lo - какой-то физический интерфейс. Это отдельный путь local delivery внутри сетевого стека Linux.
Поэтому проверка «пакет дошёл до сервера через его сетевую карту?» иногда вообще поставлена неправильно: если источник и destination находятся на одном хосте, пакет мог никогда не попасть на wire.
N.A.Host A → Who has 10.0.0.10? Host B → 10.0.0.10 is aa:bb:cc:dd:ee:ffНо устройство может само отправить ARP-пакет, не дожидаясь никакого запроса. Это и есть Gratuitous ARP. Например, виртуальный IP переезжает:
до:
10.0.0.10 → aa:aa:aa:aa:aa:aa
после:
10.0.0.10 → bb:bb:bb:bb:bb:bbНовое устройство отправляет объявление:
10.0.0.10 is-at bb:bb:bb:bb:bb:bbСоседи получают его и обновляют ARP-кэш. В результате трафик начинает идти на новый MAC практически сразу - без того, чтобы каждый клиент самостоятельно выполнял ARP lookup. Посмотреть такие объявления:
tcpdump -ni eth0 arp
А текущую таблицу соседей:
ip neigh showЭто особенно важно при: ⏺failover виртуального IP ⏺миграции виртуальной машины ⏺переключении кластера на резервный узел Поэтому после переноса сервиса между хостами может измениться не DNS, не маршрут и не IP-адрес - меняется только MAC, связанный с уже известным IP, и сеть быстро узнаёт об этом через gratuitous ARP. N.A.
NIC → RX ring → driver → kernelНо бесконечной очереди не бывает. Если CPU стабильно обрабатывает, например, 500 тыс. пакетов/с, а приходит 700 тыс.:
500k → 700k → 900k → ...ring постепенно заполняется, после чего начинаются drops. Увеличение ring позволяет накопить больше пакетов:
ethtool -g eth0
ethtool -G eth0 rx 4096
Но если скорость обработки не изменилась, это только отодвинет момент переполнения.
Более того, слишком глубокая очередь может увеличить latency: пакет уже не теряется, но дольше ждёт своей очереди на обработку.
Поэтому при проблемах с сетью важно различать:
packet loss и packet queueingПервое означает, что пакет исчез. Второе, что пакет всё ещё жив, но уже слишком долго ждёт обработки. N.A.
tcpdump нет пакета - легко сделать вывод, что он не пришёл на сервер.
Но между физическим портом и tcpdump находится сама сетевой карта.
У NIC есть собственные RX ring buffers. Драйвер забирает из них дескрипторы и передаёт полученные данные ядру.
При перегрузке очередь может не успеть обработать входящие пакеты:
NIC ↓ RX ring ↓ driver ↓ kernel ↓ tcpdumpЕсли проблема возникает на уровне NIC/driver, пакет может исчезнуть до того, как станет виден обычному packet capture. Поэтому при странных потерях полезно смотреть не только:
ip -s link show eth0
но и аппаратную статистику:
ethtool -S eth0
А размеры RX/TX ring:
ethtool -g eth0
Можно увидеть отдельные counters вроде rx_missed_errors, rx_no_buffer или специфичные для конкретного драйвера drops.
Это важный момент при диагностике: если пакет не попал в tcpdump, это ещё не доказывает, что его не получила сетевая карта.
N.A.aa:bb:cc:dd:ee:01 → eth0 aa:bb:cc:dd:ee:02 → eth1Посмотреть таблицу можно:
bridge fdb showПосле этого кадр для
aa:bb:cc:dd:ee:02 уже не нужно отправлять на все порты - bridge знает, что destination находится за eth1.
Если destination MAC неизвестен, кадр будет flood’иться по подходящим портам. После получения ответа bridge снова обновит FDB.
У записей есть timeout, поэтому старый MAC постепенно исчезает:
bridge fdb show br br0
Особенно интересно это проявляется при миграции VM.
Было:
VM → eth0После миграции:
VM → eth1MAC тот же, но source frames начинают приходить с другого интерфейса. Bridge переучивает запись:
old MAC → eth0
↓
new MAC → eth1
Если MAC начинает постоянно перемещаться между портами, можно получить MAC flapping - и тогда проблема уже не в IP-маршрутизации.
Linux bridge в таком режиме фактически выполняет ту же базовую функцию, что и физический L2-коммутатор: строит таблицу MAC → порт на основании уже увиденного трафика.
N.A.skb
Обычно сетевой пакет проходит довольно длинный путь внутри Linux:
NIC → driver → skb → network stack → socket → applicationНо
skb создаётся не в самом начале.
XDP может выполнить программу прямо на раннем этапе обработки пакета, когда драйвер уже получил его из NIC, но обычный sk_buff ещё не создан.
Поэтому решение можно принять буквально на входе:
NIC ↓ driver ↓ XDP ├── DROP ├── PASS → обычный network stack ├── TX └── REDIRECTНапример, простой XDP-программе достаточно проверить destination IP и сразу отбросить пакет:
SEC("xdp")
int drop_packet(struct xdp_md *ctx)
{
return XDP_DROP;
}
При XDP_DROP пакет вообще не доходит до обычного kernel networking stack.
Это важно под большой нагрузкой: если отбросить ненужный трафик после создания skb, часть работы ядро уже успело выполнить. XDP позволяет перенести фильтрацию значительно раньше.
Проверить, загружена ли XDP-программа:
ip -details link show dev eth0
И посмотреть статистику:
ip -s link show dev eth0
Поэтому «firewall на сервере» - не всегда означает, что пакет сначала проходит весь сетевой стек, а потом его фильтруют. В Linux точка принятия решения может находиться практически сразу после получения кадра сетевой картой.
N.A.ss показывает тысячи соединений, а netstat - другую картину
На одном сервере можно запустить:
ss -antи получить тысячи TCP-соединений, а затем:
netstat -ant
и увидеть совсем другое количество.
Это не обязательно означает, что один из инструментов врёт.
ss работает через современный интерфейс ядра Linux - NETLINK_INET_DIAG.
Ядро отдаёт ему информацию о сокетах напрямую, поэтому ss может получать состояние соединений без перебора /proc и без старого механизма netstat.
netstat из пакета net-tools - устаревший инструмент. Его возможности и способ получения данных отличаются, а часть информации может отображаться иначе.
Особенно заметна разница на серверах с большим количеством ephemeral connections и быстро меняющимся состоянием TCP.
Для диагностики лучше смотреть не просто количество строк:
ss -sа разбивку состояний:
ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c
Например:
ESTAB 18420 TIME-WAIT 7312 SYN-RECV 428И отдельно проверить конкретный listener:
ss -lntp
Важный момент: TIME-WAIT, SYN-RECV, ESTAB и listening sockets - это разные состояния kernel socket state. Поэтому простое сравнение «сколько строк показывает утилита» может давать совершенно разные выводы.
ss сегодня является основным инструментом для анализа TCP/UDP-сокетов в Linux, а netstat в новых системах обычно оставляют только ради совместимости со старыми привычками и скриптами.
N.A.PC ── SW1 ══ SW2 ══ SW3 ── Server
VLAN 30 VLAN 30 VLAN 30
На trunk-портах кадр VLAN 30 идёт с тегом 802.1Q.
Проверка на Linux:
ip -d link show eth0.30
На Cisco:
show interfaces trunk show vlan id 30При этом шлюз VLAN может находиться вообще на другом устройстве:
PC → SW1 → SW2 → SW3 → Router
VLAN 30
Коммутаторы между ними работают только на L2 и не принимают решение о маршрутизации.
Но есть важный нюанс: чем дальше растянут L2-домен, тем больше устройств получают его broadcast и unknown-unicast traffic.
Поэтому проблема иногда выглядит как «сеть внезапно стала шумной», хотя IP-маршрутизация при этом вообще не менялась.
N.A.