Category: литература

Category was added automatically. Read all entries about "литература".

Международная стандартизация сетевых протоколов

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

25. Назовите два преимущества и два недостатка наличия международных стандартов для сетевых протоколов.


Прежде, чем ответить на этот вопрос, выскажу несколько соображений по теме.

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

Во-вторых, в поисках ответа на этот вопрос в интернете я заметил, что в число недостатков стандартизации сетевых протоколов очень многие включают что-то вроде следующего, цитата: «All companies and manufactures must follow the standards instead of developing new techniques». Мой перевод на русский: «Все компании и производители должны следовать стандартам вместо разработки новых технологий».

В подразделе «1.6. Стандартизация сетей» книги Таненбаума объясняется, почему это суждение является неверным. Цитирую из книги: «Разумный человек предположит, что стандарт разъясняет, как работает протокол, чтобы вы могли сделать его хорошую реализацию. И этот человек оказывается неправ». На самом деле, стандарт сетевого протокола определяет только то, в чем стороны сетевого обмена данными нуждаются, чтобы их сетевое оборудование было совместимо друг с другом: не больше и не меньше.

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

Итак, излагаю мой вариант списка преимуществ и недостатков международной стандартизации сетевых протоколов.

Преимущества:

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

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

Недостатки:

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

Сравнение Ethernet и Wi-Fi

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

24. Ethernet и беспроводные сети имеют много общего, но есть и различия. Одним из свойств Ethernet является возможность передачи только одного кадра в каждый момент времени. Унаследовал ли стандарт 802.11 это свойство?


Сначала нужно пояснить, о чем идет речь. Упомянутые в вопросе технологии используются в локальных вычислительных сетях (ЛВС). А, конкретнее, на канальном уровне сетевой модели.

«Ethernet» — это семейство технологий проводной передачи данных по сети, для которых создано описывающее эти технологии семейство стандартов «IEEE 802.3» или просто «802.3». «Wi-Fi» — это семейство технологий беспроводной передачи данных по сети, для которых создано описывающее эти технологии семейство стандартов «IEEE 802.11» или просто «802.11».

На канальном уровне сетевой модели обмен данными происходит в виде обмена так называемыми «кадрами» (по-английски «frame»). От вышестоящих уровней сетевой модели на канальный уровень передаваемые данные передаются уже порубленными на кусочки. На канальном уровне к каждому из этих кусочков данных спереди и сзади добавляются служебные данные канального уровня. Получившиеся «пакеты» и называются «кадрами»:
https://ru.wikipedia.org/wiki/Кадр_(телекоммуникации)

Как работает оригинальный или так называемый «классический» Ethernet? Все машины в этом случае присоединены к одному общему кабелю, который еще называют «общей шиной». При возникновении у одной из машин, подсоединенных к общей шине, необходимости в передаче данных машина-отправитель передает на общую шину кадр данных, который получают все остальные присоединенные к общей шине машины. Каждая из машин-получателей проверяет в служебных данных кадра адрес получателя и если этот адрес совпадает с адресом данной машины, то она получает этот кадр. А если адрес не совпадает, то машина игнорирует этот кадр. То есть «классический» Ethernet работает по широковещательному принципу (по-английски «broadcast»). Отсюда, кстати, и происходит название «Ethernet»: английское слово «ether» переводится на русский как «эфир». Тут аналогия с радиоэфиром или телеэфиром — они тоже работают по принципу широковещания.

В наше время, правда, «классический» Ethernet используется редко. Сегодня предпочитают пришедший ему на смену «коммутируемый» Ethernet с использованием сетевых коммутаторов (по-английски «switch»). В «коммутируемом» Ethernet кадр данных получает только машина-получатель, которая изначально и являлась адресатом этого кадра данных. Такой принцип передачи данных по-английски называется «unicast».

