Транспортный уровень
Транспортный уровень(англ. Transport layer) — 4-й уровень сетевой модели OSI, предназначен для доставки данных. При этом не важно, какие данные передаются, откуда и куда, то есть, он предоставляет сам механизм передачи. Блоки данных он разделяет на фрагменты, размер которых зависит от протокола, короткие объединяет в один, а длинные разбивает. Протоколы этого уровня предназначены для взаимодействия типа точка-точка. Пример: TCP, UDP, SCTP.
Существует множество классов протоколов транспортного уровня, начиная от протоколов, предоставляющих только основные транспортные функции, например, функции передачи данных без подтверждения приема, и заканчивая протоколами, которые гарантируют доставку в пункт назначения нескольких пакетов данных в надлежащей последовательности, мультиплексируют несколько потоков данных, обеспечивают механизм управления потоками данных и гарантируют достоверность принятых данных.
Некоторые протоколы транспортного уровня, называемые протоколами без установки соединения, не гарантируют, что данные доставляются по назначению в том порядке, в котором они были посланы устройством-источником. Некоторые транспортные уровни справляются с этим, собирая данные в нужной последовательности до передачи их на сеансовый уровень. Мультиплексирование (multiplexing) данных означает, что транспортный уровень способен одновременно обрабатывать несколько потоков данных (потоки могут поступать и от различных приложений) между двумя системами. Механизм управления потоком данных — это механизм, позволяющий регулировать количество данных, передаваемых от одной системы к другой. Протоколы транспортного уровня часто имеют функцию контроля доставки данных, заставляя принимающую данные систему отправлять подтверждения передающей стороне о приеме данных.
Прикладной уровень
Протокол прикладного уровня(англ. Application layer) — протокол верхнего (7-го) уровня сетевой модели OSI, обеспечивает взаимодействие сети и пользователя. Уровень разрешает приложениям пользователя иметь доступ к сетевым службам, таким как обработчик запросов к базам данных, доступ к файлам, пересылке электронной почты. Также отвечает за передачу служебной информации, предоставляет приложениям информацию об ошибках и формирует запросы к уровню представления. Пример: HTTP, POP3, SMTP.
Коммутация каналов и пакетов
Соединение с коммутацией каналов— вид телекоммуникационной сети, в которой между двумя узлами сети должно быть установлено соединение (канал), прежде чем они начнут обмен информацией. Это соединение на протяжении всего сеанса обмена информацией может использоваться только указанными двумя узлами. После завершения обмена соединение должно быть соответствующим образом разорвано.
Типичным примером являются ранние телефонные сети. Абонент должен попросить оператора соединить его с другим абонентом, подключённым к тому же коммутатору или иному коммутатору через линию связи (и другому оператору). В любом случае, конечным результатом было физическое электрическое соединение между телефонными аппаратами абонентов в течение всего разговора. Проводник, задействованный для подключения, не мог быть использован для передачи других разговоров в это время, даже если абоненты на самом деле не разговаривали и на линии была тишина.
Позже стало возможным уплотнение одной физической линии для образования в ней нескольких каналов. Несмотря на это, один канал уплотнённой линии также мог использоваться лишь одной парой абонентов.
Высокая стабильность параметров канала во времени.
Отсутствие необходимости в передаче служебной информации после установления соединения.
Коммутация каналов может использоваться как в аналоговых, так и в цифровых сетях связи, в отличие от коммутации пакетами, которая возможна только в цифровых сетях.
Коммутация каналов считается недостаточно эффективным способом коммутации, потому что канальная ёмкость частично расходуется на поддержание соединений, которые установлены, но (в настоящее время) не используются.
Коммутация каналов принципиально отличается от коммутации пакетов, при которой данные, которые передаются (например, оцифрованный звук или данные по компьютерной сети), разделяются на отдельные пакеты, которые отдельно передаются через сеть общего пользования.
Коммутация пакетов(англ. packet switching) — способ доступа нескольких абонентов к общей сети, при котором информация разделяется на части небольшого размера (так называемые пакеты), которые передаются в сети независимо друг от друга. Узел-приёмник собирает сообщение из пакетов. В таких сетях по одной физической линии связи могут обмениваться данными много узлов.
Основные принципы
При коммутации пакетов все передаваемые пользователем данные разбиваются передающим узлом на небольшие (до нескольких килобайт) части — пакеты (packet). Каждый пакет оснащается заголовком, в котором указывается, как минимум, адрес узла-получателя и номер пакета. Передача пакетов по сети происходит независимо друг от друга. Коммутаторы такой сети имеют внутреннюю буферную память для временного хранения пакетов, что позволяет сглаживать пульсации трафика на линиях связи между коммутаторами. Пакеты иногда называют дейтаграммами (datagram), а режим индивидуальной коммутации пакетов — дейтаграммным режимом.
Достоинства коммутации пакетов:
Эффективность использования пропускной способности.
При перегрузе сети никого не «выбрасывает» с сообщением «сеть занята», сеть просто снижает всем абонентам скорость передачи.
Абонент, использующий свой канал не полностью, фактически отдаёт пропускную способность сети остальным.
Поэтому меньшие затраты.
Недостатки коммутации пакетов:
Сложное устройство; без микропроцессорной техники пакетную сеть наладить практически невозможно.
TCP и UDP, или Два столпа Интернета
В этой серии статей мы пытаемся описать, как работает CDN и какие технологии делают его существование возможным.
В предыдущей статье мы обсудили иерархию Интернета, разницу между средами передачи данных и путь запроса от компьютера пользователя до сервера, расположенного на другом конце земного шара. В этой поднимемся на несколько уровней выше, чтобы разобрать каким «языком» пользуются компьютеры, чтобы общаться друг с другом.
Невозможно по-быстрому рассказать обо всём, что касается устройства Интернета. Потому в этой и следующих статьях мы будем рассматривать только определённое подмножество технологий – часть между физическим уровнем и уровнем приложения.
Не будем говорить о том, как компьютеры используют электричество для представления и передачи данных. Это очень интересная тема, но слишком низкоуровневая для этого цикла.
Но и рассказывать про то, как браузер загружает страницы, тоже не будем. HTTP-запросы, сжатие, языки программирования, рендеринг страниц – всё мимо.
Что нам интересно, так это то, как данные находят путь от одного компьютера до другого.
Коммутация
Если вы достаточно стары, то скорее всего застали проводные телефоны, которыми раньше активно пользовалось человечество. А может, у вас даже до сих пор есть такой! В таком случае, скорее всего вы знаете, что вот ещё лет сто назад они работали в полуавтоматическом режиме.
Сперва вам нужно было поднять трубку и сказать телефонисту (который был реальным человеком), что вы хотите, чтобы вас соединили с вашим знакомым из другого города. Телефонист выслушал бы ваш запрос, повесил бы трубку, а позже перезвонил бы уже с вашим другом «на линии» (on line – пер.).
Чего вы возможно можете не знать, так это того, что происходило за кадром. А там телефонист переключал кабели между портами, чтобы соединить вас с вашим другом:

