Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помогите с глюками UDP
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Aprox
Обнаружен странный эффект, про который не знаю, что и думать. На ПК реализован UDP клиент и установлены две сетевые карты, условно назовем интерфейс А и интерфейс Б. IP и маски для карт установлены вручную так, что обе карты принадлежат одной подсети. Легально ли так назначать настройки карт?

Если легально, то наблюдаем следующий глюк. При запуске клиента, ARP запрос посылается, как и положено, в оба интерфейса А и Б. Ответ, тоже как и положено, приходит только из одного интерфейса, предположим Б, туда подсоединен сервер. И после этих событий, винды вдруг начинают слать UDP пакеты совсем в другой интерфейс А, совсем не в тот, откуда был получен ARP ответ сервера.

Как интерпретировать эту ситуацию? Если нельзя назначать два интерфейса в одну подсеть, то почему Винды не ругаются на эту ошибку? А если можно, то откуда берется наблюдаемая в Виндах путаница с интерфейсами и как с ней бороться?
zltigo
Цитата(Aprox @ Jan 12 2010, 23:26) *
IP и маски для карт установлены вручную так, что обе карты принадлежат одной подсети. Легально ли так назначать настройки карт?

Разумеется нет. Две разных подсети и никаких проблем. Если нужно, что-бы подсети видели друг-друга, то поднять роутинг.
VslavX
Почитайте про такую вещь как "метрика". На основе этого параметра сетевой стек выбирает маршрут отсылки пакетов. У меня такая вещь (два интерфейса в одну подсеть) пару раз ненадолго случалась (по-разным причинам), метрика нормально помогала . Но, если нет специальных предпосылок, это "идеологически" неправильно - надо таки интерфейсы по подсетям разносить.

Цитата(Aprox @ Jan 12 2010, 22:26) *
Если нельзя назначать два интерфейса в одну подсеть, то почему Винды не ругаются на эту ошибку?

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

Цитата(zltigo @ Jan 12 2010, 22:34) *
Если нужно, что-бы подсети видели друг-друга, то поднять роутинг.

Если там просто разная физика и хочется одну подсеть, то есть более простой вариант - бридж.
Rst7
Цитата
Если там просто разная физика и хочется одну подсеть, то есть более простой вариант - бридж.


Для UDP (да и для любого IP-трафика) лучше маршрутизировать на уровне L3. Меньше мусора летать будет. Мост - это L2, и применять его стоит только в специальных случаях (например, raw-ethernet).
VslavX
Цитата(Rst7 @ Jan 13 2010, 09:30) *
Для UDP (да и для любого IP-трафика) лучше маршрутизировать на уровне L3.

Это да, но с любой маршрутизацией админского труда больше. Впрочем, говорить пока не о чем - топикстартер про свою ситуацию больше просветит, тогда можно будет и совет более подходящий дать.
Rst7
Цитата
Это да, но с любой маршрутизацией админского труда больше.


Не стоит route add выдавать за сакральное одминское знание, доступное только избранным smile.gif

Цитата
Впрочем, говорить пока не о чем


Ну можем пофлудить smile.gif))
VslavX
Цитата(Rst7 @ Jan 13 2010, 09:30) *
Мост - это L2, и применять его стоит только в специальных случаях (например, raw-ethernet).

Любопытно, у меня сейчас гигабитный проводной сегмент подключен к WiFi через мост (в не очень быстрый инет оно так ходит + доступ к сетевому принтеру), я в WiFi только ARP и прочий немногочисленный broadcast вижу - все остальное встроенный в мост гигабитный свитч фильтрует, так что объем мусора при удачной топологии - минимальный. Возможно, правильнее было бы вместо моста поставить роутер и сделать "через L3", но я и так уже запарился свою домашнюю сетку с десятком хостов админить - разбивать ее еще и на подсети? - не, нафиг, нафиг.


Цитата(Rst7 @ Jan 13 2010, 09:52) *
Не стоит route add выдавать за сакральное одминское знание, доступное только избранным smile.gif

Будете смеятся но я таким знанием не владею smile.gif. В свой сетевой стек встроил все "концы" для возможной разработки марштуризатора, но "route" ни разу не набирал smile.gif
Цитата(Rst7 @ Jan 13 2010, 09:52) *
Ну можем пофлудить smile.gif))

Да с удовольствием smile.gif
Rst7
Цитата
все остальное встроенный в мост гигабитный свитч фильтрует


Свичи L2 вообще ничего не фильтруют. Если не глючат wink.gif

Вот если там в сетке еще какое IPTV полетит, мало не покажется smile.gif
VslavX
Цитата(Rst7 @ Jan 13 2010, 10:18) *
Свичи L2 вообще ничего не фильтруют. Если не глючат wink.gif

А что под L2 подразумевается? Канальный уровень? Так свичи сейчас умные пошли (да вроде бы, по определению, в отличие от хабов, всегда такими и были) знают что такое MAC-адрес и с чем его кушать.
Rst7
Цитата
знают что такое MAC-адрес и с чем его кушать.


Так это и есть L2. L3 - это уже IP.
VslavX
Цитата(Rst7 @ Jan 13 2010, 10:37) *
Так это и есть L2. L3 - это уже IP.

Угу, так свитч именно по L2 и фильтрует - смотрит на MAC-адрес и передает адресный (не широковещательный) пакет только на нужный порт, где, по мнению свича, подключен получатель. А на остальные порты этот пакет не попадает - разве это не фильтр?
Rst7
Цитата
разве это не фильтр?


