Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
@!!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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.044 c
15-1179846139
Andy BitOff
2007-05-22 19:02
2007.06.17
20.05.2007 умерла Тётя Валя


2-1179903497
RomanLN
2007-05-23 10:58
2007.06.17
как в DBgrib вять(присвоить) содержимое нужной ячейки


2-1173950118
Mishenka
2007-03-15 12:15
2007.06.17
Работа с MySql


15-1179910817
Кевларвестов Семен
2007-05-23 13:00
2007.06.17
Почему-то не устанавливается BDS 2006


6-1164722681
стьюдентЪ
2006-11-28 17:04
2007.06.17
Не приходит текст посланый по сокету





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский