background image

Rozdział 7.  
Protokół sterowania 
transmisją 

Dogłębnie 

Protokół sterowania transmisją (TCP) jest wymaganym standardem protokołu TCP/IP, określonym 
w dokumencie RFC 793. Zapewnia on oparte na połączeniach, niezawodne, zorientowane na 
strumieniowy przesył bajtów połączenia i jest wykorzystywany do logowania, współużytkowania 
plików oraz wydruku, replikacji informacji, przesyłania list przeglądania, oraz innych zwykłych 
funkcji w środowisku pracy sieciowej systemu Windows. TCP może być wykorzystywany do 
komunikacji typu jeden do jednego (lub 

point-to-point

). Niniejszy rozdział najpierw omawia 

standardowe funkcje i działanie TCP, a następnie przechodzi do opisu udoskonaleń, oraz nowych 
funkcji zapewnianych przez system Windows 2000. Ponieważ większość programów usługowych 
i usług TCP/IP wykorzystuje TCP, stosowne jest podsumowanie ich w tym rozdziale. Protokoły 
transportu w sieciach złożonych, takie jak protokół transmisji hipertekstu (HTTP) oraz protokół 
transmisji plików (FTP) opisane są w rozdziale 9. 

Standardowe funkcje i działanie TCP 

TCP jest usytuowany ponad usługą protokołu internetowego (IP) i prawdopodobnie, jest on 
najbardziej znaczącym protokołem transportu w zestawie TCP/IP. Zapewnia on niezawodną 
metodę transportu przy użyciu przesyłu strumieniowego programom, które korzystają z sesyjnej 
transmisji danych, i gwarantuje dostarczanie datagramów IP. TCP implementuje niezawodny, 
wydajny transport za pomocą kilku mechanizmów. 

Segmentacja i numery sekwencji 

TCP segmentuje i ponownie składa duże bloki danych wysyłane przez programy, oraz zapewnia 
właściwe szeregowanie i uporządkowane dostarczanie segmentowanych danych. Numery 
sekwencji wykorzystywane są do koordynacji przesyłu i odbioru danych, a TCP zapewnia 
ponowną transmisję, jeśli ustali, że dane uległy zagubieniu. Protokół ten korzysta z 32-bitowego 
numeru sekwencji, który liczy oktety w strumieniu danych. Każdy z pakietów TCP zawiera 

background image

początkowy numer sekwencji danych w tym pakiecie oraz numer sekwencji (lub 

numer

 

potwierdzający

) ostatniego bajta otrzymanego od zdalnego komputera równorzędnego. Przy 

użyciu tej informacji implementowany jest protokół 

okna przesuwnego

, co zostało opisane w 

dalszej części tego rozdziału. 

Numery sekwencji do przodu i wstecz są całkowicie niezależne. TCP zazwyczaj działa w trybie 

pełnodupleksowym

, co oznacza, że działa w obydwu kierunkach w sposób prawie całkowicie 

niezależny. Nie ma mechanizmu kojarzącego dane strumienia bajtów do przodu i wstecz. TCP 
wykazuje 

zachowanie asymetryczne

 (to jest przesył danych w jednym kierunku) tylko podczas 

sekwencji rozpoczęcia i zamknięcia połączenia. 

TCP wykorzystuje znaczniki kontrolne do zarządzania połączeniem. Niektóre z tych znaczników 
(takie jak znacznik URG) odnoszą się do pojedynczego pakietu. Jednakże dwa znaczniki (SYN 
oraz FIN) oznaczają początek i koniec strumienia danych i wymagają niezawodnego dostarczenia. 
Znacznikom tym przypisane są miejsca w przestrzeni numeru sekwencji. TCP wysyła 
potwierdzenia (ACK), kiedy dane zostaną pomyślnie odebrane. Jeżeli włączone jest potwierdzenie 
selektywne (SACK), to TCP przesyła również potwierdzenia negatywne, kiedy oczekiwane dane 
nie zostaną odebrane. SACK jest domyślnie włączony w systemie Windows 2000. 

Sumy kontrolne 

Numery sekwencji, znaczniki kontrolne oraz potwierdzenia gwarantują, że przetransmitowane 
dane zostały otrzymane i ponownie złożone we właściwą sekwencję i że nie brakuje segmentów. 
TCP kontroluje również integralność danych przy użyciu obliczeń sumy kontrolnej. Jeśli suma 
kontrolna jest niewłaściwa, to datagram zostaje odrzucony i musi być transmitowany. Obliczanie 
sumy kontrolnej jest skomplikowane. Jeżeli musisz znać szczegóły, to poniższy fragment jest 
bezpośrednim wypisem z dokumentu RFC 793: 

Pole sumy kontrolnej to 16-bitowe uzupełnienie jedynkowe sumy uzupełnienia jedynkowego 
wszystkich słów 16-bitowych w nagłówku i tekście. Jeżeli dany segment zawiera nieparzystą 
liczbę oktetów nagłówka i tekstu, które mają być poddane sumie kontrolnej, to ostatni oktet 
zostaje wypełniony z prawej strony zerami, aby utworzyć słowo 16-bitowe dla potrzeb sumy 
kontrolnej. Wypełnienie nie jest transmitowane jako część segmentu. Podczas obliczania sumy 
kontrolnej samo pole sumy kontrolnej zostaje zastąpione zerami. 

Suma kontrolna obejmuje również 96-bitowy pseudo-nagłówek koncepcyjnie przytwierdzony do 
nagłówka TCP. Ten pseudo-nagłówek zawiera adres źródłowy, adres docelowy, protokół, oraz 
długość TCP. Zapewnia to TCP zabezpieczenie przed błędnie routowanymi segmentami. 
Informacja ta jest niesiona w protokole internetowym i przesyłana poprzez interfejs TCP — sieć w 
argumentach lub wynikach wywołań IP przez TCP. 

Kontrola przepływu danych 

TCP zapewnia wydajną transmisję danych poprzez sieć dzięki 

kontroli przepływu danych

Odkrywa ona dynamicznie charakterystykę opóźnień sieci i reguluje jej działanie, aby 
maksymalizować przepustowość bez przeciążania sieci. 

Każdy węzeł końcowy połączenia TCP ma bufor, służący do zapamiętywania danych 
transmitowanych poprzez sieć, dopóki dana aplikacja nie będzie gotowa do odczytu tych danych. 
Pozwala to, aby mogły mieć miejsce przesyły sieciowe w czasie, kiedy aplikacje są zajęte innymi 
procesami i poprawia ogólną wydajność. TCP zarządza ruchem tak, aby jego bufory się nie 

background image

przepełniały — szybcy nadawcy są okresowo zatrzymywani, żeby wolniejsi nadawcy mogli 
nadążyć. 

Aby uniknąć przepełnienia bufora, TCP ustawia pole 

rozmiar okna

 w każdym z pakietów, które 

transmituje. Pole to wskazuje ilość danych, które mogą być transmitowane do bufora. Gdy wartość 
ta spadnie do zera, to host transmitujący nie będzie przesyłał żadnych danych, dopóki nie otrzyma 
pakietu anonsującego wartość niezerową w polu rozmiaru okna. 

Czasami przestrzeń bufora jest zbyt mała do wydajnej transmisji. Zdarza się to w sieciach, które 
mają ograniczoną przepustowość albo powolne łącza. Rozwiązaniem jest zwiększenie rozmiaru 
bufora, lecz istnieje w tej kwestii ograniczenie narzucone przez maksymalny rozmiar okna, jaki 
dopuszcza protokół. W takiej sytuacji określa się sieć jako sieć LFN (

Long Fat Network

). TCP 

systemu Windows 2000 dopuszcza większy rozmiar okna, niż jego poprzednie implementacje. 

Wskazówka: LFN może być akronimem od 

Long Fat Network

, albo 

Long File Name

 (długa 

nazwa pliku). Akronim ten w przypadku 

Long File Name

 wymawia się „

el-ef-en

”. W przypadku 

Long Fat Network

 wymawia się go „

elephant

”. 

Elephant’y

 omówione są w specyfikacji RFC 

1072. 

Jednym z ważnych czynników rządzących przepływem informacji poprzez sieć jest okres czasu, 
przez jaki host wysyłający czeka na potwierdzenie, zanim założy, że dane uległy zagubieniu i 
dokona ponownej ich transmisji. Jeżeli okres ten jest zbyt krótki, to pakiety są niepotrzebnie 
retransmitowane; jeżeli jest on zbyt długi, to dane połączenie będzie stało bezczynnie, podczas gdy 
host będzie czekał, dopóki okres nie minie. TCP podejmuje próbę ustalenia optymalnego okresu 
wygaśnięcia poprzez monitorowanie normalnej wymiany pakietów danych. Proces ten zwany jest 
szacowaniem czasu przewidzianego na transmisję i potwierdzenie przyjęcia (RTT). TCP systemu 
Windows 2000 zapewnia udoskonalony algorytm RTT, wykorzystujący znaczniki czasu. Zostało 
to opisane w dalszej części tego rozdziału. 

Okna przesuwne TCP 

TCP implementuje kontrolę przepływu danych przez zastosowanie algorytmów okna 
przesuwnego, umożliwiających jednoczesny transport wielu pakietów danych. Algorytmy te 
umieszczają bufory pomiędzy programami użytkowymi a sieciowym przepływem danych. Dane 
otrzymywane z sieci zapamiętywane są w buforze, a aplikacja odczytuje te dane, zwalniając 
przestrzeń bufora w celu przyjęcia większej ilości danych z sieci. Okno, to ilość danych, która 
może być 

odczytywana z wyprzedzeniem

 i jest ono równe rozmiarowi bufora minus ilość ważnych 

danych, które są w nim zapamiętane. 

Jeżeli rozmiar okna jest większy niż rozmiar pakietów, to może być transmitowanych wiele 
pakietów, ponieważ nadawca wie, że u odbiorcy dostępna jest przestrzeń bufora potrzebna, aby je 
pomieścić. Najlepiej, kiedy zostanie osiągnięty warunek stanu stabilnego, gdzie aplikacja 
odczytuje dane z bufora w takim samym tempie, w jakim nadawca dodaje do niego dane. W takim 
wypadku można sobie wyobrazić bufor jako okno, które przesuwa się spokojnie wzdłuż 
strumienia danych, utrzymując w ruchu szereg pakietów i zapewniając wydajne wykorzystanie 
zasobów sieci. Każdy z hostów TCP ma dwa bufory, jeden do odbierania danych i jeden do ich 
wysyłania. 

Rozmiar okien odbioru i wysyłania jest ustawiany podczas uzgadniania trzystopniowego. Zostało 
to omówione w dalszej części tego rozdziału. 

background image

Gniazda i porty TCP  

TCP implementuje połączenia pomiędzy hostami przy użyciu gniazd i portów. Gniazdo to węzeł 
końcowy komunikacji sieciowej i może ono być aktywne, albo pasywne. Gniazdo aktywne łączy 
się ze zdalnym gniazdem aktywnym poprzez otwarte łącze do transmisji danych. Kiedy połączenie 
zostanie zerwane, niszczy to gniazdo aktywne w obu węzłach końcowych. Gniazdo pasywne nie 
zostaje podłączone, lecz zamiast tego czeka na połączenie przychodzące, które da początek 
nowemu gniazdu aktywnemu. 

Gniazdo związane jest z portem relacją typu 

wielu do jednego

. Każdy z portów może mieć 

pojedyncze gniazdo pasywne, oczekujące na połączenia przychodzące oraz kilka gniazd 
aktywnych, z których każde pokrywa się z połączeniem otwartym w porcie. Gniazdo jest węzłem 
końcowym w komunikacji sieciowej (podobnym do uchwytu pliku) i tworzy się je poprzez 
określenie adresu IP jego hosta, typu usługi (TCP lub UDP), oraz wykorzystywanego numeru 
portu. 

Wszystkie połączenia TCP są jednoznacznie identyfikowane za pomocą dwóch gniazd — to jest 
dwóch par adresów IP i portów TCP (jedna dla hosta wysyłającego i jedna dla hosta 
odbierającego). Programy TCP wykorzystują zarezerwowane, albo 

dobrze znane

, numery portów. 

Każdy program po stronie serwera, który wykorzystuje porty TCP, nasłuchuje komunikatów 
przychodzących pod dobrze znany numer portu. Wszystkie numery portów serwerów TCP o 
wartościach mniejszych niż 1024 (oraz niektóre wyższe numery) są zarezerwowane i 
zarejestrowane przez organizację przydzielania numerów internetowych (IANA). 

Tabela 7.1 podaje dobrze znane porty serwera TCP, wykorzystywane przez standardowe programy 
oparte na TCP. Nie jest to lista wyłączna, ale zawiera najczęściej używane porty. 

Wskazówka: Pełna lista aktualnie zarejestrowanych dobrze znanych portów TCP dostępna jest 
pod adresem 

www.isi.edu/in-notes/iana/assignments/port-numbers

Tabela 7.1. Porty serwerów TCP 

Numer portu TCP  Opis 

20 Serwer 

protokołu transmisji plików (FTP) (kanał danych) 

21 

Serwer FTP (kanał kontrolny) 

23 Serwer 

Telnet 

25 Serwer 

protokołu prostego transferu poczty elektronicznej (SMTP) 

53 

Transfery strefy systemu nazw domen (DNS) 

80 

Serwer WWW protokołu transmisji hipertekstu (HTTP) 

110 Serwer 

protokołu odbierania poczty wersji 3 (POP3) 

139 Usługa sesji NetBIOS 

Trzystopniowe uzgadnianie TCP 

TCP ustanawia połączenia za pomocą mechanizmu uzgadniania opartego na numerach sekwencji. 
Każde z połączeń wymaga numeru sekwencji wysyłania i numeru sekwencji odbioru. Początkowy 

background image

numer sekwencji wysyłania (ISS) jest bieżącym numerem sekwencji inicjującego hosta TCP, a 
początkowy numer sekwencji odbioru (IRS) jest bieżącym numerem sekwencji docelowego hosta 
TCP. 

Aby mogło zostać ustanowione połączenie, TCP musi zsynchronizować numery sekwencji 
wysyłania i odbioru. Odbywa się to przy użyciu bitu kontrolnego synchronizacji (SYN) oraz 
początkowych numerów sekwencji (ISN-ów). Komunikat SYN (komunikat, który ma ustawiony 
bit SYN) jest potwierdzany przez komunikat ACK (komunikat, który ma ustawiony znacznik 
ACK lub znacznik potwierdzenia). Cała procedura znana jest jako 

trzystopniowe uzgadnianie

 TCP 

i działa w następujący sposób: 

1. 

Host A

 wysyła komunikat SYN do 

Hosta B

. Komunikat ten zawiera numer sekwencji 

Hosta A

 (ISS). 

2. 

Host B

 wysyła komunikat ACK z ISS powiększonym o jeden. Komunikat ten ma również 

ustawiony znacznik SYN i zawiera numer sekwencji 

Hosta B

 (IRS). 

3. 

Host A

 potwierdza komunikat SYN 

Hosta B

 przy użyciu komunikatu ACK z IRS 

zwiększonym o jeden i pustym polem danych. Zauważ, że kiedy 

Host A

 zaczyna wysyłać 

dane, to nie zwiększa się numer sekwencji 

Hosta B

 na skutek tego komunikatu. 

Komunikaty ACK, które nie zawierają danych, nie powodują zwiększenia przez odbiorcę 
numeru sekwencji nadawcy. 

Rysunek 7.1 przedstawia trzystopniowe uzgadnianie TCP. 

 

ISN 1000 (ISS)   

 

 

ISN 2000 (IRS) 

 

  SEQ=1000 

CTL=SYN 

Host 

    Host 

 

 

 

SEQ=2000 ACK=1001 CTL=SYN, ACK 

 

  SEQ=1001 

ACK=2001 

CTL=ACK 

 

 

Rysunek 7.1. Trzystopniowe uzgadnianie TCP 

Zaletą trzystopniowego uzgadniania TCP jest to, że 

Host A

 może sprawdzić, czy potwierdzenie 

wysłane przez 

Hosta B

 zawiera spodziewany numer sekwencji. Jest możliwe, przy powolnej i 

zawodnej sieci złożonej (takiej jak Internet), że 

Host B

 mógł otrzymać część starego komunikatu, 

który został wysłany przez 

Hosta A

 i jest rozsynchronizowany. W takim przypadku ACK 

Hosta B

 

zawierałoby błędny numer sekwencji, a połączenie nie zostałoby ustanowione. 

Host A

 wysłałby 

komunikat z ustawionym znacznikiem resetowania (RST), który przywróciłby 

Hosta B

 do stanu 

nasłuchiwania. 

background image

Trzystopniowe uzgadnianie TCP jest potrzebne, ponieważ protokół nie nakłada żadnego 
ograniczenia, aby określone połączenie nie miało być wykorzystane więcej niż jeden raz. Nowe 
egzemplarze połączenia określane są jako 

wcielenia

 i czasami mogą być wysyłane powtórzone 

komunikaty z poprzednich wcieleń, szczególnie jeżeli połączenie zostanie szybko otworzone, 
zamknięte i ponownie otworzone w krótkich odstępach czasu, albo jeżeli połączenie zostanie 
zerwane z utratą pamięci, a następnie zostanie ponownie ustanowione. Trzystopniowe uzgadnianie 
gwarantuje, że ustanawiane są ważne połączenia, nawet jeśli dany host TCP ulegnie awarii i straci 
całą wiedzę dotyczącą numerów sekwencji, których używał. 

Pojęcie czasu ciszy TCP 

W momencie włączenia zasilania, albo podczas powrotu do normalnego stanu po awarii, w 
wyniku której zostały utracone informacje dotyczące numerowania sekwencji, TCP siedzi cicho 
(tzn. nie przydziela żadnych numerów sekwencji) przez interwał równy maksymalnemu 
okresowi istnienia segmentu (MSL). Gwarantuje to, że nie zostanie utworzony segment niosący 
numer sekwencji podwojony przez stary segment pozostający w sieci. RFC 793 określa MSL 
wynoszący dwie minuty. 

 

Czasami połączenie może być zainicjowane z dwóch hostów naraz. W takim wypadku 

Host A

 

wysyła pakiet SYN do 

Hosta B

, ale zamiast otrzymać pakiet z ustawionym ACK oraz SYN, 

otrzymuje inicjujący pakiet SYN 

Hosta B

. Jeżeli tak się dzieje, to 

Host A

 ponownie wysyła swój 

pierwotny pakiet SYN i trzystopniowe uzgadnianie przebiega tak, jak wcześniej. 

TCP wykorzystuje podobny proces uzgadniania przed zamknięciem połączenia. Sprawdza on, czy 
oba hosty zakończyły wysyłanie i odbieranie danych. 

Niezawodny przesył danych 

Kiedy zostanie ustanowione połączenie, TCP może przesyłać nieprzerwany strumień danych w 
obu kierunkach. Dane pakowane są w segmenty, a TCP w hostach wysyłających i odbierających 
decyduje, kiedy blokować, a kiedy przekazywać dane. 

TCP musi być w stanie powrócić do normalnego stanu po wystąpieniu sytuacji, w toku których 
dane uległy uszkodzeniu, utracie, podwojeniu lub zostały dostarczone nie po kolei. Uzyskuje się to 
poprzez przydzielanie numeru sekwencji w momencie ustanowienia połączenia, zwiększanie go o 
jeden dla każdego oktetu przetransmitowanych danych, oraz przez wymaganie pozytywnego 
potwierdzenia (ACK), zawierającego informacje dotyczące numeru sekwencji od odbierającego 
hosta TCP. Jeżeli ACK nie zostanie otrzymane w granicach określonego czasu, dane są ponownie 
transmitowane. 

W hoście odbierającym, numery sekwencji wykorzystywane są do ponownego składania 
segmentów w kolejności, w jakiej zostały wysłane oraz do eliminowania powtórzeń. Uszkadzaniu 
danych zapobiega się poprzez obliczanie sumy kontrolnej dla każdego z transmitowanych 
segmentów, sprawdzanie tej sumy kontrolnej u odbiorcy, odrzucanie uszkodzonych segmentów 
oraz przez wymaganie ponownej transmisji uszkodzonych danych. W ten sposób TCP gwarantuje, 
że błędy transmisji nie uniemożliwią właściwego dostarczania danych i że komunikacja sieciowa 
będzie mogła wrócić do normalnego stanu po błędach systemu łączności. 

background image

Zamykanie połączenia TCP 

Host TCP zamyka połączenie poprzez wysłanie pakietu TCP z ustawionym znacznikiem FIN. 
Łączność TCP jest dwukierunkowa (dupleksowa) i host, który zamyka połączenie, informuje 
swojego hosta równorzędnego, że nie ma już żadnych danych do wysłania. Może on nadal 
otrzymywać dane poprzez połączenie, dopóki jego host równorzędny również nie wyśle pakietu 
zamykającego FIN. Zważywszy, że 

Host A

 i 

Host B

 biorą udział w dwukierunkowym ruchu TCP, 

mamy trzy możliwe scenariusze. 

Host A inicjuje zamknięcie 

W tym przypadku 

Host A

 umieszcza segment FIN w kolejce segmentów wychodzących. Nie będą 

przyjmowane przez TCP żadne dalsze transmisje (SEND-y) od 

Hosta A

, a 

Host A

 wchodzi w stan 

FIN-WAIT-1

, w którym dozwolone są przychodzące segmenty danych (RECEIVE). Jeżeli to 

konieczne, wszystkie segmenty poprzedzające i zawierające segment FIN będą retransmitowane 
dopóki nie zostaną potwierdzone. Kiedy 

Host B

 potwierdzi segment FIN 

Hosta A

 i wyśle własny 

FIN, 

Host A

 dokona transmisji segmentu ACK, aby potwierdzić ów FIN. 

Host B

 otrzyma ten 

segment ACK i połączenie zostanie zamknięte. 

Host A otrzymuje segment FIN 

W tym przypadku 

Host A

 odbiera niezapowiedziany segment FIN od 

Hosta B

Host A

 ACK-uje 

FIN (cudowna terminologia), który mówi 

Hostowi B

, że połączenie jest zamykane. Wtedy 

Host A

 

wysyła wszystkie pozostałe dane do 

Hosta B

, a następnie wyśle instrukcję FIN. Z kolei 

Host B

 

ACK-uje FIN 

Hosta A

 i połączenie zostaje zamknięte. 

Obydwa hosty zamykają równocześnie 

W tym przypadku hosty

 A

 i 

B

 wymieniają segmenty FIN. Kiedy wszystkie segmenty 

poprzedzające FIN-y zostaną przetworzone i potwierdzone, każdy z hostów może, za pomocą 
ACK, potwierdzić FIN, który otrzymał. W momencie otrzymania tych ACK-ów oba hosty 
usuwają połączenie. 

Struktura pakietów TCP 

Pakiet (lub 

segment

) TCP jest kapsułowany za pomocą nagłówka IP, który określa informacje 

dotyczące routingu IP, takie jak adres docelowy i źródłowy datagramu, co przedstawia rysunek 
7.2. Ten rysunek ukazuje pakiet TCP SYN, wykorzystywany do inicjacji trzystopniowego 
uzgadniania TCP. Ponieważ ta struktura pakietowa nie zawiera żadnych danych, ukazuje ona 
również strukturę nagłówka TCP. 

 

 

