2009-10-29 2 views
4

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

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

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

EDIT

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

Благодаря

ответ

8

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

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

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

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

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

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

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

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

5

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

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

2

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

4

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

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

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

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

2

twodefinitions из Википедии, кажется, ясно мне

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

...

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

Я не думаю, что смогу улучшить эти определения, но позвольте мне попытаться объяснить это с точки зрения программирования сокетов, понимая, что socket is the programming interface for TCP/UDP.В частности, если вы программируете серверные сокеты, скажем, на Java, вы заметите, как этот тип TCP и UDP, ориентированный на соединение и не имеющий отношения, влияет на модель программирования.

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

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

Смежные вопросы