Рекомендация протокола для одноранговой передачи файлов - PullRequest
0 голосов
/ 06 января 2012

Мне нужно реализовать одноранговую передачу файлов.

Какой протокол мне следует использовать?TCP или UDP?А почему?

Ответы [ 5 ]

3 голосов
/ 06 января 2012

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

В вашем случае я бы лично выбрал tcp, потому что вы, вероятно, в конечном итоге переопределитеtcp в какой-то форме внутри ваших пакетов udp в противном случае (запросите блок (syn), ответьте: у меня есть блок (syn ack), хорошо, отправьте его мне (ack) ... data: (push ack) ... ok done: (rst))

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

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

Итог ... идти с душой ...

1 голос
/ 06 января 2012

Я бы порекомендовал использовать TCP.

Если вы используете UDP, то в конечном итоге вам придется разрабатывать и реализовывать управление потоком и обнаружение / повторную передачу потерянных пакетов в протоколе уровня приложения. Делать это таким образом, чтобы обеспечить достойную производительность в хороших и плохих сетевых условиях, - тяжелая работа. Для простого peer-to-peer отдача, как правило, не стоит усилий.

Followup

Вы спрашиваете:

и я планирую реализовать межсетевой вызов по Wi-Fi, для этого мне придется использовать UDP, верно?

Предполагая, что IP реализован и маршрутизация настроена правильно в вашей сети WiFi, и UDP, и TCP должны нормально работать.

0 голосов
/ 06 января 2012

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

Подробнее о потоковой передаче

В случае потокового аудио / видео данные всегда отправляются с некоторыми битами исправления ошибок, чтобы исправить большой процент ошибок. Конечная точка управляет дополнительным временем, необходимым для обнаружения (и, возможно, исправления) ошибок, путем буферизации потока. Тем не менее, очевидно, что это тонна работы (с обеих сторон), чтобы все это произошло, и, вероятно, не стоит того, чтобы передавать файлы P2P.

Обновление 1: комментарий о потоковом аудио

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

0 голосов
/ 06 января 2012

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

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

0 голосов
/ 06 января 2012

UDP не гарантирует доставку пакетов, как это делает TCP.Пожалуйста, посмотрите на этот предыдущий пост SO, в котором подчеркивается разница между этими двумя протоколами.

...