Rysunek 7.2. Pakiet TCP SYN 

Wskazówka: Rysunek 7.2 przedstawia pakiet z pliku 

ftp.cap

 

Monitora sieci

, dostępnego na CD-

ROM. 

Pakiet TCP zawiera kilka pól, opisanych na stronie ???. 

background image

Port źródłowy 

To 16-bitowe pole zawiera numer portu źródłowego. 

Port docelowy 

To 16-bitowe pole zawiera numer portu docelowego. Gdyby przykładowo, pakiet SYN inicjował 
połączenie, które miałoby być wykorzystywane przez FTP, to wartość w tym polu byłaby 0x0015 
(21 dziesiętne). 

Numer sekwencji 

To 32-bitowe pole zawiera albo ISN (w przypadku pakietu SYN), albo numer sekwencji 
pierwszego oktetu danych w segmencie. 

Numer potwierdzenia 

To 32-bitowe pole zawiera wartość następnego numeru sekwencji, który spodziewa się otrzymać 
nadawca segmentu. W inicjującym pakiecie SYN, w którym nie jest ustawiony znacznik ACK, 
wartość tego pola wynosi zero. 

Wyrównanie danych 

To 4-bitowe pole zawiera wartość równą liczbie słów 32-bitowych w nagłówku TCP i wskazuje, 
gdzie zaczynają się dane TCP. Nagłówek TCP ma zawsze długość liczby całkowitej słów 32-
bitowych. 

Zarezerwowane 

To 6-bitowe pole zarezerwowane jest do przyszłego wykorzystania i jest ustawione na zero. 

Bity kontrolne 

To pole zawiera sześć jednobitowych znaczników. Począwszy od bitu najbardziej znaczącego, są 
to: 

•  URG — wskazuje, czy transmitowane są dane pilne. Jeżeli ten znacznik jest ustawiony to 

pole 

Pilny wskaźnik

 (patrz poniżej) wskazuje na koniec danych pilnych w segmencie. 

•  ACK — wskazuje, czy jest wysyłane potwierdzenie. Ten znacznik jest zazwyczaj 

ustawiony, poza początkowymi pakietami SYN. Jeżeli ten znacznik nie jest ustawiony, to 
wartość w polu 

Potwierdzenie

 wynosi zero. 

•  PSH — wskazuje, że dane w pakiecie powinny zostać przepchnięte do hosta 

odbierającego. Jeżeli ten znacznik jest ustawiony, to TCP niezwłocznie przekaże i 
dostarczy dane. 

•  RST — resetuje połączenie i przywraca hosta odbierającego do stanu nasłuchu. 

Przeważnie znacznik ten jest ustawiony, kiedy stary, podwojony komunikat przez 
pomyłkę zainicjuje proces uzgadniania. 

•  SYN — synchronizuje numery sekwencji. Ten znacznik jest wykorzystywany podczas 

trzystopniowego uzgadniania TCP. 

•  FIN — wskazuje, że nie ma już więcej danych od nadawcy. 

background image

Okno 

To 16-bitowe pole określa liczbę oktetów danych, począwszy od oktetu wskazanego w polu 

Potwierdzenie

, które nadawca tego segmentu jest gotów przyjąć. Hosty TCP optymalizują 

wydajność transmisji poprzez negocjowanie rozmiarów okna. 

Suma kontrolna 

To 16-bitowe pole zawiera wartość sumy kontrolnej, obliczaną w sposób opisany wcześniej w 
niniejszym rozdziale. 

Pilny wskaźnik 

Jeżeli pakiet zawiera dane pilne i jest ustawiony znacznik URG, to 16-bitowe pole zawiera bieżącą 
wartość 

Pilnego wskaźnika

. Wskazuje ona numer sekwencji oktetu, który następuje po danych 

pilnych i jest utrzymywana jako wyrównanie pozytywne numeru sekwencji w segmencie. 

Opcje 

Długość tego pola jest zmienna w zależności od tego, które opcje (jeżeli w ogóle) zostaną 
określone, ale jest zawsze wielokrotnością 8 bitów. Opcja może się zaczynać na dowolnej granicy 
obszaru. Opcja może wymagać tylko jednego oktetu, określającego 

rodzaj opcji

. Ewentualnie 

może ona wymagać kilku oktetów, które zawierają wartości dla 

rodzaju opcji

długości opcji

 oraz 

dane zawarte w opcji. 

W skład standardowych opcji TCP wchodzą: 

• 

Koniec listy opcji

 — wskazuje koniec listy opcji, a nie koniec każdej z opcji. Ta opcja 

wymaga pojedynczego oktetu, zawierającego wartość 

rodzaju opcji

 wynoszącą 0. Jest 

ona wykorzystywana tylko, gdyby koniec opcji nie miał w przeciwnym razie zbiec się z 
końcem nagłówka TCP. 

• 

Bezczynność

 — wykorzystywana pomiędzy opcjami do wyrównywania początku 

późniejszej opcji do granicy słowa 32-bitowego. Opcja ta wymaga pojedynczego oktetu, 
zawierającego wartość 

rodzaju opcji

 wynoszącą 1. Nie wszyscy nadawcy wykorzystują tę 

opcję, a odbiorcy muszą być zdolni do przetwarzania opcji, nawet jeżeli nie zaczynają się 
one na granicy słowa. 

• 

Maksymalny rozmiar segmentu

 — określa maksymalny rozmiar segmentu odbioru u 

hosta TCP, który wysyła ten segment. Ta opcja wymaga czterech oktetów, zawierających 
wartość 

rodzaju opcji

 wynoszącą 2, wartość 

długości opcji

 wynoszącą 4 oraz dane 

dotyczące rozmiaru segmentu (dwa oktety). Maksymalny rozmiar segmentu określany 
jest tylko w segmentach SYN inicjujących trzystopniowe uzgadnianie (takich jak 
przedstawione na rysunku 7.1). Jeżeli ta opcja nie jest wykorzystywana, dozwolony jest 
dowolny rozmiar segmentu. 

Opcja SACK dozwolone (

rodzaj opcji

 4, 

długość opcji

 2) jest omówiona w dalszej części 

niniejszego rozdziału. 

Wypełnienie 

Wypełnienie nagłówka TCP jest wykorzystywane, aby zagwarantować, że nagłówek kończy się, a 
dane zaczynają na 32-bitowej granicy. Pole wypełnienia ma wszystkie oktety ustawione na zero. 

background image

Wskazówka: Pola 

Opcje

 oraz 

Wypełnienie

 są czasem połączone w pole 

Opcje i wypełnienie

Udoskonalony protokół TCP firmy Microsoft 

Firma Microsoft przepisała stos TCP/IP i wprowadziła znaczące udoskonalenia do zestawu funkcji 
TCP. Nie wszystkie udoskonalenia opisane poniżej były wprowadzone w systemie Windows 
2000, ale stos TCP/IP systemu Windows 2000 implementuje wszystkie (nie zawsze domyślnie). 

Rozładowanie sumy kontrolnej 

Wersja 5 specyfikacji interfejsu sterownika sieciowego (NDIS5) obsługuje rozładowywanie zadań 
(patrz: rozdział 1), a TCP systemu Windows 2000 wykorzystuje to rozładowując obliczenia sumy 
kontrolnej TCP do karty sieciowej (NIC), przy założeniu, że sterownik karty sieciowej obsługuje 
tę funkcję. Może to prowadzić do poprawy wydajności w środowiskach o bardzo wysokiej 
przepustowości. 

Generowanie początkowego numeru sekwencji 

Protokół TCP systemu Windows 2000 został zahartowany na okoliczność takich ataków, jak 

spoofing

 (wysyłanie fałszywych komunikatów). Jako część tego procesu, algorytm generowania 

ISN został zmodyfikowany w taki sposób, aby ISN-om przybyło losowych przyrostów, za pomocą 
opartego na RC4 generatora numerów inicjalizowanego 2048-bitowym kluczem przy 
uruchamianiu. 

Wskazówka: RC4 jest algorytmem 

Rivest-Sharmir-Adelman

 (RSA). Aby uzyskać więcej 

informacji na ten oraz na inne tematy związane z zabezpieczeniami, wejdź na stronę  główną 
RSA pod adresem 

www.rsasecurity.com

Rozmiar okna odbierania TCP 

Rozmiar okna odbierania TCP to ilość odbieranych danych (w bajtach), która może być 
jednorazowo buforowana w danym połączeniu — to jest ilość danych, które host transmitujący 
wysyła przed oczekiwaniem na potwierdzenie (i prawdopodobnie na nowy rozmiar okna) od hosta 
odbierającego. TCP systemu Windows 2000 używa większych domyślnych rozmiarów okna, niż 
wcześniejsze wersje systemu Windows i dopasowuje rozmiar okna do parzystych przyrostów 
maksymalnego rozmiaru segmentu (MSS), który jest negocjowany podczas ustawiania połączenia. 
Zwiększa to odsetek segmentów TCP naturalnej wielkości, wykorzystywanych podczas transmisji 
dużej ilości danych. 

Domyślny rozmiar okna odbierania jest obliczany, a nie zakodowany sprzętowo. Wartość ta 
obliczana jest w następujący sposób: 

1. Pierwsze 

żądanie połączenia wysłane do hosta zdalnego ogłasza rozmiar okna odbierania 

równy 16 KB (16 384). 

2. Kiedy 

połączenie zostanie ustanowione, rozmiar okna odbierania zostaje zaokrąglony do 

parzystego przyrostu maksymalnego rozmiaru segmentu TCP (MSS), który został 
wynegocjowany podczas ustawiania połączenia. 

background image

3. Jeżeli nie jest ona co najmniej czterokrotnym rozmiarem MSS, zostaje dostosowana do 

tej wartości. Maksymalny rozmiar okna odbierania wynosi 64 KB, chyba że włączona 
jest opcja skalowania okna określona w dokumencie RFC 1323. 

W przypadku Ethernetu okno jest zazwyczaj ustawione na 17 520 bajtów (16 KB zaokrąglone do 
dwunastu 1460-bajtowych segmentów.). Rozmiar okna odbierania może być ustawiany na 
określoną wartość przy użyciu parametru 

Rejstru

 

TcpWindowSize

. Parametr ten może być 

określany albo dla wszystkich interfejsów albo osobno dla każdego interfejsu. Funkcja 

setsockopt

 interfejsu Windows 

Sockets

 (

Winsock

) ustawia rozmiar okna odbierania osobno dla 

każdego interfejsu. Korzystanie z 

TcpWindowSize

 opisane jest w podrozdziale rozwiązań 

natychmiastowych niniejszego rozdziału. Funkcje 

Winsock

 są opisane w rozdziale 16. 

Wskazówka: Zmiana parametru 

Rejestru

 

GlobalMaxTcpWindowSize

 nie zmienia koniecznie 

rozmiaru okna odbierania na wszystkich interfejsach. Parametr ten jest współczynnikiem przy 
obliczaniu domyślnego rozmiaru okna (patrz: dodatek A). 

Skalowanie okna według specyfikacji RFC 1323. 

RFC 1323 określa metodę obsługiwania okien skalowalnych, poprzez umożliwienie TCP 
negocjowania współczynnika rozmiaru okna, w momencie ustanawiania połączenia. Pozwala to na 
faktyczny rozmiar okna odbierania do 1 GB, co poprawia wydajność w szerokopasmowych 
sieciach o dużych opóźnieniach. 

Opcja 

Skalowanie okna

, o ile jest włączona, pojawia się w części 

Opcje TCP

 segmentu TCP SYN 

jako 

rodzaj opcji

 3, 

długość opcji

 3, 

współczynnik skalowania

. Wskazuje ona, że transmitujący 

host TCP jest gotowy do skalowania zarówno okna wysyłania, jak i odbierania, oraz określa 
współczynnik skalowania, który może być zastosowany wobec jego okna odbierania. 
Współczynnik skalowania wyrażany jest jako potęga liczby dwa zakodowana logarytmicznie, aby 
mogła być implementowana za pomocą operacji przesunięcia binarnego. Na przykład faktor skali 
równy cztery zapewnia możliwe skalowanie okna wynoszące 2

4

, lub 16, implementowane przez 4-

bajtowe przesunięcie wartości w polu 

Okno

. Przypuśćmy, że pole 

Okno

 zawiera: 

0100 0100 0111 0000 (17,520) 

to faktor skali dawałby możliwy rozmiar okna o wartości: 

0100 0100 0111 0000 0000 (280,320) 

Host TCP, który jest gotowy do skalowania okien, powinien wysyłać opcję 

Skala okna

, nawet jeśli 

jego własny współczynnik skali wynosi 0. Współczynnik skali równy 0 daje skalowanie okna 
wynoszące 2

0

, albo 1. Obydwa hosty muszą wysyłać swoje opcje 

Skali okna

 w swoich segmentach 

SYN, aby umożliwić skalowanie okna w obu kierunkach. Współczynnik skali nie musi być 
symetryczny i może być różny dla każdego kierunku przepływu danych. 

Opcja może być wysyłana w początkowym segmencie SYN. Może ona być również wysyłana w 
segmencie SYN, ACK, ale tylko jeżeli w początkowym segmencie SYN została otrzymana opcja 

Skala okna

. Pole 

Okno

 w segmencie SYN nie jest nigdy skalowane. 

Skalowanie okna implementowane jest w systemie Windows 2000, jeżeli 

TcpWindowSize

 jest 

ustawione na wartość większą niż 64, a parametr 

Rejestru

 

Tcp1323Opts

 jest ustawiony albo na 1, 

albo na 3 (patrz: dodatek A). Domyślnie 

Tcp1323Opt

 ustawiony jest na 0, a 

Skalowanie okna

 jest 

wyłączone. Procedura uruchamiania 

Skalowania okna

 została opisana w podrozdziale rozwiązań 

natychmiastowych niniejszego rozdziału. 

background image

Potwierdzenia opóźnione 

TCP wykorzystuje potwierdzenia opóźnione (ACK) do obniżania liczby wysyłanych pakietów. 
Kiedy w połączeniu TCP zostaną odebrane dane, to stos firmy Microsoft zwróci ACK tylko jeśli 
został spełniony jeden z następujących warunków: 

•  Nie zostało wysłane żadne ACK dla poprzedniego otrzymanego segmentu. 
•  Segment został odebrany, ale przez połączenie nie nadejdą żadne dalsze segmenty przez 

okres 200 milisekund. 

W rezultacie ACK wysyłane jest dla co drugiego segmentu TCP odebranego poprzez połączenie, 
chyba że straci ważność czasomierz potwierdzeń opóźnionych (domyślnie ustawiony na 200 
milisekund). Czasomierz ten można ustawiać przy użyciu parametru 

Rejestru

 

TcpDelAckTick

Potwierdzenia opóźnione określone są w dokumencie RFC 1122. 

Potwierdzenie selektywne 

System Windows 2000 wprowadza obsługę SACK. Opcja ta jest szczególnie korzystna w 
przypadku połączeń, które stosują duże rozmiary okien TCP. Przed wprowadzeniem SACK, 
odbiorca mógł potwierdzić tylko ostatni numer sekwencji przyległych danych odebranych, albo 

lewą krawędź

 okna odbierania. Jeżeli jest włączony SACK, to odbiorca może również 

indywidualnie potwierdzać inne bloki odebranych danych. SACK korzysta z opcji nagłówka TCP, 
co przedstawione jest poniżej. Opcja 

SACK dozwolone

 (

rodzaj opcji

 4, 

długość opcji

 2) może być 

wysyłana w pakiecie SYN przez hosta TCP, który może obierać i przetwarzać potwierdzenia 
selektywne, kiedy połączenie zostanie otwarte. Nie wolno przesyłać opcji 

SACK dozwolone

 w 

segmentach innych niż SYN. 

Opcja SACK (

rodzaj opcji

 5, 

długość opcji

 zmienna) przekazuje rozszerzone informacje 

dotyczące potwierdzeń od nadawcy do odbiorcy. Jej pola danych identyfikują lewą krawędź 
pierwszego bloku danych, prawą krawędź pierwszego bloku danych, lewą krawędź drugiego bloku 
danych i tak dalej, aż do prawej krawędzi ostatniego bloku danych w segmencie. 

Gdy SACK jest włączone (ustawienie domyślne systemu Windows 2000), to odbiorca może 
informować nadawcę, które bloki danych zostały otrzymane oraz gdzie są luki w danych, jeżeli 
jakiś pakiet (albo szereg pakietów) został zgubiony. Wtedy nadawca retransmituje brakujące dane, 
ale nie retransmituje bloków danych, które zostały pomyślnie odebrane. SACK kontrolowany jest 
przez parametr 

Rejestru

 

SackOpts

, który domyślnie ustawiony jest na 1 (prawda). 

SACK jest określony w specyfikacji RFC 2018. 

Znaczniki czasu 

System Windows 2000 wprowadza obsługę znaczników czasu TCP, które (podobnie jak SACK) 
są korzystne przy połączeniach stosujących duże rozmiary okien. Znaczniki czasu 
wykorzystywane są do pomiaru RTT oraz do ustawiania przeterminowania retransmisji. Opcja 
znaczników czasu (

rodzaj opcji

 8, 

długość opcji

 10) zawiera dwa 4-bajtowe pola danych. Pole 

Wartość znacznika czasu

 (

TSval

) zawiera bieżącą wartość zegara znaczników czasu hosta 

transmitującego. Pole 

Odpowiedź potwierdzenia znacznika czasu

 (

Tsecr

) potwierdza wartość 

znacznika czasu, która została wysłana przez równorzędnego hosta TCP w polu 

TSval

Tsecr

 jest 

ważna tylko, jeżeli ustawiony jest bit ACK w nagłówku TCP; w przeciwnym razie jego wartość 

background image

musi być równa zero. Wartość 

Tsecr

 będzie (ogólnie rzecz biorąc) pochodziła z ostatniej 

otrzymanej opcji znaczników czasu. 

Host TCP może wysyłać opcję znaczników czasu w początkowym segmencie SYN. Może on 
wysyłać opcję w innych segmentach tylko jeżeli otrzymał znacznik czasu w początkowym 
segmencie SYN dla połączenia. 

Opcja znaczników czasu jest domyślnie wyłączona. Ustawienie parametru 

Rejestru

 

Tcp1323Opts

 

(normalnie zero) na 2 albo na 3 włącza opcję. Procedura ta opisana jest w podrozdziale rozwiązań 
natychmiastowych niniejszego rozdziału. 

Dokument RFC 1323 określa korzystanie ze znaczników czasu oraz z opcji 

Znaczniki czasu

Odkrywanie maksymalnej jednostki transmisyjnej ścieżki (PMTU) 

Po ustanowieniu połączenia hosty TCP wymieniają swoje wartości MSS i przy połączeniu 
wykorzystywana jest mniejsza z tych wartości. Tradycyjnie MTU to wynegocjowany MSS plus 40 
bajtów na nagłówki IP i TCP. Jednakże obsługa dodatkowych opcji TCP, takich jak znaczniki 
czasu, zwiększyła typowy rozmiar tych dwóch nagłówków do łącznego rozmiaru 52 i więcej 
bajtów, co z kolei zwiększa rozmiar MTU. 

Gdy segmenty TCP wysyłane są do sieci nielokalnej, to w nagłówku IP ustawiony zostaje 
znacznik 

Nie fragmentować

 (DF). Każdy router albo nośnik na ścieżce może mieć MTU, która 

różni się od MTU tych dwóch hostów. Jeżeli jakiś segment nośnika albo router na ścieżce ma 
MTU, która jest zbyt mała, aby datagram IP mógł być routowany, to router podejmuje próbę 
fragmentacji datagramu, ale wykrywa, że ustawiony jest znacznik DF. W tym momencie router 
powinien wysłać komunikat niedostępnego miejsca docelowego ICMP, aby poinformować hosta 
transmitującego, że datagram nie może być przekazany dalej bez fragmentacji. 

Większość routerów określa również MTU dozwoloną dla następnego przeskoku poprzez 
umieszczenie jej wartości w 16 bitach mniej znaczących „nieużywanego” pola nagłówka ICMP 
(aby poznać szczegóły, odwołaj się do specyfikacji RFC 1191). W momencie otrzymania tego 
komunikatu ICMP o błędzie, transmitujący host TCP ustawia swój MSS (a w związku z tym swoją 
MTU), aby wszystkie dalsze pakiety wysyłane poprzez połączenie mogły przemierzać ścieżkę bez 
fragmentacji. Minimalna dozwolona MTU wynosi 68 bajtów. 

Niektóre niezgodne routery (albo 

routery

 

czarnej dziury

) dyskretnie gubią te datagramy IP, 

których nie można sfragmentować, albo nie zgłaszają poprawnie ich jednostki MTU następnego 
przeskoku. W tym wypadku można zrekonfigurować algorytm wykrywania PMTU w systemie 
Windows 2000, aby obejść problem. Dostępne są dwa parametry 

Rejestru

EnablePMTUBHDetect

 — ustawienie tego parametru na 1 (prawda) rozkazuje algorytmowi 

odkrywania PMTU podjąć próbę wykrycia 

routerów czarnej dziury

. Wykrywanie 

routerów 

czarnej dziury

 jest domyślnie wyłączone. 

EnablePMTUDiscovery

 — ustawienie tego parametru na 0 (fałsz) wyłącza mechanizm 

wykrywania PMTU. Kiedy wykrywanie PMTU jest wyłączone, to dla wszystkich adresów 
zdalnego miejsca docelowego wykorzystywany jest MSS o wielkości 536 bajtów. Wykrywanie 
PMTU jest domyślnie włączone. 

PMTU pomiędzy dwoma hostami można odkryć ręcznie, przy użyciu polecenia 

ping

 z 

przełącznikiem 

–f

 (nie fragmentować). Technika ta może również wykrywać 

routery czarnej 

background image

dziury

 i jest opisana w podrozdziale rozwiązań natychmiastowych niniejszego rozdziału. 

Odkrywanie PMTU jest opisane w specyfikacji RFC 1191. 

Wykrywanie martwych bram 

Wykrywanie martwych bram pozwala hostowi TCP na wykrywanie awarii bramy domyślnej oraz 
dostosowywanie tablicy tras IP w taki sposób, aby zastosowana została inna brama domyślna. Stos 
Microsoft 2000 wykorzystuje metodę reselekcji wyzwalanej (określoną w specyfikacji RFC 816) z 
nieznacznymi modyfikacjami opartymi na reakcjach klientów. 

Kiedy połączenie TCP kilkakrotnie podejmie próbę wysłania pakietu TCP do miejsca docelowego 
poprzez bramę domyślną i nie otrzyma odpowiedzi, algorytm zmienia pozycję pamięci podręcznej 
tras (RCE) dla tego zdalnego adresu IP, aby używać następnej bramy domyślnej na liście. Liczba 
prób transmisji podejmowanych zanim będzie to miało miejsce, jest równa połowie wartości 
określonej w parametrze 

Rejestru

 

TcpMaxData-Retransmissionss

. Kiedy 25 procent połączeń 

TCP przeniesie się do następnej bramy domyślnej, algorytm zmienia bramę domyślną komputera 
na tę, której aktualnie używają połączenia. 

