Я пытаюсь разработать настольное приложение, которое требует работы в сети в реальном времени. Теперь у меня есть несколько вопросов, когда многие приложения используют одну сетевую карту и превышают полную емкость локальной сети в операционных системах.

1) Что происходит, когда трафик превышает лимит емкости сетевого адаптера? В Windows скорость каждого приложения снижается одинаково? Или приложение, запущенное ранее, имеет более высокий приоритет? Как насчет Mac или Linux?

2) Я думаю, что при загрузке данных из Интернета браузеры скачивают их максимально быстро. Насколько это действие влияет на работу в сети приложений реального времени?

3) В windows можно настроить приоритет процессов. Разве нельзя установить приоритет сети аналогичным образом? Опять как на счет Mac или Linux? (Я знаю стороннее приложение для установки приоритета сети в Windows, но ОС не поддерживает?)

4) Каждый заголовок IP имеет поле TOS, включая настройку приоритета. Я слышал, что большинство операционных систем и маршрутизаторов игнорируют это поле. Это правда?

Заранее спасибо.

(это сообщение было перемещено из Переполнения стека из-за пределов объема)

1 ответ1

0

Во-первых, сети в real time просто не существует, так как в любой сетевой ситуации вы не можете гарантировать своевременную доставку вашей информации; вычисления в реальном времени часто путают с high performance computing. Во-вторых, нельзя «превысить емкость NIC», так как NIC не похож на водопроводную трубу, которая может лопнуть, если вы протолкнете слишком много битов; «пропускная способность» (или пропускная способность) вашей сетевой карты является физическим ограничителем того, насколько быстро этот подключенный интерфейс может физически «передавать» биты (вверх / вниз), и измеряется в мегабитах в секунду (не в мегабайтах, как это обычно бывает неправильно). .. просто для ясности).

1) Что происходит, когда трафик превышает лимит емкости сетевого адаптера? В Windows скорость каждого приложения снижается одинаково? Или приложение, запущенное ранее, имеет более высокий приоритет? Как насчет Mac или Linux?

Каждое запущенное вами приложение, которое запрашивает «сетевой ресурс» (или то, что инженеры-программисты называют «сокетами»), может загружать / выгружать с максимальной скоростью интерфейса, к которому приложение «привязано» (прослушивание), сохраняйте обратите внимание, что этот тип «функциональности» более или менее независим от ОС (т.е. сокет в Windows имеет те же основные ограничения / понятия, что и в Linux / Mac). Таким образом, если приложение (скажем, веб-сервер) работает, оно теоретически может «обслуживать» веб-страницы с максимальной скоростью прослушиваемого интерфейса (скажем, «nic 1» со скоростью 1 Гбит / с), что означает (теоретически) он может получить файл / запрос 125 МБ за 1 секунду, а также одновременно отправить файл / ответ 125 МБ (при полном дуплексе). В действительности, хотя скорость намного ниже по многим причинам ...

Учитывая это, скажем, наш «идеальный» веб-сервер теперь должен также обрабатывать запросы FTP, и, таким образом, мы загружаем сервер FTP на тот же компьютер, который будет прослушивать тот же сетевой адаптер (в нашем примере «nic 1»). Когда приложение FTP-сервера запускается, оно также будет способно принимать и отправлять до теоретического максимума NIC (125 МБ / с в нашем примере). Это верно для ЛЮБОГО приложения, которое вы запускаете (веб-браузер, видеоигра, Netflix / Hulu и т.д. И т.д.). Суть в том, что теперь у меня есть 2 или более приложений (в нашем примере это web и ftp), которые могут использовать максимальную пропускную способность NIC, так что же происходит с каждым, и кто что получает? Вот тут-то и вступают в общую реализацию сетей и ОС.