Что означает фраза «возможность передачи только одного кадра в каждый момент времени» из вопроса? Предположим, у нас есть сеть с общей шиной, к которой присоединен десяток машин. Если только одна машина из этого десятка хочет в данный момент времени передать кадр данных, то проблем не возникнет. Однако, что будет, если в данный момент времени сразу две или более машины захотят передать кадр данных? Произойдет так называемая «коллизия» и все передаваемые в этот момент кадры данных будут потеряны. То есть в любой момент времени успешно передавать по общей шине кадр данных может только одна из присоединенных к этой общей шине машин. Чтобы избежать коллизии, машина-отправитель перед попыткой отправления кадра данных «прослушивает» общую шину и, если общая шина не занята, начинает передавать кадр данных. Если же общая шина в этот момент занята, машина-отправитель немного ждет и после этого пытается отправить кадр данных еще раз и так далее. Тут подробнее:
https://ru.wikipedia.org/wiki/Carrier_Sense_Multiple_Access (сокращенно CSMA)

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

Однако, в случае локальных беспроводных сетей машине определить, свободен эфир или нет, мешает одно осложнение. Дело в том, что по стандарту 802.11 радиус зоны, которую может прослушивать машина, сравнительно небольшой. Поэтому машина может «видеть» только другие машины, которые входят в ее зону прослушивания. Получается, что две машины, состоящие в одной и той же локальной беспроводной сети, но находящиеся достаточно далеко друг от друга, при прослушивании эфира могут не заметить друг друга и начать передачу кадра данных одновременно. Для решения этой проблемы, естественно, придуманы решения. В книге об этом подробно рассказано в подразделе «1.5.3. Беспроводные ЛВС: 802.11».

Передача картинки по сети

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

23. Имеется несжатое изображение размером 1600 × 1200 пикселов, 3 байта/пиксел. Сколько времени потребуется на его передачу с помощью модема, работающего со скоростью 56 Кбит/с? С помощью кабельного модема, работающего на 1 Мбит/с? По Ethernet со скоростью передачи 10 Мбит/с? По Ethernet со скоростью 100 Мбит/с? По гигабитной Ethernet?


Про то, что такое «пропускная способность» и «Ethernet», было в предыдущем посте по теме.

Почему для хранения одного пикселя изображения используется 3 байта? Пиксель изображения характеризуется его цветом. Например, для хранения одного пикселя черно-белого изображения можно использовать один бит: 1 — черный цвет, 0 — белый цвет (или наоборот). Для хранения одного пикселя избражения, в котором используется большее количество цветов, потребуется уже несколько битов (или даже несколько байтов). Например, для хранения одного пикселя изображения, в котором цвет каждого пикселя может принимать одно значение из 16 777 216 возможных, потребуется 24 бита или 3 байта. Тут подробнее:

https://ru.wikipedia.org/wiki/TrueColor

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

Вообще, этот вопрос — один из самых простых к этой главе книги.

Вычислим размер изображения:

1600 * 1200 * 3 = 5 760 000 байт или
5 760 000 * 8 = 46 080 000 бит

Вычислим время на передачу этого изображения по сетям с разной пропускной способностью:

1) 46 080 000 бит / 56 Кбит/с = 46 080 000 / 56 000 = 822,86 с = 13,71 мин

2) 46 080 000 бит / 1 Мбит/с = 46 080 000 / 106 = 46,08 с

3) 46 080 000 бит / 10 Мбит/с = 46 080 000 / (10 * 106) = 4,608 с

4) 46 080 000 бит / 100 Мбит/с = 46 080 000 / (100 * 106) = 0,4608 с

5) 46 080 000 бит / 1000 Мбит/с = 46 080 000 / (1000 * 106) = 0,04608 с

Число хостов в интернете

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

19. Интернет удваивается в размерах приблизительно каждые 18 месяцев. Точное число хостов неизвестно, но один аналитик в 2009 году назвал цифру в 600 млн хостов. Сколько будет хостов в Интернете в 2018-м году? Вы сами верите в это? Поясните свою точку зрения.