Jeżeli druga brama domyślna również doświadcza problemów, algorytm wypróbowuje następną 
na liście. Kiedy poszukiwania osiągną ostatnią bramę domyślną, algorytm powraca do początku 
listy. Jeżeli brama pomyślnie transmituje pakiety, to pozostanie bramą domyślną aż do ponownej 
inicjalizacji komputera. 

Retransmisja 

TCP włącza czasomierz retransmisji, kiedy każdy segment wychodzący jest przekazywany do IP. 
Jeżeli przed przeterminowaniem czasomierza nie zostanie otrzymane potwierdzenie, segment jest 
ponownie transmitowany. W przypadku żądań nowego połączenia, czasomierz zostaje ustawiony 
na 3 sekundy. Ta wartość domyślna może być zmieniana osobno dla każdej karty poprzez zmianę 
parametru 

Rejestru

 

TcpInitialRTT

Jeżeli segment żądania (SYN) nie zostanie potwierdzony, zostaje ponownie wysłany maksymalnie 
do dwóch razy w trybie domyślnym. Aby to zmienić, można zastosować parametr 

Rejestru

 

TcpMaxConnectRetransmissions

. W przypadku istniejących połączeń, liczba retransmisji 

kontrolowana jest przez parametr 

TcpMaxDataRetransmissions

, który jest domyślnie 

ustawiony na pięć. Przeterminowanie retransmisji dostosowywane jest do charakterystyki 
połączenia przy użyciu obliczeń wygładzonego czasu przewidzianego na transmisję i 
potwierdzenie przyjęcia (SRTT) (w kwestii szczegółów odwołaj się do dokumentu RFC 793). 
Czasomierz dla każdego segmentu zostaje podwojony po każdej z retransmisji. Ten algorytm 
umożliwia TCP dostrojenie się do normalnego opóźnienia połączenia. 

Czasami TCP dokonuje ponownej transmisji danych, zanim przeterminuje się czasomierz 
retransmisji. Najczęściej występuje to z powodu funkcji 

szybkiej retransmisji

. Kiedy odbiorca 

obsługujący szybką retransmisję otrzyma dane, które mają numer sekwencji wykraczający poza 
oczekiwany, to zakłada, że dane te uległy zagubieniu. W tym przypadku odbiorca wysyła ACK z 
numerem ACK ustawionym na numer sekwencji, którego się spodziewał. Robi to później w 
przypadku każdego dodatkowego segmentu TCP zawierającego dane następujące po brakujących 
danych w strumieniu przychodzącym. 

Kiedy nadawca otrzyma strumień ACK-ów potwierdzających ten sam numer sekwencji i numer 
ten jest wcześniejszy niż aktualnie wysyłany numer sekwencji, to wyciąga wniosek, że jeden lub 

background image

więcej segmentów uległ zagubieniu. Jeżeli obsługiwany jest algorytm szybkiej retransmisji, to 
transmitujący host TCP natychmiast ponownie wysyła segment, którego oczekuje odbiorca, nie 
czekając na przeterminowanie czasomierza retransmisji. Poprawia to wydajność w niepewnym 
środowisku sieciowym. 

System Windows 2000 w sposób domyślny ponownie wysyła dany segment, jeżeli otrzyma trzy 
potwierdzenia (ACK) dla tego samego numeru sekwencji i jeżeli numer ten pozostaje w tyle za 
bieżącym numerem. Liczba ACK-ów ustawiona jest w parametrze 

Rejestru

 

TcpMaxDupAcks

Pakiety keep-alive 

Pakiet TCP 

keep-alive

 to ACK, które ma numer sekwencji ustawiony na o jeden mniejszy niż 

bieżący numer sekwencji połączenia. Host TCP, który otrzyma takie ACK, odpowiada za pomocą 
ACK dla bieżącego numeru sekwencji. Pakiety 

keep-alive

 wykorzystywane są do sprawdzania, 

czy komputer na zdalnym końcu połączenia jest wciąż w trybie online. Okres pomiędzy pakietami 

keep-alive

 określany jest przez parametr 

Rejestru

 

KeepAliveTime

, który domyślnie ma wartość 

7 200 000 milisekund lub dwóch godzin. 

Jeżeli nie ma odpowiedzi, to pakiet 

keep-alive

 powtarzany jest co drugą sekundę (domyślnie). Ten 

okres czasu kontrolowany jest przez parametr 

Rejestru

 

KeepAliveInterval

. Połączenia 

NetBIOS przez TCP/IP (NetBT) wysyłają pakiety 

keep-alive

 usługi NetBIOS częściej, a w 

połączeniu NetBIOS nie są zwykle wysyłane żadne pakiety TCP 

keep-alive

. Pakiety TCP 

keep-

alive

 są domyślnie wyłączone, ale aplikacje 

Winsock

 mogą wykorzystywać funkcję 

setsockopt

 

do ich uaktywniania. 

Algorytm powolnego startu i unikanie przeciążeń 

Kiedy zostaje ustanowione połączenie, TCP oszacowuje przepustowość połączenia. Aby uniknąć 
przepełnienia hosta odbierającego lub wszelkich innych urządzeń lub łączy na ścieżce, okno 
wysyłania jest początkowo ustawione na dwa segmenty TCP. Jeżeli zostanie ono potwierdzone, 
okno zostaje powiększone do trzech segmentów. Jeżeli zostaną one potwierdzone, okno zostaje 
powiększone do czterech segmentów i tak dalej, dopóki ilość danych wysyłanych na jedną wiązkę 
nie osiągnie rozmiaru okna odbierania hosta zdalnego. 

Od tego momentu algorytm powolnego startu nie jest już używany, a kontrola przepływu danych 
jest regulowana przez okno odbierania. Jednak przeciążenie może się zdarzyć w połączeniu w 
dowolnym momencie podczas transmisji. Jeżeli zaczynają mieć miejsce regularne transmisje, to 
algorytm unikania przeciążeń tymczasowo obniża rozmiar okna wysyłania, a następnie znowu 
pozwala mu rosnąć do rozmiaru okna odbierania. Powolny start i unikanie przeciążeń zostały 
określone w specyfikacji RFC 1122. 

Unikanie syndromu głupiego okna 

Syndrom 

głupiego okna

 (SWS) występuje, gdy odbiorca przesuwa prawą krawędź okna protokołu 

sterowania transmisją (TCP), kiedy tylko ma ono w buforze jakąkolwiek świeżą przestrzeń do 
otrzymywania danych i kiedy nadawca wykorzystuje każde dodatkowe okno (obojętne jak małe) 
do wysłania większej ilości danych. Może to doprowadzać do sytuacji, w której ciągle przesyłane 
są malutkie segmenty danych, pomimo że zarówno nadawca, jak i odbiorca mają dużą przestrzeń 
całkowitą bufora na potrzeby połączenia. 

background image

System Windows 2000 implementuje unikanie SWS poprzez nie wysyłanie dodatkowych danych, 
dopóki odbierający host TCP nie ogłosi rozmiaru okna wystarczającego do wysłania pełnego 
segmentu TCP.  

Implementuje on również unikanie SWS na odbierającym końcu połączenia poprzez otwieranie 
okna odbierania w przyrostach wielkości co najmniej jednego segmentu TCP. 

SWS jest opisany w specyfikacji RFC 1122. 

Algorytm Nagle 

Podobnie jak w przypadku unikania SWS, zadaniem algorytmu 

Nagle

 jest obniżenie liczby 

wysyłanych bardzo małych segmentów, szczególnie przez powolne łącza stałe. Algorytm ten 
umożliwia wysyłanie naraz tylko jednego małego segmentu bez potwierdzenia. Jeżeli zostanie 
wygenerowanych więcej małych segmentów przed otrzymaniem potwierdzenia dla pierwszego z 
nich, to segmenty te zostają połączone w jeden większy segment. Segmenty naturalnej wielkości 
są zawsze transmitowane natychmiastowo, przy założeniu, że dostępne jest wystarczające okno 
odbierania. Algorytm 

Nagle

 jest szczególnie skuteczny w obniżaniu liczby pakietów wysyłanych 

przez aplikacje interaktywne, takie jak Telnet, poprzez powolne łącza. 

Aplikacje interfejsu 

Winsock

 mogą wyłączać algorytm 

Nagle

 dla swoich połączeń poprzez 

ustawienie opcji gniazda TCP_NODELAY (patrz: rozdział 16). Jednak praktyka ta zwiększa 
wykorzystanie sieci i powinno się jej unikać, chyba że jest absolutnie konieczna. Algorytmu 

Nagle

 

nie stosuje się przy połączeniach pseudosieci TCP z powodu wydajności; wyłącza się go również 
przy połączeniach NetBIOS przez TCP oraz połączeniach typu zwrotnica z hostem bezpośrednim 
— serwer. Może to poprawiać wydajność w przypadku aplikacji wydających dużą liczbę poleceń 
operowania małymi plikami (na przykład aplikacji, które często używają 
blokowania/odblokowywania plików). Algorytm 

Nagle

 opisany jest w specyfikacji RFC 896. 

Opóźnienie TIME-WAIT 

Po zamknięciu połączenia TCP para gniazd zostaje umieszczona w stanie TIME-WAIT. 
Implementuje to opóźnienie czasowe, zanim nowe połączenie będzie mogło korzystać z tego 
samego protokołu, źródłowego adresu IP, docelowego adresu IP, portu źródłowego oraz portu 
docelowego. Opóźnienie to ma na celu zagwarantowanie, że przez nowe połączenie nie zostaną 
nieoczekiwanie dostarczone żadne błędnie routowane ani opóźnione segmenty. Specyfikacja RFC 
793 określa opóźnienie jako dwa MSL-e, lub cztery minuty, co jest ustawieniem domyślnym dla 
systemu Windows 2000. Czasami jednak aplikacje sieciowe wykonujące wiele połączeń 
wychodzących w krótkim czasie, zużywają wszystkie dostępne porty. W takim przypadku może 
być wskazane obniżenie opóźnienia TIME-WAIT, aby porty mogły szybciej powracać do obiegu. 

System Windows 2000 pozwala na dokonywanie ustawień opóźnienia TIME-WAIT przy użyciu 
parametru 

Rejestru

 

TcpTimedWaitDelay

. Jeżeli jest to konieczne, to opóźnienie może być 

ustawione na wartość zaledwie 30 sekund. Ponadto liczba portów dostępnych dla użytkowników, 
które mogą pełnić rolę źródła dla połączeń wychodzących, może być konfigurowana przy użyciu 
parametru 

MaxUserPort

. Domyślnie numer portu, który ma wartość między 1024 a 5000, 

określany jest, kiedy dana aplikacja zażąda gniazda, którego mogłaby użyć do wywołania 
wychodzącego. Parametr 

MaxUserPort

 może ustawiać wartość najwyższego portu. Ustawienie 

tej wartości na (powiedzmy) 9000 z nawiązką podwoiłoby liczbę dostępnych portów. Szczegóły 
można znaleźć w specyfikacji RFC 793. 

background image

W skład dodatkowych parametrów 

Rejestru

 rządzących zachowaniem połączenia wchodzi 

MaxFreeTcbs

, który kontroluje dostępną liczbę zapamiętanych w pamięci podręcznej (albo 

wstępnie alokowanych) bloków kontrolnych transportu (TCB). TCB to struktura danych, która jest 
utrzymywana dla każdego połączenia TCP. Parametr 

MaxHashTableSize

 kontroluje szybkość 

znajdywania bloku kontrolnego TCP przez system. Wartość 

MaxHashTableSize

 (domyślnie 

512) powinna być zwiększona, jeżeli wartość 

MaxFreeTcbs

 zostanie zwiększona z wartości 

domyślnej 2 000 (Server) lub 1 000 (Professional/Workstation). 

Wskazówka: Jeżeli wartość 