Телефонистки в Bell System обслуживают межконтинентальные звонки, 22 декабря 1943
То, что происходит на картинке – это коммутация каналов. Коммутация каналов – это способ соединения двух узлов сети, при котором между ними устанавливается выделенный канал связи. Через этот канал и происходит общение. Иными словами, когда вы звонили другу, кто-то или что-то в буквальном смысле строил путь из кабелей между вами.
Как нетрудно догадаться, подобный тип коммуникаций не очень-то подходит для Интернета, потому что мы постоянно подключаемся к огромному количеству серверов по всему миру. Строить такую высоконагруженную сеть на основе коммутации каналов было бы слишком безумно. Да и было бы слишком дорого создавать такую сеть, не говоря уже о её поддержке.
Вместо этого Интернет построен на основе коммутации пакетов. При таком способе построения сети, для создания соединения между двумя узлами не требуется физического переключения кабелей. Когда мы посылаем сообщение от одного компьютера к другому, это сообщение проходит через различные сети, каждая из которых сама решает, куда лучше его отправить.
С какой-то точки зрения это может звучать безумно, но по сути в Интернете нет какого-то главного «координатора», который бы решал, по какому пути каждый пакет должен идти. Наш компьютер просто «бросает» пакет в сеть, и все устройства, через которые он проходит, пытаются решить, какой путь для этого пакета будет наиболее оптимальным. Удивительно, но в большинстве случаев, у этих устройств получается достигнуть поставленной цели. Всё благодаря протоколам!
Протоколы
Протокол – это набор правил, определяющий, как узлы сети должны передавать данные друг другу. Вы скорее всего слышали про высокоуровневые протоколы – HTTP, SSH, IMAP, DHCP.
В сфере телекоммуникаций огромное количество протоколов, каждый из которых решает какую-то свою задачу. Из-за того, что их много, есть даже специальные модели, определяющие «уровни протоколов». Если представить, что ваше сообщение, – это конфета, то протоколы в каком-то плане играют роль обёрток для этой конфеты.
Предположим, что вы заказали в подарок своему другу большую плитку вкусного шоколада от местной шоколадной фабрики.
Первым делом плитку шоколада запакуют в обёртку. Затем всё это положат в брендированный пакет. После этого, кто-нибудь в отделе доставки увидит, что это шоколадка – подарок, а потому пакет дополнительно украсят, дабы всё выглядело подобающе. Наконец, фабрика передаст пакет с подарком почтовой компании.
Почтовая компания же, получив пакет, запакует его в коробку и напишет на ней адрес вашего друга. Наконец, они погрузят всё это в грузовик и отправят в точку выдачи.
Когда грузовик приедет в точку выдачи, процесс пойдёт в обратную сторону: сперва выгрузят, потом проверят адрес получателя, распакуют коробку и так далее.
Весь этот процесс оборачивания-разворачивания шоколадки – ровно то, как работают протоколы в Интернете:

