Какой протокол устанавливает соединение с другим компьютером и обеспечивает доставку данных
Обновлено: 21.11.2024
Один из самых важных протоколов высокого уровня в наборе протоколов Интернета.
Введение в компьютерные сети. Взгляд с высоты птичьего полета на искусство совместного использования ресурсов с одного компьютера на другой.
Знакомство с Интернетом: «Эта вещь все еще существует?» — Гомер Симпсон
Введение в протокол TCP/IP — официальные правила, позволяющие компьютерам обмениваться данными через Интернет.
Введение в IP: Интернет-протокол — от маршрутизации до IP-адресации, взгляд на протокол, который дает жизнь Интернету.
Сетевое программирование для начинающих: введение в сокеты — теоретический взгляд на один из самых популярных инструментов программирования для обмена данными по компьютерным сетям.
Добро пожаловать в пятый выпуск сериала Networking 101! В предыдущей главе я говорил об Интернет-протоколе, фундаментальной части пакета Интернет-протоколов, который дает жизнь Интернету в том виде, в каком мы его знаем. Интернет-протокол вводит такие важные понятия, как маршрутизация и IP-адреса, которые позволяют двум или более компьютерам, расположенным в разных сетях, обмениваться данными.
Как видно из предыдущего эпизода, общение через Интернет-протокол очень просто: разбейте сообщение на небольшие фрагменты данных (датаграммы) и отправьте их на компьютер получателя (хост), подключенный к сети. Маршрутизаторы будут выполнять работу по доставке ваших дейтаграмм в нужное место назначения, передавая их до тех пор, пока целевой хост не будет достигнут. Интернет-протокол работает как почтовая служба: вы пишете адрес на письме, отправляете его и надеетесь, что оно благополучно дойдет до адресата.
Этот способ обмена данными необходим для правильной работы Интернета, но он слишком ограничен для практического общения: получит ли получатель данные? Что, если он будет поврежден или потерян по пути? В случае нескольких дейтаграмм, как убедиться, что они получены в правильном порядке? Протокол управления передачей (TCP) отвечает на все эти и многие другие вопросы.
Протокол TCP был разработан Инженерной группой Интернета (IETF). Исходную спецификацию вместе с дополнительными обновлениями (1, 2, 3, 4) можно найти здесь.
Основные свойства TCP: обзор
Протокол управления передачей содержит несколько улучшений по сравнению с низкоуровневым интернет-протоколом как концептуально, так и технически:
TCP ориентирован на соединение — перед обменом данными необходимо установить соединение между двумя или более хостами;
TCP следует модели клиент-сервер — между двумя или более хостами, которые хотят обмениваться данными, устанавливается иерархия. Сервер предоставляет данные клиентам;
передача данных упорядочена — если вы отправляете A, B, а затем C, TCP гарантирует вам, что получатель получит сначала A, B и затем C именно в этом порядке;
потерянные данные передаются повторно — TCP гарантирует, что весь блок информации достигнет целевого хоста. Если часть его потеряна, TCP выполняет повторную передачу;
данные проверяются с помощью механизмов исправления ошибок — данные могут быть повреждены по пути. TCP способен обнаруживать и исправлять ошибки;
управление потоком и перегрузкой — компьютер в медленной сети может быть быстро перегружен другим компьютером, отправляющим данные из быстрой сети. TCP использует сложные стратегии для регулирования того, насколько быстро или медленно должны передаваться данные между хостами.
TCP — надежный протокол для обмена данными, но, с другой стороны, он повышает уровень сложности по сравнению с более простым IP. Я рассмотрю эти тонкости в последней части этой статьи.
TCP в реальном мире
Как и любой другой протокол, TCP — это просто набор правил, написанных на бумаге: фактическая реализация осуществляется операционными системами через специальные объекты, называемые сетевыми сокетами. Сетевой сокет — это программный объект, который позволяет двум хостам отправлять и получать данные. Я рассмотрю сетевые сокеты позже в этой серии, когда запачкаю руки сетевым программированием.
TCP ориентирован на соединение
Если Интернет-протокол похож на почтовую службу, использование протокола управления передачей похоже на телефонный звонок: вам нужно установить соединение, прежде чем вы сможете говорить. Конкретно процесс состоит из трех этапов: 1) создание соединения между хостами; 2) передавать данные; 3) закрыть соединение. Ключевым моментом TCP-соединения является возможность передачи данных в обоих направлениях одновременно: от отправителя к получателю и наоборот. Это называется полнодуплексной передачей данных.
Модель клиент-сервер
Во время соединения TCP хост, который предоставляет данные, является сервером, а хосты, которые их получают, являются клиентами. Например, этот веб-сайт хранится на компьютере, подключенном к сети, расположенной где-то в Интернете. Когда вы запрашиваете у браузера доступ к этому веб-сайту, браузер сам устанавливает TCP-соединение между вашим компьютером и компьютером, на котором хранится веб-сайт.
Ваш компьютер является клиентом, а компьютер, содержащий данные веб-сайта, — сервером. Сервер отправляет текстовое содержимое клиенту, в то время как клиент отправляет серверу информацию о конкретных инструкциях, например, какую страницу получить, как передать данные и т.д. Это полнодуплексная передача в действии.
Поскольку TCP основан на IP, вам необходимо указать IP-адрес сервера, к которому вы хотите подключиться. Кроме того, TCP использует специальные номера, называемые портами, для определения типа службы, которую вы хотите получить от сервера. Например, порт 80 используется для обмена веб-страницами, такими как эта; порт 23 предназначен для передачи файлов и так далее. Сервер может предлагать несколько услуг, таким образом имея несколько доступных портов.
Установление и закрытие соединений
Соединение TCP устанавливается с помощью трех шагов, также известных как трехстороннее рукопожатие. Два хоста, которые хотят соединиться через TCP, должны сначала обменяться набором специальных сообщений — SYN, SYN-ACK и ACK — в правильном порядке. Если согласование прошло успешно, устанавливается соединение, и два хоста могут начать обмен данными.
Соединение TCP закрывается посредством другого согласования, состоящего из четырех шагов, которое называется четырехэтапным рукопожатием. Хост, который хочет разорвать соединение, уведомляет другой конец, который, в свою очередь, отвечает. Соединение закрывается успешно после обмена набором специальных сообщений — FIN и ACK — в правильном порядке. Я более подробно рассмотрю рукопожатия TCP и реальную связь TCP в следующей части этой серии, посвященной сетевому программированию.
Как выглядят данные при использовании TCP
В третьей главе этой серии я упомянул, как Internet Protocol Suite хочет, чтобы данные были разделены на фрагменты: TCP называет эти фрагменты сегментами. Все, что отправляется через соединение TCP, от рукопожатий, описанных выше, до фактических данных, содержится в сегменте TCP. Сегменты генерируются программами верхних уровней стека, которые используют TCP.
Сегмент TCP состоит из двух частей:
- заголовок — содержит информацию о маршрутизации: исходный порт, порт назначения и многие другие технические детали;
- раздел данных — часть отправляемого сообщения.
Затем весь TCP-сегмент вставляется в тело IP-датаграммы, как показано на рисунке выше. Поскольку TCP основан на IP, он использует дейтаграммы IP для передачи данных по Интернету в соответствии с механизмами IP-маршрутизации, рассмотренными в предыдущем эпизоде.
Как TCP улучшает IP
Как я уже говорил, TCP имеет множество улучшений по сравнению с простым IP: давайте кратко рассмотрим.
Заказанный перенос данных
Передача данных на более низких уровнях стека интернет-протоколов затруднена: IP-дейтаграммы могут доставляться не по порядку. По этой причине каждый сегмент TCP имеет в заголовке специальное поле, называемое порядковым номером. Это поле содержит число, сгенерированное отправителем, которое увеличивается при каждой отправке нового сегмента. Получатель использует эту информацию для определения порядка полученных сегментов и восстановления правильной последовательности.
Повторная передача потерянных сегментов
Датаграммы IP также могут быть потеряны. Получатель отправляет специальное сообщение (ACK) отправителю, чтобы информировать его о получении сегмента. Если отправитель не получает подтверждающее сообщение, он интерпретирует его как сегмент, потерянный на стороне получателя, и пытается отправить его обратно.
Существует несколько методов, описанных протоколом TCP для обнаружения потерь и повторной передачи данных. Например, таймер под названием Retransmission Timeout (RTO) используется отправителем для отслеживания отсутствия подтверждений получателем. Если получатель не отправляет специальный ACK в течение определенного периода времени, отправитель повторно отправляет сегмент. Более продвинутый прием, известный как Fast-Retransmit, основан на дублировании сообщений ACK, отправляемых обратно получателем при обнаружении отсутствующей дейтаграммы.
Безошибочная передача данных
Каждый TCP-сегмент содержит в заголовке поле Checksum, специальное число, используемое для определения того, является ли пакет действительным или поврежденным. Контрольная сумма рассчитывается отправителем по определенному алгоритму, затем сохраняется в заголовке и отправляется получателю.Получатель вычисляет контрольную сумму полученного сегмента по тому же алгоритму, что и отправитель, и сравнивает ее значение с контрольной суммой, переданной в заголовке. Если значения не совпадают, сегмент отклоняется.
Поток данных и управление перегрузкой
TCP предназначен для адаптации к хостам и сетям с разными скоростями. Управление потоком TCP — это механизм, в котором получатель сообщает отправителю, сколько данных он способен обработать, чтобы отправитель мог соответствующим образом настроить свою скорость. Управление потоком TCP основано на протоколе скользящего окна — алгоритме, используемом для отслеживания того, сколько данных получатель получил от отправителя. Когда локальный буфер получателя заполнен данными — окно заполнено в соответствии с жаргоном алгоритма — отправитель должен ждать.
TCP также может предотвратить перегрузку сети: ситуацию, когда хост обрабатывает больше данных, чем может обработать. Когда сеть перегружена, данные задерживаются или теряются, и невозможно установить новые соединения. TCP использует несколько алгоритмов для предотвращения этого, особенно в современных реализациях. Основная идея состоит в том, чтобы поддерживать поток данных ниже скорости, которая может вызвать перегрузку. Это, вероятно, самая сложная часть TCP.
TCP может вызвать большую задержку
Все вышеперечисленное делает TCP очень точным протоколом: при TCP-соединении данные практически не теряются. Однако ожидание сообщений с нарушением порядка или повторная передача отсутствующих фрагментов может занять некоторое время. По этой причине TCP добавляет задержку: временную задержку между действием пользователя и результирующим ответом.
Высокая задержка не является серьезной проблемой для приложений, не работающих в реальном времени: вы можете с комфортом подождать несколько миллисекунд, чтобы полностью загрузить веб-страницу с сервера. С другой стороны, TCP не подходит для вещей, требующих быстрого ответа, таких как телефонные/видеозвонки через Интернет или онлайн-игры. Для таких приложений обычно рекомендуется протокол пользовательских дейтаграмм (UDP). Я покопаюсь в UDP в одном из следующих выпусков этой серии.
Что дальше?
Последние пять глав я посвятил изучению теории, лежащей в основе современного Интернета. Пришло время применить на практике то, что я узнал до сих пор, и посмотреть, как все эти протоколы работают в реальном мире: заняться сетевым программированием, искусством написания приложений, которые взаимодействуют друг с другом по сети. Увидимся в следующем выпуске!
БХ: Отвратительное видео. В остальном хорошо. Мы должны получить TCP из TIF — это единственная реальная деятельность!
MF: Брайан хочет внести улучшения в этот проект. Может ли это стать необязательным проектом? У нас их нет для U4.
На этой странице вы узнаете, как обеспечить надежность связи в Интернете.
Что вы будете делать: вы будете смотреть видео, читать и изучать моделирование ненадежной IP-передачи.
Что вы узнаете. Вы узнаете, как Интернет надежно отправляет данные с помощью протоколов.
Самостоятельно: вы можете написать свой собственный протокол управления передачей.
Компьютеры, серверы и маршрутизаторы достаточно надежны, но время от времени пакет будет потерян, и устройствам в Интернете приходится мириться с такими сбоями. Один из способов терпеть недостатки — не обращать на них внимания. (Если вы потеряете один кадр видео, это не имеет значения.) Другой способ (называемый TCP) состоит в том, чтобы продолжать отправлять пакеты до тех пор, пока не будет подтверждено, что они были получены правильно. TCP (протокол управления передачей) гарантирует надежную передачу данных, отслеживая, какие пакеты были успешно получены, пересылая потерянные или поврежденные пакеты и указывая порядок повторной сборки данных на другом конце.
TCP/IP — это пара протоколов, обеспечивающих абстракцию. IP позволяет вашему компьютеру представить, что он имеет прямое соединение с другим компьютером. TCP позволяет вашему компьютеру представить, что у него есть надежное соединение с другим компьютером.
- Компьютеры (включая серверы) в двух конечных точках связи используют протокол управления передачей (TCP), который гарантирует надежную передачу.
- Маршрутизаторы в каждой точке подключения к Интернету используют Интернет-протокол (IP), который передает пакеты с одного IP-адреса на другой.
Маршрутизаторы ничего не знают о передаваемых ими сообщениях; все, о чем они заботятся, это их передача. Только компьютеры, отправляющие и получающие сообщения, имеют отношение к их значению.
В этом моделировании полное сообщение представляет собой строку текста, разделенную на пакеты по одной букве в каждом. На самом деле длина пакета не так строго ограничена, и сообщения обычно намного длиннее.
TCP включает дополнительную информацию вместе с каждым пакетом, чтобы принимающий компьютер мог отслеживать, сколько пакетов он получил, повторно запрашивать любые отсутствующие пакеты и переупорядочивать пакеты для восстановления исходного сообщения. В этой симуляции пакет либо приходит правильно (даже если он не по порядку), либо не приходит вообще. Но в Интернете пакет может прийти с ошибочными данными, поэтому настоящий TCP должен проверять наличие ошибок и запрашивать повторную передачу пакетов с ошибками.
Не не меняйте определение . Этот блок имитирует ненадежную сеть. Вы могли бы «решить» проблему, переписав этот блок, чтобы имитировать идеальную сеть вместо несовершенной, но это упускает суть.
Используя Интернет, компьютеры соединяются и взаимодействуют друг с другом, в основном, используя TCP/IP (протокол управления передачей/Интернет-протокол). Думайте о TCP/IP как о своде правил, пошаговом руководстве, которое каждый компьютер использует, чтобы узнать, как взаимодействовать с другим компьютером. Эта книга правил диктует, что каждый компьютер должен делать для передачи данных, когда передавать данные и как передавать эти данные. В нем также указано, как получать данные таким же образом. Если правила не соблюдаются, компьютер не может подключаться к другому компьютеру, а также отправлять и получать данные между другими компьютерами.
Для подключения к Интернету и другим компьютерам в сети на компьютере должна быть установлена сетевая карта (сетевая карта). Сетевой кабель, подключенный к сетевой карте на одном конце и подключенный к кабельному модему, модему DSL, маршрутизатору или коммутатору, может позволить компьютеру получить доступ к Интернету и подключиться к другим компьютерам.
ISP (интернет-провайдеры)
ISP (интернет-провайдеры), компании, предоставляющие интернет-услуги и подключение, также следуют этим правилам. Интернет-провайдер обеспечивает мост между вашим компьютером и всеми другими компьютерами в мире в Интернете. Интернет-провайдер использует протоколы TCP/IP, чтобы сделать возможными соединения между компьютерами и передавать данные между ними. Интернет-провайдер назначает IP-адрес, который представляет собой уникальный адрес, присвоенный вашему компьютеру или сети для связи в Интернете.
Домашняя сеть
Если у вас есть домашняя компьютерная сеть, компьютеры также используют TCP/IP для соединения. Протокол TCP/IP позволяет каждому компьютеру «видеть» другие компьютеры в сети и совместно использовать файлы и принтеры.
Когда компьютеры подключаются к одной сети, она называется локальной сетью или LAN. Когда несколько сетей подключены, это называется глобальной сетью или WAN. В этом типе сети в вашем доме есть сетевой маршрутизатор, который подключается к вашему интернет-провайдеру. Маршрутизатор получает IP-адрес для вашего подключения к Интернету, а затем назначает локальные IP-адреса каждому устройству в вашей сети. Эти локальные адреса часто 192.168.1.2-255. При доступе к локальному компьютеру в вашей сети ваш маршрутизатор отправляет пакеты TCP/IP между локальными IP-адресами. Однако, когда вы хотите подключиться к Интернету, ваш маршрутизатор использует IP-адрес, назначенный провайдером. Ваш IP-адрес не является адресом 192.168.x.x, поскольку этот IP-адрес назначается поставщиком услуг Интернета, а не вашим маршрутизатором.
При запросе информации с веб-страницы, такой как Computer Hope, вы вводите URL-адрес, который легко понять и запомнить. Чтобы ваш компьютер мог получить доступ к компьютеру, содержащему страницы, этот URL-адрес должен быть преобразован в IP-адрес, что делается с помощью DNS. Как только DNS преобразует URL-адрес в IP-адрес, маршрутизаторы в Интернете будут знать, как направить ваш пакет TCP/IP.
Иллюстрация ниже помогает пояснить информацию из предыдущих разделов о том, как ваш компьютер взаимодействует с другими пользователями в Интернете.
Компьютеры Windows, macOS и Linux используют протокол TCP/IP для подключения к другим компьютерам в локальной или глобальной сети. Для подключения к локальной или глобальной сети требуется либо проводное, либо беспроводное соединение. Проводное соединение обычно выполняется с помощью сетевого кабеля (сетевой кабель категории 5 или категории 6). Беспроводное соединение (Wi-Fi) использует беспроводную сетевую карту 802.11b, 802.11g или 802.11n. При обоих типах подключения обычно требуется сетевой маршрутизатор для подключения к другим компьютерам. Для подключения к Интернету в вашем доме также требуется либо кабельный модем, либо модем DSL, в зависимости от того, каким интернет-провайдером вы пользуетесь.
Дополнительную информацию о том, как DNS преобразует веб-адрес в IP-адрес, см. на нашей странице DNS.
Стек интернет-протокола
Как упоминалось в разделе "Интернет", Интернет представляет собой абстракцию от базовых сетевых технологий и разрешения физических адресов. В этом разделе представлены основные компоненты стека протоколов Интернета и сопоставление стека с эталонной моделью стека протоколов ISO OSI. Модель стека протоколов Интернета показана на рисунке ниже.
Интернет-протокол (IP)
Как видно на рисунке выше, стек интернет-протокола предоставляет надежную ветвь с установлением соединения (TCP) и ненадежную ветвь без установления соединения (UDP), которые построены поверх интернет-протокола.
Уровень Интернет-протокола в стеке протоколов TCP/IP – это первый уровень, на котором представлена абстракция виртуальной сети, являющаяся основным принципом модели Интернета. Все детали физической реализации (в идеале, хотя это и не совсем так) скрыты ниже уровня IP. Уровень IP обеспечивает ненадежную систему доставки без установления соединения. Причина его ненадежности связана с тем фактом, что протокол не предоставляет никаких функций для исправления ошибок для дейтаграмм, которые либо дублируются, либо теряются, либо поступают на удаленный хост в порядке, отличном от порядка их отправки. Если на физическом уровне таких ошибок не возникает, IP-протокол гарантирует успешное завершение передачи.
Основной единицей обмена данными на уровне IP является дейтаграмма Интернета. Формат дейтаграммы IP и краткое описание наиболее важных полей приведены ниже:
LEN Количество 32-битных сегментов в заголовке IP. Без каких-либо OPTIONS это значение равно 5 TYPE OF SERVICE Каждой дейтаграмме IP может быть присвоено значение приоритета в диапазоне от 0 до 7, показывающее важность дейтаграммы. Это сделано для того, чтобы внеполосные данные могли маршрутизироваться быстрее, чем обычные данные. Это очень важно, поскольку сообщения протокола управляющих сообщений Интернета (ICMP) передаются как часть данных IP-датаграммы. Несмотря на то, что сообщение ICMP инкапсулировано в дейтаграмму IP, протокол ICMP обычно рассматривается как неотъемлемая часть уровня IP, а не уровня UDP или TCP. Кроме того, поле TYPE OF SERVICE позволяет классифицировать дейтаграмму, чтобы указать, требует ли желаемая услуга короткого времени задержки, высокой надежности или высокой пропускной способности. Однако для того, чтобы это имело какой-либо эффект, шлюзы должны знать более одного маршрута к удаленному хосту, а, как описано во введении, это не так. IDENT, FLAGS и FRAGMENT OFFSET Эти поля используются для описания фрагментации дейтаграммы. Фактическая длина дейтаграммы IP в принципе не зависит от длины физических кадров, передаваемых по сети, которая называется максимальным блоком передачи (MTU) сети. Если дейтаграмма длиннее, чем MTU, то она делится на набор фрагментов, имеющих почти такой же заголовок, как у исходной дейтаграммы, но только тот объем данных, который помещается в физический фрейм. Флаг IDENT используется для идентификации сегментов, принадлежащих одной и той же дейтаграмме, а FRAGMENT OFFSET представляет собой относительное положение фрагмента в исходной дейтаграмме. Как только дейтаграмма фрагментирована, она остается такой до тех пор, пока не получит конечный пункт назначения. Если один или несколько сегментов потеряны или ошибочны, вся дейтаграмма отбрасывается.
Однако базовая сетевая технология не полностью скрыта за уровнем IP, несмотря на функциональность фрагментации. Причина в том, что MTU может варьироваться от 128 или менее до нескольких тысяч байт в зависимости от физической сети (Ethernet имеет MTU 1500 байт). Следовательно, это вопрос эффективности при выборе правильного размера дейтаграммы, чтобы свести к минимуму фрагментацию. Рекомендуется, чтобы шлюзы могли обрабатывать дейтаграммы размером не менее 576 байт без использования фрагментации. ВРЕМЯ Это оставшееся время жизни (TTL) для дейтаграммы, когда она перемещается в Интернете. Протокол информации о маршрутизации (RIP) указывает, что разрешено не более 15 переходов. IP-АДРЕС ИСТОЧНИКА и IP-АДРЕС НАЗНАЧЕНИЯ И адрес источника, и адрес получателя указываются в заголовке дейтаграммы, чтобы получатель мог послать ответ обратно передающему хосту. Однако обратите внимание, что указывается только адрес хоста, а не номер порта. Это связано с тем, что протокол IP является протоколом IMP-to-IMP, а не сквозным протоколом. Требуется еще один уровень, чтобы фактически указать, какие два процесса на передающем узле и в конечном пункте назначения должны получать дейтаграммы. Обратите внимание, что IP-датаграмма оставляет место только для исходного IP-адреса источника и исходного IP-адреса назначения. Как упоминалось в разделе «Шлюзы и маршрутизация», адрес следующего перехода определяется инкапсуляцией. Интернет-уровень передает IP-адреса адреса следующего перехода на сетевой уровень.Этот IP-адрес привязывается к физическому адресу, и с этим адресом формируется новый фрейм. Затем остальная часть исходного кадра инкапсулируется в новый кадр перед его отправкой по каналу связи.
Протокол пользовательских дейтаграмм (UDP)
Протокол пользовательских дейтаграмм (UDP) — это очень тонкий протокол, созданный поверх Интернет-протокола. Базовой единицей данных является дейтаграмма пользователя, а протокол UDP обеспечивает такую же ненадежную службу без установления соединения для передачи дейтаграмм пользователя, как и протокол IP для передачи своих дейтаграмм. Основное отличие состоит в том, что протокол UDP является сквозным протоколом. То есть он содержит достаточно информации для передачи пользовательской дейтаграммы от одного процесса на передающем хосте другому процессу на принимающем хосте. Формат пользовательской дейтаграммы показан ниже:
Поле LENGTH представляет собой длину пользовательской дейтаграммы, включая заголовок, то есть минимальное значение LENGTH составляет 8 байтов. SOURCE PORT и DESTINATION PORT — это соединение между IP-адресом и процессом, запущенным на хосте. Сетевой порт обычно идентифицируется целым числом. Однако дейтаграмма пользователя не содержит никакого IP-адреса, так как же протокол UDP узнает, когда достигнут конечный пункт назначения?
При вычислении заголовка CHECKSUM протокол UDP добавляет 12-байтовый псевдозаголовок, состоящий из IP-АДРЕСА ИСТОЧНИКА, IP-АДРЕСА НАЗНАЧЕНИЯ и некоторых дополнительных полей. Когда хост получает дейтаграмму UDP, он берет заголовок UDP и создает новый псевдозаголовок, используя свой собственный IP-адрес в качестве IP-АДРЕСА НАЗНАЧЕНИЯ и IP-АДРЕСА ИСТОЧНИКА, извлеченных из дейтаграммы IP. Затем он вычисляет контрольную сумму, и если она равна контрольной сумме UDP, значит, дейтаграмма получила конечный пункт назначения.
Как показано на рисунке стека интернет-протоколов, протокол UDP часто используется в качестве основного протокола в протоколах приложений клиент-сервер, таких как TFTP, DNS и т. д., где накладные расходы на выполнение надежной передачи, ориентированной на установление соединения, значительны. Эта проблема будет рассмотрена в следующих двух разделах.
Протокол управления передачей (TCP)
Протокол управления передачей обеспечивает полнодуплексный, надежный, ориентированный на соединение сервис для прикладного уровня, как показано на рисунке стека интернет-протокола. В этом разделе описан основной принцип протокола TCP и то, как он обеспечивает надежную работу протоколов прикладного уровня.
Протокол TCP — это протокол, ориентированный на поток. Он предназначен для предоставления программному обеспечению прикладного уровня услуги по надежной передаче больших объемов данных. Он устанавливает полнодуплексный виртуальный канал между двумя передающими хостами, так что оба хоста одновременно могут отправлять данные в Интернет без указания хоста назначения после установления соединения. В разделе Transactional Transmission Control Protocol (T/TCP) клиент-серверное расширение протокола TCP представлено как альтернатива потоковой архитектуре.
Формат TCP-сегмента
<УЛ>Надежная передача
На уровне IP-протокола пакеты могут быть отброшены из-за перегрузки сети, сбоя шумового шлюза и т. д. Для обеспечения надежного обслуживания протокол TCP должен восстанавливать данные, которые были повреждены, потеряны, дублированы или доставлены не по порядку. через систему связи Интернет. Это достигается назначением НОМЕРА ПОСЛЕДОВАТЕЛЬНОСТИ каждому переданному байту и требованием положительного подтверждения (ACK) от хоста-получателя. Если ACK не получен в течение интервала времени ожидания, данные передаются повторно. В получателе порядковые номера используются для правильного упорядочения сегментов, которые могут быть получены не по порядку, и для устранения дубликатов. Повреждения обрабатываются путем добавления контрольной суммы к каждому передаваемому сегменту, проверки ее в приемнике и отбрасывания поврежденных сегментов. Принцип проиллюстрирован на рисунке ниже:
Хост A передает пакет данных на хост B , но пакет теряется до того, как достигает пункта назначения. Однако хост A установил таймер, когда следует ожидать подтверждения от хоста B, поэтому, когда этот таймер истечет, пакет будет передан повторно. Трудная часть метода заключается в том, чтобы найти значение периода ожидания, поскольку сегмент TCP может перемещаться по разным скоростным сетям с разной нагрузкой. Это означает, что время приема-передачи (RTT) может варьироваться от сегмента к сегменту. Простым способом расчета RTT является использование рекурсивного среднего значения с экспоненциальным окном для уменьшения важности старых значений.
Как упоминалось во введении к разделу TCP, этот протокол является потоково-ориентированным.Он использует неструктурированные потоки без метода индексации пользовательских данных, например. как записи и т. д. Кроме того, длина сегмента TCP может варьироваться, как в случае IP-датаграммы и пользовательской дейтаграммы UDP. Поэтому подтверждение не может основываться на номере сегмента, а должно основываться на успешно переданных байтах.
Однако принцип PAR очень неэффективен, поскольку хост-отправитель должен дождаться подтверждения, прежде чем он сможет отправить следующий сегмент. Это означает, что минимальное время между двумя сегментами равно 1 RTT плюс время, необходимое для обслуживания сегментов на обоих концах. Протокол TCP решает эту проблему, используя скользящие окна на обоих концах.
Байт номер 1 потерян, поэтому узел B никогда не отправляет обратно положительное подтверждение. Когда хост A истекает по тайм-ауту на байте 1, он повторно передает его. Однако, поскольку остальные байты со 2 по 5 успешно переданы, следующее подтверждение может немедленно перейти к 6, который является следующим ожидаемым байтом. Байт 2 также передается повторно, поскольку хост А не знает точно, сколько байтов ошибочно. Хост B просто отбрасывает байт 2, так как он уже загружен.
Метод окна также можно использовать для обеспечения механизма управления перегрузкой. Как показано на рисунке «Формат сегмента TCP», в каждом сегменте есть поле WINDOW, в котором указано, сколько данных готов принять хост. Если хост сильно загружен, он может уменьшить параметр WINDOW и, следовательно, скорость передачи падает.
Однако, поскольку протокол TCP является сквозным, он не может определить, возникла ли проблема перегрузки в промежуточном интерфейсном процессоре сообщений (IMP) (часто называемом узлом с коммутацией пакетов), и, следовательно, он не имеет означает управлять им, регулируя размер окна. TCP решает эту проблему, используя сообщения гашения исходного кода протокола управляющих сообщений Интернета (ICMP).
Установление соединения
Когда должно быть открыто соединение TCP, используется трехстороннее рукопожатие (3WHS) для установления виртуального канала, который существует до тех пор, пока соединение не будет закрыто в конце передачи данных. Далее описывается 3WHS, так как он является важной частью протокола TCP, но также демонстрирует некоторые недостатки протокола. Принцип работы 3WHS показан на рисунке ниже:
Блоки в середине символизируют соответствующую часть сегмента TCP, то есть НОМЕР ПОСЛЕДОВАТЕЛЬНОСТИ, НОМЕР ПОДТВЕРЖДЕНИЯ и КОД. Активный хост A отправляет сегмент, указывающий, что он начинает свой SEQUENCE NUMBER с x. Хост B отвечает ACK и указывает, что он начинается с SEQUENCE NUMBER y. В третьем сегменте оба хоста договариваются о порядковых номерах и о том, что они готовы к передаче данных.
На рисунке только хост А активно открывает. На самом деле два хоста могут открываться одновременно, и в этом случае оба хоста выполняют SYN-RECEIVED, а затем синхронизируются соответственно. Принципиальная причина использования 3WHS – предотвращение путаницы при инициации старых дублирующих соединений.
Обратите внимание, что НОМЕР ПОСЛЕДОВАТЕЛЬНОСТИ в сегментах 3 и 4 один и тот же, потому что ACK не занимает место для порядкового номера (в противном случае протокол завершил бы подтверждение ACK!).
Однако во многих приложениях установление TCP-соединения является довольно длительным и обременительным, особенно в приложениях клиент-сервер, таких как World-Wide Web. В следующем разделе представлена альтернатива с более легким установлением соединения.
Протокол управления передачей транзакций (T/TCP)
<УЛ>Неявное установление соединения
Протокол T/TCP, как видно из названия, основан на протоколе TCP, и T/TCP обратно совместим с TCP. Однако одной из особенностей протокола T/TCP является то, что он может обходить 3WHS, описанную в предыдущем разделе, но в случае сбоя разрешается использовать процедуру 3WHS.
В этом примере два сегмента отправляются в обоих направлениях. Соединение устанавливается, когда первый сегмент достигает сервера. Клиент остается в состоянии TIME-WAIT, которое объясняется в следующем разделе.
Отключение соединения
<УЛ>Однако номера CC T/RCP обеспечивают уникальную идентификацию каждой транзакции, поэтому протокол T/TCP может усекать WAIT-STATE путем сравнения номеров CC. Этот принцип можно рассматривать как расширение конечного автомата одной транзакции, чтобы также включить информацию о предыдущих и будущих транзакциях с использованием одного и того же кортежа из 5.
TTCP и Всемирная паутина
Как будет показано в описании World-Wide Web этой диссертации, принцип World-Wide Web - это транзакционно-ориентированный обмен объектами данных. Вот почему протокол T/TCP очень интересен в этой перспективе.
TCP/IP и OSI/RM
Международная организация по стандартизации (ISO) разработала вторую доминирующую схему многоуровневого протокола, которая называется эталонной моделью взаимодействия открытых систем ISO (OSI/RM) . В этом разделе представлена эталонная модель OSI и ее сравнение со стеком протоколов TCP/IP, как показано на рисунке.
Физический уровень Определяет физическое соединение между хост-компьютерами и IMP и то, как биты передаются по каналу связи. Канальный уровень данных Этот уровень определяет, как данные перемещаются между IMP с использованием кадров. Его основная задача состоит в том, чтобы перевести услугу с физического уровня на пакетно-ориентированную безошибочную передачу. Сетевой уровень Кадры уровня канала передачи данных организуются в пакеты и направляются по сети. Связь все еще между IMP. Транспортный уровень Первый уровень, обеспечивающий сквозную транспортную услугу. Это гарантирует, что переданные данные правильно поступят на другой конец. Уровень сеанса Этот уровень определяет, как два хоста могут устанавливать сеансы, в которых данные могут передаваться в обоих направлениях по виртуальному соединению между двумя хостами. Уровень представления Уровень представления вводит набор синтаксиса и семантики информации, передаваемой через нижние уровни протокола. Уровень приложений Этот уровень определяет независимый от платформы виртуальный сетевой терминал, чтобы прикладные программы могли обмениваться данными независимо от используемого внутреннего представления данных. Несмотря на то, что OSI/RM и TCP/IP можно сравнивать таким образом, между OSI/RM и стеком протоколов TCP/IP все еще существует несколько существенных различий, но наиболее фундаментальным является то, что OSI/RM представляет собой стандартизированную модель того, как функциональность стека протоколов может быть организована. В нем не указаны точные службы и протоколы, которые будут использоваться на каждом уровне, тогда как протокол TCP/IP является результатом экспериментальных исследований. Несмотря на это, модель OSI/RM послужила основой для нескольких реализаций стеков протоколов, таких как X.25, обсуждаемых в Критике X.25
Еще одно отличие заключается в том, где в слоях размещается интеллектуальная информация. OSR/RM представляет надежный сервис на канальном уровне, в то время как TCP/IP обладает интеллектом только на транспортном уровне. Оба решения имеют преимущества и недостатки. Когда надежный сервис передачи данных размещается на нижних уровнях, клиенты, использующие сеть для связи, могут быть очень простыми, поскольку им не приходится обрабатывать сложные ситуации с ошибками. Недостатком является то, что производительность снижается из-за чрезмерного объема управляющей информации, передаваемой и обрабатываемой на каждом хосте.
Читайте также: