Я использовал TLS 1.2 через OpenSSL 1.0.2 для передачи данных. При отправке небольших пакетов я столкнулся с проблемой. Время передачи каждого из маленьких пакетов с 25-байтовыми пользовательскими данными очень мало. Если время меньше 1 мс, все работает в ожидаемом диапазоне.
Проблема, с которой я сталкиваюсь, показана на прилагаемой картинке
. Она показывает два разных прогона моей тестовой установки. Время передачи неожиданно увеличивается более чем на 40 мс (следующий пакет после выделенного). Это, очевидно, вызвано задержкой отправки пользовательских данных. Я написал минимальный демонстрационный сервер, чтобы продемонстрировать проблему. Странная вещь, которая заставляет меня задуматься, это тот факт, что всегда влияет одна и та же телеграмма с данными пользователя. Каждый передаваемый пакет начинается с номера телеграммы текущего пользователя (на рисунке 6764 в самом низу). Это более чем интересно и делает общие причины, такие как отбрасывание пакетов или приостановка процесса, очень маловероятной причиной этой проблемы. (Тем не менее, серверный процесс начинается с хороших --20, чтобы быть уверенным.) Это может привести к влиянию случайных номеров телеграмм.
while (1)
{
int32_t recv_size = SSL_read(connectionSocket, buffer, sizeof(buffer) - 1);
if (recv_size < 0)
{
std::cout << "Could not receive data\n";
break;
}
else if (0 == recv_size)
{
std::cout << "Client closed connection\n";
break;
}
/* Send data */
if (SSL_write(connectionSocket, buffer, recv_size) != static_cast<int32_t>(recv_size))
{
std::cout << "Could not send data\n";
break;
}
}