Ну, исключая тот факт, что с протоколами всё куда сложнее, чем с шоколадками
История OSI и TCP/IP
Так сложилось, что есть две модели, описывающие уровни протоколов. Одна из них теоретическая – модель OSI, а другая практическая – TCP/IP.
В 70-80-х годах прошлого столетия в сфере телекоммуникаций было много проблем, но и много возможностей. Тогда ещё не было такого Интернета, каким мы его знаем сегодня. Была лишь куча сетей, созданных разными компаниями. И этим сетям нужен был какой-то общий «язык» для общения, или скорее стандарт. А потому многие инженеры работали над тем, чтобы этот самый стандарт создать. Если говорить грубо, то для нас важно то, что в конечном итоге эти люди разделились на две группы.
Первая верила, что подобный стандарт должен создаваться открыто, со всеобщим обсуждением, с решением всех возникающих проблем и вопросов. Чтобы всем было удобно. Эта группа назвала стандарт, который она пыталась создать, – OSI, или Open Systems Interconnection.
Другая группа пошла иным путём, и начала разрабатывать и тестировать протоколы на основе тех сетей, что у них уже были. Так они создали TCP – Transmission Control Protocol, и IP – Internet Protocol. Изначально эти два протокола были частью одного большого, но впоследствии были разбиты на два для упрощения работы с ними.
Эта группа успешно протестировала протокол и перевела сети, которые были под её руководством, на него. Это случилось первого января 1983-го года. Так что, можно сказать, что это день, когда родился Интернет.
После этого TCP/IP начал набирать популярность, потому что он «просто работал». Плюс, эта модель была бесплатной, в то время как авторы OSI хотели взимать деньги со всех, кто пользовался бы их стандартами.
И что в итоге стало с OSI? Инициатива провалилась. Из-за идеи «открытости» те, кто принимал тогда решения, потратили очень много времени на обсуждения и споры. Часть из них лоббировали идеи, которые были выгодны большим корпорациям. Из-за других же дискуссии постоянно увязали в обсуждении незначительных деталей.
Однако, несмотря на то, что OSI как сетевая модель не нашла своего применения в реальном мире, она всё ещё остаётся хорошей теоретической моделью, описывающей уровни протоколов. Но модель, которая была имплементирована и захватила мир – TCP/IP.
Вот, как выглядят уровни протоколов в этих моделях:

TCP/IP
Обычно, когда обсуждают OSI и TCP/IP, пытаются сравнить эти модели и найти соответствия между их уровнями. Хоть картинка выше и выглядит как сравнение, мы не будем этого делать, потому что то, как соотносятся их уровни, не особо важно для нашей статьи. Да и «многоуровневость» как таковая «может быть вредной», если верить RFC 3439.
Ключевые протоколы модели TCP/IP, очевидно, TCP и IP. Всё остальное в этой модели описано довольно туманно, и даже авторы учебников и справочников по сетям не могут сойтись на чётких названиях и количестве уровней в этой модели.
Есть ли физический уровень под уровнем сетевого доступа? Нужно ли вообще называть уровень сетевого доступа так, или это всё же «канальный уровень»? Вокруг TCP/IP много таких вопросов. Однако, всё это не так важно, потому что основная суть стека очень простая.
Предположим, есть два приложения в сети, которые хотят обменяться данными. Пусть один из них сгенерирует сообщение. Не важно, какое именно. Это может быть HTTP-запрос, а может и нет. Это сообщение генерируется на уровне приложения.

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

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

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

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

Если вы не читали предыдущую статью, то знайте, что синий прямоугольник – это сервер Гугла. Автор этой статьи определённо точно непризнанный художник
То работа протоколов на пути этого сообщения выглядит так:

В начале и конце передачи участвуют протоколы всех уровней TCP/IP-стека. Промежуточные же ноды обычно работают только с протоколами канального и межсетевого уровней
Окей, теперь мы знаем, что модель TCP/IP определяет протоколы транспортного и межсетевого уровней, но не особо тщательно описывает протоколы прикладного и канального уровней. Давайте теперь посмотрим на транспортный уровень чуть поближе.
TCP и UDP
Транспортный уровень модели TCP/IP основан на двух китах: Transmission Control Protocol и User Datagram Protocol. Есть и другие протоколы на этом уровне (например, QUICK), но они не так часто используются.
Протоколы транспортного уровня используются для адресации пакетов с порта приложения отправителя на порт приложения получателя. Более того, протоколы этого уровня не знают ничего про различия в узлах сетей. Всё, что им требуется знать про адресацию, это то, что есть приложение, отсылающее сообщение, и оно для отправки использует какой-то порт. И приложение, которое получает сообщение, тоже использует какой-то порт. Основная «адресация внутри Интернета» же реализована на межсетевом уровне, и будет описана в следующей статье.
UDP куда «легче» и проще, чем TCP, но в то же время UDP не такой надёжный, как TCP. Чтобы посмотреть на разницу между ними поподробнее, давайте начнём с User Datagram Protocol.
User Datagram Protocol
Этот протокол используется для «связи без установки соединения» (connectionless communication – пер.). Один узел сети просто отсылает пакеты, адресуя их другому узлу. Отправитель не знает ничего о том, готов ли получатель к приёму пакетов, и вообще, существует ли этот получатель. Отправитель также не ждёт какого-либо подтверждения о том, что получатель принял предыдущие пакеты.
Пакеты, передаваемые с помощью UDP, иногда называются датаграммами. Этот термин обычно используется тогда, когда важно подчеркнуть, что пакет передаётся без установки соединения.
Заголовок UDP-пакета состоит из 8 байт, которые включают в себя:
Вот так просто. Типичная UDP-датаграмма выглядит так:

Payload – это полезная нагрузка; сообщение, которое датаграмма должна передать получателю
Пробуем
UDP-сервер очень просто поднять самому. Вот, например, такой сервер, написанный на Node.js ровно так, как об этом сказано в официальной документации:
Давайте ж запустим его:
Теперь мы можем использовать netcat для отправки датаграмм из соседнего окна терминала:
Наш сервер успешно логирует отправленные нами датаграммы после их получения:
Как видите из логов выше, netcat решил использовать порт 55823 для отправки пакетов. Если мы возьмём Wireshark и перехватим эти пакеты, то увидим следующее:

Быстрый гайд по Wireshark. Вверху – лог пакетов и его фильтр, под ним – содержимое выбранного пакета в логе. Данные в квадратных скобках не содержатся в пакете, а вычислены Wireshark. В самом низу – текстовое представление выбранного пакета.
Если не хотите поднимать Node.js-сервер и перехватывать трафик самостоятельно, но хочется потыкать в Wireshark, качайте дамп-файл.
Итак, что у нас тут? Порт отправителя – 55823, тот, что выбрал netcat. Порт получателя – 8082, тот, что указан у нас в настройках сервера. Длина пакета 48 байт, потому что 8 из них – это заголовок, а ещё 40 – наше сообщение. И в конце контрольная сумма, указанная netcat.
Как видите, в логе Wireshark нет никаких ответов от сервера, а потому клиент не может быть уверен, что сервер действительно получил его датаграммы. По этой причине UDP используется там, где не страшно потерять часть сообщений. Например, при видео- или аудио-стриминге. Да, можно использовать для этого и TCP, но, как вы увидите чуть через минуту, использование TCP замедлило бы в таком случае передачу данных.
Справедливости ради, хоть UDP и не предполагает наличия подтверждений о получении сообщений, мы всё ещё можем узнать о том, что получатель недоступен. С помощью ICMP. Попробуйте отправить сообщения используя netcat, не включив перед этим UDP-сервер, и посмотрите, что будет в логах Wireshark. Вот, что вы там увидите; а вот дамп-файл.
Transmission Control Protocol
Если UDP простой и не требующий установки соединения, то TCP – сложный и требующий. Перед тем, как начать передачу данных, клиент и сервер должны подключиться друг к другу и договориться о том, как они будут осуществлять эту самую передачу.
В отличие от датаграмм в UDP, пакеты, создаваемые TCP, называются сегментами.
А вот, некоторые из тех задач, что решает TCP во время передачи данных:
Убеждается в том, что сегменты доставлены в нужном порядке.
Убеждается в том, что они вообще доставлены.
Контролирует поток пакетов, чтобы не перегружать им узлы сети.
Работы много, а потому и заголовок у TCP как минимум 20 байт, а то и больше. Он включает в себя:
Транспортный уровень в OSI и TCP подробный разбор с примерами
Транспортный уровень это 4 уровень в модели взаимодействия открытых систем и 3 уровень в модели TCP/IP.
p, blockquote 1,0,0,0,0 —>

p, blockquote 2,0,0,0,0 —>
На канальном уровне мы научились передавать данные между компьютерами, либо по проводам, либо без проводов. На сетевом уровне узнали как строятся составные сети на основе разных технологий канального уровня.
p, blockquote 3,0,0,0,0 —>

p, blockquote 4,0,0,0,0 —>
Есть задача, на компьютер который подключен к составной сети приходит пакет. На компьютере работает много сетевых приложений, это может быть электронная почта, скайп, браузер и какие-нибудь другие приложения. На необходимо понять, какому приложению нужно отправить этот пакет. Взаимодействие сетевых приложений и занимается транспортный уровень.
p, blockquote 5,0,0,0,0 —>

p, blockquote 6,0,0,0,0 —>
Задачи транспортного уровня (ТУ)
Задача транспортного уровня это передача данных между процессами на разных хостах. На транспортном уровне необходимо обеспечить адресацию. Нам нужно знать для какого процесса назначен тот или иной пакет. Важной задачей ТУ является обеспечение надежности передачи данных. ТУ может предоставлять надежность более высокую, чем надежность сети которая используется для передачи данных. С другой стороны ТУ может и не предоставлять дополнительный уровень надежности, все зависит от требований конкретного приложения.
p, blockquote 7,0,0,0,0 —>
Модель OSI
Полностью модель взаимодействия открытых систем выглядит так, как показано на рисунке ниже.
p, blockquote 8,0,1,0,0 —>

p, blockquote 9,0,0,0,0 —>
Отдельно выделяются хосты, это устройства, где работают полезные пользовательские программы. И сетевое оборудование, такое как маршрутизаторы, коммутаторы и другие сетевые устройства. На сетевом оборудовании есть только 3 уровня: физический, канальный и сетевой. Уровни начиная с транспортного работают только на хостах.
p, blockquote 10,0,0,0,0 —>
Важной особенностью транспортного уровня является прямое взаимодействие с транспортным уровнем на другом компьютере.
На всех остальных уровнях взаимодействие идет, по звеньям цепи, данные передаются от одного сетевого устройства к другому и так пока не дойдут до нужного хоста.
p, blockquote 12,0,0,0,0 —>
p, blockquote 13,0,0,0,0 —>
Транспортный уровень обеспечивает сквозное соединение. Между двумя взаимодействующими хостами может находиться большое количество сетевых устройств, но они не влияют на работу транспортного уровня, поэтому ТУ называется сетенезависимым. Он позволяет скрыть от разработчиков приложений детали сетевого взаимодействия.
p, blockquote 14,0,0,0,0 —>
Адресации. Порты
Для адресации на транспортном уровне используются порты. Это просто число от 1 до 65 535. Номера у процессов на одном хосте не должны повторяться, иначе мы не сможем понять к какому конкретно процессу отправить пришедший пакет.
p, blockquote 15,0,0,0,0 —>
Записываются порты, следующим образом 192.168.1.3 :80. Выделенные жирным это IP-адрес, а 80 — это порт. Чтобы в интернете подключиться к какому-нибудь сервису и к службе необходимо указать ip адрес и соответствующий порт.
p, blockquote 16,1,0,0,0 —>
Типы портов
Если мы хотим подключиться к какому-нибудь сервису в интернете нам нужно знать не только ip адрес, но и порт. Поэтому договорились, что популярные сервисы будут работать на одних и тех же портах. Эти порты называются хорошо или широко известные порты 1-1024.
p, blockquote 17,0,0,0,0 —>

p, blockquote 18,0,0,0,0 —>
Ограничение, запускать сервисы работающие на хорошо известных портам могут только пользователи с правами администратора.
Если вы разрабатываете свой сервис, и хотите, чтобы пользователи знали на каком порту он работает, вы можете зарегистрировать этот порт в организации IANA и выбрать себе порт из диапазона зарегистрированные. Но нужно смотреть, чтобы этот порт не был зарегистрирован никаким другим разработчиком приложения.
p, blockquote 20,0,0,0,0 —>
Использование, как хорошо известных портов, так и зарегистрированных это просто договоренность. Например Web сервер может работать не только на 80 порту, но и на любом другом. Часто используется support номер 88 или 8080. При этом, когда вы подключаетесь к такому веб-серверу Вы должны указать порт на котором он работает.
p, blockquote 21,0,0,0,0 —>
Динамические порты назначаются операционной системой клиентом. Клиенту, точно также, как и серверу необходим не только ip адрес, но и порт. В случае с клиентом номер порта не имеет принципиального значения, так как клиент отправляет запрос серверу и сервер в запросе увидит, как ip адрес клиента, так и его порт. Поэтому, операционная система назначает клиентам порты автоматически из диапазона динамических портов.
p, blockquote 22,0,0,0,0 —>
IP-адреса и порты
Рассмотрим пример сетевого взаимодействия с использованием ip адресов и портов. Есть сервер на котором работает web сервер на порту №80. И есть клиент, который хочет подключиться к этому веб серверу.
p, blockquote 23,0,0,0,0 —>
Клиент открывает браузер, операционная система автоматически назначает ему порт 50298. Браузер выполняет соединение с веб сервером, запрашивает веб страницу. Web сервер отправляет ему эту страницу.
p, blockquote 24,0,0,1,0 —>

p, blockquote 25,0,0,0,0 —>
Предположим, что дальше клиент решил открыть еще один браузер и зайти на тот же самый сервер, на ту же самую веб-страницу. Операционная система автоматически назначила браузеру порт 50302. Браузер соединяется с веб-сервером, Web сервер видит в запросе не только ip клиента, но и его порт. Поэтому, когда приходит ответ он отправляется именно в тот браузер, из которого был направлен запрос, а не в другой браузер. Благодаря использованию не только ip адресов, но и портов, никакой путаницы не будет.
p, blockquote 26,0,0,0,0 —>

