Собираюсь быть кратким
Я написал собственную реализацию FTP с использованием c # .net 3.5.Система использует TcpClient (TcpListener для активного режима) для управления соединениями.В одном случае я получаю странное поведение, и я хотел бы спросить о возможных причинах.
Сам клиент отлично работает дома, и хороший процент наших клиентов удовлетворен этим.Однако у нас есть один, который я не могу понять.Мне прислали следы проволочной акулы, чтобы поковыряться в ней, но никакой настоящей радости.Клиентский компьютер стоит за тем, что я считаю (из описания клиента) большой сетевой инфраструктурой.Из-за пределов сети, подключение к тому же серверу работает как шарм.Вот что я вижу.
На моем клиенте, работающем в пассивном режиме, запрос tcp handshake отправляется для подключения к данным (сервер переходит в пассивный режим и указывает порт), но никогда не подтверждается.Это вызывает повторные попытки и возможное время ожидания.
С клиентом Filezilla (и Windows Explorer, и IE ...), снова используя пассивный режим, соединение проходит без проблем.Досадно, что это заставляет клиента и моего босса указывать пальцем на код.
Проходя по следам проволочной акулы, я не вижу различий между кадрами TCP.Все управляющие соединения подключаются к порту 21 и подтверждаются в обоих сценариях.Флаги похожи.То же самое относится и к соединению для передачи данных, за исключением того, что в данном случае это порт с большими номерами 52000+ (но не тот, который у меня есть).
Я не специалист по сетевому программированию, когда мы начинаем переходить на более низкиепроблемы протокола уровня, и мое понимание больших сетевых проблем очень ограничено.Как разработчик, я сразу же кричу «FIREWALL ISSUE», но на самом деле это ни для кого ничего не решает.
В заключение, кто-нибудь знает, какое оборудование / брандмауэр может вызвать такое поведение?Я подозреваю, что что-то блокирует трафик на уровне приложения, но вы никогда не знаете.
Спасибо за чтение.