172 похожих чатов

@Diana_Vamp удалось тебе переопределить NUD для интерфейса? У меня пока

не вышло не одним из трёх способов, зато я слегка окунулся в процесс маршрутизации для актуальных Windows NT ОС.

В Windows Vista был представлен новый сетевой стек, прошлый базировался на сетевом стеке BSD. В Next-Generation TCP/IP стеке Microsoft реализовали унифицированный для IPv4 и IPv6 набор модулей и функций. В частности для IPv4 протокола они позаимствовали из IPv6 Neighbor Unreachability Detection RFC 4861, RFC 7048. Выбор source и destination IP теперь базируется на общих правилах RFC 6724.

Первое, что делает ядро, это запрос в Destination cache, для поиска информации о маршруте, PMTU и тд. Если запись найдена, то пакет маршрутизируется, если нет, то выполняется поиск в RIB. При запросе в RIB возможно два сценария, выбор определяют входные данные. Если передан только destination IP, то будет выбран первый сценарий. Если так же передан source IP или exit-if(такая возможность есть в Test-NetConnection cmdlet из TCP/IP модуля PowerShell), то будет выбран второй сценарий. Значительное отличие в том, как интерпретируется настройка Weak/Strong Host Model RFC 1122 заданная для используемого интерфейса.

В первом сценарии выполняется unconstrained route lookup, для установления next-hop и exit-if. Выбор source IP выполняется согласно RFC 6724, на процесс влияют настройки Weak/Strong Host Model для exit-if. В случае Weak Host Model в процессе выбора будут участвовать все IP адреса узла. В случае Strong Host Model, только IP адреса назначенные на exit-if.

Во втором сценарии дополнительно передаётся source IP или exit-if. В этом случае нам известен source interface, поэтому решение о том, будет выполнен unconstrained или constrained route lookup принимается на основе настройки Weak/Strong Host Model для source interface. При Weak Host Model будет выполнен unconstrained route lookup, при этом exit-if может отличаться от source interface. При Strong Host Model будет выполнен constrained route lookup, при этом exit-if не может отличаться от source interface. Longest Prefix Match будет выполняться только для маршрутов, у которых exit-if = source interface. Так же ядро может выбрать маршрут с большей метрикой, несмотря на альтернативный маршрут с меньшей метрикой, исходя из source IP.

Как только next-hop установлен для него выполняется процедура Neighbor Unreachable Detection RFC 4861. В зависимости от состояния next-hop возникает несколько возможных сценариев. Если в neighbor cache запись для next-hop отсутствует, то она создаётся согласно RFC 4861. Если в процессе NUD MAC адрес next-hop установить не удастся, то ядро вернёт приложению ошибку. При этом в neighbor cache запись об узле сохранится со статусом unreachable согласно RFC 7048, а не incomplete RFC 4861.

При повторном обращении к тому же next-hop, ядро выполнит всю процедуру с самого начала, с запроса в Destination cache до точки проверки состояния next-hop в neighbor cache. При обнаружении в neighbor cache записи с состоянием unreachable будет выполнена повторная попытка обнаружить MAC адрес и если это не удастся, то ядро выполнит поиск нового маршрута.

При выборе нового маршрута будет выбран и новый source IP согласно RFC 6724, с учётом Weak/Strong Host Model для нового exit-if. На этом этапе может быть выбран менее специфичный маршрут, даже не смотря на то, что есть более специфичный, если next-hop в менее специфичном маршруте достижим. При этом в зависимости от настройки Ignore Default Route для exit-if в качестве маршрута может выступать и default route.

P/S/ В тексте могут быть ошибки или не точности, поскольку информация получена на основе тестов, трассировок событий ядра, статей Microsoft и анализа RFC 1122 и IPv6 RFC 4861, RFC 7048, RFC 6724 с учётом возможной их реализации для IPv4 протокола.

4 ответов

25 просмотров

привет, нет, на самом деле это потеряло актуальность именно для меня, потому что все-таки проблема была в гипервизоре.... Мы собственно дальше тесты и не вели, но на форуме технет саппорт майкрософта - был кто-то у кого работало по стронг модели, и на каком-то обновлении десятки сломалось

Roman-Polukhin Автор вопроса
Diana
привет, нет, на самом деле это потеряло актуальнос...

Странно, что ИБшники не возбуждаются, в текущей конфигурации возникает packet leak, если сетевой фильтр конечно не фильтрует всё на клиенте.

Roman Polukhin
Странно, что ИБшники не возбуждаются, в текущей ко...

там рдп попой в интернет торчит)))) какие иб?)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта