От: ns1.bg Поредните некадърници
Така - понеже тук се оплюха 2 фирми (къде заслужено, къде незаслужено) реших да взема мерки и да се изправя с тази крещяща несправедливост като видя кой прав и кой крив. В случая с мега-хостинг е късно, но 1нс не беше и запретнах ръкави.
Свързах се с младежа и взех информация за скрипта. Боднах го в Host.bg (знам че го недолюбвате, но от 10 години съм клиент още на друг хостинг и после към тях), настроих го. После младежа влезе и си бодна 2 сървъра и ИЗГЛЕЖДА работи.
И тогава един моментен спомен блесна и ме върна обратно във времето (2004-2005) когато и аз бях активен играч на Enemy Territory. Тогава бях клиент на BTC ADSL и бях що-годе доволен - скоростите бяха малко зле, но за сметка на това беше НАДЕЖДЕН. Та играех си аз на един сървър WarHammer (няма нищо общо с играта) и бях мега-доволен. Проблема беше че исках да играя, но когато играчите са повече, а нямаше как да видя кои играят без да вляза което беше губи време. Та окрилен от идеята че ET-то използва модифициран Quake се сетих че може да има нещо за целта. Тогава намерих скрипт подобен на проблемния който ми показваше това. Изискванията бяха само PHP - и за 5 минути си го настроих за моя сървър на една локална машина. Всичко беше перфектно! После намерих и Xfire който питаше сървъра - така че винаги имах информацията под ръка локално!
Един ден информацията СПРЯ да работи! Нито PHP-то, нито Xfire! ШАШ! А сървъра си го имаше и си работеше без проблеми. ДВОЕН ШАШ! Но имаше сървъри за които работеше и сървъри за които не работеше! ТРОЕН ШАШ!
Боднах скрипта на един сървър - и си проработи от сефте (да, знам host.bg ...).
Но междувременно се бях закрастил да разбера ЗАЩО точно при мен не работи. И така разбрах за съществуването на проблем за който не бях и подозирал - udp fragmentation.
Когато се изпращат данни които са много големи - примерно 10к. От стека на приложението се изпращат накуп към мрежовия стек. Той ги обаче е хитър и използва MTU на съответния мрежов интерфейс и разбива големите данни на такива които ще могат да преминат през MTU-то. И данните заминават не като един голяяяяяяяяяяяяяяям пакет, а като няколко пакетчета. Това минава през всички хопове и машината за която са предназначени данните се обединяват в един голям обем данни които се изстрелват към приложението за което са предназначени. Това е функция на мрежовия стек и е напълно незабележима защото имаме интерфейси с различни MTU-та. Примерно за Ethernet е 1492 или 1500, разните Jumbo Ethernet са до 9000, файбър оптиките са около 4к и т.н.
ПРОБЛЕМА е, че това е за TCP. При UDP нещо фрагментирането не е изкусурено или поне аз останах с такова впечатление (може да е и проблем на доставчиците на мрежово оборудване!) и се "губят" пакети. Конкретно аз забелязах че ако сървъра има до 10-15 човека - работи. Нагоре - не.
Тук вече се ядосах и пуснах протоколен анализатор (т.нар sniffer) и видях - идва ми един UDP пакет. Докато на друг доставчик когато играчите са много идват 2 пакета (тествано през VPN). Изглежда BTC обаче бяха направили някаква шашма и втория пакет никога не го виждах на локалната машина, НО преди си работеше.
Сега - мисля че и ти имаш същия проблем. Уви е извън твоята компетенция да го оправиш, а вероятноста доставчика да си промени или пренастрои CISCO/Juniper (или там каквото мрежово оборудване има) или да си пренастрои машините само да си начешеш крастата е кръгла НУЛА. Проблема може да е и по-голям защото неговия доставчик може да му реже пакетите и т.н.
Какво направих аз - скрипта ми все още работи на host.bg и си го използвам щастливо!
PS: Нядявам се да разбереш че е малко causa perduta. Показах ти че на host.bg работи, знаеш че на Мега-Хостинг работи, но на 1НС не работи.