Зачем нам нужно разделять / разбивать данные во время их передачи по сети?

421
Darshan L

В сети, если приложение может генерировать поток данных, то почему данные не могут передаваться по сети в виде потока данных? Вместо этого, почему это перед тем, как отправлять по сети, нарезается / разбивается на куски?

2

2 ответа на вопрос

3
davidgo

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

Есть много причин разбивать данные на пакеты, в том числе -

  • В случае ошибки необходимо отправить только небольшой фрагмент данных.
  • Если несколько устройств совместно используют соединение (что почти всегда так, особенно если небольшие сети объединяются в более крупные, разбиение данных на пакеты позволяет нескольким соединениям работать более или менее одновременно).
  • Соответственно, это позволяет нескольким приложениям совместно использовать одно соединение.
  • Аналогично - например, в случае VOIP или интерактивного трафика, использование пакетов позволяет одновременно общаться двум людям друг с другом (думайте, что это полный дуплекс, а не полудуплекс).
  • Если промежуточное соединение разорвано или перегружено и используется совместно с другим соединением, данные должны быть разорваны, чтобы воспользоваться этими ссылками.
  • На аппаратном уровне данные, отправляемые порциями, проще и эффективнее.

Сегментация отличается - она ​​группирует компьютеры и позволяет вам сконцентрировать доступ / контроль доступа между различными группами компьютеров и обеспечивает гибкость маршрутизации.

Хороший ответ - я бы уделил больше внимания «обмену» ссылкой - [с коммутацией пакетов] (https://en.wikipedia.org/wiki/Packet_switching) и [с коммутацией каналов] (https://en.wikipedia.org / вики / Circuit_switching). Кроме того, как вы коснулись "_hardware level_", возможно, стоит упомянуть буферизацию / MTU / где размещаются данные после получения / etc ... Attie 6 лет назад 0
Вы упомянули - «На аппаратном уровне данные, передаваемые порциями, проще и эффективнее». Будет ли в состоянии предоставить более подробную информацию об этом? Как более эффективно отправлять данные в виде кусков? Мне просто стало интересно это понять. Darshan L 6 лет назад 0
Я не специалист по аппаратному обеспечению, но в самом общем смысле - вычисления можно рассматривать как способы выполнения вычислений / перемещения блоков памяти. Позволяя ЦП выдвинуть блок -ячейки - 1500 байт - на сетевую карту и разгрузив передачу его за 1 операцию, ему нужно в 1500 раз меньше работы, чем если бы ему приходилось непрерывно отправлять / передавать 1 байт за раз , во время мониторинга, чтобы увидеть, если это было нормально, чтобы отправить следующий. Как только вы отправляете больше 1 байта (на самом деле 1 бит), вы пакетируете данные - это просто вопрос того, насколько велики пакеты. davidgo 6 лет назад 0
3
psusi

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

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