Re: Дублирование TCP пакетов
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.03.08 21:28
Оценка:
Здравствуйте, critter, Вы писали:

C>Насколько я понимаю в TCP/IP встроен механизм отбрасывания дублированых пакетов, т.е. имеем ситуацию:


C>1) клиент отправил пакет на сервер

C>2) сервер получил пакет
C>3) сервер отправил клиенту подтверждение на пакет, но подтверждение не дошло
C>4) клиент отправил тот же пакет на сервер еще раз

C>Пакет будет отброшен. Я правильно понимаю?


Слово "пакет" здесь неуместно. Здесь Вам не UDP и даже не SCTP (как реализация seqpacket).
Пакеты действительно есть. Но не на TCP. А на IP уровне. TCP payload сообщает "передаю данные начиная с позиции X". И если придёт снова такое же, а приёмная сторона ждёт уже позицию X+N, то данные из того пакета не будут отданы в программу. Но это не "отброшен", могут быть другие действия (например, перепосылка ACK).

C>Просто имею какую то необъяснимую ситуацию. Такое впечатление что пакет все таки приходит дважды. С задержкой примерно в 0.3-0.4 сек. Возможно ли что при каких либо обстоятельствах TCP/IP пакет придет дважды?


Как Вы это определили? Одни и те же данные в потоке видите дважды? Или что-то иное?

C>Поможет ли введение своей нумерации пакетов?


Нет. Поможет — понять, чем передача _потока_ (как в TCP и вообще как в SOCK_STREAM) отличается от передачи _пакетов_ (как в SOCK_DGRAM или SOCK_SEQPACKET), хотя тут термин "пакет" таки крив.

C> Думается что раз такая нумерация уже есть в TCP то введение своей ситуацию не исправит... Или можно уверенно сказать что дублирования пакетов быть не может потому что не может быть никогда и идти править руки? :)


Давайте Вы не будете пытаться строить догадки на основании неверного понимания, а просто расскажете детали проблем. Итак — почему Вы предполагаете "повторение пакетов"?
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.