Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.17;
Скачать: CL | DM;

Вниз

Двойной коннект.   Найти похожие ветки 

 
@!!ex ©   (2007-05-19 20:06) [0]

Вот интересно.
У меня есть два телефона.
Если оба подключить к инету, торрент будет в два раза ыбстрее качать?


 
Правильный Вася   (2007-05-19 20:20) [1]

через второй будет утечка


 
@!!ex ©   (2007-05-19 20:50) [2]

Какая утечка? чего и куда?


 
X9 ©   (2007-05-19 20:53) [3]

В один телефон входит, из другого выходит :)


 
Loginov Dmitry ©   (2007-05-19 20:57) [4]

> У меня есть два телефона.
> Если оба подключить к инету, торрент будет в два раза ыбстрее
> качать?


А телефоны сотовые?


 
РТР   (2007-05-19 20:58) [5]

Проблематично по двум интерфейсам качать. Хотя если сервер, с которого качать, поддерживает докачку, то можно. Скорость в этом случае будет в 2 раза выше. Но без специального софна не обойтись. Хотя и написать его ничего сложного. А так, что бы подключить два диалапа и оно само по ним качала, думаю не получится.


 
РТР   (2007-05-19 21:00) [6]

Хотя опять же можно написать, например проксик, который будет разделять нагрузку между двумя интерфейсами.


 
@!!ex ©   (2007-05-19 21:04) [7]

> В один телефон входит, из другого выходит :)

Это было бы не плохо. Учитывя что траффик в eMule чуть ли не один к одному исходящий/входящий...


> А телефоны сотовые?

Естсественно.


> Хотя опять же можно написать, например проксик, который
> будет разделять нагрузку между двумя интерфейсами.

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


 
РТР   (2007-05-19 21:06) [8]

думаю да


 
@!!ex ©   (2007-05-19 21:07) [9]

> [8] РТР   (19.05.07 21:06)

Линками на нужные мотериалы не поделитесь?


 
РТР   (2007-05-19 21:21) [10]

в упрощенном виде это может выглядеть так: На проксю поступает запрос файла Х, проскся направляет запрос на свободный интерфейс, если оба заняты, ставит запрос в очередь. Но такая схема позволит быстрее грузить только когда нужно тянуть много мелких файлов (сайт с картинками и др разделенный на разные файлы, контент). А вот для того что бы тянуть один файл быстрее(двумя интерфейсами) нужно что бы сервер поддерживал докачку, далее дробить файл на части и качать эти части разными интерфейсами.


 
РТР   (2007-05-19 21:24) [11]

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


 
РТР   (2007-05-19 21:28) [12]

Можно посредством таблице маршрутизации разделить трафик между интерфейсами. Например, определенный диапазон адресов качается через один шлюз, а все остальное через шлюз по умолчанию.


 
@!!ex ©   (2007-05-19 22:17) [13]

Ну если считать что цель оптимизить скачку торрентом.
ведь он качает мелкими блоками.
Сейчас например, качается файлик сколичеством блоков около 1000. Самое то,ч тобы параллелить.
Но как это организовать - 0 идей.


 
Zeqfreed ©   (2007-05-19 22:30) [14]

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


 
РТР   (2007-05-19 22:34) [15]

Zeqfreed ©   (19.05.07 22:30) [14]
пример такой настройки можно? Я что то не знаю как можно распределить нагрузку при помощи маршрутизации.


 
РТР   (2007-05-19 22:36) [16]

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


 
Zeqfreed ©   (2007-05-19 22:49) [17]

Ну с маршрутизацией я погорячился. Разумеется, она не для этого предназначена :)

Под линукс есть модуль ядра bonding:
The Linux bonding driver provides a method for aggregating
multiple network interfaces into a single logical "bonded" interface.
The behavior of the bonded interfaces depends upon the mode; generally
speaking, modes provide either hot standby or load balancing services.
Additionally, link integrity monitoring may be performed.


 
@!!ex ©   (2007-05-19 22:54) [18]