p, blockquote 27,0,0,0,0 —>
Надежность на транспортном уровне
Важной особенностью ТУ является то, что он может обеспечить более высокую надежность, чем сеть которая используется для передачи данных. В настоящее время это эффективно на практике, потому что используются надежные каналы связи, ошибки в этих КС происходят редко. Поэтому можно строить сеть ненадежную, которая будет стоить дешево, а ошибки, так как они возникают редко, можно исправлять программно на хостах транспортного уровня.
p, blockquote 28,0,0,0,0 —>
В модели OSI предусмотрено много различных вариантов обеспечения надежности на транспортном уровне, но на практике, чаще всего используются две возможности.
- Во-первых ТУ может гарантировать доставку данных. Так как сеть у нас не надежная, некоторые пакеты могут потеряться. Чтобы гарантировать доставку ТУ использует подтверждение. Если через определенное время не пришло подтверждение, то тот же самый пакет отправляется снова.
- Во-вторых ТУ может гарантировать порядок следования сообщений. Так как у нас сеть с пакетной коммутацией, разные пакеты могут пойти через разные маршрутизаторы. И может случиться так, что пакет, который был отправлен позже придет к получателю раньше. Чтобы решить эту проблему на ТУ используется нумерация сообщений.
Протоколы транспортного уровня TCP/IP
В стеке протоколов tcp на ТУ используется два протокола TCP и UDP. Tcp это протокол, который обеспечивает надежность доставки. Он обеспечивает гарантию доставки и гарантию порядка следования сообщений. Протокол udp не гарантирует доставку данных, но зато работает быстрее, чем протокол tcp.
p, blockquote 30,0,0,0,0 —>

p, blockquote 31,0,0,0,0 —>
Заключение
Для взаимодействия с ТУ используется интерфейс сокетов. Многие сетевые приложения взаимодействуют с ТУ. Хотя сейчас все более популярными становятся разработка сетевых приложений, которые взаимодействуют не с транспортным, а с прикладным уровнем.
Учись Учиться





