Сетевые адаптеры читают входящие биты в одном потоке?

9

Когда гигабитный сетевой адаптер получает данные, как он получает биты? Видит ли это все в одном потоке 0 и 1? Или есть несколько потоков 0 и 1, поступающих одновременно?

Например ... скажем, есть два отправляющих устройства и одно принимающее устройство.

Устройства 1 и 2 начинают отправку сетевых данных на устройство 3 одновременно.

Я предполагаю, что с точки зрения сетевого адаптера устройства 3 все 0 и 1 встречаются в одном потоке данных. Он может выяснить, какие данные поступают с устройства 1 или 2, но данные по-прежнему представляют собой один поток из миллионов / миллиардов битов.

Я совершенно не прав? :)

shihku7
источник
1
Вы имеете в виду полудуплексное соединение или использование полнодуплексного? Для 1000Base-T никогда не было полудуплексных устройств, хотя они все еще в этом стандарте. При полнодуплексном соединении не было бы кадров с двух устройств, одновременно сражающихся за третье устройство на линии связи.
Рон Мопин
полный дуплекс. Итак, все равно будет один поток из 0 и 1 (например, 01010101010001010010101001010100001101011010) и с точки зрения устройства 3 (приемник), в то время как устройства 1 и 2 могут по очереди включать этот поток, они никогда не будут оба отправлять 0 и 1 в одно и то же время, верно?
shihku7
Вам помог какой-нибудь ответ? Если это так, вы должны принять ответ, чтобы вопрос не появлялся вечно, ища ответ. Кроме того, вы можете предоставить и принять свой собственный ответ.
Рон Мопин

Ответы:

14

Это зависит.

Хотя многие Ethernet PHY передают данные чисто последовательным способом (например, 100BASE-TX, 1000BASE-SX, 10GBASE-SR), некоторые разделяют поток данных на несколько линий, которые передаются параллельно.

Чаще всего 1000BASE-T - распространенный вариант гигабит-над-медью - разбивает кодированный поток данных на четыре полосы и передает каждую отдельно по одной из четырех витых пар в кабеле Cat-5. Все варианты витой пары от гигабита и выше используют эти четыре полосы.

В некоторых высокоскоростных (10G +) PHY-волокнах также используются несколько линий на шестнадцать волокон (с многомодовым волокном и коротким диапазоном) или длины волн (с одномодовым волокном и большим диапазоном).

Однако все передается в кадрах , каждый из которых запускается из одного источника в один пункт назначения. Рамки, как правило, атомарные, т.е. они всегда передаются одним куском. Каждый кадр транспортирует данные только из одного конкретного соединения / приложения. Его заголовок содержит адреса источника и назначения, поэтому он может найти свой путь по сети.

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

Это предполагает, что источники и пункт назначения работают с одинаковой скоростью, что не обязательно соответствует действительности. Вы можете иметь файловый сервер, соединенный ссылкой 1 Гбит / с, и десять клиентов, каждый из которых отправляет полную скорость по своим каналам 100 Мбит / с без (значительных) очередей. Это несколько приближается к вашему предложению о «нескольких потоках», только то, что эти потоки чередуются на уровне кадра, а не на уровне битов.

Скорость сетевого порта может составлять тысячи или даже миллионы кадров в одну секунду, поэтому с человеческой точки зрения невозможно различить несколько потоков - все кажется «одновременным».

Zac67
источник
Пожалуйста, соберитесь с другим ответчиком @jonathanjo и выясните, какое описание 1000Base-T является правильным.
Давидбак
1
«Тот же носитель» Джонатанджо описывает многопортовый домен коллизий, который (практически) не существует с Gigabit Ethernet, а также устарел для 10/100 Мбит.
Zac67
2
@davidbak здесь мне кажется правильным - Зак обычно таков! - просто разные акценты. Я исправил несколько вещей в своем ответе, в том числе прояснение коллизий, не встречающихся в практической 1000baseT.
Джонатанхо
2
К этому также необходимо добавить PAM16 и аналогичные кодировки, которые делают в основном несколько битов, прибывающих в один.
PlasmaHH
1
@PlasmaHH 1000BASE-T уже использует четыре полосы и PAM5, поэтому на каждом тактовом шаге находится примерно 9,3 необработанных бит (и, конечно, 8 «пользовательских» бит на 125 МБод для L1).
Zac67
13

Давайте пока проигнорируем гигабитную часть и немного сосредоточимся на вашей части «2 устройства отправляют одновременно».

