* Half open TCP limit
Публикувано на 05 април 2011 в раздел Общи работи.
Забелязах, че на много компютри (включително моят в къщи) използващи Windows XP или Vista има сериозен проблем при тегленето на торенти - независимо от бързината на интернет връзката рядко скоростта може да прехвърли 4MB в секунда. Още по-гадното е, че при достигането на тези пределни скорости се появява "артифакт" - интернет връзката внезапно спира без видима причина и няма начин да бъде "съживена" освен с изключване на компютъра и пускане отново. В по-рядки случаи "интернетът мистериозно се завръща сам" без рестартиране на системата.
Отначало си мислих, че аз съм каръка. Даже си смених LAN картата, защото мислих, че може да е от нея. После реших, че може да прегрява заради непосредствената си близост до пасивното охлаждане на видеото - сложих вентилатор. Не помогна. Когато видях и други два компютъра с този проблем обаче ми светна, че проблемът може да не е "в моя телевизор". Единственият "лек", който бях открил досега е да сложа лимит на скоростта до не повече от 2-3 мебибайта в секунда. Днес обаче смятам, че открих причината за този "артифакт". Започнах да ровя в Event Log и открих, че е пълен със съобщения "Warning: TCP/IP has reached the security limit imposed on the number of concurrent TCP connect attempts". Очевидно нямам навик да чета логовете на домашната си машина, което явно не е добре.
От Service Pack 2 на Windows XP и нататък през Vista от Microsoft са сложили лимит на т.нар. "Half Open TCP connections". Това най-просто казано е максималният брой опити за осъществяване на TCP връзки по едно и също време. Той е дефиниран в tcpip.sys файла и по подразбиране е 10 (което всъщност е повече от прилично количество за нормално ползване). Това е направено, за да се намали ефектът от вируси, които карат потребителските машини да правят DDoS атаки. Много странно всъщност, защото вирусът съвсем елементарно би си променил този лимит сам самичък без особени проблеми и от там... пак DDoS атака. Най-много да му трябва един рестарт, но това при домашните машини е често срещано действие.
Когато лимитът от 10 връзки се достигне и дойде нова, то тя се слага в queue (опашка). Това естествено може да доведе до забавяне на системата. Тази неработеща защита обаче докарва явен проблем при използването на торент програми. Според TCP-Z по време на сваляне на торент моята интернет връзка постоянно използваше 10 half open връзки, т.е. всичките.
Увеличих ги до 100 с Universal Tcpip.sys Patch (може да използвате и Half Open Limit Fix) и нещата мигновено се промениха. Проблемът с "артифакта" изчезна (което беше най-важното), а максималната скорост на сваляне скочи до 5 мебибайта в секунда (т.е. с един повече, което не е малко). TCP-Z показва, че съм преувеличил доста с числото 100 (след три часа бурно сваляне и "сийдване" максималните Half Open TCP connections са били 28).
Дано това "откритие" помогне на някой. Прочетох, че със Service Pack 2 на Vista и в Windows 7 по подразбиране няма никакъв лимит (т.е. неограничено), но информацията не е потвърдена. Аз все още си използвам 64битовото XP за домашно ползване :)
На 7цата имах един проблем - на всеки 50-100 пакета един се забавяше много с над 1000мс или напълно се загубваше. Даже идва техник от мегалан да види какъв е проблема и се оказа че е проблем на ОС и ми написа един бат с:
netsh interface ipv4>add neighbors "Local Area Connection" ххххххххххххххх
който да регистрира статично ип-то на гейта и да се пуска на start-up.
Ех... кой да гледа там? :) Мерси за информацията.
Много често срещан проблем!
В интерес на истината uTorrent има възможност да ограничи максималния брой на използваните Half Open сесии, което не позволява "замръзването на интернета":
http://bootstrike.com/Articles/BitTorrentGuide/images/maxconnect.gif