Что такое соединение? - PullRequest
       21

Что такое соединение?

4 голосов
/ 29 октября 2009

Я запутался между TCP, ориентированным на соединение, и UDP, не имеющим соединения, поэтому, пожалуйста, кто-нибудь прояснит это.

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

  • Каково действительное значение связи? Маршрутизаторы на пути между двумя связывающимися узлами забронированы на некоторое время, чтобы принимать пакеты для этого конкретного соединения?

EDIT

  • Когда вы говорите, что связь между двумя точками установлена?

Спасибо

Ответы [ 5 ]

8 голосов
/ 29 октября 2009

Соединение - это просто виртуальный путь между двумя конечными точками. С TCP вы открываете соединение и начинаете отправлять данные через него. Гарантированно прибудет на другой конец по порядку (при условии, что сеть не выйдет из строя). Затем вы закрываете соединение.

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

С UDP это немного отличается. По сути, вы просто отправляете пакет с адресом назначения, и он может или не может прийти - это U в UDP (ненадежно).

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

Что касается вашего обновления, соединение устанавливается после того, как произошло следующее:

  • a SYN пакет был отправлен от инициатора.
  • ответчик отправил обратно SYN-ACK пакет.
  • инициатор отправил обратно еще один ACK пакет.

Это протокол установления сеанса для TCP. Сами пакеты являются обычными пакетами с флагами SYN и / или ACK, установленными в заголовке.

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

5 голосов
/ 29 октября 2009

Да, TCP встраивает порядковые номера и выполняет много другой обработки, чтобы «имитировать» выделенное двухточечное соединение в сети с пакетной ориентацией, без соединения.

UDP не имеет; каждая датаграмма доставляется полностью независимо от других дейтаграмм.

4 голосов
/ 29 октября 2009

Сначала я отвечу на ваш второй вопрос. То, что вы написали («установление пути»), которое происходит в некоторых сетевых архитектурах (например, голосовые вызовы GSM), но не в Интернете, называется коммутация каналов . С коммутацией каналов сама сетевая инфраструктура осознает связь, происходящую между двумя конечными точками. Стек TCP / IP, однако, предназначен для с коммутацией пакетов . Это означает, что каждый пакет представляет собой отдельный фрагмент информации, который доставляется другой конечной точке и не связан с каким-либо другим пакетом (например, отправка сообщения).

Как следствие, протоколы более низкого уровня в стеке IP не гарантируют, что:

  • пакеты получены в пункте назначения
  • пакеты принимаются в любом конкретном порядке
  • пакеты принимаются в пункте назначения только один раз

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

2 голосов
/ 29 октября 2009

два определения из Википедии кажутся мне ясными

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

...

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

Не думаю, что смогу улучшить эти определения, но позвольте мне попытаться объяснить это с точки зрения программирования сокетов, понимая, что сокет является интерфейсом программирования для TCP / UDP . В частности, если вы программируете серверные сокеты, скажем, на Java, вы заметите, как этот характер TCP и UDP, ориентированный на соединение и не требующий соединения, соответственно влияет на модель программирования.

В клиент-серверном приложении на базе TCP перед установкой любого обмена данными должно быть установлено соединение между клиентским сокетом и серверным сокетом, соответствующим этому клиентскому сокету. На сервере вам нужно будет создать ServerSocket, а затем вызвать accept(), чтобы получить Socket, соответствующий подключению клиента. Один такой сокет создается для связи с каждым соединением от любого конкретного удаленного клиента (который инициируется созданием экземпляра класса Socket). Подробнее см. этот пример кода .

С другой стороны, если вы программируете UPD, сокет вашего сервера в основном представляет собой объект DatagramSocket, который прослушивает порт и принимает все отправленные ему дейтаграммы, а также может отправлять обратно дейтаграммы в любой конкретный клиентский сокет. То есть один сокет сервера, обслуживающий всех клиентов, потому что между любым клиентским соединением и сервером нет сквозного соединения. (Обратите внимание, что также не требуется никакого шага «serverSocket#accept()».) Другими словами, каждый клиент и сервер могут просто отправлять дейтаграммы, не заботясь о том, готов ли другой конечный пункт принимать дейтаграммы или нет. Подробнее см. этот пример кода .

2 голосов
/ 29 октября 2009

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

...