Alex
16.01.2017
21:35:26
Блин, синфлуды, пардон
Ivan
16.01.2017
21:35:55
аа, точно. понял. это да.
Maxim
16.01.2017
21:36:09
Ivan
16.01.2017
21:36:53
Google
Leo
16.01.2017
21:36:56
плюс часто абонент не хочет платить за то, что ему будут вирусы лечить.
ему проще жить с трипером, как Мао
зато дешевле
Maxim
16.01.2017
21:37:56
Ну я бы вот здесь наладил... Парень, который делает за доп., на самом деле, еще должен говорить спасибо, ну хотя бы 10%. Их он может отрабатывать вот по таким заявкам..
Alex
16.01.2017
21:38:27
Кстати. А вот если без SYNcookie теряется третий пакет в рукопожатии, с ACK - чем сценарий отличается от сценария с SYNcookie? Ничем. Клиент ждет приветствие от сервера, его не происходит. Что делает клиент? Через время посылает ACK опять. Что происходит без SYNcookie? Устанавливается сессия, и сервер чего-то плюет. Что происходит с SYNcookie? То же самое. В чем разница? :)
Maxim
16.01.2017
21:39:58
плюс часто абонент не хочет платить за то, что ему будут вирусы лечить.
Просто приведу пример. Если у клиента резолвер висит, он получает нотисы ежедневные. Если с него потек трафик ДНСовский, он отключается. По звонку включается. По детекту снова отключается. Чтобы не было вони, с ними ведется работа. Вообще, в конце концов, у него появляется микротик ?
Leo
16.01.2017
21:39:59
Alex
16.01.2017
21:40:43
Да он как бы будет в обоих случаях. Потому что клиент вообще не в курсе, работают на сервере синкуки или нет. Это механизм реализации, а не протокола, на проводе его нет.
Maxim
16.01.2017
21:41:55
Alex
16.01.2017
21:41:57
Поэтому я продолжаю не видеть, чем синкуки мешают SMTP
Ну и отмечу, что синкуки нынче по умолчанию включены во всех дистрибутивах линукса и фри AFAIK. Так что вопрос только тюнинга.
Google
Leo
16.01.2017
21:46:42
эгм, они включаются только при определенном трешхолде
по дефолту — нет
Alex
16.01.2017
21:46:55
Ну и да, еще синкуки неприятны ppsами, которые сервервер может не держать. Опять же, вопрос подбора железа и тюнинга.
Leo
16.01.2017
21:47:09
https://github.com/torvalds/linux/blob/v2.6.38/Documentation/networking/ip-sysctl.txt#L422
Alex
16.01.2017
21:47:16
Igor
16.01.2017
21:47:29
сервер без syn cookie пошлёт заново syn-ack, а с syn cookie - ничего не пошлёт...
Alex
16.01.2017
21:48:11
Потому что ретрансмит. И он это будет делать, если его ACK потерян, независимо от того, есть на сервере SYNcookie или нет.
Igor
16.01.2017
21:48:20
здрасте приехали
Alex
16.01.2017
21:48:26
Igor
16.01.2017
21:48:28
а откуда клиент знает что ACK потерян?
Vartan
16.01.2017
21:48:48
потому что sequence number'ы есть
Alex
16.01.2017
21:49:11
А ниоткуда. ACK - это подтверждение последнего SN, и больше ничего. Послыается, по большому счету, просто так
Igor
16.01.2017
21:49:15
хорошо. Я клиент, я отправил ack с номером 1773. Дальше что? :)
Vartan
16.01.2017
21:50:00
ну если ты получил следующий пакет и не было ack'а на предыдущий sn, то что-то не так
Alex
16.01.2017
21:50:17
Дальше через время этот ACK перепосылается. Ну или - зависит от стека и настроек - сессия рубится по отсутствию активности.
Если я послал SYN и не получил SYN-ACK (который потерялся) - я через время перепосылаю SYN. Если я после отсылки SYN-ACK ничего не виду, я время от времени перепосылаю свой ACK, подтверждающий нулевой относительный SN
Igor
16.01.2017
21:52:13
кто "я" при посылке SYN-ACK?
Alex
16.01.2017
21:52:16
Иначе бы потеря ACK приводила к массово неустановленным TCP-сессиям, особенно на заре интернета, когда протокол создавался, а каналы были хуинькими и ненадежными
Google
Alex
16.01.2017
21:52:24
Клиент
Igor
16.01.2017
21:52:33
ясно
следующий
Alex
16.01.2017
21:53:43
И это никак не зависит от SYNcookie. Есть они, нет их - этот сценарий один и тот же.
Igor
16.01.2017
21:54:17
Клиент
У вас и syn, и syn-ack, и ack - клиент отправляет?
Зачем ему вообще сервер, он самодостаточен! :))
Alex
16.01.2017
21:55:18
Я не по-русски написал "если я послал SYN и не получил SYN-ACK..."?
Igor
16.01.2017
21:57:01
У вас то ACK потерян, то SYN-ACK....
Если syn-ack потерян, то ничего не будет.
Брандашмыг
16.01.2017
21:57:37
Спишь?
Сорри
Igor
16.01.2017
21:58:10
Если сервер не получит от клиента ACK то клиент будет считать что соединение открыто, а сервер вообще ничего об этом знать не будет.
Alex
16.01.2017
21:58:13
Может быть потерян любой из трех пакетов. Я по очереди про эти ситуации написал. Ну, потерянный SYN - очевидно. Потерянный SYN-ACK - это перепосылка SYN клиентом. Потерянный ACK (клиента) - это перепосылка ACK клиентом же.
Igor
16.01.2017
21:58:56
Да с чего клиенту отправлять опять ack? Да еще и с тем же номером?
Alex
16.01.2017
21:59:38
На колу мочало, начинай сначала. Клиент. Время от времени. перепосылает последний ACK. В том числе, и на случай, если он потерян. Потому что ACK - это acknoledgement, подтверждение SN. И все. В данном примере он подтверждает SN=ISN со своей стороны.
Протокол так устроен.
Igor
16.01.2017
22:00:22
ткните меня носом в какую-нибудь ссылку что ли, про периодическую отправку ACK после получения единстенного SYN-ACK
Alex
16.01.2017
22:00:35
И если б он был устроен иначе, то сессии на заре интернета открывались бы намного хуже :) Потому что тогда этот сценарий был вполне вероятен
Стивенс, второй том.
Igor
16.01.2017
22:01:08
Google
Alex
16.01.2017
22:01:36
Нет уж, я и так вас бесплатно слишком долго консультировал.
Maxim
16.01.2017
22:01:48
?
А я все ждал, когда эта мегадискуссия завершится :))
Igor
16.01.2017
22:03:12
то есть никого больше не смущает, что клиент, не получая от сервера никаких пакетов - просто так отправляет ACK периодически?
titikov
16.01.2017
22:03:19
Не ссорьтесь, направьте лучше меня на путь верный.
Есть сервер с аццелем, вхреначиваю туда сетевуху на i350, в результате при нагрузке на отдачу получаю кучу protocol reject 0xffff в логах роутеров(и на аццеле) и последущий отвал сессии. Даже напрямую, соответсвенно потерь на сетевухе нет. При нагрузке на входящий все ок, только lcp echo бегает.
При этом на встройке все отлично, куда копнуть?
Ivan
16.01.2017
22:04:21
Igor
16.01.2017
22:08:52
Alex
16.01.2017
22:12:16
Вам пора учиться по книгам, а не по чатам, вот что.
Igor
16.01.2017
22:12:48
а вам пора понять что ACK отправляется при получении каких-то данных, а не просто так "периодически"
Alex
16.01.2017
22:13:24
Еще раз. Учитесь. Подучитесь - возвращайтесь.
Ivan
16.01.2017
22:14:39
Мда, запахло. Кто б там не был прав, посмотрите со стороны.
Igor
16.01.2017
22:17:59
Alex
16.01.2017
22:21:45
Надо смотреть реализации, да. ACK может посылаться после SYN/SYN-ACK в любой момент, это его право. Но может и не посылаться. Если в линуксовом стеке, например, клиент предполагает перепосылку SYN-ACK на случай потери ACK, и сам ACK не перепосылает - проблема иногда может случаться
Хотя и непонятно, зачем бы так реализовывать эту часть.
*перепосылаться
Igor
16.01.2017
22:23:50
Вот это уже более конструктивный диалог. А можно попросить пример реализаций где ACK перепосылается?
Я нигде ни разу о такой реализации упоминаний не встречал - может и правда упустил что-то...
Alex
16.01.2017
22:23:53
Если это действительно так реализовано. Других подводных камней я не вижу
У меня твердое впечатление, что в BSD-стеке так изначально делалось, но в код в полвторого ночи не полезу смотреть
Вообще, надо поизучать вопрос. Может, надо это место стандартизировать. Хотя бы draft в IETF написать. Ибо пока что это на совести реализатора, возможно. Надо завтра RFC поглядеть.
Tim
16.01.2017
22:48:38
Google
Tim
16.01.2017
22:55:07
Alex
16.01.2017
22:56:17
Ну что, надо подумать, как бы просигналить о том, что на этом соединении ее надо включать, таки действительно сделать draft.
Igor
16.01.2017
23:06:07
Alex
16.01.2017
23:07:49
Вот зоопарк не изучал, надо смотреть, что там в разных дистрибутивах. Навскидку сложилось впечатление, что он действительно может быть отключен по умолчанию. Впрочем, интервал 2 часа - это почти что отключен. Зачем так делать - непонятно :)
Но если так, то да, засады возможны. Не очень вероятны, но все же
Igor
16.01.2017
23:12:17
в линуксе 2 часа, в freebsd - The default is 7200000 msec (2 hours)...в винде вроде так же.
аргументы смешные для 2017-го года:
If keepalive is provided the RFC states that the required inter-
keepalive distance MUST default to no less than two hours. If it
does not, the probability of connections breaking increases, the
bandwidth used due to keepalives increases, and cost increases
over paths which charge per packet.
Roman
16.01.2017
23:15:16
Alex
16.01.2017
23:15:19
Ну что, пошел писать draft, чтобы сервер сигналил клиенту о необходимости агресивного keepalive.
Дело нехитрое, добровольное, полная обратная совместимость
Igor
16.01.2017
23:16:52
можно даже не о кипаливах сигналить, а о том что "если после отсылки первого ACK нет данных от сервера в течение ХХ секунд" - считать соединение разорваным.
Roman
16.01.2017
23:19:05
Igor
16.01.2017
23:19:48
ХХ задать в rfc.
Но я что-то слабо себе представляю каким образом можно в одном единственном пакете передать что-то клиенту, учитывая что набор флагов мы менять не можем, а если вместо SYN-ACK отправлять какой-нибудь SYN-ACK-URG - наверняка что-нибудь сломается на "старом" клиенте...
Alex
16.01.2017
23:22:05
Зачем? TCP options двух видов: "у меня тут SYNcookie, если после ACK молчание - рвите соединение" и "у меня тут SYNcookie, если после ACK молчание - перепосылайте почаще". Можно даже рекомендуемую частоту передать.
На этом этапе место для опций должно быть до фига еще, так что ничему оно мешать не будет, опции коротенькие, так что пакет не раздуют. В общем, особых проблем я не вижу.
Для embedded можно даже рекомендовать ставить эти опции всегда первыми, чтобы у них было фиксированное смещение и анализировать было бы просто. Хотя вот это вот через IETF пройдет с маленькой вероятностью
Ладно, это все завтра. Сейчас спать надо
Igor
16.01.2017
23:25:14
Ну, про опции не знаю...Может и можно
Спокойной ночи!
Alex
16.01.2017
23:26:33
Ну, MSS же уже так аджастят, и норм