В нашем примере, скажем, 80 человек загружают со скоростью 10 Мбит / с с нашего веб-сервера (всего 800 Мбит / с), затем заходит еще 30 человек и начинает загрузку с FTP-сервера со скоростью 10 Мбит / с каждый со общей скоростью 1100 Мбит / с. ; теоретически, что должно произойти, так это то, что каждое приложение получит равную долю полосы пропускания 1000 Мбайт, которую физически может обрабатывать сетевой адаптер (аналогично тому, как ОС будет «делить» ЦП между запущенными приложениями до 100% загрузки ЦП). На самом деле есть много различных факторы , которые будут решать , какое приложение использует какое количество трафика в данный момент времени. Эти факторы могут варьироваться от количества пользователей, запрашивающих ресурсы, до простых проблем с оборудованием 3 сетевых перескоков в нисходящем направлении, и эти типы проблем находятся вне вашего контроля и того, что может делать ваша сетевая карта, также обратите внимание, что какое приложение запускалось первым или кто подключился первым, не имеет значения в распределении пропускной способности. В этом сценарии со скоростью 1100 Мбит / с весьма вероятно, что веб-сервер может работать с эффективной скоростью 60% пропускной способности, а FTP - с 40%, когда пользователь может отключиться или может возникнуть какая-то другая проблема с сетью, и пропускная способность может измениться для веб-сервер использует только 20%, и FTP может работать со скоростью 40%, ограничивая тем самым количество пользователей на принимающей стороне веб-сервера.

Имейте в виду, что это все общие сценарии, чтобы дать лучшее понимание, и случаи «реального мира» совершенно разные и требуют большой работы по планированию и проектированию, чтобы гарантировать, что вы можете удовлетворить потребности полосы пропускания вашей пользовательской базы (по крайней мере, попытаться удовлетворить),

2) Я думаю, что при загрузке данных из Интернета браузеры скачивают их максимально быстро. Насколько это действие влияет на создание сетей приложений реального времени?

Браузеры загружают не так быстро, как «они», они скачивают так же быстро, как любое другое приложение, и они влияют на общую пропускную способность системы так же, как и любое другое приложение (см. Ответ на 1).

3) В windows можно настроить приоритет процессов. Разве нельзя установить приоритет сети аналогичным образом? Опять как на счет Mac или Linux? (Я знаю стороннее приложение для установки приоритета сети в Windows, но ОС не поддерживает?)

Установка «приоритета» «сети» возможна, но не в том же контексте, что и установка приоритета процесса. Установка «сетевого приоритета» может означать несколько вещей, например, установить приоритет сетевого адаптера над другим (это можно сделать в Win/Mac/Linux и также известен как «настройка метрики сетевого интерфейса»). Если ваше намерение состоит в том, чтобы установить приоритет сетевого взаимодействия определенного процесса или «типа сетевого трафика», это называется «качеством обслуживания (QoS)» и может применяться также в Win/Mac/Linux (хотя настройка и настройка QoS на вашей платформе выходит за рамки этого вопроса / ответа). QoS позволяет вам ограничивать / оценивать пропускную способность, выделенную для определенных вещей; Например, вы можете настроить QoS, чтобы разрешить максимальную пропускную способность для загрузки через торрент, когда ничего не загружается, а затем автоматически ограничить его только 5% общей пропускной способностью, когда другие сетевые операции начнут обеспечивать, чтобы ваши загрузки через торренты не поглощали всю вашу пропускную способность пока вы пытаетесь проверить свою электронную почту или посмотреть YouTube (просто в качестве примера).

4) Каждый заголовок IP имеет поле TOS, включая настройку приоритета. Я слышал, что большинство операционных систем и маршрутизаторов игнорируют это поле. Это правда?

Поле «Тип обслуживания», как определено этими двумя RFC, с тех пор превратилось в так называемый «Кодовый пункт дифференцированных услуг». Это не игнорируется, а просто «не используется». Другими словами, просто потому, что пакет имеет установленные поля, не означает, что вы (как разработчик сетевого устройства) должны фактически «делать что-либо» с ним, ToS является частью QoS, и, следовательно, ваша конкретная ОС / устройство должна поддерживать поля ToS / DS. При этом большинство ОС / сетевых устройств имеют некоторые возможности, позволяющие вам использовать эти поля с помощью некоторых политик QoS (по крайней мере, я не знаю ни одного современного экземпляра, в котором не реализована какая-либо реализация QoS).

Чтобы повторить, нет такой нотации как «сеть в реальном времени», вместо этого вы бы сказали «малой задержкой» (или даже «почти в реальном времени»), так как «в реальном времени» подразумевает гарантированное время доставки запрошенного / реализованного операция. Вы не можете гарантировать, что любая операция, выполняемая в сети, будет иметь определенную временную доставку X, вместо этого вы можете сказать, что сетевая операция может иметь гарантированную задержку не выше / ниже, чем в данном узле.

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

Я надеюсь, что это может помочь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .