Сохранность данных в UDP
От: igrok213 Россия  
Дата: 16.02.07 20:33
Оценка:
Задача такая: Нужно передавать данные по протоколу UDP, но с "механизмом надёжной доставки". Как я полагаю нужно, чтобы данные передавались без потерь при помощи UDP протокола.

Как это реализовать?
У меня есть два варианты:
1) Сделать подобие TCP, только на прикладном уровне, т.е. пронумеровать все пакеты и отправлять их по одному. После каждой отправки, ждать подтверждения о доставке пакета и отправлять следующий, если нет подтверждения, значит послать пакет ещё раз.

2) Пересылать все пакеты, предварительно пронумеровав их. Потом посмотреть какие из них не дошли, и отправить запрос, на повторную их передачу.

Какой из этих способов предпочтительней? И как это можно ещё реализовать?
Re: Сохранность данных в UDP
От: adontz Грузия http://adontz.wordpress.com/
Дата: 16.02.07 20:38
Оценка:
Здравствуйте, igrok213, Вы писали:

UDP с гарантией доставки это TCP. Ничего существенно эффективнее самому всё равно не реализовать.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Сохранность данных в UDP
От: igrok213 Россия  
Дата: 16.02.07 20:44
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, igrok213, Вы писали:


A>UDP с гарантией доставки это TCP. Ничего существенно эффективнее самому всё равно не реализовать.


А чем плохи мои способы? Если пакеты будут теряться, то они будут повторно отправлены.
Re[3]: Сохранность данных в UDP
От: adontz Грузия http://adontz.wordpress.com/
Дата: 16.02.07 21:03
Оценка:
Здравствуйте, igrok213, Вы писали:

A>>UDP с гарантией доставки это TCP. Ничего существенно эффективнее самому всё равно не реализовать.

I>А чем плохи мои способы? Если пакеты будут теряться, то они будут повторно отправлены.

Тем что TCP это и так делает, а учитывая многие мудрённые алгоритмы, обеспечит значительно меньшую латентность, большую пропускную способность, Если всё сделаешь по уму, получится TCP. Так стоило ли мучаться?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Сохранность данных в UDP
От: igrok213 Россия  
Дата: 16.02.07 21:08
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, igrok213, Вы писали:


A>>>UDP с гарантией доставки это TCP. Ничего существенно эффективнее самому всё равно не реализовать.

I>>А чем плохи мои способы? Если пакеты будут теряться, то они будут повторно отправлены.

A>Тем что TCP это и так делает, а учитывая многие мудрённые алгоритмы, обеспечит значительно меньшую латентность, большую пропускную способность, Если всё сделаешь по уму, получится TCP. Так стоило ли мучаться?


Согласен, что приходится придумывать велосипед Но просто задание такое дали (лабораторная работа в инсте), да и не претендую я на то, чтобы написать протокол ТСР или лучше.
Re: Сохранность данных в UDP
От: Аноним  
Дата: 17.02.07 03:34
Оценка:
Если уж так надо свой trasport control на удп то лучше не бросаться в крайности, а нумеровать пакеты в группе, после отсылки группы слать пакет-уведомление мол пакеты с такогото по такое то отправлены, после чего ждать подтверждения что они все получены или запросов перепосылки по диапазонам номеров пропущенных пакетов. Если в течении определенного таймаута не придет подтверждение получения — перепослать пакет-уведомление, и тп.. Короче как правильно сказали нужно заюзать tcp. кастомный peer2peer stream-oriented transfer over UDP — изврат.
Re: Сохранность данных в UDP
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.02.07 06:55
Оценка:
Здравствуйте, igrok213, Вы писали:

I>Задача такая: Нужно передавать данные по протоколу UDP, но с "механизмом надёжной доставки". Как я полагаю нужно, чтобы данные передавались без потерь при помощи UDP протокола.


I>Как это реализовать?

I>У меня есть два варианты:
I>1) Сделать подобие TCP, только на прикладном уровне, т.е. пронумеровать все пакеты и отправлять их по одному. После каждой отправки, ждать подтверждения о доставке пакета и отправлять следующий, если нет подтверждения, значит послать пакет ещё раз.

Не изобретайте велосипед. Прочитайте RFC 3080.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.