LINUX.ORG.RU
ФорумAdmin

«ускоритель» TCP при forwarding

 , , , ,


0

1

сап лор, есть несколько вопросов по сетям которые я не смог нагулить (плохо искал похоже).

а) есть ли готовые tcp «прокси» которые терминируют tcp с одного конца, кладут даныне в очередь, пересылают даныне через новый tcp connection по адресу, при этом пересылая и icmp т.е. полностью прозрачны? б) можно ли это сделать силами только лишь iptables?

Зачем нужно. Есть моя рабочая станция в г. СтандартЗажопинск и есть сервер скажем в московском дц. И станция и сервер имеют линк 100Mbit, но если я делаю пайкеджманаджер_name update из дому это занимает n минут, а на сервере выполняется почти мгновенно. Оно и логично, в дц там пару хопов до магистрали, можно считать что почти локалка, tcp в таких условиях работает крайне хорошо. Фаст опен вся фигня, cubic чувствует себя как дома. Из моего зажопинска, через кривой шейпер провайдера, через двадцатку хопов до магистрали, через подлагивающую вафлю, конечно скорость так себе. Вот и пришла мысля запустить tcp «прокси» на сервере. В этом случае запрашиваеммый хост крайне быстро и охотно отдает пакеты, а уж опосля, меееедленно, я перешлю их в свой зажопинск. Ускорение состоит в том, что практически все веб серверы + стек tcp/ip не стремятся выжать из канала максимум и крайне консервативны в количестве пакетов в еденицу времени исходя из способности клиента. Ды и уравниловку ни кто не отменял, в итоге «забитые» страдают в двойне. С точки зрения сongestion сontrol благодать, cubic для господ (tier1), westwood для крестьянорабочих. + разные там MTU и т.д., уменьшение RTT т.к. бьем маршрут на 2…

в) что по пропорциональному уменьшению буфера tcp по мере заполнения очереди? Экспоненцальное уменьшение после некоторого лимита?

г) локальный tcp proxy в домашней сети. Зачем ходить за тридевять земель перезапрашивая утеренный/побитый в радиоэфире драгоценный пакет (тем он и драгоценен что иноморский, накладные расходы на доставку высокие), когда можно запомнить его на домашнем тазике и втолковывать рабочей станции пока до той не дойдет.

д) qos и ip path constant heat. Возможности канала известны заранее или могут обновляться динамически. Если мы имеем любой tunel через tcp (или для raw ip или udp это тоже актуально). То можно в нем создать «служебное» соединение ,которое гоняет одинаковые пакеты, трафик по которому будет регулироватся по закону s(t) = const - tunel_data(t) где const верхний лимит канала. Т.е. тунель будет в независимости от тунелированнго трафика в нем всегда поддерживать один и тотже rate. Верхний лимит можно подстраивать в зависимости от патерь пакетов. Подстройка одного connection видится мне более практичной чем крутить множество tcp. Абузинг факта point2point. +сетевое оборудование нынче достаточно интелектуальное и тоже трафик считает, зная от кого что ждать, тут и для клиента хорошо и для сетей предсказуемо. +ещё кто то знает тот знает - кореляционный анализ.

е) kernel или юзерспейс реализация fake tcp (юзерспейс наверное). Нынче с нашем буйствующем RosPlugНадзором актуально. tcp in tcp всегда плохо. Но все идет к тому что только tcp будет ходить, причем только кашерные протоколы. на dtls надежды нет. Вопрос знатоком - есть ли решение которое маскируется под tcp, но при этом позволяет out of order доставку? Вернее это и есть реализация tcp только с возможностью читать сырые пакеты.

ё) есть ли наработки по tls preopen? Сделать mitm на машине локльно и заранее открывать 10-20 tls соедененй для самых частых sni за все время или за окно. Ну через n времени если не нужны отсылать http options, закрывать, открывать опять. Перспективным видится soks5 proxy для этого.

ж) в природе не существует ни какого хитрого http header compression над tls трафиком? ну мало ли можно заранее заготовить кусок. как сделать это через mitm понятно, но тут mitm должен быть на граничном узле что не очень секьюрно.

оригинальная орфаграция и пунктуация сохранена, спасибо!

Ох и простыня, начало неплохое, продолжай копать, истинна не далеко.