Понятие транспортного уровня OSI. Адресация: с помощью идентификатора подключения, с помощью идентификатора транзакций. Управление передачей. Службы соединений: сегментация, контроль ошибок, управление доставкой.
Вы уже изучили три уровня OSI.
Что рассматривалось на физическом уровне? (передача битов). Какие устройства работают на физическом уровне? (разъемы, репитеры и многопортовые репитеры, модемы).
Что рассматривалось на канальном уровне? (формирование из потока битов кадров и передача кадров). Какие устройства работают на канальном уровне? (активные концентраторы и коммутаторы, мосты, платы сетевых адаптеров). Какая адресация используется на канальном уровне? (физическая). В каких пределах используются протоколы канального уровня? (В пределах подсети)
Что рассматривалось на сетевом уровне? (передача дейтаграмм и пакетов по интерсети). Какие устройства работают на сетевом уровне? (маршрутизаторы и шлюзы). Какая адресация используется на сетевом уровне? (сетевая или логическая). Из чего состоит сетевой адрес (физический адрес/или указатель на устройство, адрес сети и адрес порта/гнезда). В каких пределах используются протоколы сетевого уровня? (в пределах интерсети).
Протоколы предыдущих уровней передавали пакеты между устройствами. На сетевом уровне информация передается уже между сервисами, работающими на этих устройствах. Как вы знаете, на одном компьютере может быть запущено несколько сервисов, поэтому важно чтобы информация была передана в точности на нужный сервис. Транспортный уровень передает информацию между конечными сервисами.
Транспортный уровень передает пакеты данных которые также называются сегментами. Основное предназначение транспортного уровня – скрыть инфраструктуру сети от протоколов более высоких уровней. При передаче информации с более высоких уровней на транспортный, данные формируются в сегменты. Транспортный уровень другого устройства принимает сегменты (как принимает?) и (что делает дальше?) обрабатывает сегменты и передает полученную информацию на более высокие уровни.
Транспортном уровень отвечает за надежную (reliable) доставку информации. Термин «надежная» не обозначает полное отсутствие ошибок. Он говорит о том, что если произойдет ошибка, произойдет повторная передача или об этом будет сообщено более высокому уровню.
(Повторить три функции транспортного уровня).
Транспортный уровень также предоставляет средства обслуживания соединений. (На каких уровнях вы уже знакомились с обслуживанием соединений?). Давайте поговорим про смысле обслуживания соединений на транспортном уровне. Если качество каналов связи высокая и вероятность ошибок, не обнаруженных протоколами более низких уровней, невелика, то разумно воспользоваться облегченными протоколами транспортного уровня. Если средства нижних уровней ненадежны, то следует обратиться к наиболее развитому обслуживанию соединений на транспортном уровне, который использует максимум средств для обнаружения и устранения ошибок.
Следующая таблица отражает темы, изучаемые на транспортном уровне OSI.
Уровень OSI Темы Методы
Transport Address/name resolution (Определение адресов и имен) Service-requestor-initiated (по запросу)
Addressing Connection identifier (идентификатор подключения)
Transaction identifier (идентификатор транзакций)
Segment development (Сегментация) Division and combination (разделение и восстановление)
Connection services (Обслуживание соединений) Segment sequencing (упорядочивание сегментов)
Error control (контроль ошибок)
End-to-end flow control (конечный контроль потока)
Определение адресов и имен (address/name resolution)
Вы помните, чем определяется компьютер в компьютерной сети (физическим, сетевым адресом). Просто ли запомнить такой адрес (привести пример 195.151.147.4)?
Во многих компьютерных протоколах предусмотрена возможность присвоения какому-либо адресу обычного имени. (Привести пример – www.vspu.kirov.ru). Такое присвоение называется address-to-name resolution. Присвоение может производиться либо любым членом сети, либо специальным сервером – сервером директорий (directory server) или сервером имен (name server). (Что такое сервер?). Можно классифицировать два метода присвоения имен:
— по запросу (service requestor initiated method)
— по предложению (service provider initiated method)
Присвоение имен по запросу
Для определения имени или адреса какого-либо члена сети, запрашиваемый узел посылает в сеть специальный широковещательный пакет-запрос. На этот пакет отвечает владелец адреса или имени. Здесь инициатива принадлежит объекту, который запрашивает имя.
Присвоение имен по предложению
Каждый владелец имени периодически рассылает широковещательный пакет, содержащий адресную информацию. Информация собирается либо остальными членами сети, либо специальными серверами имен. Серверы имен получают эту информацию, записывают ее в специальную адресную таблицу и могут обрабатывать запросы по этим адресам. Здесь инициатива принадлежит владельцу имени.
На сетевом уровне вы уже изучили сетевую адресацию (для чего используется сетевой адрес? что входит в сетевой адрес?) В сетевой адрес входит адрес службы, называемый портом или гнездом. Но что будет происходить, если к серверу одновременно будет обращаться несколько устройств? Для этого каждый сервер (что такое сервер) должен отслеживать переговоры со своими клиентами.
Для отслеживания переговоров используются два механизма. Через
Идентификатор подключения (connection identifier, connection ID, CID)
Каждый разговор (подключение) имеет свой идентификатор. С помощью идентификатора серверы могут вести переговоры с более чем одним клиентом. Идентификатор представляет из себя число – номер разговора. Уровням выше транспортного передается этот идентификатор, что помогает им не владеть адресной информацией.
Пример: в канцелярии на каждого студента ведется личное дело. Приходит студент в канцелярию – достают личное дело с таким то номером и ведут записи.
Идентификатор транзакций (transaction identifier)
Транзакцией считается часть разговора, содержащая запрос и ответ. Разговор разделяется на несколько транзакций и каждая транзакция имеет свой идентификатор. Сервер и клиент отслеживают только транзакции, а не весь диалог в целом.
Пример: все личные дела подшиты в одну книжку и каждый студент оставляет запись о себе в журнале: студент Сидоров – запись. студент Петров – запись. При этом обрабатываются только текущие диалоги, а общей информации о Сидорове не накапливается.
Некоторые данные, передаваемые сверху на транспортный уровень, могут превышать допустимый размер для сетевого уровня. В таком случае происходит сегментация данных. К тому же размеры данных могут быть и меньше допустимых.
На транспортном уровне происходит склеивание нескольких мелких пакетов, имеющих одинаковый адрес, в один составной сегмент. (см рис. каждый пакет имеет свой CID) Такой процесс называется агрегацией (aggregation).
После принятия составного сегмента получателем, воссоздаются оригинальные пакеты. При этом производится также и их упорядочивание.
Поэтому на транспортном уровне существует самое мощное обслуживание соединений. (на каких уровнях мы рассматривали обслуживание раньше?)
На транспортном уровне также производится обслуживание соединений. (На каких уровнях обеспечивалось обслуживание?). Если на канальном и сетевом уровне обслуживалось соединение устройств, то на транспортном уровне уже могут контролироваться такие ошибки как сбой какого-либо сервиса или клиента. Средства обслуживания соединений на транспортном уровне могут дополнять обслуживание на сетевом и канальном уровнях.
Существует три типа обслуживания соединений:
1. Обслуживание соединения без подтверждений и без установления связи (Unacknowledged connectionless service), отправитель и получатель передают кадры по каналу данных. Благодаря отсутствию управления потоком и контроля ошибок достигается высокая скорость.
2. Обслуживание соединения с установлением связи и подтверждениями (Connection-oriented service). Устанавливается логическое соединение перед началом передачи любого блока данных. Выполняются процедуры контроля ошибок и управления потоком данных с помощью подтверждений.
3. Обслуживание соединения с подтверждениями без установления связи (Acknowledged connectionless services). Компромиссный вариант, отправитель и получатель передают кадры по каналу данных, при этом используют подтверждения для управления потоком и контроля ошибок. При этом не происходит временных задержек на установление связи. Используется только при соединениях типа точка-точка (point-to-point).
(Вспомнить функции на других уровнях)
Транспортный уровень осуществляет следующие функции: упорядочивание сегментов, контроль ошибок и конечный контроль потока.
Упорядочивание сегментов (segment sequence)
Транспортный уровень присваивает номера сегментам перед тем как передать их на более низкие уровни. При приеме сегменты упорядочиваются в соответствие с их именами. Такой процесс также называется синхронизацией сегментов. (segment synchronization)
Контроль ошибок (error control)
При передаче сегменты могут как потеряться, так и застрять при передаче по интерсети. Особенно часто задержки происходят при дейтаграммной коммутации. К тому же, к приемнику могут поступить разные сегменты с одинаковыми порядковыми номерами. Для устранения таких ошибок используются следующие методы:
1. Один виртуальный канал на одно подключение.
2. Каждому сегменту присвоен свой уникальный номер.
3. У каждого сегмента существует время его жизни.
К тому же, транспортный уровень должен распознавать сегменты с испорченными данными (теми сегментами, которые прибыли на место назначения, но имеют ошибки в адресах или данных). Обычно проверка целостности сегментов происходит с помощью контрольной суммы CRC. Контроля ошибок транспортного уровня обычно называются конечным контролем ошибок (end-to-end error control). Если канальный уровень несет ответственность за правильную передачу информации между устройствами, сетевой – по интерсети, то транспортный уровень уже отвечает за передачу информации между службами и серверами.
Конечное управление потоком
Слово «конечное» означает, что опять же, транспортный уровень контролирует поток между сервером и клиентом – конечными точками связи в интерсети. Управление потоком реализуется точно такими же методами, что и на канальном уровне. Но если на канальном уровне контролировался поток между (какими?) двумя устройствами (device-to-device traffic), на сетевом уровне контролировался поток через независимые устройства в интерсети, транспортный управляет потоком между конечными звеньями, непосредственно участвующими в диалоге службами. Но кроме подтверждений (как положительных так и негативных), на транспортном уровне используются дополнительные негативные подтверждения: откат на n (go back n) или выборочный повтор (selective repeat). Как вы понимаете, такие подтверждения используются при переполнении буфера службы клиента.
При получении подтверждения «откат на n» отправитель перепосылает пакеты, начиная с указанного. Соответственно при выборочном повторе посылаются только те пакеты, которые были выбиты из потока.
Транспортный уровень является связующим звеном между службами и приложениями локального компьютера и сетевыми устройствами и сетевой инфраструктурой. Транспортный уровень преобразует полученную с верхних уровней OSI информацию в вид, приемлемый нижними уровнями OSI. Транспортный уровень умеет адресовать конкретную службу, производит сегментацию и обеспечивает обслуживание соединений, доступное более высоким уровням.
1. What is the basic purpose of the OSI Transport layer?
2. Describe the difference between the connection and transaction identifier addressing methods.
3. Which of the following is not a strategy for Transport layer error control?
a. Use only datagram packet switching.
b. Make the segment sequencing numbers unique.
c. Use only virtual circuits with only one virtual circuit allowed to any given session.
d. Use timeouts to drop packets that have been passed around the network too long.
4. Two different computer types can communicate if ______.
A. they conform to the OSI model
B. they are both using TCP/IP
C. they are using compatible protocol stacks
D. they are a Macintosh and a Unix workstation
5. Which three of the following statements regarding protocol stacks are true?
A. A given protocol stack can run on only one computer type.
B. Layers add headers to packets received from higher layers in the protocol stack.
C. A protocol stack is a hierarchical set of protocols.
D. Each layer provides services for the next highest layer.
6. Which of the following is an error-control mechanism?
B. Synchronous transmission
7. Which of the following techniques uses network bandwidth most efficiently?
A. Static window flow control
B. Guaranteed rate flow control
C. Dynamic rate flow control
D. Dynamic window flow control
8. Which of the following access control methods is probabilistic?
C. Token passing
D. Sliding window
9. Which network layer is concerned with address/name resolution?
10. Which three of the following terms are related?
B. Connection ID
D. Service address
11. Which two of the following are transport layer error-control strategies?
A. Using datagram packet switching
B. Utilizing unique segment sequencing numbers
C. Using time-outs to drop packets that have remained on the network too long
D. Using parity checking to detect errors
12. Which two of the following statements are true?
A. The data link layer deals with device-to-device traffic.
B. The network layer deals with traffic between upper-layer processes.
C. The transport layer deals with traffic between end services.
D. All of the above are true.
1. The Transport layer is designed to hide the intricacies of the computer network structure from the upper-layer process.
2. Connection identifiers refer to a conversation, transaction identifiers refer to a smaller unit which is composed of a request and a response.