Мдя... Опять ставить Linux.... :))
А второй комп никак не едет. :((
У нас продается какой то мусор за 5000р, как думаете, это фигня? или можно купить для простых задач, типа работы с офисом, игры в сапер и скачки файлов через инет? :)


 
РТР   (2007-05-19 23:02) [19]

можно наверное. Да ты посмотри софт, может есть уже готовый. Я вот хз есть такой готовый софт. Но написать ничего трудного нет. Можно на сокетах, можно на компонентах инди. А можно взять исходники прокси и чуть их переделать.


 
РТР   (2007-05-19 23:15) [20]

Вот исходник прокси, здесь нужно просто перед запуском потока проверить какой интерфейс свободен и через него делать запрос. И очередь предусмотреть. Посмотри, если разобраться сможешь, то пару тройку дней и у тебя будет расширяемый, под твои потребности, механизм. Это бесспорное преимущество, когда пишешь сам.
ЗЫ: Еще возможно придется отладить исходник, я сам с ним не заморачивался еще, времени все как то нет.

program dproxy;

uses
windows,
WinSock;

type TSOCKS4_REQUEST=record
     ucVersion : byte;
     ucCommand : byte;
     wDestPort : word;
     dwDestIp  : dword;
   end;

var
wsaData : TWSADATA;
sport   : string;
iport   : word;
l_sock  : TSocket;
sock4   : SOCKADDR_IN;
Client  : TSockAddr;
Size    : integer;
h1      : THandle;

procedure FlushRecvBufferUntil(s:TSOCKET;condition:Char);
var
iReceiveRes : integer;
cDummy      : char;
begin
repeat
  iReceiveRes := recv(s, cDummy, sizeof(cDummy), 0);
until NOT ((iReceiveRes<>SOCKET_ERROR) and (iReceiveRes<>0) and (cDummy<>condition));
end;

procedure SocksHandlerTreadProc(pParam:pointer); stdcall;
var
s              : TSocket;
tunnelSock     : TSocket;
iConnectResult : integer;
iReceiveRes    : integer;
iSocketsSet    : integer;
socks4Request  : TSOCKS4_REQUEST;
socks4Response : TSOCKS4_REQUEST;
remoteAddr     : SOCKADDR_IN;
fds_read       : TFDset;//fd_set;
tv             : TTimeval;
cSocksVersion  : byte;
iSelectResult  : integer;
loop           : integer;
ulVal          : u_long;
swapBuffer     : array[0..4096*16-1] of char;
iRecvResult    : integer;
begin
s              := TSOCKET(pParam);
tunnelSock     := 0;
loop           := 0;
while loop=0 do
begin
  inc(loop);
  iConnectResult := 0;
  iReceiveRes    := 0;
  iSocketsSet    := 0;
  FD_ZERO(fds_read);
  FD_SET(s, fds_read);
  tv.tv_sec     := 30;
  cSocksVersion := 0;
  iSelectResult := select(0, @fds_read, nil, nil, @tv);
  if (iSelectResult=SOCKET_ERROR) or (not iSelectResult>0) then break;
  ulVal := 0;
  ioctlsocket(s, FIONBIO , ulVal);
  iReceiveRes := recv(s, cSocksVersion, 1, MSG_PEEK);
  if cSocksVersion=4 then // 3333333333333333333
  begin
    iReceiveRes := recv(s, socks4Request, sizeof(socks4Request), 0);
    if iReceiveRes=SOCKET_ERROR then break;
    ulVal := 1;
    ioctlsocket(s, FIONBIO , ulVal);
    FlushRecvBufferUntil(s, #0);
    if socks4Request.ucCommand = 1 then
    begin // 2222222222222222222
  ulVal := 0;
  ioctlsocket(s, FIONBIO, ulVal);
  remoteAddr.sin_family := AF_INET;
  move(socks4Request.dwDestIp,remoteAddr.sin_addr,sizeof(remoteAddr.sin_addr));
  remoteAddr.sin_port := socks4Request.wDestPort;
  tunnelSock := socket(AF_INET, SOCK_STREAM, 0);
  iConnectResult := connect(tunnelSock, remoteAddr, sizeof(remoteAddr));
  if (iConnectResult<>SOCKET_ERROR) then
  begin // 1111111111
    socks4Response.ucCommand := 90;
    socks4Response.ucVersion := 0;
    send(s, socks4Response, sizeof(socks4Response), 0);
  end else break; // 1111111111
    end else break;// 2222222222222222222
  end else break;// 3333333333333333333
  ulVal := 0;
  ioctlsocket(tunnelSock, FIONBIO, ulVal);
  ioctlsocket(s, FIONBIO, ulVal);
  fillchar(swapBuffer,sizeof(swapBuffer),0);
  tv.tv_sec := 2;
  while true do // 4444444444444444
  begin
    FD_ZERO(fds_read);
    FD_SET(s, fds_read);
    FD_SET(tunnelSock, fds_read);
    iSocketsSet := select(0, @fds_read, nil, nil, @tv); //if (iSocketsSet == SOCKET_ERROR) _leave;
    if iSocketsSet > 0 then // 5555555555555555
    begin
  if FD_ISSET(s, fds_read) then
  begin
    iRecvResult := recv(s, swapBuffer, sizeof(swapBuffer), MSG_PEEK);
    if (iRecvResult=0)
      then break
      else iRecvResult := recv(s, swapBuffer, sizeof(swapBuffer), 0);
    if (iRecvResult <> SOCKET_ERROR) and (iRecvResult > 0)
      then send(tunnelSock, swapBuffer, iRecvResult, 0)
      else BREAK;
  end;

  if (FD_ISSET(tunnelSock, fds_read)) then
  begin
    iRecvResult := recv(tunnelSock, swapBuffer, sizeof(swapBuffer), MSG_PEEK);
    if iRecvResult = 0
      then break
      else iRecvResult := recv(tunnelSock, swapBuffer, sizeof(swapBuffer), 0);
    if (iRecvResult <> SOCKET_ERROR) and (iRecvResult > 0)
      then send(s, swapBuffer, iRecvResult, 0)
      else break;
  end;
    end;  // 5555555555555555
  end; // 4444444444444444
end; // while loop=0 do
closesocket(s);
closesocket(tunnelSock);
end;

begin
WSAStartup(MAKEWORD(2,0), wsaData);
l_sock                := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sock4.sin_family      := AF_INET;
sock4.sin_port        := htons(1080);
sock4.sin_addr.s_addr := INADDR_ANY;
Size                  := SizeOf(Client);
if (Bind(l_sock,sock4,SizeOf(sock4))=0) and (Listen(l_sock,$FF)=0) then
  while true do CreateThread(nil,0,@SocksHandlerTreadProc,Pointer(accept(l_sock, @Client, @Size)),0,h1);
end.


 
РТР   (2007-05-19 23:19) [21]

вот описание протокола
http://www.faqs.org/rfcs/rfc1928.html



Страницы: 1 вся ветка

Текущий архив: 2007.06.17;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.064 c
9-1154267088
Филипок:)
2006-07-30 17:44
2007.06.17
Карточная игра


2-1180096066
ambhtr
2007-05-25 16:27
2007.06.17
Как привести строки разной кодировки к одной


2-1179871107
ari_9
2007-05-23 01:58
2007.06.17
и снова мерцание картинки при перерисовке (использую BitBlt)


3-1174993863
elserpiente
2007-03-27 15:11
2007.06.17
прехвать post_event в ADO


2-1179912586
DmitrichJ
2007-05-23 13:29
2007.06.17
Размер файла и создание каталога