a. Да, называется NAT
b. Да, см. MASQUERADE и SNAT
c. Тут почитай про TCP WINDOW и его «scaling» и возможно FLOW CONTROL - IEEE 802.3X
d. Ну в этом как бэ и есть суть TCP, на каждый чих ждём ACK
e. Тут чёт много всего, формулы для расчёта пропускной способности уже давно общедоступны и чаще всего опираются они на RTT
f. Тут наркомании на любой вкус и цвет, странно что в шапке помеченно как «не нагуглил»
g. Были по «fast reopen», но их забраковали как не безопасные, вообще keep-alive отдельная тема, сейчас почти всё идёт через кучу прослоек аля Cloudflare, да и мало кто из владельцев «нагруженных» сервисов захочет держать пул этих мёртвых душ
h. Нет

sparks ★★★★
()
Последнее исправление: sparks (всего исправлений: 1)
Ответ на: комментарий от sparks

ээээээ…. это что тролинг???

a. Да, называется NAT

из википедии NAT — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. |Он ни чего не делает с данными IP пакета он только изменяет адреса и перекладывает в нужный интерфейс. И терменировать tcp сессию не может. Или я не знаю чего-то? Если это не тролинг ты не понял что мне нужно?

b. Да, см. MASQUERADE и SNAT

тудаже

c. d.

без коментариев

e.

делаю вывод что ты всё же ни чего не понял, хотя направление мысли что мне это нужно при forwarding (т.е. использование maskarade) верное, хотя казалось бы при каких ещё обстоятельствах может понадобится подобное

g.

Это не имеет отношения к fast reopen и keep-alive. Мне нужно не преиспользование соединения а заранее открытие нового (даже до того как его попросят) и установление tls handshake (чтобы не тратить на него время потом).

novoxudonoser
() автор топика
Последнее исправление: novoxudonoser (всего исправлений: 1)
Ответ на: комментарий от anc

При входящем TCP соединении для назнацения IP X и порта Y. Установить соединение (1), считать n байт (размер mtu), что автоматически отправит ack отправителю. Открыть tcp соединение (2) к IP X и потру Y, отправить эти n байт. При получении байт от X по соединению (2) переслать их в соединение (1). Повторять до тех пор пока одна из сторон не закроет соединение.

novoxudonoser
() автор топика
Ответ на: комментарий от novoxudonoser

Истина дальше чем мне показалось изначально))

Когда HostA отправляет пакет на ServerC, расположенный за пределом его «локальной» сети, то он отправится в шлюз по умолчанию - GateB. Если на GateB сконфигурирован NAT, то он откроет новое соединение до ServerC и будет пересылать данные, ServerC будет думать что общяется с GateB, но по факту с HostA через GateB, это и есть преобразование/трансляция ip адреса или MASQUERADE

HostA <–> GateB <–> ServerC

sparks ★★★★
()
Ответ на: комментарий от sparks

Истина дальше чем мне показалось изначально

тут как посмотреть… очень диалектичненько получается…

что происходит в описанной тобой схеме (NAT):

HostA (192.168.1.100) –----> GateB (192.168.1.1, 90.90.90.90) –-----> ServerC (80.80.80.80)
что происходит с IP пакетом:
открытие соединения
         ----------->                   ----------->
              |IP HEADER                     |IP HEADER
              |  ...                         |  ...
              |  src: 192.168.1.100          |  src: 90.90.90.90
              |  dst: 80.80.80.80            |  dst: 80.80.80.80
              |IP CONTENT                    |IP CONTENT
              |  content type - tcp          |  content type - tcp  
              |  src port: 10000             |  src port: 10000
              |  dst port: 80                |  dst port: 80 
              |  seq num : 1                 |  seq num : 1
              |  ack num :                   |  ack num : 
              |  ...                         |  ...
              |  data: HTTP 1.1\r\n...       |  data: HTTP 1.1\r\n...
получение данных
         <-----------                   <-----------
              |IP HEADER                     |IP HEADER
              |  ...                         |  ...
              |  src: 80.80.80.80            |  src: 80.80.80.80
              |  dst: 192.168.1.100          |  dst: 90.90.90.90
              |IP CONTENT                    |IP CONTENT
              |  content type - tcp          |  content type - tcp  
              |  src port: 80                |  src port: 80
              |  dst port: 10000             |  dst port: 10000 
              |  seq num :                   |  seq num : 
              |  ack num :  1                |  ack num : 1
              |  ...                         |  ...
              |  data: <html>text...         |  data: <html>text...
