Протокол передачи Интернет-данных с наименьшей задержкой? C # - PullRequest
2 голосов
/ 18 февраля 2010

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

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

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

под термином обычные домашние ПК, я предполагаю, что они имеют нормальный широкополосный доступ (512 кбит / с - 2 Мбит / с) и по всему миру (возможно между США и Японией).БОЛЬШОЙ вопрос в том, что:

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 18 февраля 2010

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

Моя официальная рекомендация - использовать UDP с определением «отброшенного пакета» на принимающей стороне. Так работают все игры Quake и все игры Half-Life / Source.

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

1 голос
/ 18 февраля 2010

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

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

0 голосов
/ 18 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...