Сетевой клиент Mac OSX, над которым я работаю, иногда возникают проблемы с подключением к порту HTTPS.Рассматривая трассировку сети, мы видим следующее:
T0.0 client:port -> server:443 SYN
T0.1 server:443 -> client:port SYN, ACK
T3.1 server:443 -> client:port SYN, ACK
T6.1 server:443 -> client:port RST
3-секундная задержка соответствует времени ожидания TCP для повторения неудачного SYN / ACK, так что это ожидаемо.Но что здесь невероятно, так это то, что клиент никогда не отвечает ACK или RST.Когда клиент пытается войти во второй раз, это успешно.Эта проблема воспроизводится на многих первых попытках подключения.В это же время происходят другие HTTPS-соединения из этой программы, и они, похоже, хорошо работают в сетевых трассировках.
Я подозреваю, что существует состояние гонки, из-за которого иногда сокет управляется неправильноНо до сих пор я не смог воссоздать это ни в каком коде, кроме затронутого клиента (который является очень большим и сложным программным обеспечением).Даже используя nmap
и hping3
для ручной обработки пакетов, клиент всегда отправляет как минимум RST.
Есть ли способ настроить (намеренно или по ошибке) такой сокет в коде пользовательского пространстватак что он не отвечает на SYN / ACK?