MaxHashTableSize

 nie jest potęgą liczby dwa, to system 

konfiguruje tablicę mieszania na najbliższą wartość  będącą potęgą liczby dwa. Na przykład 
ustawienie o wartości 1 000 zostaje zaokrąglone do 1 024. 

Komputery o wielu podłączeniach 

Połączenia TCP do i od hosta o wielu podłączeniach wykonywane są na kilka sposobów w 
zależności od tego czy host jest lokalny, czy zdalny i od zastosowanej usługi rozpoznawania nazw. 

Połączenia do hosta o wielu podłączeniach 

Kiedy połączenia TCP wykonywane są do hosta o wielu podłączeniach, to zarówno analizator 
nazw domen (DNR), jak i klient usługi nazw internetowych systemu Windows (WINS), próbują 
ustalić, czy któreś spośród docelowych adresów IP są w tej samej podsieci, co któryś z interfejsów 
w komputerze lokalnym. Adresy lokalne umieszczane są na górze listy, aby aplikacja mogła je 
wypróbować w pierwszej kolejności. Parametr 

Rejestru TCP/IP

 

PrioritizeRecordData

 może 

być wykorzystywany, aby uniemożliwić składnikowi DNR umieszczenie adresów podsieci 
lokalnej na górze listy. 

To, w jaki sposób traktowane są odległe adresy IP, zależy od typu wykorzystywanej przestrzeni 
nazw. W przestrzeni nazw WINS, klient WINS odpowiedzialny jest za wyrównywanie obciążenia 
pomiędzy dostarczonymi adresami. Serwer WINS zawsze zwraca listę adresów w tej samej 
kolejności, a klient WINS wybiera jeden z nich losowo dla każdego połączenia. 

W przestrzeni nazw systemu nazw domen (DNS) serwer DNS jest zazwyczaj skonfigurowany tak, 
aby dostarczać adresy w sposób okrężny. DNR nie podejmuje prób dalszych randomizacji 
adresów. W niektórych sytuacjach wskazane jest połączyć się z określonym interfejsem w 
komputerze o wielu połączeniach, a najlepszym sposobem osiągnięcia tego jest zapewnienie 
interfejsowi jego własnej pozycji DNS. 

Połączenia od hosta o wielu podłączeniach 

Jeżeli połączenie od hosta o wielu połączeniach jest połączeniem 

Winsock

 korzystającym z 

przestrzeni nazw DNS, to TCP podejmuje próbę połączenia z najlepszego źródłowego adresu IP 
dostępnego, kiedy znany jest docelowy adres IP dla połączenia. Do ustalenia tego adresu 
wykorzystywana jest tablica tras. Jeżeli na komputerze lokalnym znajdującym się w tej samej 
podsieci, co docelowy adres IP, jest interfejs, to jego adres IP jest wykorzystywany w żądaniu 
połączenia jako źródłowy. Jeżeli nie ma żadnego najlepszego źródłowego adresu IP, to system 
wybiera go losowo. 

Na poziomie aplikacji dostępnych jest mało informacji dotyczących routingu dla połączeń 
opartych na usłudze NetBIOS, które korzystają ze 

Zwrotnicy

. W tym wypadku 

Zwrotnica

 

umieszcza wywołania we wszystkich transportach, które są z nią powiązane. Jeżeli na przykład na 

background image

komputerze są dwa interfejsy i jest zainstalowany jeden protokół, to dla 

Zwrotnicy

 dostępne są 

dwa transporty i wywołania są umieszczane w obu z nich. NetBT wysyła żądania połączenia stosu 
przy użyciu adresu IP z każdego z interfejsów. 

Jeżeli powiodą się oba wywołania, to 

Zwrotnica

 anuluje jedno z nich. Wybór tego, które ma zostać 

anulowane, zależy od parametru 

Rejestru

 

Zwrotnicy

 

ObeyBindingOrder

. Jeżeli jest on 

ustawiony na 0 (wartość domyślna), to preferowany jest transport główny, ustalany przez 
kolejność powiązań. W takim wypadku 

Zwrotnica

 czeka, aż transport podstawowy ulegnie 

przeterminowaniu, zanim przyjmie połączenie na transporcie pomocniczym. Jeżeli 

ObeyBindingOrder

 jest ustawiony na 1, to kolejność powiązań jest ignorowana. W takim 

wypadku 

Zwrotnica

 przyjmuje pierwsze udane połączenie i anuluje pozostałe. 

Wskazówka: Więcej informacji dotyczących parametrów 

Rejestru

 

Zwrotnicy

 dostępnych jest w 

zestawie Windows 2000 

Resource

 

Kit

Optymalizowanie przepustowości łącza 

System Windows 2000 jest zaprojektowany tak, aby zapewniać optymalną wydajność w 
większości warunków łącza. Faktyczna przepustowość łącza zależy od kilku zmiennych. 
Najważniejsze czynniki to: 

•  szybkość łącza, 
•  opóźnienie propagacji, 
•  rozmiar okna, 
•  niezawodność łącza, 
•  przeciążenie sieci i urządzeń pośrednich. 

Jeżeli uważasz, że przepustowość jest niezadowalająca, to można dokonać paru regulacji. 
Dostrajanie wydajności łącza jest złożoną operacją i jego próby powinni podejmować tylko 
doświadczeni fachowcy od tworzenia sieci. Oto niektóre kluczowe czynniki: 

•  Potok to połączenie pomiędzy dwoma gniazdami TCP. Pojemność (lub 

produkt 

opóźnienia szerokości pasma

) potoku równa jest szerokości pasma pomnożonej przez 

RTT. Jeżeli łącze jest niezawodne, to rozmiar okna powinien być większy lub równy 
pojemności potoku, aby stos wysyłający mógł je wypełnić. Pole 

Okno

 w segmencie TCP 

ma długość 16 bitów, a 65 535 bitów to, w związku z tym, największy rozmiar okna, jaki 
może być określony przez to pole. Skalowanie okna, opisane wcześniej w tym rozdziale, 
może negocjować większe okna. 

•  Przepustowość nie może nigdy przekraczać rozmiaru okna podzielonego przez RTT. 
•  Jeżeli łącze jest niepewne albo poważnie przeciążone i pakiety ulegają zagubieniu, to 

zastosowanie większego okna może, samo w sobie, nie poprawić przepustowości. W 
rzeczywistości zwiększenie rozmiaru okna może czasem obniżać wydajność w sieci 
stratnej, ponieważ prowadzi do ponownego wysyłania większych pakietów. SACK może 
poprawić wydajność w środowiskach, które doświadczają utraty danych, a znaczniki 
czasu mogą być wykorzystywane do poprawy szacowania RTT. 

background image

•  Opóźnienie propagacji uzależnione jest od zwłoki sprzętu transmisyjnego i ostatecznie, 

od prędkości światła. Opóźnienie transmisji zależy od prędkości nośnika. W przypadku 
określonej ścieżki opóźnienie propagacji jest stałe, ale opóźnienie transmisji zależy od 
rozmiaru pakietu. Przy małych prędkościach czynnikiem ograniczającym jest opóźnienie 
transmisji. Przy dużych prędkościach czynnikiem ograniczającym może być opóźnienie 
propagacji. 

Podsumowując, TCP systemu Windows 2000 przystosowuje się do większości warunków 
sieciowych i przeważnie zapewnia optymalną przepustowość i niezawodność przy każdym 
połączeniu. Próby ręcznego dostrajania przynoszą często skutki odwrotne do zamierzonych, chyba 
że doświadczony fachowiec do spraw sieci dokona najpierw starannej analizy przepływu danych. 

Programy usługowe i usługi TCP/IP 

System Windows 2000 zapewnia dwa typy programów usługowych opartych na TCP/IP: 

• 

programy usługowe komunikacyjne

 — wchodzą w interakcje i wykorzystują zasoby 

rozmaitych hostów Microsoft i nie-Microsoft (takich jak systemy Unix), 

• 

programy usługowe diagnostyczne

 — wykrywają i rozwiązują problemy pracy w sieci. 

Usługi systemu Windows 2000 zapewniają klientom zgodnym z TCP/IP usługi wydruku i 
udostępniania WWW. Ponadto system Windows 2000 zapewnia zestaw usług protokołu 

Simple

 

TCP/IP, takich jak 

Echo

 i 

Cytat dnia

. Tabele od 7.2 do 7.5 podsumowują programy usługowe i 

usługi TCP/IP. 

Uwaga: Microsoft zaleca, aby nie instalować usług protokołu Simple TCP/IP, chyba że musisz 
specjalnie zapewnić obsługę komunikacji z innymi systemami korzystającymi z tych usług. 

Tabela 7.2. Programy usługowe komunikacyjne 

Program usługowy Opis 

Ftp Przesyła dowolny rozmiar plików pomiędzy systemem Windows 2000 a 

komputerem z zainstalowanym oprogramowaniem serwera FTP. 

Lpr Przesyła zadania wydruku do zdalnych drukarek systemu UNIX 

zarządzanych przez oprogramowanie serwera wydruków demona drukarki 
wierszowej (LPD). 

Rcp 

Kopiuje pliki pomiędzy systemem Windows 2000 a komputerami z 
zainstalowanym oprogramowaniem serwera protokołu kopii zdalnej (RCP). 

Rexec 

Wykonuje zadania na komputerach zdalnych. 

Rsh 

Wykonuje polecenia na komputerze z zainstalowanym oprogramowaniem 
serwera Remote Shell (RSH). 

Telnet 

Korzysta z logowania za pomocą terminalu w celu uzyskania zdalnego 
dostępu do urządzeń sieciowych z zainstalowanym oprogramowaniem 
serwera Telnet. 

Tftp Przesyła małe pliki pomiędzy systemem Windows 2000 a komputerami z 

background image

zainstalowanym oprogramowaniem serwera protokołu transferu plików 
podstawowych (TFTP). 

Tabela 7.3. Programy usługowe diagnostyczne 

Program usługowy Opis 

Arp

 

Wyświetla i modyfikuje pamięć podręczną protokołu 

Address Resolution 

Protocol

 (ARP). Pamięć ta jest tabelą lokalną, wykorzystywaną przez system 

Windows 2000 do zamiany adresów IP na adresy kontroli dostępu do 
nośnika, używane w sieci lokalnej. 

Hostname

 

Zwraca nazwę hosta komputera lokalnego. 

Ipconfig

 

Wyświetla bieżącą konfigurację TCP/IP i może również służyć do 
wypuszczania i odnawiania konfiguracji TCP/IP przypisanych przez serwer 
DHCP. 

Lpq

 

Otrzymuje informacje o stanie kolejki wydruku z komputerów z 
zainstalowanym oprogramowaniem serwera wydruków demona drukarki 
wierszowej (LPD). 

Nbtstat

 

Wyświetla tabelę lokalnych nazw NetBIOS, tabelę nazw NetBIOS 
zarejestrowanych za pomocą aplikacji lokalnych oraz pamięć podręczną 
nazw NetBIOS, która jest lokalnym wykazem nazw NetBIOS zamienionych 
na adresy IP i zapisanych w pamięci podręcznej komputera. 

Netstat

 

Wyświetla informacje o sesji protokołu TCP/IP. 

Nslookup

 

Sprawdza rekordy, nazwy hostów domen, usługi hostów domen i informacje 
o systemie operacyjnym za pomocą zapytań serwerów DNS. 

Ping

 

Sprawdza konfiguracje i testuje połączenia IP. 

Route

 

Wyświetla lub modyfikuje lokalną tablicę tras. 

Tracert

 

Śledzi trasę pakietu w drodze do miejsca docelowego. 

PathPing

 

Śledzi trasę pakietu w drodze do miejsca docelowego i wyświetla informacje 
o ubytkach pakietów dla każdego routera na trasie. Polecenia 

