Просмотр полной версии : ПЛК100 по TCP теряет последний пакет при длине >512 байт
В ПЛК-100 фтп клиент. При приеме файлов теряется последний пакет, если размер файла больше 512 байт. Во вложениях скриншоты из Wireshark при получении от фтп сервера файлов: 171 байт, 737 байт и 1808 байт, а также эмуляция работы фтп сервера с помощью тестовой программы Hercules - прием 550 байт одной посылкой. Как видно потеря происходит, когда в пакете одновременно 3 флага: FIN,PSH,ACK - этот пакет ПЛК не принимает, а заканчивает прием. То есть при приеме 171 байт, этой комбинации флагов нет - принято 171 байт. При приеме 737 байт - принимается 512 байт, 1808 байт - принято 512+512+450= 1474 байта. При приеме от Hercules приняты все 550 байт.
Проверено на прошивках 2.14.0, 2.15.3, 2.15.8, 2.16.0. На всех прошивках кроме 2.14.0 еще и принимает 3-4 раза из 10. Может из за резетов в пакетах? Резетов нет, только при приеме 1808 байт, работал на прошивке 2.14.0, остальные скриншоты на прошивке 2.15.3.
Разработчики, хелп! Надо исправлять.
Вложения слева-направо: Hercules, 1808 байт, 737, 171
ip ПЛК: 192.168.46.50, ip сервера: 192.168.46.5
Апну! Есть тут кто-нибудь? )
Филоненко Владислав
12.05.2017, 10:03
есть такое. обнаружили и поправили в облачной прошивке 2.16
Скачал 2.16.0 здесь: http://www.owen.ru/catalog/codesys_v2/78552813
Ничего не изменилось.
Филоненко Владислав
12.05.2017, 15:42
Очепятался, 2.17
Попробуйте
Немного увеличился прием, из 737 байт принимает 536, а не 512 как раньше...
Wireshark позже посмотрю.
На 2.17 приходит только первый пакет, там где только флаг ACK (536 байт). Пакеты с PSH, ACK и FIN,PSH,ACK теперь не появляются в буфере, хотя ответ от ПЛК серверу есть (ACK). Во вложении передача фтп-плк файла 1205 байт.
Филоненко Владислав
15.05.2017, 12:48
а кто из них кто? 5-й - это ФТП?
как-то очень резко FIN появляется.
192.168.46.5 - фтп сервер на ПК.
192.168.46.50 - фтп клиент на ПЛК.
и без FIN пакет на 2.17.0 не появляется в буфере, тот который PSH,ACK 201 байт, на прошлых прошивках такие пакеты были в буфере.
Филоненко Владислав
15.05.2017, 13:12
а почему фтп делает FIN до аск от ПЛК?Да ещё и с данными.
Shutdown в сокете делаете?
Учтите, что окно сокета равно нулю, т.е. послал - принял - послал следующий.
И как Вы понимаете, что в буфере нет или часть пакета? Они recv могут выдаваться по частям. и не мгновенно.
я вот читаю переписку, никак в толк не возьму, какое отношение имеет SYN,ACK,FIN к конкретному протоколу FTP. Это касается любых пакетов передаваемых по Ethernet в плк, возможно это (http://www.owen.ru/forum/showthread.php?t=25814) чем то поможет
а почему фтп делает FIN до аск от ПЛК?Да ещё и с данными.
Как же без ACK? пакет №6321 - ACK от ПЛК, затем фтп шлет FIN,PSH,ACK.
Shutdown в сокете делаете?
SysSockShutdown делаю, после нескольких секунд без изменения буфера (как в бибке oscat.de по умолчанию)
И как Вы понимаете, что в буфере нет или часть пакета? Они recv могут выдаваться по частям. и не мгновенно.
SysSockRecv постоянно повторяется и смотрю буфер - приходят только первые 536 байт на прошивке 2.17. На остальных прошивках приходят все байты, кроме последнего пакета. На всех прошивках программа в ПЛК не меняется, фтп сервер тот же. А от прошивки зависит приходящее число байт.
То есть на прошивке 2.17 появился ответ ACK, которого не было на прошлых прошивках, но такое ощущение, что теперь PSH перестал работать, то есть не пробрасывает данные в клиентское приложение.
я вот читаю переписку, никак в толк не возьму, какое отношение имеет SYN,ACK,FIN к конкретному протоколу FTP. Это касается любых пакетов передаваемых по Ethernet в плк, возможно это (http://www.owen.ru/forum/showthread.php?t=25814) чем то поможет
Все серверы фтп, которые я пробовал, последнюю порцию данных пересылают одновременно с флагом FIN в пакете, как пишут в интернетах для ускорения обмена. И этот пакет не приходил. Эмуляция фтп сервера с помощью программы Hercules показала, что без передачи данных вместе с пакетом FIN - всё приходит полностью. Это было до прошивки 2.17. На прошивке 2.17 наоборот приходит только первый пакет.
вот лабораторная (http://ccna.mpei.ac.ru/IntroductionToNetworkTech/course/files/7.2.4.3%20Lab%20-%20Using%20Wireshark%20to%20Examine%20FTP%20and%20 TFTP%20Captures.pdf), расписывается нечто подобное. На Вашем последнем скрине концовка вроде верная, за исключением что 46.50 посылает разрыв соединения, так может дело в пользовательском коде
На Вашем последнем скрине концовка вроде верная, за исключением что 46.50 посылает разрыв соединения, так может дело в пользовательском коде
Так код один, а при смене прошивок приходит разное количество байт, причем с постоянной закономерностью.
А почему 46.50 не должен слать разрыв соединения, если он получил FIN?
потому что они оба перед этим подтвердили бит FIN, но не их задача знать закрыл пользователь сокет или нет
Филоненко Владислав
16.05.2017, 09:10
Во первых хотелось бы увидеть проект и ПО для эмуляции, к-е Вы используете. Чтобы повторить у нас.
Разница между 2.14 и 2.17 - MTU увеличили.
Малые пакеты проходят?
Во первых хотелось бы увидеть проект и ПО для эмуляции, к-е Вы используете. Чтобы повторить у нас.
Разница между 2.14 и 2.17 - MTU увеличили.
Малые пакеты проходят?
ftp сервер: https://filezilla-project.org/download.php?type=server или ftp server в windows 8.1.
ftp клиент во вложении.
Также эмулировал работу ftp server через hercules: http://www.hw-group.com/products/hercules/index_en.html
C ним проходили любые пакеты и маленькие и большие на прошивке 2.14, лог в первом посте. У Hercules не было пакетов с 3мя флагами: FIN, PSH, ACK.
потому что они оба перед этим подтвердили бит FIN, но не их задача знать закрыл пользователь сокет или нет
Вы имеете ввиду RST? Он появляется как видно по первому посту с прошивки 2.15. В 2.14 обходится без резетов.
Вы имеете ввиду RST? Он появляется как видно по первому посту с прошивки 2.15. В 2.14 обходится без резетов.
ни чего в этом такого нет, что разработчик пытается совершенствовать код, добавляем различную подстраховку. Про разные версии прошивки имело бы смысл упоминать, еслиб на какой то из них всё работало, а так то ведь ни на одной не принимается файл до конца, насколько я понял. Изначально моя мысль была, что фтп и тсп стоят на разных уровнях сетевой модели и прошивка ни чего не знает, по какому протоколу программист передает данные по сети, если такая проблема присутствует при передаче файла (как набора байт) с фтп-сервера, значит она бы проявила себя и при загрузке другого контента, хтмл например, иначе проблема в коде
значит она бы проявила себя и при загрузке другого контента, хтмл например, иначе проблема в коде
У меня такая же мысль конечно была. Поэтому я проверил на Геркулесе ту же самую программу и она нормально работала. То есть мой клиент подключился к Геркулесу и я отправлял любое число байт и всё приходило в буфер. А фтп серверы -5 штук не работали. Я подумал, что не может же быть, что все фтп серверы, включая сервер microsoft в windows неправильные и начал смотреть пакеты и нашел такую разницу. Во первых пакеты с fin, psh, ack не появлялись в буфере, во вторых до прошивки 2.17 на FIN,PSH,ACK ПЛК не отвечал ACK, а слал в ответ FIN,ACK. В то же время с геркулесом без FIN,PSH,ACK он общался корректно.
Филоненко Владислав
16.05.2017, 14:52
Странная проблема с ФТП. Видимо стек такую ситуацию (FIN,PSH,ASK) не может отработать правильно, т.к. сокет закрывается FIN-ом.
Стек на 1хх достаточно древний, обновлений нет и не будет.
Я, конечно, посмотрю, что там происходит внутри, но шансы на простое решение малы.
Странная проблема с ФТП. Видимо стек такую ситуацию (FIN,PSH,ASK) не может отработать правильно, т.к. сокет закрывается FIN-ом.
Стек на 1хх достаточно древний, обновлений нет и не будет.
Я, конечно, посмотрю, что там происходит внутри, но шансы на простое решение малы.
На прошивке 2.17 ПЛК на FIN,PSH,ACK начал отвечать ACK, но теперь и PSH, ACK не приходит...
Я, конечно, посмотрю, что там происходит внутри, но шансы на простое решение малы.
Подниму темку. Посмотрели, что там внутри?
И тут спрошу... можно использовать таргет 2.11 c прошивкой 2.14 на ПЛК 100?
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot