Привет эксперты по программированию сокетов,
Я пишу прокси-сервер в Linux для SQL Server 2005/2008, работающий в Windows.Прокси-код закодирован с использованием сокетов bsd и в C, и он работает нормально с проблемой, описанной ниже.
Когда я использую клиент базы данных (написанный на JAVA и работающий в Linux) для запуска запросов (с параллелизмом 100 или более) непосредственно к серверу базы данных, не происходит сброс подключения.Но через мой прокси я испытываю много перезагрузок соединения.
Копание глубже Я узнал, что соединение от «клиента БД» до «Прокси» всегда успешно, но когда «Прокси» пытается соединиться с сервером БД,сбой соединения из-за получения пакета SYN RST, ACK.
Это должно было дать некоторую предысторию.Вопрос в том, почему иногда SYN получает RST, ACK?
DB client(linux) to Server(windows) ----> Works fine
DB client(linux) to Proxy(Linux) to Server(windows) -----> problematic
Я знаю, что это может произойти в случае отказа в соединении, но это определенно не тот случай.SYN-переполнение может быть другим сценарием, но это не объясняет правильного поведения при непосредственном запуске на сервере.
Я подозреваю, что может потребоваться настройка некоторых параметров сокета, что клиент делает перед подключением, а мой прокси - нет.Пожалуйста, осветите это.Любая помощь (ссылки или указатели) приветствуется.
Дополнительная информация:
Написал клиент C, который выполняет параллельные соединения, который принимает параллелизм в качестве аргумента.Вот мои наблюдения: -> При параллельности 5000 и выше некоторые соединения не удалось установить «соединение отказано».-> ниже 2000, он работает нормально.
Но настоящая проблема наблюдается даже при параллельности 100 и более.Примечание: проблема зависит от времени, иногда она вообще не возникает, а иногда очень часто, и клиент БД (напрямую к серверу) всегда работает нормально.