Pathping

 

można także używać do rozwiązywania problemów z jakością usług (QoS) 
połączeń. 

Tabela 7.4. Usługi systemu Windows 2000 

Usługa Opis 

Usługa drukowania protokołu 
TCP/IP 

Umożliwia wysyłanie zadań wydruku z komputerów UNIX do 
komputerów wyposażonych w system Windows 2000 za 
pomocą polecenia drukowania 

Line Printer Remote

 (Lpr). 

Internetowe usługi informacyjne  Uaktywnia usługi udostępniania WWW oparte na TCP/IP. 

Usługi te, zainstalowane na serwerze IIS implementują gotowy 
serwer sieci WWW dla przedsiębiorstw z możliwością 
jednoczesnego ustanawiania nieograniczonej liczby połączeń. 

background image

Równoprawne usługi w sieci 
WWW 

Dostarczane z wersją profesjonalną systemu Windows 2000 aby 
implementować sieciowe usługi udostępniania, podobne do 
usług IIS, ale do obsługi nie więcej niż 10 połączeń 
jednocześnie. 

Tabela 7.5. Usługi protokołu 

Simple

 TCP/IP 

Protokół Opis 

Specyfikacja 
RFC 

Character Generator 
(CHARGEN) 

Wysyła zestaw 95 drukowanych znaków ASCII. 
CHARGEN jest używany jako narzędzie do testowania i 
rozwiązywania problemów z drukarkami wierszowymi. 

864 

Daytime Zwraca 

komunikaty 

z dopisanym dniem tygodnia, 

miesiącem, rokiem, bieżącym czasem (w formacie 

gg:mm:ss

) i informacji o strefie czasowej. 

Daytime

 jest 

wykorzystywany do usuwania wirusów, monitorowania 
zmian w zegarze systemowym różnych hostów, a także do 
resetowania czasu systemowego. 

867 

Discard 

Odrzuca komunikaty otrzymanych za pośrednictwem 
danego portu bez odpowiedzi lub potwierdzenia otrzymania. 

Discard

 jest wykorzystywany do implementowania portu 

zerowego do odbierania i routingu komunikatów testowych 
TCP/IP podczas instalowania i konfigurowania sieci. Może 
być używany przez niektóre programy jako narzędzie do 
odrzucania komunikatów. 

863 

Echo 

Zwraca dane pochodzące z dowolnego komunikatu 
odebranego za pomocą danego portu serwera. Może być 
przydatny jako narzędzie do usuwania wirusów i narzędzie 
monitorowania sieci. 

862 

Cytat dnia (QUOTE)  Zwraca cytat w formie jednego lub kilku wierszy tekstu 

komunikatu. Cytaty są wybierane losowo z 

%systemroot%\System32\Drivers\Etc\Quotes

865 

Rozwiązania natychmiastowe 

Przechwytywanie ruchu TCP 

Większość komunikacji sieciowej systemu Windows 2000 generuje ruch TCP. W tym przypadku 
ruch dostępu do witryn FTP i HTTP pomiędzy klientem systemu Windows 2000 a usługą IIS 
przechwytuje się przy użyciu 

Monitora sieci

 w IIS. Aby ograniczyć rozmiar przechwytywania, 

ustawia się filtr przechwytywania tak, aby przechwytywany był tylko ruch do i od wybranego 
komputera klineckiego. Procedura ta zakłada, że w IIS uruchomione są zarówno witryny HTTP, 

background image

jak i FTP. Przechwycenia otrzymane w ten sposób powinny przypominać pliki przechwytywania 

ftp.cap

 oraz 

http.cap

 na CD-ROM-ie. 

Aby przechwytywać ruch TCP, podejmij następujące działania: 

1. Zaloguj 

się na serwerze IIS jako administrator. 

2. Zaloguj 

się na drugim komputerze w domenie przy użyciu dowolnego konta domeny, 

które ma zezwolenie na dostęp do witryn FTP oraz HTTP na serwerze IIS. 

3.  Na serwerze IIS wejdź do 

Start|Programy|Narzędzia administracyjne

 i wybierz 

Monitor 

sieci

4.  W menu rozwijanym 

Monitora sieci Przechwytywanie

 wybierz 

Filtr

5.  W oknie dialogowym 

Filtr przechwytywania

 kliknij 

Edytuj adresy

6.  W oknie dialogowym 

Baza danych adresów

 kliknij 

Dodaj

7. Pojawi 

się okno dialogowe 

Informacje adresowe

. Z listy rozwijanej 

Typ

 wybierz IP i 

wpisz nazwę i adres IP drugiego komputera w twojej domenie, na którym się 
zalogowałeś. Kliknij 

OK

8. Zamknij 

okno 

Baza danych adresów

9.  W oknie dialogowym 

Wyrażenie adresowe

 wybierz serwer IIS jako 

Stacja 1

, a drugi 

komputer jako 

Stacja 2

. W polu 

Kierunek

 wybierz dwukierunkowy 

(<-->)

. Kliknij 

OK

10. Kliknij 

OK

, aby zamknąć okno dialogowe 

Filtr przechwytywania

11.  W menu rozwijanym 

Monitora sieci Przechwytywanie

 wybierz 

Rozpocznij

12.  Na drugim komputerze (nie-IIS) otwórz przeglądarkę i wpisz 

ftp://nazwa serwera

gdzie 

nazwa serwera

 jest nazwą serwera IIS. 

13.  W menu rozwijanym 

Monitora sieci Przechwytywanie

 (na serwerze IIS) wybierz 

Zatrzymaj i wyświetl

. Przeglądnij przechwycone ramki i zapisz przechwycenie (na 

przykład jako 

ftp.cap

). 

14.  W menu rozwijanym 

Monitora sieci Przechwytywanie

 wybierz 

Rozpocznij

15.  Na drugim komputerze (nie-IIS) wpisz w przeglądarce 

http://nazwa serwera

, gdzie 

nazwa serwera

 jest nazwą serwera IIS. 

16. Zamknij przeglądarkę. 

17.  W menu rozwijanym 

Monitora sieci Przechwytywanie

 (na serwerze IIS) wybierz 

Zatrzymaj i wyświetl

. Przeglądnij przechwycone ramki i zapisz przechwycenie (na 

przykład jako 

htttp.cap

). 

18. Wyjdź z 

Monitora sieci

Odnośne rozwiązanie: 

    Strona: 

Implementowanie Filtra przechwytywania   

 

 

background image

Konfigurowanie protokołu TCP systemu Windows 
2000 

