C, PHP, VB, .NET

Дневникът на Филип Петров


* 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 за домашно ползване :)

 



3 коментара


  1. mertol каза:

    На 7цата имах един проблем – на всеки 50-100 пакета един се забавяше много с над 1000мс или напълно се загубваше. Даже идва техник от мегалан да види какъв е проблема и се оказа че е проблем на ОС и ми написа един бат с:
    netsh interface ipv4>add neighbors „Local Area Connection“ ххххххххххххххх
    който да регистрира статично ип-то на гейта и да се пуска на start-up.

  2. Ех… кой да гледа там? :) Мерси за информацията.

  3. Марто каза:

    Много често срещан проблем!
    В интерес на истината uTorrent има възможност да ограничи максималния брой на използваните Half Open сесии, което не позволява „замръзването на интернета“:
    http://bootstrike.com/Articles/BitTorrentGuide/images/maxconnect.gif

Добави коментар

Адресът на електронната поща няма да се публикува


*