Время передачи колеблется при использовании TLS 1.2 через OpenSSL - PullRequest
2 голосов
/ 10 октября 2019

Я использовал TLS 1.2 через OpenSSL 1.0.2 для передачи данных. При отправке небольших пакетов я столкнулся с проблемой. Время передачи каждого из маленьких пакетов с 25-байтовыми пользовательскими данными очень мало. Если время меньше 1 мс, все работает в ожидаемом диапазоне.

Проблема, с которой я сталкиваюсь, показана на прилагаемой картинке compare_two_runs

. Она показывает два разных прогона моей тестовой установки. Время передачи неожиданно увеличивается более чем на 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;
    }
}
...