Najpopularniejszy protokół transferu plików

Tytul jest przewrotny. Bo choc jeden protokól transferu plików jednoznacznie sie wyróznia w statystykach, to malo kto zgadnie przy pierwszej próbie o jaki protokól chodzi. A chodzi o BITS czyli Background Intelligent Transfer Service.
Administratorzy zazwyczaj kojarza, ze taki protokól gdziestam istnieje, czesto nawet wiedza do czego sie nadaje, ale dla pewnosci, podsumuje jego najwazniejsze cechy:

  • BITS dziala asynchronicznie. Po zleceniu transmisji, komputer ja realizuje niezaleznie od dzialania zlecajacej aplikacji, chwilowych przerw w dostepnosci serwera, restartów czy innych przeszkód. Czas, przez który rozpoczeta transmisja jest aktywna mozna konfigurowac, ale domyslnie wynosi on 90 dni.
  • Zadanie kopiowania mozna dowolnie zatrzymywac i uruchamiac ponownie. To czasem cenne.
  • BITS potrafi uzyc HTTP, HTTPS oraz SMB. Ten ostatni protokól nie istnial w BITS do wersji 1.5 wlacznie, wiec mimo, ze mamy teraz 4.0, to czesto sie o nim zapomina, podczas gdy swietnie sprawdza sie na przyklad podczas kopiowania plików w sieciach lokalnych.
  • BITS moze sprawdzac wysycenie lacza i jezeli wykryje innych chetnych do transmisji, spowolnic swoje dzialanie. W efekcie, nawet transferujac duze pliki, nie przeszkadza uzytkownikowi w normalnej pracy. Warto jednak pamietac, ze BITS bedzie próbowal przesylac dane równiez, gdy lacze jest calkowicie wysycone. Nie bedzie tego duzo, ale moze byc zauwazalne. Wykrywajac wysycenie lacza, BITS moze zrobic tylko tyle ile sie da. Jezeli nie dogada sie z routerem (przez UPnP) a LAN jest znaczaco szybszy od WAN – mechanizmy oszczedzania lacza moga dzialac niepoprawnie. Administratorowi pozostaje reczne okreslenie maksymalnego dozwolonego pasma.
  • BITS dziala na plikach. Jezeli trzeba przeslac wiele malych plików albo cala strukture katalogów – najlepiej wszystko spakowac w jedna calosc i przeslac cale archiwum na raz.
  • BITS w obecnie dostepnej wersji pozwala na pobieranie plików, wysylanie plików oraz na transmisje typu upload-and-reply, gdzie serwer po otrzymaniu pliku od klienta generuje i odsyla odpowiedz.
  • BITS dziala tylko, jezeli uzytkownik inicjujacy transmisje jest zalogowany. Jezeli jest to problemem, zawsze mozna zlecic transmisje na koncie LocalSystem, NetworkService albo LocalService.
  • BITS nie moze transmitowac otwartych plików. Jezeli to powazny problem, to zawsze mozna uzyc VSS do zrobienia migawki i przeslac plik z migawki.
  • BITS w Windows 7 korzysta z dobrodziejstw BranchCache, dzieki czemu przeslanie plików przez WAN do wielu komputerów jest bardzo "oszczedne".
  • Transmisji BITS mozna nadac jeden z czterech priorytetów, w zaleznosci od tego czy bardziej zalezy nam na czasie zakonczenia operacji czy na umiarkowanym wysyceniu lacza. Transmisje o takim samym priorytecie wykonywane sa równoczesnie, podczas gdy te o nizszym – oczekuja na zakonczenie lub zatrzymanie wazniejszych. Transmisje z priorytetem BG_JOB_PRIORITY_FOREGROUND (najwyzszym) nie uzywaja mechanizmów ograniczania predkosci transmisji, wiec walcza o pasmo z innymi aplikacjami uzytkownika.
  • Wyslanie wielu plików w jednej transmisji jest mozliwe, ale beda one wyslane jeden po drugim. Chcac zrównoleglic ich transmisje, najlepiej utworzyc wiele zadan o tym samym priorytecie.
  • Transmisje BITS moga sie uwierzytelniac na wiele róznych sposobów od uwierzytelniania Basic, przez NTLM az po passport.
  • BITS domyslnie uzywa ustawien proxy skonfigurowanych w IE, ale w razie potrzeby mozna uzyc dowolnych innych. Warto pamietac, ze ustawienia te nie musza byc identyczne dla kazdego uzytkownika, zwlaszcza dla kont takich jak LocalSystem, NetworkService czy LocalService.
  • BITS ma konfigurowalne limity zlecen. Domyslnie to 60 na uzytkownika i 300 na komputer. Jedno zlecenie to maksymalnie 200 plików. Te i inne parametry moga byc ustalane przy pomocy Group Policy i nie dotycza uzytkowników o uprawnieniach administratora.
  • Wsród parametrów konfiguracyjnych BITS, wspomniec trzeba równiez o sposobach radzenia sobie z bledami transmisji. BITS bedzie próbowal ponowic transmisje okreslona ilosc razy w okreslonym czasie. Czasem moze przydac sie precyzyjne dostrojenie tych wartosci.
  • BITS nie sprawdza integralnosci plików. Jezeli ktos "w locie" podmieni fragment przesylanej bazy danych, BITS da sie oszukac. Jezeli integralnosc jest istotna, trzeba sobie zapewnic wlasne mechanizmy.
  • Jezeli ktos zmieni zródlowy plik w czasie transmisji – BITS zacznie jego transfer jeszcze raz. Jezeli podejrzewamy, ze to prawdopodobny scenariusz, mozemy skorzystac z VSS.
  • Za realizacje zadan zleconych BITS odpowiada dedykowana usluga systemowa – BITS.
  • Jezeli potrzebujemy opartego na HTTP/HTTPS prostego serwera BITS, w Windows Server 2008 mamy BITS Compact Server. Po zainstalowaniu mozemy przesylac pliki bez dlubania sie w zlozonych konfiguracjach, choc nawet te niezlozone moga byc w tym przypadku nieco uciazliwe. Oczywiscie, mozna uzyc i IIS jezeli ktos lubi, potrzebuje albo po prostu pewniej sie czuje w dostepnych opcjach.
  • Dzialanie BITS mozna monitorowac mechanizmami trace, na przyklad z wykorzystaniem gotowych skryptów
  • Zlecanie transferów BITS jest bardzo proste niezaleznie od tego, czy patrzy sie z punktu widzenia programisty czy administratora. Mozna znalezc nawet narzedzia GUI, ale prawdziwi twardziele uzywaja odpowiednich cmdletów PowerShell. Nalezey tylko pamietac o "Import-Module BitsTransfer"

Na szybko to byloby na tyle. Majac nastepnym razem duze pliki do przeslania, jakiego mechanizmu uzyjesz...?

Autor: Grzegorz Tworek [MVP]

PS Bylo kiedys narzedzie bitsadmin. Ale obecnie jego uzycie jest odradzane. Zreszta, kto chcialby takie narzedzie, majac do dyspozycji PowerShella?