... много много пакетов
         <-----------                   <-----------
              |IP HEADER                     |IP HEADER
              |  ...                         |  ...
              |  src: 80.80.80.80            |  src: 80.80.80.80
              |  dst: 192.168.1.100          |  dst: 90.90.90.90
              |IP CONTENT                    |IP CONTENT
              |  content type - tcp          |  content type - tcp  
              |  src port: 80                |  src port: 80
              |  dst port: 10000             |  dst port: 10000 
              |  seq num :                   |  seq num : 
              |  ack num :  100              |  ack num : 100
              |  ...                         |  ...
              |  data: ...text<\html>EOF     |  data: ...text<\html>EOF

что нужно мне (tcp termination proxy):

открытие соединения
         ----------->                   ----------->
              |IP HEADER                     |IP HEADER
              |  ...                         |  ...
              |  src: 192.168.1.100          |  src: 90.90.90.90
              |  dst: 80.80.80.80            |  dst: 80.80.80.80
              |IP CONTENT                    |IP CONTENT
              |  content type - tcp          |  content type - tcp  
              |  src port: 10000             |  src port: 99999
              |  dst port: 80                |  dst port: 80 
              |  seq num : 1                 |  seq num : 1
              |  ack num :                   |  ack num : 
              |  ...                         |  ...
              |  data: HTTP 1.1\r\n...       |  data: HTTP 1.1\r\n...
получение данных
                                        <-----------
                                             |IP HEADER
                                             |  ...
                                             |  src: 80.80.80.80
                                             |  dst: 90.90.90.90
                                             |IP CONTENT
                                             |  content type - tcp  
                                             |  src port: 80
                                             |  dst port: 99999 
                                             |  seq num : 
                                             |  ack num : 1
                                             |  ...
                                             |  data: <html>text...
... много много пакетов
                                        <-----------
                                             |IP HEADER
                                             |  ...
                                             |  src: 80.80.80.80
                                             |  dst: 90.90.90.90
                                             |IP CONTENT
                                             |  content type - tcp  
                                             |  src port: 80
                                             |  dst port: 99999 
                                             |  seq num : 
                                             |  ack num : 100
                                             |  ...
                                             |  data: ...text<\html>EOF

отсылка их в HostA
         <-----------                   
              |IP HEADER                     
              |  ...                         
              |  src: 80.80.80.80            
              |  dst: 192.168.1.100          
              |IP CONTENT                    
              |  content type - tcp          
              |  src port: 80                
              |  dst port: 10000             
              |  seq num :                   
              |  ack num :  1              
              |  ...                         
              |  data: <html>text...
...
         <-----------                   
              |IP HEADER                     
              |  ...                         
              |  src: 80.80.80.80           
              |  dst: 192.168.1.100          
              |IP CONTENT                    
              |  content type - tcp          
              |  src port: 80                
              |  dst port: 10000             
              |  seq num :                   
              |  ack num :  100              
              |  ...                         
              |  data: ...text<\html>EOF     

я намеренно опустил SYN ACK взаимодействие и отправил данные сразу в первом пакете также значения seq num, ack num не верны но суть передают в данном примере сначала идет полное получение данных, только затем пересылка, это для упрощения хотя пересылка в HostA должна начинатся сразуже паралельно с дополучением данных

novoxudonoser
() автор топика
Последнее исправление: novoxudonoser (всего исправлений: 2)
Ответ на: комментарий от novoxudonoser

soks5

maskarade

Верный признак того, что или пальцы текст набирать не успевают за мыслью, или в голове шиза. Ставлю на второе.

Человек с опытом никогда в написании этих терминов не ошибётся, тем более это точно не случайные опечатки.

anonymous
()
Ответ на: комментарий от anonymous

Ну если бы и пакетные менеджеры и ssh и броузеры и т.д. исключитьльно всегда по quic работали, то да, небыло бы больше греха и печали и все эти извращения были не к чему. Но на практике его исчезающе мало.

novoxudonoser
() автор топика

У TCP и UDP пакета есть время жизни и я не про TTL, оно в рамках сессии установленного соединения.

Следовательно, если пакет за определённый период времени не дошёл - он считается потерянным.

Поэтому в рамках TCP / UDP ты не сможешь где-то сохранить поток пакетов, а потом отдать их твоему медленному хосту, когда он их запросит.

У тебя выход один: скачать нужные тебе файлы на сервере, положить, а потом переливать как тебе удобно.