На общих носителях это действительно может произойти и стать проблемой. Большинство беспроводных передач являются общими носителями, и Ethernet когда-то были:

  • 10base2 (коаксиальный) использовал более или менее один кабель с каждым из них. Очевидно, что две (или более) станции могли передавать одновременно;
  • 10baseT и 100baseT (на основе витой пары) с концентраторами (а не коммутаторами) также означали, что две (или более) станции могли передавать одновременно, поскольку сигнал, полученный от любого подключенного устройства, просто повторялся для всех остальных.

Теперь, если два устройства отправляют одновременно, могут произойти две вещи:

  • Вы используете некоторую форму мультиплексирования (временное разделение, частотное разделение ...), которая позволяет разделять «каналы», чтобы можно было слушать определенный канал и не беспокоить других. Это часто используется для беспроводных передач, намного меньше для проводных передач (WDM / DWDM на волокнах является одним исключением).

  • или если два или более устройства отправляют одновременно по одному и тому же каналу, вы получаете то, что называется коллизией : например, когда два человека говорят одновременно, вы не можете понять, что либо говорит, приемные устройства не являются возможность декодировать данные, отправленные любым из устройств (или чаще они могут его декодировать, но это не имеет смысла и не пройдет проверки CRC).

Вот где появились схемы типа CSMA-CD (множественный доступ с обнаружением несущей, обнаружение столкновений):

  • Перед попыткой передачи устройство проверит, отправляет ли кто-то еще (операторский смысл)
  • Если канал свободен, он начинает передачу.
  • Но даже при этом два устройства могут запускаться одновременно, поэтому вы все равно можете столкнуться.
  • Чтобы не тратить слишком много времени на канал, устройства будут обнаруживать коллизии (сравнивая то, что они отправляют, с тем, что они получают: если это не совпадает, то это означает, что кто-то другой отправляет одновременно), прервите передачу, и повторите попытку после случайной задержки (чтобы избежать нового столкновения).

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

Ответом на это было переключение на полнодуплексные коммутируемые сети . Концентраторы просто повторили сигнал, не задумываясь. С другой стороны, коммутаторы действительно получают кадр, а затем повторно отправляют его по ссылке назначения (дополнительный бонус: кадр отправляется не всем, в большинстве случаев только адресату).

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

Кроме того, на физическом уровне вполне возможно, что обмен данными происходит по нескольким парам или даже по нескольким кабелям параллельно. Будет ли это сделано на уровне битов или на каждой паре / кабеле будут передаваться целые кадры, зависит от конкретной используемой технологии. Но я думаю, что это был не твой вопрос.

jcaron
источник
1
Это отличный момент - возможно, самый подходящий ответ на вопрос. Я мог бы добавить, что когда вы добираетесь до действительно высоких скоростей (оптоволокно), они обычно ограничены одним отправителем и одним получателем на линии, чтобы избежать коллизий. Если необходимо добавить другой вход, он принимается на другом канале и объединяется с входящим потоком, а затем отправляется в исходящий поток. В наши дни даже Ethernet имеет тенденцию быть «коммутируемым», что позволяет избежать коллизий - главное место, где вы видите коллизии (2 устройства разговаривают с одним, как в вопросе) в эти дни, это Wi-Fi - большинство всего остального - 1 отправитель на 1 получатель
Билл К
12

Этот частный случай сложный.

Что касается 1000baseT.

Во-первых: когда мы в общем говорим, что два устройства осуществляют передачу одновременно, они обычно не отправляют биты в один и тот же момент на одном носителе. Если они это делают, происходит коллизия, и все устройства прослушивания решают эту проблему (в конце концов, с помощью различных схем обнаружения коллизий). Таким образом, два передающих устройства получат доступ к среде в несколько разные моменты времени. Но в 1000baseT есть только два устройства на данном наборе пар; обычно одно устройство является коммутатором, а другое - хостом.

Во-вторых, 1000baseT одновременно передает два бита данных в паре, которые кодируются сложным образом с пятью уровнями напряжения. Так что это серия цифр из 4-х базовых цифр, а не серия цифр из 2-х базовых.

В-третьих, 1000baseT может передавать в обоих направлениях одновременно в одной и той же паре. Он может отделить исходящий сигнал от входящего по схеме, называемой гибридом.

Гигабитный Ethernet на других носителях ведет себя по-разному. Более медленные скорости, например, 10baseT и 100baseT, имеют более простые схемы. 10baseT через концентратор действительно имеет реальные столкновения; через коммутаторы обычно он организован коммутатором, так что исходящие кадры ставятся в очередь; если это полный дуплекс, нет никаких столкновений вообще.

