1.3.4. Транспортный уровень

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

Виртуальное соединение транспортного уровня

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

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

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

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

Управление трафиком на транспортном уровне

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

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

Увеличение пропускной способности

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

Для увеличения пропускной способности (и производительности) транспортный уровень открывает несколько сетевых соединений для одного и того же транспортного соединения. Чтобы сделать это, транспортному уровню требуется мультиплексировать и демультиплексировать передаваемые данные. Термин “мультиплексирование” означает процесс, укладывающий несколько потоков данных в один коммуникационный канал. Термин “демультиплексирование” означает обратное действие. Транспортный уровень передающего компьютера мультиплексирует (объединяет) множество сообщений в одно транспортное соединение. Принимающий данные транспортный уровень, наоборот, демультиплексирует одно соединение во множество сообщений. То, каким образом происходят эти действия, определяет, насколько эффективно транспортный уровень управляет сетевыми пакетами. Более того, это определяет производительность сети, использование ее ресурсов и пропускную способность.

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

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

Контроль за использованием сетевых ресурсов

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

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

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

Управление потоком

Проблема, возникающая, когда передатчик шлет пакеты данных быстрее, чем приемник может их обработать, решается при помощи управления потоком. Транспортный уровень, так же, как и сетевой, должен уметь управлять потоком данных. Однако транспортный уровень делает это на базе соединения “процесс-процесс”, а не “компьютер-компьютер”. Сетевой уровень управляет потоком между конечными пунктами соединения, представленными компьютерами. Транспортный уровень управляет потоком между равноправными процессами или программами. Транспортные уровни многих сетей, и Интернет в частности, управляют потоком данных так же, как и обработкой ошибок. При этом транспортные уровни обмениваются сообщениями с подтверждением о доставке. Формируя сообщения, транспортный уровень шлет среди них запросы на контроль потока, получая возможность попросить другой транспортный уровень увеличить или уменьшить скорость передачи.