Можно предположить, что случайные числа будут уникальными, но вы должны быть осторожны.
Предполагая, что ваши случайные числа распределены поровну, вероятность столкновения примерно равна (n 2/2 ) / k, где n - количество генерируемых вами случайных чисел, а k - количество возможных значений, которые может принять «случайное» число.
Вы не ставите число на астрономически маловероятное, поэтому давайте возьмем его как 1 к 2 30 (примерно на миллиард). Допустим также, что вы генерируете 2 30 пакетов (если каждый пакет представляет около килобайта данных, то это означает терабайт общих данных, большой, но невообразимо большой). Мы находим, что нам нужно случайное число с по крайней мере 2 89 возможных значений.
Во-первых, ваши случайные числа должны быть достаточно большими. 32-битное случайное число может иметь не более 2 32 возможных значений. Для занятого сервера, который далеко не достаточно высок.
Во-вторых, ваш генератор случайных чисел должен иметь достаточно большое внутреннее состояние. Если ваш генератор случайных чисел имеет только 32-битное внутреннее состояние, то независимо от того, насколько велико значение, которое вы сгенерируете из него, вы все равно получите не более 2 32 возможных значений.
В-третьих, если вам нужно, чтобы случайные числа были уникальными для разных соединений, а не только внутри соединения, ваш генератор случайных чисел должен быть хорошо виден. Это особенно верно, если ваша программа часто перезапускается.
В целом, «обычные» генераторы случайных чисел в языках программирования не подходят для такого использования. Генераторы случайных чисел, предоставляемые криптографическими библиотеками, обычно являются.