Как я уже писал, рассматриваемая пятая редакция книги Таненбаума вышла в 2011 году. Очевидно, что сегодня, в 2020-м году, вопрос про прогноз на 2018-й год является неактуальным. Но мы можем представить, будто находимся в 2009-м году, и просто сделаем математические расчеты на основе заданных условий.

Возможно, что данная задача имеет связь с так называемым «законом Мура», но я не буду тут отвлекаться на историю информационных технологий.

«Удваивается» означает умножение 600 млн хостов каждые 18 месяцев на 2. То есть каждые полтора года 600 млн хостов умножаются на очередную степень двойки:

2009 год: 20 * 600 млн = 600 млн
2009 + 1,5: 21 * 600 млн = 1200 млн
2012 год: 22 * 600 млн = 2400 млн
и так далее.

Между 2009 и 2018 годом прошло 9 лет. 9 лет содержат 6 раз по 1,5 года, а следовательно:

2018 год: 26 * 600 млн = 64 * 600 млн = 38 400 млн.

Это и есть ответ, но мы пойдем немного дальше. Обозначим номер каждой полуторалетки латинской буквой x, а количество хостов латинской буквой y. Тогда для вычисления количества хостов через заданное количество полуторалеток можно использовать такую функцию:

y = 2x * 600 млн.

А если мы хотим знать количество хостов через заданное число лет, а не полуторалеток? Для этого в вышеуказанной функции степень двойки разделим на 1,5. Получится следующая функция:

y = 2x/1,5 * 600 млн.

На первый взгляд выглядит громоздко, но легко ложится в электронные таблицы или в разнообразные системы построения графиков. Всё это, как известно, сегодня можно легко делать онлайн. Вот таблица количества хостов по годам (для вычислений я использовал формулы в электронных таблицах «Google») и график вышеуказанной функции (построен с помощью онлайн-сервиса http://www.yotx.ru, здесь X — количество лет, прошедших с 2009 года, Y — количество хостов в млн):

ГодХосты, млн
2009600,00
2010952,44
20111 511,91
20122 400,00
20133 809,76
20146 047,62
20159 600,00
201615 239,05
201724 190,48
201838 400,00
201960 956,20
202096 761,94

Население нашей планеты на ноябрь 2020 года составляет 7827 млн человек. Если бы на одного человека в интернете приходился бы максимум только один хост, то, очевидно, количество хостов не могло бы превысить количество человек на Земле.

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

Если начальные условия и допущения задания верны, то на сегодня (2020 год) на каждого человека на нашей планете уже приходится (96 761,94 / 7827 = 12,36) около 12 хостов, подключенных к интернету.

Верю я в это или не верю — это не вопрос науки. Вера — прерогатива религии.

Бомбим подсеть

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

18. Подсеть на рис. 1.22, б проектировалась таким образом, чтобы выстоять во время ядерной войны. Сколько бомб потребуется, чтобы разбить сеть на две изолированные части, если одна бомба разрушает узел со всеми линиями, подходящими к нему.


Сначала разберем предысторию рисунка 1.22, б. На предыдущем рисунке 1.22, а в книге изображен пример организации телефонной сети:
Маленькими черными точками здесь изображены телефонные коммутационные станции, каждая из которых соединена с тысячами телефонов. Здесь речь идет не о мобильных телефонах, а о стационарных телефонах, которые работают через провода.

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

Очевидно, что если противник уничтожит (разбомбит, к примеру) одну из станций более высокого уровня, то сразу множество обычных телефонных коммутационных станций окажется отсоединенным от основной телефонной сети и абоненты этих станций окажутся без связи.

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

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

Крайний справа рисунок из этих трех и обозначен в книге как 1.22, б. Очевидно, что уничтожение противником любой одной из рядовых телефонных коммутационных станций при такой архитектуре телефонной сети не приведет к разделению этой телефонной сети на две изолированные части. Все «выжившие» рядовые телефонные коммутационные станции останутся связанными в обход уничтоженной станции.

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

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

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

На рисунке ниже я привел два примера (А и Б) отделения от основной сети изолированной части из двух станций. В примере Б всё должно быть понятно: после объединения станций в одну станцию к ней подходят три линии, поэтому для изолирования этих двух станций от основной сети потребуется три бомбы. В примере А, однако, линий к нашей объединенной станции на первый взгляд подходит четыре, а бомбы требуется только три. Почему так? На самом деле, линии под номерами 2 и 3 после объединения наших двух станций тоже должны объединиться в одну, так как они выходят из одной станции и входят в одну (объединенную) станцию. Поэтому линий будет три и бомбы потребуется тоже три.
Изложенный метод можно распространить на отделение от основной сети изолированной части из трех, четырех и так далее станций.

Различие между протоколами TCP и UDP

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

17. В чем основное различие между протоколами TCP и UDP?


Ответ на этот вопрос содержится в разделе 1.4.2 «Эталонная модель TCP/IP» книги, подраздел «Транспортный уровень».

TCP (Transmission Control Protocol, по-русски «протокол управления передачей») — надежный протокол с установлением соединений.

UDP (User Datagram Protocol, по-русски «протокол пользовательских датаграмм») — ненадежный протокол без установления соединений.

TCP можно ассоциировать с разговором по телефону (перед разговором требуется установление соединения, после окончания разговора соединение разрывается; порядок пакетов (сегментов) сохраняется), а UDP можно ассоциировать с отправкой писем по почте (установление соединения не требуется; порядок пакетов (датаграмм) может нарушаться).

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

В книге приводятся примеры, в которых выгоднее использовать UDP: передача речи или видео. В этих случаях важна своевременная доставка пакетов, а не надежность доставки. То есть, к примеру, в случае передачи речи (IP-телефония) небольшие искажения звука можно вытерпеть, а вот задержки в передаче звука (к примеру, из-за ожидания машиной-источником подтверждения успешного получения предыдущих пакетов) недопустимы. Так же и в случае передачи видео — потеря информации о нескольких пикселях не так уж и важна, а вот временные внезапные остановки (торможения, спотыкания) при передаче по сети видео недопустимы.

Многоуровневая система, сообщения, заголовки

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

16. Система обладает n-уровневой иерархией протоколов. Приложения обмениваются сообщениями длиной M байт. На каждом из уровней добавляется заголовок из h байт. Какой процент пропускной способности занят заголовками?


Это довольно простая задача, если представлять, о чем идет речь. Подробно об этом написано в книге Таненбаума, в подразделе 1.3.1, который называется «Иерархия протоколов».

«Система» представляет собой две машины (два компьютера), общающихся через сеть. Сообщение проходит через стопку (стек) уровней на одной машине (от верхнего уровня к нижнему), затем по физической среде передачи на другой компьютер, где проходит через такую же стопку (стек) уровней, только в обратном порядке (от нижнего уровня к верхнему). Все это объясняется в книге Таненбаума и иллюстрируется понятными картинками.

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

Итак, в нашей упрощенной системе сообщение проходит на машине-источнике через стопку слоев от верхнего к нижнему, постепенно увеличиваясь в размерах из-за добавления очередного заголовка на каждом из слоев:

Размер сообщения на верхнем слое = h + M байт
Размер сообщения на слое, который лежит ниже верхнего = h + h + M байт
...
Размер сообщения на нижнем слое = n * h + M байт

После этого сообщение размером n * h + M байт проходит по физической среде передачи на машину-приемник, а там проходит через стопку слоев от нижнего к верхнему, постепенно уменьшаясь до M байт на самом верхнем слое (на каждом слое от сообщения отнимается соответствующий заголовок в h байт).

Предполагается, что физическая среда, по которой передаются сообщения, постоянно полностью занята передачей сообщений размером n * h + M байт. А это значит, что содержание заголовков в этом потоке сообщений сопоставимо содержанию заголовков в одном-единственном сообщении, то есть равно следующему отношению:

n * h
----------
n * h + M

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

Связь между службой и протоколом

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

14. На рис. 1.16 изображен некоторый сервис. Подразумевается ли наличие других сервисов на этом рисунке? Если да, то где? Если нет, то почему?


Речь идет про вот этот рисунок:


Этот рисунок разбирается в подразделе 1.3.5 «Службы и протоколы» книги Таненбаума. На самом деле, про службы и протоколы в книге уже рассказано раньше, а этот подраздел в оригинале называется «The Relationship of Services to Protocols» (по-русски «Связь служб с протоколами»), то есть в этом подразделе, в первую очередь, разбирается именно связь между этими понятиями. Самим понятиям тоже в очередной раз даются определения.

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

На рисунке служба (сервис) изображена вертикальной линией со стрелками на концах. На одном конце стрелка указывает вверх, на другом — вниз. Из этого можно сделать вывод, что на рисунке изображены 4 службы: две в рамках хоста слева, две — в рамках хоста справа. В рамках каждого хоста один сервис обеспечивается уровнем k — 1 для уровня k, а второй сервис обеспечивается уровнем k для уровня k + 1.

Переговоры в сетевых протоколах

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

13. Что означает термин «согласование» (negotiation) в контексте обсуждения сетевых протоколов? Приведите пример.


Мне в англоязычных текстах слово «negotiation» обычно встречается в значении «деловые переговоры» или «торговые переговоры». Тут еще можно вспомнить имеющееся в русском языке слово «негоциант», пришедшее к нам из латыни и означающее «торговец». Оно устаревшее, но, к примеру, его используют авторы фэнтези, потому что действие фэнтези часто происходит в антураже Средних веков.

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

Цитата из англоязычного оригинала:

In some cases when a connection is established, the sender, receiver, and subnet conduct a negotiation about the parameters to be used, such as maximum message size, quality of service required, and other issues. Typically, one side makes a proposal and the other side can accept it, reject it, or make a counterproposal.

Официальный перевод:

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


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

Должно быть что-то вроде следующего:

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


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

Пример использования этого термина в контексте сетевых протоколов:
https://en.wikipedia.org/wiki/Autonegotiation
https://ru.wikipedia.org/wiki/Автосогласование

Надежный поток байтов VS надежный поток сообщений

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

12. Представим себе две сети, предоставляющие надежные, ориентированные на соединение службы. Одна из сетей обеспечивает надежный поток байтов, а другая — надежный поток сообщений. Идентичны ли эти сети? Если да, то почему проводится различие? Если нет, объясните на примере, чем они отличаются.


Ответы на вопросы этого задания содержатся в книге Таненбаума в подразделе 1.3.3 «Службы на основе соединений и службы без установления соединений».

Первый вопрос — «Идентичны ли эти сети?» — это неправильный перевод. В оригинале речь идет про сравнение служб (сервисов), предоставляемых двумя разными сетями. То есть на самом деле вопрос звучит как «Идентичны ли эти службы?».

Эти службы не идентичны, но имеют несколько сходных черт, так как они обе являются надежными и ориентированными на соединение.

Под «надежностью» обычно подразумевают то, что получатель сообщает отправителю о получении каждой порции данных. Плюс в том, что отправитель точно знает, какие порции данных получатель получил, а какие — нет. Минусы в том, что отправка подтверждений создает дополнительную нагрузку на сеть (увеличивает «накладные расходы», по-английски «overhead») и система подтверждений может создавать задержки в передаче, вызванные тем, что отправитель ожидает подтверждения от получателя и только потом отправляет следующую порцию данных.

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

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

Чем же отличаются два указанных в тексте задания сервиса (службы)?

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

В качестве примера использования службы «надежный поток сообщений» в книге Таненбаума приводится отправка страниц книги по сети (каждая страница книги — отдельное сообщение в последовательности сообщений) на фотонаборное устройство (по-английски «phototypesetter»).

В качестве примера использования службы «надежный поток байтов» в книге Таненбаума приводится скачивание по сети кинофильма. Для этого нужен лишь поток байтов, а границы сообщений внутри фильма не нужны.