diff --git a/docs/readme.eng.md b/docs/readme.eng.md index 635761a..798d4ea 100644 --- a/docs/readme.eng.md +++ b/docs/readme.eng.md @@ -299,7 +299,7 @@ sequence number. In `split2` mode this creates partially in-window packet. OS receives only in-window part. In `disorder2` mode OS receives fake and real part of the second segment but does not pass received data to the socket until first segment is received. First segment overwrites fake part of the second segment. Then OS passes original data to the socket. -All unix OS preserve last received data. This may not be the case for Windows servers and may not work. +All unix OS except Solaris preserve last received data. This is not the case for Windows servers and `disorder` with `seqovl` will not work. Disorder requires `seqovl` to be less than `split_pos`. Either statically defined or automatically calculated. Otherwise desync is not possible and will not happen. Method allows to avoid separate fakes. Fakes and real data are mixed. diff --git a/docs/readme.txt b/docs/readme.txt index cfd762f..0ab3ba4 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -393,11 +393,14 @@ seqovl байт со смещенным в минус sequence number на ве Для disorder2 overlap идет на 2-ю часть пакета. Обязательно, чтобы seqovl был меньше split_pos, иначе все отосланное будет передано в сокет сразу же, включая фейк, ломая протокол прикладного уровня. При соблюдении этого условия 2-я часть пакета является полностью in-window, -поэтому серверная ОС принимает ее целиком, включая фейк. Но поскольку начальная часть данных из 1 пакета еще не принята, -то фейк и реальные данные остаются в памяти ядра, не отправляясь в серверное приложение. Как только приходит 1-я часть пакета, -она переписывает фейковую часть в памяти ядра. Ядро получает данные из 1 и 2 части, поэтому далее -идет отправка в сокет приложения. Таково поведение всех unix ОС - оставлять последние принятые данные. -Для windows серверов может быть наоборот, поэтому не факт, что такой вариант будет на них работать. +поэтому серверная ОС принимает ее целиком, включая фейк. Но поскольку начальная часть данных из 1 пакета +еще не принята, то фейк и реальные данные остаются в памяти ядра, не отправляясь в серверное приложение. +Как только приходит 1-я часть пакета, она переписывает фейковую часть в памяти ядра. +Ядро получает данные из 1 и 2 части, поэтому далее идет отправка в сокет приложения. +Таково поведение всех unix ОС, кроме solaris - оставлять последние принятые данные. +Windows оставляет старые данные, поэтому disorder с seqovl будет приводить к зависаниям соединения +при работе с Windows серверами. Solaris практически мертв, windows серверов очень немного. +Можно использовать листы при необходимости. Метод позволяет обойтись без fooling и TTL. Фейки перемешаны с реальным данными. split/disorder вместо split2/disorder2 по-прежнему добавляют дополнительные отдельные фейки.