Покажи Публикации - abadon
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: [1] 2 3 ... 35
1  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: Измерване на латенцията на специфична услуга -: Oct 01, 2015, 11:04
gat3way след твойте обяснения вече ми стана по ясно, че не съм си формулирал въпроса правилно. Точно така искам да измеря response time-а

httperf го мери по-правилно сравнение с всички тулове които тествах до момента.

След твойте разяснения пуснах wireshark за да видя какви пакети минават и какво точно се случва.

tcpping и curlt

Мерят времето от изпращане на SYN до получаване на SYN, ACK

При httperf се мери времето от изпращане на SYN до получаване на RST на кънекцията от сървъра.

Това пак не е най-точния response time, тъй като пакетите на httperf не мога да кажа дали пораждат същата обработка (най-вероятно не), като пакетите на оригиналния клиент, но все пак са някаква интеракция на по-висок level от tcp/ip стека.

По-точно от това едва ли има накъде с general tools. От тук нататък специлизиран софтуер за конкретния сървис.
2  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: Измерване на латенцията на специфична услуга -: Sep 30, 2015, 11:19
Единствения коректен начин е да имаш сорса на официален клиент на тази услуга, да го редактираш да маркира timestamp когато стартира и когато спре и да направи просто изваждане на двете числа. Всичко друго е спекулация :)