jonathanjo
источник
Пожалуйста, соберитесь с другим ответчиком @ Zac67 и выясните, какое описание 1000Base-T является правильным.
Давидбак
@jonathanjo Вы правы насчет трехбитных символов, но есть только пять уровней PAM. Грубо говоря, это 8–4-битные 3-битные символы плюс кодирование со скремблированием, в котором 3-битные символы отображаются на (смещающиеся) уровни PAM.
Zac67
@davidbak спасибо, что подняли его. Я упростил описание, чтобы охватить основной момент (сложный, а не бинарный) и избавиться от ошибки. Спасибо Зак за разъяснения.
Джонатанхо
7

Предполагая все проводные ссылки Ethernet здесь.

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

Но это больше никогда не случится.

Вместо этого сегодня большинство проводных подключений осуществляется по коммутируемым сетям , где каждое устройство (и отправитель, и получатель) подключено к собственному отдельному порту на коммутаторе. Данные делятся на пакеты (на самом деле: кадры ), и коммутатор будет гарантировать, что только один пакет активен на каждом порту за раз. Если ссылка занята, коммутатор будет сохранять и пересылать другие кадры получателю, когда ссылка снова станет доступной.

При такой схеме единственный способ иметь коллизии - это когда к коммутатору подключено более одного устройства или друг к другу через некоммутируемый концентратор (порты на некоторых моделях домашнего Wi-Fi-маршрутизатора все еще не подключены) или когда связь между коммутатором и устройством работает в полудуплексном режиме .

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

Джоэл Коухорн
источник
1
Плохо, но на уровне Ethernet это будут кадры, а не пакеты .
Jcaron
1
@jcaron Nit-nit-picking: Конечно, обычно мы используем «пакет» для обозначения «IP-пакета», который организован в соответствии с RFC 791 и является «данными клиента MAC» кадра Ethernet. Но «Ethernet-пакет» определяется как все передаваемое, включая начало преамбулы до конца битов расширения; и «кадр» - это часть от адреса назначения до проверки кадра. (802.3-2015 Раздел 3.1.1 «Формат пакета»). Я бы сказал, что коммутатор обеспечивает одновременную отправку одного Ether- пакета и сохраняет и пересылает Ether- кадры .
Джонатанхо
5

Я думаю, что вам нужно получить некоторое общее представление о том, как работает Ethernet. Например, отправляющий хост отправит преамбулу чередующихся единиц и нулей, чтобы привлечь внимание принимающего хоста. Когда принимающий хост видит два подряд, он знает, что следующий кадр. После того как кадр передан, на линии должно быть 96 секунд, прежде чем будет отправлен другой кадр.

Различные стандарты Ethernet будут использовать разные кодировки. Например, 100Base-T использует 4B5B, который отправляет пять битов на каждые четыре бита данных.

Рон Мопин
источник
1

(Для этого вопроса я предполагаю, что общая сеть Hub.)

Сетевые адаптеры читают входящие биты в одном потоке?

Да. Независимо от реализации PHY, это один входной поток. Связь от нескольких устройств не может успешно прийти к одному NIC (MAC-адресу) одновременно.

Я предполагаю, что с точки зрения сетевого адаптера устройства 3 все 0 и 1 встречаются в одном потоке данных "

«единственный поток» - да, но в вашем примере двух устройств, отправляющих одновременно, поток данных, поступающих для дальнейшей обработки, не будет; «кадры» из 1 и 0 будут сталкиваться.

Он может выяснить, какие данные поступают с устройства 1 или 2, но данные по-прежнему представляют собой один поток из миллионов / миллиардов битов.

Не это не может. Когда сигналы объединяются, обнаруживается коллизия, и кадр отбрасывается.

Я совершенно не прав?

Название вашего вопроса - правильное утверждение, но ваше обсуждение в вашем посте Q намекает на то, что ваше понимание и гипотеза неверны.

Дальше

  • Независимо от типа «сетевого адаптера» они получают только один поток битов.
  • Физические средства для передачи сигнала могут включать в себя несколько подпотоков данных, но эти подпотоки и такая физическая обработка не считаются «сетевым адаптером»; эти подпотоки зависят от кода, их необходимо объединить, чтобы иметь смысл; и эти подпотоки должны происходить из одного источника.
  • Если вы не уверены в этом ответе (и других ответах здесь), вам необходимо изучить основы сетей с коммутацией пакетов Ethernet / IP.
Тодд
источник
В этом вопросе я полагаю, что общая сеть-концентратор - OP ссылается на Gigabit NIC, а полудуплексный режим (практически) не существует для GbE. ;-)
Zac67
@ Zac67 Я как щедрый и услужливый человек. Я предположил, что ОП выбрал «Гигабит» произвольно и что они не понимали, что будет противоречие. Это позволило мне в конечном итоге ответить на заголовок вопроса прямо и просто. ОП может прочитать другие ответы, чтобы узнать больше о противоречии.
Тодд