Подтвердить что ты не робот

Может ли TCP быть реализован через UDP?

У меня была странная идея. Я слышал о программном обеспечении, которое из моего понимания использует UDP для передачи файлов, уменьшающих накладные расходы, найденные в TCP-пакетах.

Если моему приложению требуется TCP, а у моей локальной сети есть настройка программного обеспечения для связи с другим центром обработки данных на другой стороне побережья с настройкой программного обеспечения на их конце. Можно ли отправлять фактические данные через UDP, кроме как имитировать TCP на обоих концах?

Я смутно помню кое-что о 7 слоях, но я не уверен, был ли протокол одним из слоев, и я не уверен, что TCP невозможно смоделировать/реализовать отлично при использовании UDP по сети. Кто-нибудь имеет идеи или информацию о таких проектах?

4b9b3361

Ответ 1

Если вы спрашиваете, можете ли вы использовать UDP как уровень 2, тогда ответ будет да, вроде. Существуют различные протоколы, которые позволяют создавать туннель в другой сети с использованием транспорта UDP, например L2TP и даже IPsec (с обходом NAT). Вы также можете сделать это на уровне приложения.

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

Ответ 2

Оба TCP и UDP построены поверх IP, но TCP использует другую структуру пакетов, а на уровне-2 невозможно имитировать TCP, используя UDP-пакеты.

Конечно, если у вас есть контроль как для источника, так и для адресата, тогда можно создать надежный туннель UDP для пакетов TCP. Это потребует некоторой внутренней информации (номер пакета, флаги ack/nack) в теле пакета UDP.

Есть интересный проект http://udt.sourceforge.net/

Это надежный механизм передачи файлов, поддерживающий широковещательную передачу, построенный поверх UDP.

Ответ 3

PseudoTCP - это протокол, который реализует алгоритмы TCP поверх UDP. Он был введен, поскольку обход NAT для TCP намного сложнее, чем UDP. Но некоторым приложениям P2P нужна надежная передача данных между узлами.

Насколько я знаю, существует два варианта PseudoTCP: Libjingle и Libnice.Libjingle - это библиотека с открытым исходным кодом из google, которая изначально была для gtalk. Вы можете посмотреть пример совместного использования файлов из libjingle: https://developers.google.com/talk/libjingle/file_share. В последнее время настольный компьютер Chrome также использует реализацию PseudoTCP из libjingle для надежных соединений.

Ответ 4

Если моему приложению требуется TCP, и у моей локальной сети есть настройка программного обеспечения для связи с другим центром обработки данных на другой стороне побережья с программным обеспечением настройки на их конце. Можно ли отправлять фактические данные через UDP, но чем имитировать TCP на обоих концах?

Нет. Разъем UDP находится в другом пространстве имен из сокета TCP. Вы не сможете написать UDP на одном конце и отправить или получить TCP на другом конце. TCP и UDP - это одноранговые протоколы; оба существуют на уровне выше IP. Вы не можете использовать его для обмана другого.

Ответ 5

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

Если вам нужна только одна или две функции TCP (например, базовый порядок), то использование этого в UDP полезно.

Halo использует протоколы UDP 2-3 (IIRC), которые имитируют разные функции TCP, а затем полноценный TCP для инициализации игровых состояний. я Shot You First Networking, публикация GDC

Например, в одном случае они отправляют 3 дублирующих UDP-пакета для преодоления потери пакетов.

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

Ответ 6

Один из способов сделать это теперь на Linux-3.18 + - использовать Foo over UDP (FOU), который реализует универсальную инкапсуляцию UDP (GUE). Здесь хорошее введение в FOU, а man-страница для ip-fou.

Или, если вы хотите использовать систему передачи файлов с открытым исходным кодом UDP, есть такие вещи, как UDT, UFTP, Tsunami-UDP и даже Google QUIC.

Ответ 7

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

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

Здесь ссылка с дополнительной информацией:

http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/

IMHO, не рекомендуется передавать файлы через UDP.

Ответ 8

Проблемы с TCP возникают в его алгоритмах, а не в заголовках.

Конечно, вы могли бы реализовать алгоритмы TCP поверх UDP. Это фактически будет таким же, как туннелирование TCP-дейтаграмм внутри датаграмм UDP. Но все это позволяет добавить еще несколько байтов служебных данных для каждого пакета и потребовать, чтобы другая конечная точка развернула пакеты.

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

Итак, вы можете реализовать TCP-алгоритмы поверх UDP, но вы не захотите.

Ответ 9

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

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