Собственно это и будет твоим буфером / прокси пакетов.

anonymous
()
Ответ на: комментарий от novoxudonoser

то да, небыло бы больше греха и печали и все эти извращения были не к чему.

Я очень тупой и не понимаю твою конечную цель.

Может, у тебя условия доступа в интернет неудобные? Тогда запили куик (или удп) туннель.

Или это чисто теоретические задачи? Тогда вопросов нет и приношу извинения за флуд.

anonymous
()
Ответ на: комментарий от novoxudonoser

Ваще кстати не вижу в этом принципиальной проблемы, кроме одной - в ру куик лочат чому-то массово ^^. Но тут о политике нельзя, димез с хоббитом сикают. А так тсп почти не нужен, согласен.

anonymous
()

Отбой, почитал оп пост

из дому это занимает n минут, а на сервере выполняется почти мгновенно. Оно и логично, в дц там пару хопов до магистрали, можно считать что почти локалка, tcp в таких условиях работает крайне хорошо. Фаст опен вся фигня, cubic чувствует себя как дома. Из моего зажопинска, через кривой шейпер провайдера, через двадцатку хопов до магистрали, через подлагивающую вафлю, конечно скорость так себе.

Опчик просто баран, если считает что в его тормозах виноват tcp (n минут, стыдоба какая). Эх, а начиналось весело.

anonymous
()
Ответ на: комментарий от Aceler

Это решение только для одного порта. Мне нужно для любого tcp соединение производить терменирование и буферизацию.

Почему это должно ускорить работу, я хз

Потому что в таком случае один большой route бьется на два маленьких и в каждом tcp работает лучше из за меньшего rtt. И самое главное - можно пременять другие, более агресивные настройки tcp, которые смогут максимально утилизировать канал. На серверах как бэ все достаточно консервативно т.к. нет задачи одному клиенту максимально быстро отдать данные.

novoxudonoser
() автор топика
Ответ на: комментарий от novoxudonoser

Мне нужно для любого tcp соединение производить терменирование и буферизацию.

TCP соединение не может организовать терминирование и буферизацию. Это задача протокола более высокого уровня, такого как http. Буферизация ещё куда ни шло, но тогда к задержкам канала добавятся задержки буферизации.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Ну как не может. Можно заставить. Если ты хочешь сказать что это нельзя сделать стандартными средствами linux (iptables, nftables, ebpf, any userspace ready binary), то низкий поклон тебе - ты ответил на важный для меня вопрос почему я ничего не смог нагуглить. Перед тем как делать велосипед нужно сначала чекнуть готовые реализации.

но тогда к задержкам канала добавятся задержки буферизации.

Ды как бы нет. Пакеты пересылаются сразуже по получении, локальный оверхед не учитываем он вообще меньше погрешности. Буферизируется толкьо в том случае если приемник не успевает получать в данное окно времени.

novoxudonoser
() автор топика
Последнее исправление: novoxudonoser (всего исправлений: 1)
Ответ на: комментарий от anonymous

если считает что в его тормозах виноват tcp

перечитываем тему

Есть моя рабочая станция в г. СтандартЗажопинск

И станция и сервер имеют линк 100Mbit

т.е. тест скорости и на станции до lokokingglass и на сервере показывает ~11Mb/s. Что с vpn до сервера (т.е. с тогоже ip что исключает разные политики зеркала) что локально это n минут для теста. Хотя и сервер и станция способны утилизировать все 100Mbit.

Вопрос «знатоку» - и что же мне дает эти тормоза? IP слой чтоль?

а_тред_мычитаемжопой.jpg

novoxudonoser
() автор топика
Последнее исправление: novoxudonoser (всего исправлений: 2)
Ответ на: комментарий от novoxudonoser

Ты понимаешь написанное или нет? У тебя есть время жизни пакета в рамках сессии. Допустим, у тебя медленный хост проксирует свои запросы через твой быстрый прокси. Который будет скачивать и сохранять у себя пакеты в буфере.

Я тебе написал: есть время жизни пакета.

Так вот, твой медленный хост начинает скачивать пакеты. А в это время твой прокси буфер уже выкачал все. А хост медленно тянет. И с его точки зрения в рамках TCP протокола пакеты, которые в последствии будет отдавать ему буфер, если ты что-то такое реализуешь, будут уже устаревшими по времени. Потому, что буфер их скачал уже давно.