Фильтр. Но броадкаст-то он транслирует напрямик всем.

Плюс возможные переполнения таблиц по MAC-адресам.
VslavX
Цитата(Rst7 @ Jan 13 2010, 11:41) *
Фильтр. Но броадкаст-то он транслирует напрямик всем.

Дык, пока лично в моей сетки того бродкаста - кот наплакал. IPTV - в перспективе, но оно ж вроде как multicast использует?
Цитата(Rst7 @ Jan 13 2010, 11:41) *
Плюс возможные переполнения таблиц по MAC-адресам.

Интересно, реально бывает? Сейчас недорогим 8-портовым свичом с CAM в 4K MAC-адресов никого не удивить.
Rst7
Цитата
Дык, пока лично в моей сетки того бродкаста - кот наплакал.


В Вашей - возможно, а вот что у топикстартера?

Цитата
Интересно, реально бывает?


Лехко smile.gif Например, от вирусни.
VslavX
Цитата(Rst7 @ Jan 13 2010, 15:25) *
Лехко smile.gif Например, от вирусни.

Ну,это понятно, умеючи-то... что хошь... сломать можно smile.gif. И, скорее всего, при наличии вирусни проблема переполнения таблиц свича будет не самой главной.
По-ходу напугали мы топикстартера флудом - нету от него никакой новой информации smile.gif
Rst7
Цитата
Ну,это понятно, умеючи-то... что хошь... сломать можно


Ну кроме того, маршрутизация на уровне L3 (и выше) позволяет решать вопросы обеспечения:
а) безопасности;
б) взаимодействия с другими сетями;
в) гибкости маршрутизации.

Если в качестве маршрутизатора используется не железка L2, а комп, то почему бы не пользоваться означенными маленькими радостями?

Цитата
Сейчас недорогим 8-портовым свичом с CAM в 4K MAC-адресов никого не удивить.


Кстати, просто 4K маков дают не такую уж малую вероятность того, что два порта будут дружить. Грубо говоря, для двух устройств это примерно 5E-4. Для четырех - уже 1E-3. Ибо таблица там не по MAC'ам, а по хешам MAC'ов. Должен быть еще костылек, дополнительная lookup-таблица.

Ситуация, кстати, резко ухудшается при построении сети с топологией "гирлянда" на L2-свичах.
VslavX
Цитата(Rst7 @ Jan 13 2010, 20:39) *
Ну кроме того, маршрутизация на уровне L3 (и выше) позволяет решать вопросы обеспечения:
а) безопасности;
б) взаимодействия с другими сетями;
в) гибкости маршрутизации.

Лады, в порядке флуда (а не потому что я действительно против smile.gif), накопаю "минусов" L3:
- необходимость в сакральных знаниях + все-таки какие-никакие затраты на администрирование. А со свитчом - и простой монтер справитцо - лишь бы криппер был, да цоколевку знал.
- возрастает время передачи пакета - роутеру для дальнейшей обработки надо принять как минимум IP-заголовок (а то и весь пакет, если роутер не навороченный), свичу достаточно только MAC-адреса получателя (если скорости портов совпадают)
- при роутинге пакет подвергается модификации - минимум меняется TTL и сумма IP, пакет также какое-то время находится в памяти устройства, есть риск необнаруживаемых искажений - сумма CRC-32 исходящего фрейма вычисляется заново. Исторически в RFC есть интересное обоснование контрольных сумм UDP/TCP - "не все маршрутизаторы одинаково надежны, для ловли их глюков мы заимплементили дополнительные суммы в транспортных протоколах"
- строго говоря, IP это не единственно возможный протокол, тут уже никаких сакральных знаний может не хватить
Цитата(Rst7 @ Jan 13 2010, 20:39) *
Если в качестве маршрутизатора используется не железка L2, а комп, то почему бы не пользоваться означенными маленькими радостями?

- банальная стоимость - роутер (тем более комп) сравнимой портовой емкости почти всегда подороже свича будет smile.gif

Цитата(Rst7 @ Jan 13 2010, 20:39) *
Ибо таблица там не по MAC'ам, а по хешам MAC'ов.

Хм, мне почему-то казалось что в современных свичах уже честная 48-битовая CAM, неужели хэши еще живы?

Цитата(Rst7 @ Jan 13 2010, 20:39) *
Ситуация, кстати, резко ухудшается при построении сети с топологией "гирлянда" на L2-свичах.

Ну, умеючи-то... smile.gif
zltigo
Цитата(VslavX @ Jan 13 2010, 22:35) *
Лады, в порядке флуда (а не потому что я действительно против smile.gif), накопаю "минусов" L3:

Мелочи, а вот внешняя нерезервированная, неуправляемая и совершенно неизвестного (а в большинстве случаев явно поганого) качества железяка с внешними питанием это ОЧЕНЬ плохо для чего-либо серьезного.
des333
Цитата(Aprox @ Jan 12 2010, 23:26) *
Как интерпретировать эту ситуацию? Если нельзя назначать два интерфейса в одну подсеть, то почему Винды не ругаются на эту ошибку? А если можно, то откуда берется наблюдаемая в Виндах путаница с интерфейсами и как с ней бороться?

А почему путаница?


Если оба интерфейса в одной подсети, то какая разница на какой интерфейс слать?  smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.