Самая низкая задержка протокол передачи данных малого размера Интернет? с#


Я делаю Игровой интернет-проект, который включает в себя отправку небольшого размера данных (от 1K до 50K) через Интернет между двумя обычными домашними компьютерами. Главное, что меня волнует, - это задержка.

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

Мне просто интересно, есть ли другие протоколы, которым я могу следовать, чтобы отправлять / получать небольшие данные между двумя обычными домами ПК?

Под термином "нормальные домашние ПК" я подразумеваю, что у них есть нормальная широкополосная связь (512kbps - 2Mkbps) и по всему миру (возможно, между нами и Японией).

Еще один большой вопрос заключается в том, что:

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

Спасибо

3 2

3 ответа:

Заголовок TCP составляет 32 байта, а заголовок UDP-всего 16 байт. Кроме того, поскольку UDP не имеет управления потоком, никогда не будет случая, когда клиент попросит сервер замедлиться. UDP почти наверняка будет самым быстрым. ICMP-пакет имеет заголовок, который составляет 20 байт, и, вероятно, будет немного медленнее, чем UDP.

Моя официальная рекомендация-использовать UDP, с некоторым обнаружением "отброшенного пакета" на приемном конце. Вот как все игры в Quake и все игры Half-Life / Source работают.

Что касается пинга между Великобританией и Японией, то задержка будет почти одинаковой для любого используемого протокола. Большая часть этого продиктована скоростью света и загруженностью пограничных маршрутизаторов.

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

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

Как говорится, для игровых целей 1K, и особенно 50K, - это очень большой объем данных, особенно если это нужно посылать постоянно. Если вы отправляете так много данных, ожидайте и планируйте задержку-часто это означает, что вы ожидаете того, что произойдет по проводу, и компенсируете, когда данные поступают, вместо того, чтобы ждать, когда они поступят.

Если вы хотите общаться через Интернет, вы вынуждены использовать семейство протоколов IP. Это не мешает вам создавать свой собственный протокол поверх IP, но это, конечно, не будет быстрее с точки зрения задержки. Все, что вы можете сделать, это реализовать сжатие, чтобы минимизировать полезную нагрузку, передаваемую по проводу.