Проксировать и кэшировать HTTP пакеты, используя squid или твою реализацию прокси сервера ты сможешь. Но прочие пакеты транспортного уровня - нет.

anonymous
()
Ответ на: комментарий от anonymous

В том то и смысл что я хочу работать не с пакетами, я хочу работать с потоком данных.

И с его точки зрения в рамках TCP протокола пакеты, которые в последствии будет отдавать ему буфер, если ты что-то такое реализуешь, будут уже устаревшими по времени.

В том то и смысл, что я не буду пересылать последующие пакеты. Я буду пересылать пересылать последующие данные которые будут переданы хосту в рамках другой tcp сессии другими пакетами у которых все будет в порядке с временем жизни.

Похвально, что ты думаешь об возможных аномалиях. Я не стал включать этот вопрос в топик т.к. посчитал что для начала надо с базой разобраться (как показали сообщения тут я не ошибался). Если есть соображения по чувствительным к подобным манипуляциям протоколам и системам - радостно прошу. Мне в голову пришли только всякие хтирые двухфазовые комиты, которые могут пологаться на tcp доставку (наивно, правда?). Но на практике я с ними столкнутся не намерен, если и столкнусь буду деражать этот момент в голове.

novoxudonoser
() автор топика
Ответ на: комментарий от anonymous

а ты оказался самым смышленным среди анонов в этом треде

У тебя выход один: скачать нужные тебе файлы на сервере, положить, а потом переливать как тебе удобно.

А я могу начать их передачу не как только скачал, а сразу как только у меня первые данные полявились? Так даже лучше будет. И хранить я могу их не на диски а в памяти? Ну и мы тутже получаем описанное мной из поста.

Вопрос главный - Как это сделать средствами linux? Как это сделать на яп в юзерспейсе мне полностью понятно.

novoxudonoser
() автор топика
Ответ на: комментарий от novoxudonoser

Если есть соображения по чувствительным к подобным манипуляциям протоколам и системам - радостно прошу.

Есть HTTPS, WEB сессии авторизации, WSS, время жизни и продления токена авторизации.

Всё это работать не будет. Если только не реализовать обходной поток, работающий напрямую, т.е. без буфера для прохождения данных продления сессии, обновления токена авторизации и WEB-socket соединения.

anonymous
()
Ответ на: комментарий от novoxudonoser

А я могу начать их передачу не как только скачал, а сразу как только у меня первые данные полявились?

Собственно кэширующий прокси сервер так и работает. Например, squid, он выкачивает себе в кэш скачиваемые по HTTP / HTTPS файлы и потом отдаёт клиенту. С той скоростью как он может забирать.

Почитай про настройки кэширования и время жизни кэша squid.

В этом случае решать проблемы с HTTPS сессиями, токенами авторизации, WSS и прочим тебе не придётся.

Но это только для протокола уровня приложения, HTTP/HTTPS. А не для всего TCP.

anonymous
()
Ответ на: комментарий от anonymous

Вышестоящим слоям всеравно на транспорт нижнего. Так то можно IP пакеты прозрачно для всего стека в сетях X.25 передавать и нечего, все работает.

Есть HTTPS, WEB сессии авторизации, WSS, время жизни и продления токена авторизации.

Ну WEB сессии авторизации это cookie over HTTPS over TLS over TCP. Ни вижу причины если мы TCP проксируем почему это не должно работать. Будет отправлен HTTP 1.1.\r\n GET …. , будет получен response. Как, на какие чанки, в каой последовательности это передавалось на нижележащем уровне, для клиента и сервера неважно. От того что пакеты были буферезованы ни один не второй ни чего не заметет. Это для http с гарантией. Вот для других протоколов нужно подумать. Ну к примеру репликация postgres, хотя там application level пакеты.

WEB сессии авторизации время жизни и продления токена авторизации.

Ну не важно как реализован токен, предположим cookie. Как сказал выше терминация tcp и буферизация ни как на это не повлияет.

novoxudonoser
() автор топика
Ответ на: комментарий от novoxudonoser

Предположим, у тебя время жизни токена авторизации 30 минут, за одну минуту до истечения твой клиент посылает запрос на продление.

Запрос доходит до сервера и ответ попадает в твой буфер и он должен приоритетным порядком быть перенаправлен медленному клиенты.

А не попасть в конец очереди в буфере TCP пакетов.

Я по это говорю. Иначе клиент т.к. его скорость вычитывания буфера медленнее в несколько раз сможет получить информацию о продлении токена спустя несколько минут и его токен уже устареет на клиентской стороне. Так же и относительно других сессиеонных процессов.

Сможешь такое реализовать с анализом таких запросов?

anonymous
()
Ответ на: комментарий от anonymous

Да согласен, в таком случае аномалия на лицо. Но случай тут тобой приведен экстримальный. В моем примере у меня есть быстрый tcp proxy сервер и немного (процентов на 20 наверное) медленный клиент. Врятли это случится. Хотя если есть 2 сессии, одна качает большой файл, вторая перезапрашивает токен, первая может забить канал и рефреш токена зафейлится. Но подобное может случится и с обычной сетью (что врятли, ОС достаточно хорошо распределяет ресурсы). Надо подумать где есть частые смены токенов, аля практически в каждом пакете, где такое возможно. Для http все же нет. Тут обновляение токенов раз в достаточное большое время. Спасибо!

novoxudonoser
() автор топика

а) есть ли готовые tcp «прокси» которые терминируют tcp с одного конца, кладут даныне в очередь, пересылают даныне через новый tcp connection по адресу, при этом пересылая и icmp т.е. полностью прозрачны?

да, но тебе не помогут. называются wan optimizer или latency optimizer. Нужны они помимо прочего если очень большой пинг (>500мс). Но это лютый Интерпрайз (пример https://www.riverbed.com/riverbed-wp-content/uploads/2023/07/acceleration-solutions-portfolio.pdf) и стоит больших денег.

Вот что про них пишет википедия

the local WAN optimizer will answer the requests of the client locally instead of forwarding the request to the remote server in order to leverage write-behind and read-ahead mechanisms to reduce WAN latency.

Дальше не читал - лень…

anonymous
()
Ответ на: комментарий от anonymous

Пасибки, тоже слышал про софтверные реализации и железки которые это делают. Видел пару проектов давно для малинки, но там дальше мктного proof of concept это не пошло.

novoxudonoser
() автор топика
Ответ на: комментарий от anonymous

Прочитал комент ещй раз, подумал, и. Нет тут проблемы, вернее не более чем.

Запрос доходит до сервера и ответ попадает в твой буфер и он должен приоритетным порядком быть перенаправлен медленному клиенты. А не попасть в конец очереди в буфере TCP пакетов.

Точно также это возможно и при обыкновенном сценарии. Медленный лагающий интернет или заветные пакеты попадут в конец очереди в буфере IP пакетов. Которая есть в каждом сетевом устройстве. Ну или если стек TCP/IP в ОС тупой. На практике во всех реализациях TCP/IP используются механизмы равномерного распределения канала между сессиями. И короткрим не нагруженным сессиям отводится достаточно пропускной способности, что бы тяжелые нагруженные не блокировали их.

Да, введение дополнительно буферизации увеличивает риск подобного. И спасибо, уже очивидно для меня, нужно делать грамотное использование ресурсов канала.

novoxudonoser
() автор топика
Ответ на: комментарий от novoxudonoser

Но твоя предполагаемая разработка вносит момент повышающий риски возникновения проблемы.

Тебе придётся реализовать несколько отдельных TCP сессий и потоков для клиента, чтобы у каждой сессии был примерно равный приоритет.

anonymous
()
Ответ на: комментарий от Aceler

TCP соединение не может организовать терминирование и буферизацию.

ну не совсем так. Есть специальная апаратура, которая пропускает через себя трафик и работает как mitm. Получая tcp пакет она анализирует, буферит и пересылает его дальше адресату и сразу же отвечает ack’ом отправителю, не дожидаясь «настоящего» ответа от адресата. Таким образом отправитель «получает ack» раньше чем адресат реально его отправил. Таким образом уменьшается задержка.

Ну это конечно не всё, что делает такая апаратура. Там реально много всяких махинаций с пакетами происходит.

anonymous
()
Ответ на: комментарий от anonymous

Но твоя предполагаемая разработка вносит момент повышающий риски возникновения проблемы.

Да это так, но не вижу в этих рисках проблемы.

Тебе придётся реализовать несколько отдельных TCP сессий и потоков для клиента, чтобы у каждой сессии был примерно равный приоритет.

Тут не понял тебя. Ты имеешь ввиду что мне нужно делать qos для всех сессий? Ну то что буфер у каждой сессия свой а не один общий я думаю понятно.

novoxudonoser
() автор топика
Ответ на: комментарий от anonymous

Получая tcp пакет она анализирует, буферит и пересылает его дальше адресату и сразу же отвечает ack’ом отправителю, не дожидаясь «настоящего» ответа от адресата. Таким образом отправитель «получает ack» раньше чем адресат реально его отправил. Таким образом уменьшается задержка.

Вот это мне и нужно, только софтверно. (как сказал класик - любой ценой, но только бесплаьно!). Можно название класса аппаратурры, ссыли? Очень интересно какие ещё манипуляции они проводят. Сжатие и кеширование заголовков ip пакетов я пологаю. Ну для решения p2p.

novoxudonoser
() автор топика
Ответ на: комментарий от novoxudonoser

Можно название класса аппаратурры

я выше писал - WAN optimizer.

ссыли … Очень интересно какие ещё манипуляции они проводят.

https://support.riverbed.com/bin/support/static/fbunsuuo632vi3jrspe0evbko9/html/u2pi6l52l4drmhq3uhck9tu7hm/sh_9.2_dg_html/index.html#page/sh_9.2_dg/designfund.html

Вот это мне и нужно, только софтверно

могу скалку посоветовать. А так это чистый энтерпрайз. Стоит много денег. Нужно использовать с обоих концов «WANа». Ибо все те махинации надо делать и с другой стороны, только в обратном порядке.

anonymous
()

сап лор

мур-мур-мур
а)ssh jump?

Есть моя рабочая станция в г. СтандартЗажопинск и есть сервер скажем в московском дц. И станция и сервер имеют линк 100Mbit, но если я делаю пайкеджманаджер_name update из дому это занимает n минут, а на сервере выполняется почти мгновенно.

зочем тебе делать одно и то же в двух местах? делай сразу на сервере.
различных алгоритмов по части tcp - с десяток было ещё со времён 3.1хх, просто надо чтобы галочки были выставлены в конфиге, и собрано с учётом их. потом через /sys тестируешь/ищешь/выбираешь нужные. +в)
г)nginx

etwrq ★★★★★
()
Ответ на: комментарий от Aceler

Не, это мало что даст. Интерес как я описывал выше в буферизации. Но то что для простоты для начала можно использовать socks со стороны хоста, это да. Благо протокол простой как пять копеек.

novoxudonoser
() автор топика
Ответ на: комментарий от etwrq

Ну да, это можно сказать выход. Но всетаки работать на сервере не удобно, это только для консольных задач подходит. Меня больше браузер интересует т.к. 99% экранного вермени у меня именно в нем и происходит. А в случае vnc это целую картинку тянуть, задержки в которой все таки заметны. Хотя в случае работы приложений на сервере все мгновенно работает в плане загрузки страниц. Ну из за описанного мной выше превосходства сети дц на стандарт зажопинском.

г)nginx

это L7 мне нужен L4

novoxudonoser
() автор топика
Ответ на: комментарий от anonymous

И с его точки зрения в рамках TCP протокола пакеты, которые в последствии будет отдавать ему буфер, если ты что-то такое реализуешь, будут уже устаревшими по времени.

У TCP достаточно большой keepalive_time.

anc ★★★★★
()

Хочу перевести дискусию в более практическое русло (хотя все пункты а-ж актуальны).

Как силами iptables модифицировать данные tcp пакета? Зачем - текущая реализация которая видится мне, это tun интерфейс при получения tcp пакета в который нужно его переслать на открытый на хосте сокет, ну соосветсвенно стек tcp тут работает из коробки. (далее уже с этого сокета нужно переложить данные в новую tcp сессию но это уже далее). Но при пересылке в сокет на хосте будет утерян dst port т.к. он должен быть заменен на порт локального сокета. Следовательно, что бы далее можно было переслать данные в этом пакете нужно сохранить номер порта назначения в данные самого пакета. Добать в начала пакета 2 байта которые будет содержать номер порта. Ну а далее соотвественно убрать эти два байта из данных и переслать данные в рамках другой tcp сессии.

novoxudonoser
() автор топика
Ответ на: комментарий от anc

Не не не, тут анон прав. Но не в этом своем сообщении, он далее идею раскрыл. Речь же об возможных проблемах при задеражках от буферезации. keepalive тут побоку

novoxudonoser
() автор топика