Съгласен съм с теб, но за съжаление нямам source-а на клиента, тъй като той е със затворен код :(

Намерих някакво приложение tcpping

Като ping-вам с него въпросните сървъри на определен порт ми връща резултати, но дали са коректни?
3  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: Измерване на латенцията на специфична услуга -: Sep 29, 2015, 15:54
Това с wget е идейно, макар че не мисля, че измерва напълно адекватно. Тествах към няколко сървъра и към единия дава това:

Цитат
time wget http://194.8.15.167:10443
--2015-09-29 15:50:26--  http://194.8.15.167:10443/
Свързване към 194.8.15.167:10443... успешно свързване.
HTTP изпратено искане, чакам отговор... 200 No headers, assuming HTTP/0.9
Дължина: неопределен
Saving to: ‘index.html.2’

index.html.2                                     [ <=>                                                                                          ]       7  --.-KB/s   in 0s     

2015-09-29 15:50:26 (602 KB/s) - ‘index.html.2’ запазен [7]


real    0m0.404s
user    0m0.000s
sys     0m0.004s

а към друг въобще не може да се свърже:

Цитат
time wget http://95.138.142.172:443
--2015-09-29 15:51:16--  http://95.138.142.172:443/
Свързване към 95.138.142.172:443... успешно свързване.
HTTP изпратено искане, чакам отговор... Грешка при четене (Едностранно прекъсване на връзката от отсрещната страна) в заглавките.
Продължавам.

--2015-09-29 15:51:17--  (опит: 2)  http://95.138.142.172:443/
Свързване към 95.138.142.172:443... успешно свързване.
HTTP изпратено искане, чакам отговор... Грешка при четене (Едностранно прекъсване на връзката от отсрещната страна) в заглавките.
Продължавам.

^C

real    0m2.274s
user    0m0.005s
sys     0m0.000s

А аз имам telnet и към двата.

Също така сравних резултата от time wget към стандартен web сървър с резултата към същия уеб сървър но измерен с httping и разликата във времената е 3-4 пъти.

Също така може би е добра идея да споделя, че услугите които тествам не са уеб сървъри официално, макар че имам съмнение че работят по подобен на web начин.
4  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Измерване на латенцията на специфична услуга -: Sep 29, 2015, 15:20
Здравейте,

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

Ако пробвам с telnet така:

Цитат
Abadon:~$ telnet 194.8.15.167 10443
Trying 194.8.15.167...
Connected to 194.8.15.167.
Escape character is '^]'.
quit
PConnection closed by foreign host.
Abadon:~$

се закачам без проблеми. Обаче как да измеря каква ми е реалната латенция?

Пробвах така:

Цитат
httping -g http://194.8.15.167:10443

или така

Цитат
httping -g https://194.8.15.167:10443

Обаче не става нищо.

Идеята ми е да разбера какво е реалното време за което услугата ми отговаря, тъй като ping-а дори и да е пуснат не е точен метод за измерване на подобна латенция.
5  Програмиране / Общ форум / Re: Bash script за намиране на PTR записи -: Jul 10, 2014, 14:43
След доста главоблъскане и ровен в нета, промених цялостната стратегия и в крайна сметка след 3 дена борба нещата станаха:

Код:
############################                                                                                                                                                                                                                                             
##  Methods                                                                                                                                                                                                                                                             
############################                                                                                                                                                                                                                                             
prefix_to_bit_netmask() {
    prefix=$1;
    shift=$(( 32 - prefix ));

    bitmask=""
    for (( i=0; i < 32; i++ )); do
        num=0
        if [ $i -lt $prefix ]; then
            num=1
        fi

        space=
        if [ $(( i % 8 )) -eq 0 ]; then
            space=" ";
        fi

        bitmask="${bitmask}${space}${num}"
    done
    echo $bitmask
}

bit_netmask_to_wildcard_netmask() {
    bitmask=$1;
    wildcard_mask=
    for octet in $bitmask; do
        wildcard_mask="${wildcard_mask} $(( 255 - 2#$octet ))"
    done
    echo $wildcard_mask;
}



#######################                                                                                                                                                                                                                                                 
##  MAIN                                                                                                                                                                                                                                                                 
#######################                                                                                                                                                                                                                                                 
output=$(for ip in $@; do
    net=$(echo $ip | cut -d '/' -f 1);
    prefix=$(echo $ip | cut -d '/' -f 2);

    bit_netmask=$(prefix_to_bit_netmask $prefix);

    wildcard_mask=$(bit_netmask_to_wildcard_netmask "$bit_netmask");

    str=
    for (( i = 1; i <= 4; i++ )); do
        range=$(echo $net | cut -d '.' -f $i)
        mask_octet=$(echo $wildcard_mask | cut -d ' ' -f $i)
        if [ $mask_octet -gt 0 ]; then
            range="{0..$mask_octet}";
        fi
        str="${str} $range"
    done
    ips=$(echo $str | sed "s, ,\\.,g"); ## replace spaces with periods, a join...                                                                                                                                                                                       
    eval echo $ips | tr ' ' '\012'

done)
#echo $output
array=( $output )
for output in "${array[@]}"
do
      for ip in "$output"; do echo $ip; done | while read Res;
do echo $Res point to: `host $Res | awk '{print $5}';` | grep -v "3(NXDOMAIN)"| grep -v "2(SERVFAIL)"
    done;
done

това е финалния код, дано на някой някога му е от полза

Пуска се в конзолата с командата:
Цитат
./show-prefix-PTRs.sh 23.91.120.0/21 37.18.176.0/22 66.36.176.0/21

като можете да си изредите колкото искате префикса.
6  Програмиране / Общ форум / Re: Bash script за намиране на PTR записи -: Jul 09, 2014, 09:55
Блаягодаря jet преправих кода така:

Код:
NET_LST=nets.lst
oct1min=$(cat ${NET_LST} | while read Net; do echo `ipcalc $Net| grep "HostMin:"| awk '{print $2}'| awk -F'.' '{print $1}'`; done)
oct1max=$(cat ${NET_LST} | while read Net; do echo `ipcalc $Net| grep "HostMax:"| awk '{print $2}'| awk -F'.' '{print $1}'`; done)
echo $oct1min
echo $oct1max
array=( $oct1min )
for o1min in "${array[@]}"
do
array=( $oct1max )
for o1max in "${array[@]}"
do
      for ip in {"$o1min".."$o1max"}.3.11{1..2}.{0..2}; do echo $ip; done | while read Res;
do echo $Res point to: `host $Res `
    done;
done

nets.lst
Цитат
1.2.3.0/30
40.5.6.0/30
117.8.9.0/4

Обаче като го изпълня получавам следния резултат:
Цитат
1 40 112
1 40 127
host: '{1..1}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{1..1}.3.11{1..2}.{0..2} point to:
host: '{1..40}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{1..40}.3.11{1..2}.{0..2} point to:
host: '{1..127}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{1..127}.3.11{1..2}.{0..2} point to:
host: '{40..1}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{40..1}.3.11{1..2}.{0..2} point to:
host: '{40..40}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{40..40}.3.11{1..2}.{0..2} point to:
host: '{40..127}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{40..127}.3.11{1..2}.{0..2} point to:
host: '{112..1}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{112..1}.3.11{1..2}.{0..2} point to:
host: '{112..40}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{112..40}.3.11{1..2}.{0..2} point to:
host: '{112..127}.3.11{1..2}.{0..2}' is not a legal name (empty label)
{112..127}.3.11{1..2}.{0..2} point to:

Въпросите ми сега са следните:

1. Може ли във for на 12 ред да дефинирам range от две променливи, тъй като явно както съм го направил сега:
Код:
for ip in {"$o1min".."$o1max"}

не работи

2. С масиви ли да задам HostMin и HostMax или има някакви други техники? Питам за да знам за какво да чета в нета.

Сега от output-а който съм дал се вижда, че да вкарам втори масив във първия явно не е начина, тъй като двойките HostMin и HostMax които ще получа във for-а (след като намеря отговор на първия си въпрос) ще са

1 1
1 40
1 127
 
и т.н. а те трябва да са:

1 1
40 40
112 127

Предварително благодаря!


7  Програмиране / Общ форум / Bash script за намиране на PTR записи -: Jul 08, 2014, 23:31
Здравейте,

Както съм написал и в темата, смятам се за начинаещ сприптописач на bash иначе с Линукса и доста други неща в ИТ-то съм добре запознат.

Искам да направя скрипт който чете списък с мрежи вкарани в битов формат (примерно 192.168.100.0/24), след което обхожда всички ip-та от зададените мрежи и връща валидните PTR записи.

Ето какво съм написал до момента:

Код:
NET_LST=nets.lst
oct1d1min=$(cat ${NET_LST} | while read Net; do echo `ipcalc $Net| grep "HostMin:"| awk '{print substr($2,1,1)}'`; done)
oct1d1max=$(cat ${NET_LST} | while read Net; do echo `ipcalc $Net| grep "HostMax:"| awk '{print substr($2,1,1)}'`; done)
#echo $oct1d1min
#echo $oct1d1max
array=( $oct1d1min )
for i in "${array[@]}"
do
   for ip in "$i"2.3.11{1..2}.{0..2}; do echo $ip; done | while read Res;
     do echo $Res point to: `host $Res | awk '{print $5}';` | grep -v "3(NXDOMAIN)"
   done;
done

като в nets.lst съм сложил това:

Код:
1.2.3.0/22
40.5.6.0/24
117.8.9.0/24

Кода се изпълнява без грешка, обаче взема PTR-ите на грешните мрежи, не на зададените за тест.

Въпросите са ми следните:

1. Има ли начин с print да принтвам целия октет на мрежата, не само първия, втория или N-тия знак от нея?

Ако разгледаме примерните мрежи от nets.lst, при обхождането да ми върне съответно 1 40 117, не както сега 1 4 1

Първоначалната ми идея беше всяка цифра от ip-то да я разбия на променлива, обаче сега ми се струва грешно, тъй като първия октет може да съдържа 1, 2 или 3 знака....

2. За цифрите от HostMax втори масив ли трябва да се прави? Като този втори масив да се съдържа в първия?

Благодаря предварително на всички които ще ми дадът идеи и примери за решаване на казуса ми!
8  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: Сайт с множество ip-та? -: Jan 17, 2013, 12:37
Благодаря ви момчета.

Реших проблема използвайки това http://httpd.apache.org/docs/2.2/vhosts/examples.html и по-специално тази част от примерите "Serving the same content on different IP addresses (such as an internal and external address)."

Най-вероятно и това, което Toryx предложи с Listen директивата щеше да ми свърши работа, но нещо не бях сигурен как се прави Virtual Host-а да се bind-ва на две или повече ip-та, защото Apache-то ми освен сайта който не трябваше да пада хоства и 3-4 други сайта с SSL-и ползващи различни ip-та, респективно са конфигурирани на различни виртуални хостове. Затова реших първо да прочета малко повече как виртуалните хостове се оправят с 2-3 ip-та и така попаднах на линка който съм дал.

Поздрави и отново благодаря на всички помогнали с идеи!  [_]3
9  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: Сайт с множество ip-та? -: Jan 15, 2013, 23:31
Да мога да ползвам и двете ip-та едновременно в следващите 10-15 дни. Като дадените числа са само за пример иначе реалните ip-та не са това.

Използването на двете ip-та едновременно през двата доставчика на една машина знам как се прави. Апача как да го накарам да ги ползва и двете?

Правя два виртуални хоста за един и същи домейн? Първия виртуален да се биндва на първото ip, втория на второто или ?

На въпросното ip което трябва да освободя няма нищо като услуга освен уеб сайта. DNS-ите по обслужване на домейна са на други ip-та, които няма да пипам.

Топологията е следната ISP-1 -> Vlan 1 -> Машина с Apache eth0
ISP-2 -> Vlan 2 -> Машина с Apache eth1

gateway-те и за двете мрежи са при съответните ISP-та. Освен въпросната машина за сайта разполагам с още няколко хипервайзора на които евентуално мога да вдигна някакви виртуални машини за допълнителни услуги ако има нужда. От първото ISP имам 6 ip-та които мога да ползвам, от второто ISP имам 30 ip-та които мога да ползвам.


10  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Сайт с множество ip-та? -: Jan 15, 2013, 19:24
Здравейте колеги,

Отдавна не съм писал тук, но сега имам един проблем на който не мога да намеря решение и затова търся малко помощ.

Да вземем примерната следна схема имам домейн да кажем example.com, който хоствам на Apache сървър с ip 192.168.10.100. Това ip ми е дадено от ISP-1, Сега обаче трябва да си сменя ISP-то с ISP-2, без example.com да има downtime. Второто ISP ми дава адрес за Apache-то 172.16.100.10.

Моят въпрос е как да накарам example.com да се отваря от 192.168.10.100 и от 172.16.100.10? Всякакви идеи или линкове ще са ми от ползва, тъй като не успявам да намеря в google информация как се прави подобно нещо.

За да ми сработи схемата няколко дни преди да сменя A DNS записа за example.com към новото ip, ще съм намалил TTL-а в DNS-а на минимума от 300 секунди, като по този начин ще се застраховам, че всички DNS-и по света ще са си flush-нали кеша. След което сменям A записа към новото IP, като оставям и двете ip-та да работят паралелно още няколко дни, след което премахвам старото от Apache-то и готово. Мисля по този начин ще се предотврати downtime-а за example.com, тъй като през 5-те минути докато TTL-а не е изтекъл дори и някой да се върже на старото ip сайта би трябвало да му работи.

Предварително благодаря!
11  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: "Редуциране" на ping response time-а - търся съвет -: Nov 02, 2011, 00:57
@abadon
Не съм съгласен с "Всички ние знаем че тези ms не са мерило за това колко ти е бърза връзката."

И тези ms са мерило. Тук  http://delian.blogspot.com/2008/03/network-performance-tuning-windows.html човека го е обяснил.

"TCP протоколът е този, който се използва в над 90% от вашата комуникация по Интернет или в локалната мрежа. Той цели да осигури сигурен пренос на данните – тоест данните се изпращат и се потвърждават че са получени правилно (пресмята се контролната им сума и се сравнява с тази записана във всеки пакет). Ако не са получени правилно не се потвърждават. Изпращащата страна изчаква малко време и изпраща непотвърдените участъци пак. За да не се налага да се потвърждава всеки пакет, преди да бъде изпратен следващия (понеже това ще ограничи максималната скорост на сесия в посока до големината на пакета за RTT време (RTT е времето необходимо за отиване и връщане на пакет), понеже всеки пакет с данни трябва да бъде потвърден преди да се изпрати следващия) потвържденията се правят на сегменти, които се наричат Windows (няма общо с Microsoft). Всяка страна казва на отсрещната непрестанно какъв е нейния моментен прозорец, от максимум байтове, които могат да бъдат изпратени към нея без потвърждение. Смисъла на това е, че така приемащата страна може да има нещо като Flow Control механизъм – ако има малък по размер буфер, ще е сигурна, че изпращача няма да изпрати повече данни от размера на този буфер (ако ние сме му казали максимален Receive Window <= на размера на буфера). Ако пък приложението четящо данните се бави, намаляваме Receive Window-а, и така намаляваме количеството данни, които да се трупат в буфера, до на практика пълното им спиране. Като прост ефект от това следва и формулата за максимална скорост на предаване на данни чрез TCP протокол в посока – тя е един Receive Window за RTT време. Или ако RTT е в милисекунди, то скоростта е (Receive Window * 1000)/RTT байтове в секунда.

И сега да се върнем към Windows – при него по подразбиране Receive Window е 8KB/17KB (при Linux е 32KB или 64KB в зависимост от Kernel-а). Следователно ако между двете комуникиращи си машини ping-а дава средно закъснение от 100мс, максималната скорост на трансфер към Windows ще бъде 8KB*1000/100 за секунда, или 80KB/сек. За пример Linux ще постигне при същите параметри 320KB/сек, само поради разликата в конфигурацията..."

http://en.wikipedia.org/wiki/TCP_tuning

Интересна информация си ми дал. Само дето тези неща ги знам и съм ги чел много много отдавна, тъй като Делян ми приятел от 5-6 години. Около 2.5 години работех за него в бившата му фирма преди да се разпадне и т.н....

Точно днес с него дискутирах въпроса, каза че може да се напише iptables модул със стотина реда код който да дропи icmp echo request-ите, след което с libpcap след желаното време да се пращат icmp echo replay от името на хоста получател и така ping-а да се излъже. Като имал повече време след няколко седмици ще го разгледал въпроса, че му стана интересно.


@gat3way - Може да погледнеш идеята на Делян

Аз имах предвид повишаване на приоритета, ако такова нещо е възможно.

Приоритет на какво?
На трафика - [ -Q tos ]

Приоритизацията на трафика не помага в този случай. Тя се ползва за други неща, като примерно Quality of service или при правене на шейпъри.

Дори и с най-висок приоритет да пращаш icmp пакетите въобще няма да промени response time-а ако мрежата ти не е претоварена и всичко работи както трябва, както е в моя случай. Виж ако си си запълнил канала на max може би ще се свали с малко времето, но едва ли ще е повече от няколко ms. От опита ми с проектирането и работата с мрежите знам, че на ~100Km физическо разстояние отговаря 1ms забавяне.  Това е времето нужно на светлината по оптично влакно да измине разстоянието от изпращача до получателя. Затова единствения сигурен метод за драстично сваляне е да се измисли как светлината да се свижи по-бързо....
12  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: "Редуциране" на ping response time-а - търся съвет -: Nov 01, 2011, 10:33
С файловия трансфер нямам проблем тъй като когато ти давам 1Gbps свързаност и ти отвориш достатъчен брой tcp връзки дали реално пакетите ще минават за 35ms пък аз с моя fake ping ще ти ги представям за 25ms. Едва ли ще ти е от значение не си ли съгласен? Така и така не можеш да си запълниш капацитета с една връзка.

Проблема е че тук сме хора, които разбираме или поне се опитваме да разбираме нещата и на теб или някой друг колега от форума му е ясно, че няколко ms отгоре или от долу не са най-важното нещо особено когато сървъра е на 2000-3000 км. Всички ние знаем че тези ms не са мерило за това колко ти е бърза връзката.

Но ми идва клиента индиец от щата раджастан пуска един ping вижда че при мен върви на 35ms. Пуска един ping при конкуренцията от където върви на 30ms. След което ми казва хайде отивам при конкуренцията ти защото там е по-добре, без да отчита че моите сървъри с в data center, че ползват HA SAN-ове за сторидж и т.н А конкуренцията е сложила едно жълто РС без никакво подсигуряване, но е на 200-300км по-близо то тестовия сървър и затова ping-а му е по-бързо.

От чисто техническа точка знаем че не е редно, но от маркетингова много би ми помогнало за бизнеса.

Това си мисля сега няма ли начин да се смени timestamp-a на icmp echo request-а с "правилен" от където и нормалния ping да се лъже, за да няма такива скриптове.
13  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: "Редуциране" на ping response time-а - търся съвет -: Nov 01, 2011, 00:12
Още един вариант:
1. преименуваш ping на piping напр.
2. пишеш скрипт и го кръщаваш ping
Скрипта стартира piping и след като обработи изхода му (дели времето на 2), го печата.
Айде стига сме писали ... :)

 [_]3 печелиш точка. Това е много добро решение.
14  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: "Редуциране" на ping response time-а - търся съвет -: Nov 01, 2011, 00:11
Що за глупости се пишат в тази тема? @abadon ще кажеш ли защо ти е да лъжеш отностно time-а? Всъщност този time е времето за което пакета достига и се връща обратно при хоста, който го е изпратил. Ping-ни си рутера и ще видиш <1ms.

Код:
ping -s 0 google.com

Предлагам една услуга в интернет обаче сред клиентите ми се шири мнението, че виждаш ли колкото по-малък е response time на ping-а от сървъра който предлагам аз към още няколко други сървъра, които ги ползват за тест толкова по-добре. Защото виждаш ли ако е над 30ms значи интернета е бавен, което е пълна глупост. Просто няма как да забързам светлината, но върви го обясни на някой индиец или мазайзиец.

И изпадам в такава примерна ситуация предлагам 1Gbps свързаност България -> Италия обаче понеже response time-а на ping-а е 37ms. Клиентите викат а не тази услуга не е добра.

Ще ида да си взема 10Mbps от Германския ти колега, защото като пусна ping неговия time е 20ms. Той ми предлага двойно по-бърз нет от теб.

Затова ми трябва някак си да слъжа за този time и да го редуцирам с 5-10ms.
15  Linux секция за напреднали / Хардуерни и софтуерни проблеми / Re: "Редуциране" на ping response time-а - търся съвет -: Oct 31, 2011, 22:47
Това е хитро, обаче не ми върши работа. Може би аз не обясних нещата правилно с дадения пример. ping-а ще го пускам срещу друго ip не срещу dns име, затова този вариант не ме устройва
Страници: [1] 2 3 ... 35