Procedury zawarte w tej części opisują, jak należy konfigurować protokół TCP systemu Windows 
2000. Zakładają one, że wiesz, które wartości domyślne chcesz zmienić i że rozpracowałeś 
prawdopodobne konsekwencje takich zmian. TCP systemu Windows zapewnia optymalną 
konfigurację w większości środowisk, więc zmiany należy przeprowadzać ostrożnie. Poza tym 
procedury te wymagają zmieniania (

przerabiania

Rejestru

. Powinno się to robić bardzo ostrożnie. 

Nieostrożne przeróbki 

Rejestru

 mogą poważnie uszkodzić twój system operacyjny. Zawsze 

zapisuj klucz podrzędny (przy użyciu polecenia 

Zapisz klucz

 w menu rozwijanym 

Rejestr

) zanim 

go zmienisz. 

Program 

Edytor Rejestru

regedt32.exe

, można znaleźć w folderze 

%systemroot%\System32

. Dla 

wygody możesz zechcieć utworzyć skrót na swoim pulpicie, albo w menu 

Narzędzia 

administracyjne

. Jeżeli to zrobisz, uważaj szczególnie aby nie umożliwiać innym użytkownikom 

dostępu do swojego komputera kiedy zalogowane jest twoje konto. 

Edytor Rejestru

 nie jest 

narzędziem, które można pozostawić w rękach niedoświadczonego użytkownika. 

Ustawianie rozmiaru okna odbierania protokołu TCP 

Procedura ta ustawia rozmiar okna odbierania protokołu TCP dla określonego interfejsu. 
Procedura ustawiania rozmiaru okna dla wszystkich interfejsów jest podobna, z tym że jest 
implementowana w kluczu podrzędnym 

/Tcpip/Parameters/

, a nie w kluczu podrzędnym 

/Tcpip/Parameters/Interfaces/interface

Aby ustawić rozmiar okna odbierania, wykonaj następujące czynności: 

1. Uruchom 

Edytor Rejestru

2. Rozwiń: 

HKEY_LOCAL_MACHINE 

      \SYSTEM 

           \CurrentControlSet 

                  \Services 

                            \Tcpip 

                                  \Parameters 

                                            \Interfaces 

3.  Kliknij interfejs, dla którego chcesz określić rozmiar okna odbierania. 

4. Wybierz 

Dodaj wartość

 w menu rozwijanym 

Edycja

5. Określ 

TcpWindowSize

 jako typ danych REG_DWORD, jak na rysunku 8.3. 

6. Kliknij 

OK

. Wpisz wartość albo szesnastkową, albo dziesiętną w oknie dialogowym 

Edytor DWORD

. Maksymalna dopuszczalna wartość to 3FFFFFFF (szesnastkowa), lub 

1 073 741 823 (dziesiątkowa). 

7. Kliknij 

OK

. Zamknij 

Edytor Rejestru

background image

 

 

Rysunek 7.3. Określanie typu danych 

TcpWindowSize

 

Włączanie opcji skali okna i znaczników czasu 

Opcję skali okna oraz zastosowanie znaczników czasu włącza się dla wszystkich interfejsów, a nie 
dla pojedynczego interfejsu. Jednakże skalowanie okna nie zacznie działać na żadnym interfejsie, 
na którym rozmiar okna odbierania ma wartość FFFF (szesnastkową), lub mniejszą. W celu 
ustawienia rozmiaru okna odbierania odwołaj się do poprzedniej procedury. 

Aby włączyć opcję skalowania okna oraz zastosowanie znaczników czasu, wykonaj następujące 
kroki: 

1. Uruchom 

Edytor Rejestru

2. Rozwiń: 

HKEY_LOCAL_MACHINE 

               \SYSTEM 

                     \CurrentControlSet 

                                  \Services 

                                           \Tcpip 

3. Kliknij 

Parametry

4. Wybierz 

Dodaj wartość

 w menu rozwijanym 

Edycja

5. Określ 

Tcp1323Opts

 jako typ danych REG_WORD. 

6. Kliknij 

OK

. Wpisz wartość od 

1

 do 

3

, w zależności od tego co chcesz włączyć: 

•  wartość równa 

1

 włącza tylko skalowanie okna; 

•  wartość równa 

2

 włącza tylko znaczniki czasu; 

•  wartość równa 

3

 włącza zarówno skalowanie okna, jak i znaczniki czasu. 

7. Kliknij 

OK

. Zamknij 

Edytor Rejestru

Wskazówka: W toku tej i poprzedniej procedury zostały określone pełne  ścieżki do kluczy 
podrzędnych 

Rejestru

 interfejsu 

Tcpip/Parameters

 oraz 

Tcpip/Parameters/Interfaces/

Pozostałe procedury w tej części korzystają z jednego lub drugiego z tych kluczy i wydaje się 
bezcelowym określanie pełnej  ścieżki dla każdego z nich. Dlatego też w toku kolejnych 
procedur pełne ścieżki będą skracane do 

Tcpip/Parameters

 oraz 

Tcpip/Parameters/Interfaces

Ustawianie czasomierza potwierdzenia opóźnionego 

Czasomierz ACK opóźnionego ustawiony jest domyślnie na wartość 2 (200 milisekund). Aby 
zmienić tę wartość przeterminowania dla danego interfejsu, wykonaj następujące czynności: 

1. Uruchom 

Edytor Rejestru

 i rozwiń klucz podrzędny 

Tcpip/Parameters/Interfaces

background image

2.  Kliknij interfejs, na którym chcesz zmienić czasomierz ACK opóźnionego. 

3. Wybierz 

Dodaj wartość

 w menu rozwijanym 

Edycja

4. Określ 

TcpDelAckTicks

 jako typ danych REG_DWORD. 

5. Kliknij 

OK

. Wpisz wartość od 

0

 do 

6

. Określa to liczbę 100-milisekundowych 

interwałów przed przeterminowaniem czasomierza. Wartość równa 

0

 wyłącza 

potwierdzenia opóźnione, co sprawia, że komputer natychmiastowo potwierdza każdy 
pakiet, który otrzyma. 

6. Kliknij 

OK

 i zamknij 

Edytor Rejestru

Wyłączanie potwierdzenia selektywnego 

Jeżeli twoja sieć nigdy nie wykorzystuje dużych rozmiarów okien, to możesz zechcieć wyłączyć 
SACK. Jest to nietypowe i zazwyczaj niewskazane. Jednak procedura wyłączania SACK wygląda 
następująco: 

1. Uruchom 

Edytor Rejestru

 i kliknij klucz podrzędny 

Tcpip/Parameters

2. Wybierz 

Dodaj wartość

 z menu rozwijanego 

Edycja

3. Określ 

SackOpts

 jako typ danych REG_DWORD. 

4. Kliknij 

OK

. Wpisz wartość równą 

0

, aby wyłączyć SACK. 

5. Kliknij 

OK

 i zamknij 

Edytor Rejestru

Włączanie odkrywania routera czarnej dziury 

Router czarnej dziury odrzuca pakiet, który ma zbyt duży rozmiar okna i który ma ustawiony 
znacznik DF, ale nie wysyła komunikatu protokołu ICMP „Miejsce docelowe niedostępne”. 
Mechanizm odkrywania PMTU można ustawić na wykrywanie takich routerów w następujący 
sposób: 

1. Uruchom 

Edytor Rejestru

 i kliknij klucz podrzędny 

Tcpip/Parameters

2. Wybierz 

Dodaj wartość

 z menu rozwijanego 

Edycja

3. Określ 

EnablePMTUBHDetect

 jako typ danych REG_DWORD. 

4. Kliknij 

OK

. Wpisz wartość 

1

, aby włączyć wykrywanie routerów czarnej dziury. 

5. Kliknij 

OK

 i zamknij 

Edytor Rejestru

Wyłączanie odkrywania maksymalnej jednostki transmisyjnej ścieżki 
(PMTU) 

Możliwe jest całkowite wyłączenie odkrywania PMTU. Jest to nietypowe i normalnie 
niewskazane, ale możesz zechcieć to zrobić, jeżeli nigdy nie wysyłasz dużych segmentów lub 
kiedy wysyłasz segmenty poprzez znajome sieci, gdzie znane są rozmiary MTU. Kiedy 
odkrywanie PMTU jest wyłączone, to dla wszystkich adresów miejsc docelowych zdalnych 
wykorzystywane jest MSS równe 536 bajtom. Aby wyłączyć odkrywanie PMTU, wykonaj 
następujące czynności: 

background image

1. Uruchom 

Edytor Rejestru

 i kliknij klucz podrzędny 

Tcpip/Parameters

2. Wybierz 

Dodaj wartość 

z menu rozwijanego 

Edycja

3. Określ 

EnablePMTUBHDiscovery

 jako typ danych REG_DWORD. 

4. Kliknij 

OK

. Wpisz wartość 

0

 (zero), aby wyłączyć odkrywanie PMTU. 

5. Kliknij 

OK

 i zamknij 

Edytor Rejestru

Konfigurowanie zachowań retransmisji protokołu TCP 

Jak opisano w części 

Dogłębnie

 niniejszego rozdziału, zachowania retransmisji protokołu TCP 

można konfigurować i dostrajać przy użyciu czterech parametrów 

Rejestru

• 

TcpInitialRTT

, 

• 

TcpMaxConnectRetransmissions

, 

• 

TcpMaxDataRetransmissions

, 

• 

TcpMaxDupAcs

Parametr 

TcpMaxDataRetransmissions

 konfiguruje także wykrywanie martwej bramy. 

Wszystkie te parametry mają typ danych REG_WORD i trzeba je dodawać do 

Rejestru

 przy 

użyciu polecenia 

Dodaj wartość

 w menu rozwijanym 

Edycja

TCPInitialRTT

 określane jest 

osobno dla każdego z interfejsów, a trzy pozostałe parametry określane są w kluczu podrzędnym 
Tcpip/Parameters. Mając informacje z tabeli 7.6, możesz dodawać i konfigurować parametry przy 
użyciu technik opisanych w poprzednich procedurach. 

Uwaga! Parametr 

TcpInitialRTT

 stosuje się wykładniczo i bardzo mała zmiana może mieć 

niekorzystny wpływ na wydajność (patrz: dodatek A). Nie zaleca się ustawienia większego niż 
3. 

Konfigurowanie pakietów keep-alive protokołu TCP oraz opóźnienia 
TIME-WAIT 

Jak opisano w części 

Dogłębnie

 niniejszego rozdziału, pakiety 

keep-alive

 można konfigurować i 

dostrajać przy użyciu dwóch parametrów 

Rejestru

• 

KeepAliveTime

• 

KeepAliveInterval

Oba te parametry mają typ danych REG_WORD i określają wartości w milisekundach. 

Opóźnienie TIME-WAIT można konfigurować przy użyciu czterech parametrów 

Rejestru

• 

TcpTimedWaitDelay

• 

MaxUserPort

• 

MaxFreeTcbs

• 

MaxHashTableSize

background image

Wszystkie te parametry mają typ danych REG_DWORD. 

TcpTimedWaitDelay

 określa wartość 

w sekundach, a pozostałe trzy parametry określają numery. 

Tabela 7.6. Parametry retransmisji protokołu TCP 

Parametr Zakres 

Wartość domyślna 

TcpInitialRTT

 

0 do FFFF 

TcpMaxConnectRetransmissions

 

0 do 255 (dziesiętne) 3 

TcpMaxDataRetransmissions

 

0 do FFFFFFFF 

TcpMaxDupAcks

 

1 do 3 

Wszystkie parametry 

keep-alive

 i TIME-WAIT dodaje się do klucza podrzędnego 

Rejestru

 

Tcpip/Parameters

 przy użyciu polecenia 

Dodaj

 wartość z menu rozwijanego 

Edycja

. Mając 

informacje z tabeli 7.7, możesz dodawać oraz konfigurować parametry korzystając z technik 
opisanych w poprzednich procedurach. 

Wskazówka: 

MaxHashTableSize

 powinien być potęgą liczby dwa. Odwołaj się do dodatku A. 

Tabela 7.7. Parametry TCP 

keep-alive

 i TIME-WAIT 

Parametr Zakres 

Wartość domyślna 

KeepAliveTime 

0 do FFFFFFFF 

7 200 000 (dziesiętne) 

KeepAliveInterval 

0 do FFFFFFFF 

1 000 (dziesiętne) 

TcpTimedWaitDelay 

30 do 300 (dziesiętne) 240 

(dziesiętne) 

MaxUserPort 

5 000 do 65 534 (dziesiętne) 

5 000 (dziesiętne) 

MaxFreeTcbs 

0 do FFFFFFFF 

Server — 2 000 (dziesiętne) 
Professional — 1 000 (dziesiętne) 

MaxHashTableSize 

64 do 65 536 (dziesiętne) 512 

(dziesiętne) 

Ręczne odkrywanie PMTU 

PMTU można odkryć przy użyciu polecenia 

ping

. Procedura ta jest prosta, lecz nieco nużąca. 

Zakłada ona, że możesz przeprowadzić 

ping

 hosta w sieci i chcesz odkryć PMTU do tej sieci. 

Składnia polecenia 

ping

, której możesz użyć, to: 

ping –f –n <liczba ping’ów[PO15]> -1 <rozmiar> <docelowy adres IP> 

Przełącznik 

–f

 ustawia znacznik DF. Parametr 

rozmiar

 określa rozmiar bufora danych, który 

wysyła 

ping

, z wyłączeniem nagłówków. Nagłówek ICMP ma rozmiar 8 bajtów, a nagłówek IP 

zazwyczaj 20 bajtów. Technika ta to przeprowadzić ping, określając maksymalny rozmiar danych, 
o jakim wiesz, że może być transmitowany do hosta zdalnego, ustalony według przechwyceń 

Monitora sieci

 i zwiększać tę wartość w kolejnych 

ping’ach[PO16]

 do momentu, kiedy 

polecenie nie powiedzie się, zwracając stosowny komunikat. 

background image

Wskazówka: MSS, negocjowany podczas ustanawiania połączenia, stanowi dobry wskaźnik 
wartości początkowej, która ma być używana w parametrze rozmiaru. 

Przypuśćmy na przykład, że wiesz, iż możesz przeprowadzić 

ping

 hosta zdalnego 142.24.234.66 

przy użyciu 1600 bajtów danych. 

E:\>ping –f –n 1 –l 1600 142.24.234.66 

Badanie 142.24.234.66 z użyciem 1600 bajtów danych: 

Odpowiedź od 142.24.234.66: bajtów=1600 czas<10ms TTL=128 

Statystyka badania dla 142.24.234.66: 

    Pakiety: Wysłane = 1, Odebrane = 1, Utracone = 0 (0% utraconych), 

Szacunkowy czas błądzenia pakietów w milisekundach: 

    Minimum = 0ms, Maksimum = 0ms, Średnia = 0ms 

Kontynuujesz 

ping

 tego samego hosta, zwiększając wartość parametru 

rozmiar

 do momentu 

kiedy 

ping

 się nie powiedzie. 

E:\>ping –f –n 1 –l 1640 142.24.234.66 

Badanie 142.24.234.66 z użyciem 1600 bajtów danych: 

Pakiet musi zostać sfragmentowany, ale DF ustawione. 

Statystyka badania dla 142.24.234.66: 

    Pakiety: Wysłane = 1, Odebrane = 0, Utracone = 1 (100% utraconych), 

Szacunkowy czas błądzenia pakietów w milisekundach: 

    Minimum = 0ms, Maksimum = 0ms, Średnia = 0ms 

W tym przykładzie MTU do określonego hosta (albo PMTU dla ścieżki do tego hosta) wynosi 
1640 plus 28, lub 1 668 bajtów. Gdyby na ścieżce znajdował się router czarnej dziury, to 

ping

 

uległby przeterminowaniu, ale nie zostałby zwrócony żaden komunikat o błędzie. 

Instalowanie usług protokołu Simple TCP/IP 

Jeżeli musisz komunikować się z komputerami mającymi zainstalowane usługi protokołu 

Simple

 

TCP/IP, lub jeśli masz inne powody, aby je instalować, to procedura służąca temu jest 
następująca: 

1. Zaloguj 

się jako administrator. 

2. W 

Start|Ustawienia|Panel sterowania

 otwórz 

Dodaj/Usuń programy

3.  W oknie dialogowym 

Dodaj/Usuń programy

 wybierz 

Dodaj/Usuń składniki systemu 

Windows

4.  W Kreatorze składników systemu Windows wybierz 

Usługi sieciowe

, a następnie kliknij 

Szczegóły

5. Wybierz 

Usługi Simple TCP/IP

, a następnie kliknij 

OK

6. Kliknij 

Dalej

background image

7. Jeżeli zostaniesz o to poproszony, włóż swój CD-ROM instalacyjny, lub wpisz ścieżkę do 

miejsca, w którym znajdują się pliki dystrybucyjne systemu Windows 2000, a następnie 
kliknij 

OK

8. Kliknij 

Zakończ