Я думаю, что самая большая часть TCP / IP, которая препятствует масштабируемости, состоит в том, что она поддерживает буфер для всех входящих / исходящих соединений вплоть до размера окна. Поэтому, если у меня клиент с высокой задержкой и высокой пропускной способностью, с которым я разговариваю, я должен хранить все отправленные пакеты в буфере, пока не получу подтверждение. Так что для некоторых соединений это нормально, но для обработки 100К соединений это может стать проблематичным. На принимающей стороне, если пакет отброшен, он снова буферизирует все новые принятые пакеты до тех пор, пока требуемый не будет повторно передан.
Если вы собираетесь реализовать ретрансляцию, вам нужно сделать то же самое, и, следовательно, будет иметь те же издержки. Однако UDP дает вам преимущество, если вы знаете сквозную скорость соединения, или если определенное сообщение может быть доставлено не по порядку, или если определенные сообщения не нуждаются в повторной передаче. Сохранение игрового сценария:
пакет 1 = перейти к 1,1
пакет 2 = стрелять
пакет 3 = перейти к 2,2
Большинство разработчиков игр, если пакет 1 потерян, но пакет 3 получен, пакет 1 больше не важен, потому что он в любом случае содержит устаревшую информацию. Однако можно сказать, что пакет 2 важен, поэтому, если он не подтвержден, отправьте повторную передачу.
Если вам требуется высокая пропускная способность и подключение двух серверов напрямую с сетью Ethernet 1000 Мбит / с, TCP / IP потребуется некоторое время для масштабирования и дополнительных издержек, и, скорее всего, никогда не будет установлено истинное гигабитное соединение из-за механизмов предотвращения перегрузки. Однако вы знаете, что это 1 Гбит / с, поэтому вы можете настроить свой UDP для передачи со скоростью до 1 Гбит / с (минус накладные расходы) самостоятельно.
Чтобы ответить на ваши вопросы более прямо:
В любом случае, если вы собираетесь подтверждать каждый пакет, использование UDP не имеет большого преимущества, кроме того, что вы можете обрабатывать некоторые сообщения в ожидании повторной передачи (если вы не хотите также и доставку по порядку).
Udp не учитывается для игровых серверов, в основном из сценария, описанного выше, и для боевых систем реального времени, таких как шутеры от первого лица, где сообщение может быть отброшено, а новое пришедшее сообщение сделает недействительным пропущенное сообщение в любом случае. World of Warcraft может обойтись без использования TCP, так как они не должны быть такими точными с точки зрения времени и, вероятно, имеют хорошую логику, которая в любом случае затруднит вам заметить разницу. Боевая система просто не требует скорости.
Я бы также утверждал, что некоторые оправдания остались в прошлом, когда у всех были менее надежные и медленные интернет-соединения. TCP также более удобен для совместного использования сети, поэтому, если что-то происходит, он будет замедляться, поэтому каждый получит долю подключения (предотвращение перегрузки).
TCP / IP - это протокол, разработанный людьми, намного умнее меня за годы исследований. Настройка за последние несколько лет позволила ему работать лучше с более высокими и быстрыми средними скоростями сети, которые мы наблюдаем, и не требует большого понимания для использования.
Однако замена этого на UDP требует значительного понимания работы в сети. Я видел плохо написанные UDP-программы, насыщающие ссылки со скоростью 1 Гбит / с и уничтожающие весь трафик на линии, потому что они реализовали довольно наивный алгоритм повторной передачи.
Вот список вещей, которые TCP / IP теперь может сделать, что вы потеряете, перейдя по UDP:
- Для того, чтобы прибытие в вашу программу
- повторная передача (теперь с быстрой повторной передачей, выборочным подтверждением и другими функциями)
- максимальный размер сегмента
- Path MTU Discovery
- Обнаружение черной дыры (расширение Path MTU)
- предотвращение заторов
В связи с этим я настоятельно рекомендую придерживаться протокола TCP / IP, если он вам подходит.
Тоже не задирать, но вы комментируете, что интернет, работающий по TCP / IP, неправильный, на самом деле существуют десятки маршрутизируемых интернет-протоколов проверьте их здесь Я думаю, что вы имели в виду веб-страницы, и все веб-серверы работают поверх TCP / IP. Что опять-таки для сети замечательно, когда мы, люди, не заметим задержки, если страница отображается правильно. Даже для TCP / IP существует некоторая проблема, заключающаяся в том, что TCP / IP недостаточно агрессивен для Интернета: Google считает, что tcp / ip должен быть более агрессивным по умолчанию