Protokol TCP IP R07 5 id 834123 Nieznany

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

A

Host

B

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

3

TcpMaxConnectRetransmissions

0 do 255 (dziesiętne) 3

TcpMaxDataRetransmissions

0 do FFFFFFFF

5

TcpMaxDupAcks

1 do 3

2

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

.


Wyszukiwarka

Podobne podstrony:
Protokol TCP IP R08 5 id 834124 Nieznany
Protokol TCP IP R04 5 id 834122 Nieznany
Protokol TCP IP R08 5 id 834124 Nieznany
Protokół TCP IP, R03 5
Protokół TCP IP, R12 5
Protokół TCP IP, R11 5
Bezpieczeństwo protokołów TCP IP oraz IPSec
Protokół TCP IP, R13 5
Protokół TCP IP, R09 5
Protokół TCP IP nagłówki
SIECI KOMPUTEROWE Stos protokołów TCP IP
Bezpieczeństwo protokołów TCP IP oraz IPSec (2)
Protokół TCP IP Protokóły internet-u, edukacja i nauka, Informatyka
Wykład13 Sieć teleinformatyczna z protokołem TCP IP
Protokół TCP IP
protokół tcp ip P5XCBJNJZYVPWLAHE2LUZNY6WE75MVPFAUP3ENY
Protokół TCP IP

więcej podobnych podstron