Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano funkcje protokołu TCP w systemie Windows.
Oryginalny numer KB: 224829
Podsumowanie
W tym artykule opisano następujące funkcje PROTOKOŁU TCP w systemie Windows:
- Rozmiar okna TCP
- Obsługiwane opcje PROTOKOŁU TCP
- Skalowanie systemu Windows — RFC 1323
- Sygnatura czasowa — RFC 1323
- Ochrona przed zawiniętymi numerami sekwencji (PAWS)
- Potwierdzenia selektywne (SACKS) — RFC 2018
- Zachowanie retransmisji protokołu TCP i szybkie ponowne przesłanie
Funkcje TCP można zmienić, zmieniając wpisy w rejestrze.
Ważne
W poniższych sekcjach, metodach lub zadaniach znajdują się kroki, które informują o sposobie modyfikowania rejestru. Nieprawidłowe modyfikacje rejestru mogą jednak spowodować poważne problemy. Dlatego należy uważnie wykonać poniższe kroki. Aby zapewnić dodatkową ochronę, utwórz kopię zapasową rejestru przed przystąpieniem do jego modyfikacji. Dzięki temu będzie można przywrócić rejestr w przypadku wystąpienia problemu. Aby uzyskać więcej informacji dotyczących wykonywania kopii zapasowej i przywracania rejestru, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
322756 Jak wykonać kopię zapasową rejestru i przywrócić go w systemie Windows
Rozmiar okna TCP
Rozmiar okna odbierania TCP to ilość danych odbierania (w bajtach), które mogą być buforowane podczas połączenia. Host wysyłający może wysyłać tylko tę ilość danych, zanim będzie musiał czekać na potwierdzenie i aktualizację okna od odbierającego hosta. Stos TCP/IP systemu Windows został zaprojektowany tak, aby samodzielnie dostroić się w większości środowisk i używa większych domyślnych rozmiarów okien niż wcześniejsze wersje.
Zamiast używać zakodowanego domyślnego rozmiaru okna odbierania, protokół TCP dostosowuje się do nawet przyrostów maksymalnego rozmiaru segmentu (MSS). Usługa MSS jest negocjowana podczas konfigurowania połączenia. Dostosowanie okna odbierania do nawet przyrostów msS zwiększa procent pełnowymiarowych segmentów TCP używanych podczas transmisji zbiorczych danych.
Rozmiar okna odbierania jest określany w następujący sposób:
- Pierwsze żądanie połączenia wysłane do hosta zdalnego anonsuje rozmiar okna odbierania o rozmiarze 16K (16 384 bajtów).
- Po nawiązaniu połączenia rozmiar okna odbierania jest zaokrąglany do równomiernego przyrostu usługi MSS.
- Rozmiar okna jest dostosowywany do czterech razy MSS, do maksymalnego rozmiaru 64 K, chyba że jest używana opcja skalowania okien (RFC 1323).
Uwaga 16.
Zobacz sekcję "Skalowanie systemu Windows".
W przypadku połączeń Ethernet rozmiar okna będzie zwykle ustawiony na 17 520 bajtów (16K zaokrąglone do dwunastu segmentów 1460 bajtów). Rozmiar okna może zmniejszyć się, gdy połączenie zostanie nawiązane z komputerem obsługującym rozszerzone opcje nagłówka TCP, takie jak selektywne potwierdzenia (SACKS) i znaczniki czasu. Te dwie opcje zwiększają rozmiar nagłówka TCP do ponad 20 bajtów, co powoduje mniej miejsca na dane.
W poprzednich wersjach systemu Windows NT rozmiar okna połączenia Ethernet wynosił 8760 bajtów lub sześć segmentów 1460 bajtów.
Aby ustawić rozmiar okna odbierania na określoną wartość, dodaj wartość TcpWindowSize do podklucza rejestru specyficznego dla używanej wersji systemu Windows. W tym celu wykonaj następujące kroki:
Wybierz pozycję Uruchom,> wpisz
Regedit
, a następnie wybierz przycisk OK.Rozwiń podklucz rejestru specyficzny dla używanej wersji systemu Windows:
W przypadku systemu Windows 2000 rozwiń następujący podklucz:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
W systemie Windows Server 2003 rozwiń następujący podklucz:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
W menu Edycja wskaż polecenie Nowy, a następnie wybierz pozycję Wartość DWORD.
Wpisz
TcpWindowSize
w polu Nowa wartość , a następnie naciśnij EnterWybierz pozycję Modyfikuj w menu Edycja .
Wpisz żądany rozmiar okna w polu Dane wartości .
Uwaga 16.
Prawidłowy zakres rozmiaru okna to 0-0x3FFFC000 szesnastkowy.
Ta wartość nie jest domyślnie obecna. Po dodaniu wartości TcpWindowSize zastępuje on domyślny algorytm rozmiaru okna omówiony powyżej.
Uwaga 16.
TcpWindowSize można również dodać do klucza Parameters, aby ustawić rozmiar okna globalnie dla wszystkich interfejsów.
Obsługiwane opcje PROTOKOŁU TCP
Wcześniej opcje TCP były używane głównie do negocjowania maksymalnych rozmiarów segmentów. W systemie Windows opcje TCP są używane do skalowania okien, sygnatury czasowej i selektywnego ACK.
Istnieją dwa typy opcji TCP:
- Pojedyncza opcja oktetu TCP, która służy do wskazywania określonego rodzaju opcji.
- Opcja TCP z wieloma oktetami, która składa się z rodzaju opcji, długości opcji i serii oktetów opcji.
Na poniższej liście przedstawiono każdy rodzaj opcji TCP, długość, nazwę i opis.
Rodzaj: 0
Długość:1
Opcja: koniec listy opcji
Opis: Używane podczas dopełniania jest wymagane dla ostatniej opcji TCP.
Rodzaj: 1
Długość:1
Opcja: Brak operacji
Opis: Używane podczas dopełniania jest potrzebne, a więcej opcji TCP następuje w ramach tego samego pakietu.
Rodzaj: 2
Długość:4
Opcja: maksymalny rozmiar segmentu
Opis: wskazuje maksymalny rozmiar segmentu TCP, który można wysłać w sieci.
Rodzaj: 3
Długość: 3
Opcja: opcja skalowania okien
Opis: określa współczynnik skalowania, który ma być używany podczas korzystania z rozmiarów okien większych niż 64k.
Rodzaj: 8
Długość: 10
Opcja: Opcja sygnatury czasowej
Opis: służy do obliczania czasu rundy (RTT) pakietów przesyłanych.
Rodzaj: 4
Długość:2
Opcja: dozwolony zestaw TCP SACK
Opis: informuje inne hosty, że dozwolone są selektywne Acks.
Rodzaj: 5
Długość: różni się
Opcja: OPCJA TCP SACK
Opis: używany przez hosty do identyfikowania, czy odebrano pakiety poza kolejnością.
Skalowanie systemu Windows
W celu bardziej wydajnego korzystania z sieci o wysokiej przepustowości można użyć większego rozmiaru okna TCP. Pole Rozmiar okna TCP kontroluje przepływ danych i jest ograniczony do 2 bajtów lub rozmiar okna o rozmiarze 65 535 bajtów.
Ponieważ nie można rozszerzyć pola rozmiaru, używany jest współczynnik skalowania. Skala okien TCP to opcja służąca do zwiększenia maksymalnego rozmiaru okna z 65 535 bajtów do 1 Gigabajta.
Opcja skalowania okien jest używana tylko podczas trójkierunkowego uzgadniania PROTOKOŁU TCP. Wartość skalowania okien reprezentuje liczbę bitów do lewego przesunięcia pola rozmiaru okna 16-bitowego. Wartość skalowania okien można ustawić z zakresu od 0 (bez przesunięcia) na 14.
Aby obliczyć rzeczywisty rozmiar okna, pomnóż rozmiar okna przez 2^S, gdzie S jest wartością skalowania.
Na przykład:
Jeśli rozmiar okna wynosi 65 535 bajtów ze współczynnikiem skali okna 3.
Prawdziwy rozmiar okna = 65535*2^3
Prawdziwy rozmiar okna = 524280
Poniższy ślad monitora sieci pokazuje sposób użycia opcji skalowania okien:
TCP: ....S., len:0, seq:725163-725163, ack:0, win:65535, src:1217 dst:139(NBT Session)
TCP: Source Port = 0x04C1
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 725163 (0xB10AB)
TCP: Acknowledgement Number = 0 (0x0)
TCP: Data Offset = 44 (0x2C)
TCP: Reserved = 0 (0x0000)
+ TCP: Flags = 0x02 : ....S.
TCP: Window = 65535 (0xFFFF)
TCP: Checksum = 0x8565
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
+ TCP: Maximum Segment Size Option
TCP: Option Nop = 1 (0x1)
TCP: Window Scale Option
TCP: Option Type = Window Scale
TCP: Option Length = 3 (0x3)
TCP: Window Scale = 3 (0x3)
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: Timestamps Option
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: SACK Permitted Option
Rozmiar okna używany w rzeczywistym uzgadnianiu trzykierunkowym nie jest rozmiarem okna skalowanym zgodnie z sekcją RFC 1323 2.2:
"Pole Okno w syn (na przykład [SYN] lub [SYN,ACK]) segmentu nigdy nie jest skalowane."
Oznacza to, że pierwszy pakiet danych wysłany po uścisku trzykierunkowym jest rzeczywistym rozmiarem okna. Jeśli istnieje współczynnik skalowania, początkowy rozmiar okna o rozmiarze 65 535 bajtów jest zawsze używany. Rozmiar okna jest następnie mnożony przez współczynnik skalowania zidentyfikowany w trójkierunkowym uścisku dłoni. W poniższej tabeli przedstawiono granice współczynnika skalowania dla różnych rozmiarów okien.
Współczynnik skali | Skalowanie wartości | Okno początkowe | Skalowanie okien |
---|---|---|---|
0 | 1 | 65535 lub mniej | 65535 lub mniej |
1 | 2 | 65535 | 131,070 |
2 | 4 | 65535 | 262,140 |
3 | 8 | 65535 | 524,280 |
100 | 16 | 65535 | 1,048,560 |
5 | 32 | 65535 | 2,097,120 |
6 | 64 | 65535 | 4,194,240 |
7 | 128 | 65535 | 8,388,480 |
8 | 256 | 65535 | 16,776,960 |
9 | 512 | 65535 | 33,553,920 |
10 | 1024 | 65535 | 67,107,840 |
11 | 2048 | 65535 | 134,215,680 |
12 | 4096 | 65535 | 268,431,360 |
13 | 8192 | 65535 | 536,862,720 |
14 | 16384 | 65535 | 1,073,725,440 |
Na przykład:
Jeśli rozmiar okna w rejestrze zostanie wprowadzony jako 26900000000 (269M) w przecinku, współczynnik skalowania podczas trójkierunkowego uzgadniania wynosi 13. Współczynnik skalowania 12 umożliwia tylko rozmiar okna do 268 431 360 bajtów (268 M).
Początkowy rozmiar okna w tym przykładzie zostanie obliczony w następujący sposób:
65 535 bajtów ze współczynnikiem skali okna 13.
Prawdziwy rozmiar okna = 65535*2^13
Prawdziwy rozmiar okna = 536 862 720
Gdy wartość rozmiaru okna zostanie dodana do rejestru, a jego rozmiar jest większy niż wartość domyślna, system Windows próbuje użyć wartości skalowania, która uwzględnia nowy rozmiar okna.
Wartość Tcp1323Opts w następującym kluczu rejestru można dodać do sterowania oknami skalowania i znacznikami czasu:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Na pasku narzędzi wybierz pozycję Uruchom,> a następnie wpisz
Regedit
polecenie , aby uruchomić Edytor rejestru.W Edytorze rejestru wybierz pozycję Edytuj, wskaż pozycję Nowy, a następnie wybierz pozycję Wartość DWORD.
W polu Nowa wartość wpisz
Tcp1323Opts
, naciśnij ENTER, a następnie w menu Edycja wybierz pozycję Modyfikuj.Uwaga 16.
Prawidłowy zakres to 0, 1, 2 lub 3, gdzie:
0 (wyłącz opcje RFC 1323)
1 (tylko skalowanie okien)
2 (włączone tylko znaczniki czasu)
3 (obie opcje są włączone)
Ten wpis rejestru steruje znacznikami czasu RFC 1323 i opcjami skalowania okien. Znaczniki czasu i skalowanie okien są domyślnie włączone, ale można nimi manipulować za pomocą bitów flagi. Bit 0 steruje skalowaniem okien. Bit 1 steruje znacznikami czasu.
Znaczniki czasu
Wcześniej stos TCP/IP używał jednego przykładu na okno danych wysyłanych w celu obliczenia czasu rundy (RTT). Czasomierz (czasomierz retransmit) został ustawiony podczas wysyłania pakietu do momentu odebrania potwierdzenia. Jeśli na przykład rozmiar okna wynosił 64 240 bajtów (44 pełne segmenty) w sieci Ethernet, do ponownego obliczenia czasu rundy użyto tylko jednego z 44 pakietów. Przy maksymalnym rozmiarze okna wynoszącym 65 535 bajtów ta częstotliwość próbkowania była wystarczająca. Przy użyciu skalowania okien i maksymalnego rozmiaru okna 1 Gigabajta ta częstotliwość próbkowania RTT nie jest wystarczająca.
Opcja znacznika czasu TCP może być teraz używana w segmentach (danych i usłudze ACK) uznawanych za odpowiednie przez stos do wykonywania operacji, takich jak:
- Obliczenia RTT
- Sprawdzanie ŁAP
Korzystając z tych danych, RTT można dokładnie obliczyć z dużymi rozmiarami okien. RTT służy do obliczania interwałów retransmisji. Dokładne limity czasu RTT i retransmisji są potrzebne w celu uzyskania optymalnej przepływności.
Gdy sygnatura czasowa TCP jest używana w sesji TCP, inicjator sesji wysyła opcję w swoim pierwszym pakiecie trójkierunkowego uzgadniania TCP (pakiet SYN). Każda ze stron może następnie użyć opcji TCP podczas sesji.
Opcja sygnatur czasowych TCP (TSopt):
Rodzaj = 8 | Długość = 10 | Wartość TS (Tsval) | Odpowiedź echo TS (Tsecr) |
---|---|---|---|
1 bajt | 1 bajt | 4 bajty | 4 bajty |
Pole opcji znacznika czasu można wyświetlić w śledzeniu monitora sieciowego, rozwijając pole Opcji PROTOKOŁU TCP, jak pokazano poniżej:
TCP: Timestamps Option
TCP: Option Type = Timestamps
TCP: Option Length = 10 (0xA)
TCP: Timestamp = 2525186 (0x268802)
TCP: Reply Timestamp = 1823192 (0x1BD1D8)
Ochrona przed zawiniętymi numerami sekwencji (PAWS)
Pole numer sekwencji TCP jest ograniczone do 32 bitów, co ogranicza liczbę dostępnych numerów sekwencji. W przypadku sieci o dużej pojemności i dużego transferu danych można opakowować numery sekwencji przed przejściem pakietu przez sieć. W przypadku wysyłania danych w jednej sieci Giga-byte na sekundę (Gb/s) liczby sekwencji mogą być zawijane w ciągu zaledwie 34 sekund. Jeśli pakiet jest opóźniony, inny pakiet może potencjalnie istnieć z tym samym numerem sekwencji. Aby uniknąć pomyłek zduplikowanych numerów sekwencji, znacznik czasu TCP jest używany jako rozszerzenie do numeru sekwencji. Pakiety mają bieżące i postępowe sygnatury czasowe. Stary pakiet ma starszą sygnaturę czasową i jest odrzucany.
Potwierdzenia selektywne (SACK)
System Windows wprowadza obsługę funkcji wydajności znanej jako potwierdzenie selektywne lub SACK. SACK jest szczególnie ważne w przypadku połączeń korzystających z dużych rozmiarów okien TCP. Przed SACK odbiornik mógł potwierdzić tylko numer najnowszej sekwencji ciągłego strumienia danych, który został odebrany, lub "lewą krawędź" okna odbierania. Po włączeniu sacK odbiornik nadal używa numeru ACK do potwierdzenia lewej krawędzi okna odbioru, ale może również potwierdzić inne bloki odebranych danych indywidualnie. SACK używa opcji nagłówka TCP, jak pokazano poniżej.
SACK używa dwóch typów opcji TCP.
Opcja zezwalana na stos TCP jest używana tylko w pakiecie SYN (podczas ustanowienia połączenia TCP), aby wskazać, że może to zrobić selektywne ACK.
Druga opcja TCP, TCP Sack Option, zawiera potwierdzenie dla co najmniej jednego bloku danych. Bloki danych są identyfikowane przy użyciu numeru sekwencji na początku i na końcu tego bloku danych. Jest on również znany jako lewa i prawa krawędź bloku danych.
Rodzaj 4 to opcja dozwolona przez tcp sack. Rodzaj 5 to opcja tcp sack. Długość to długość w bajtach tej opcji TCP.
Dozwolony protokół TCP SACK:
Rodzaj = 4 | Długość = 2 |
---|---|
1 bajt | 1 bajt |
Opcja TCP SACK:
Rodzaj = 5 | Length = Zmienna |
---|---|
1 bajt | Lewa krawędź pierwszego bloku do prawej krawędzi pierwszego bloku ... Lewa krawędź bloku Nth do prawej krawędzi bloku Nth |
W przypadku włączenia sacK (ustawienie domyślne) można porzucić pakiet lub serię pakietów. Odbiorca informuje nadawcę, który dane zostały odebrane i gdzie mogą znajdować się "otwory" w danych. Nadawca może następnie selektywnie ponownie przesłać brakujące dane bez ponownego transmisji bloków danych, które zostały już pomyślnie odebrane. SACK jest kontrolowany przez parametr rejestru SackOpts.
Wartość SackOpts w następującym kluczu rejestru można edytować w celu kontrolowania użycia selektywnych potwierdzenia:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- Na pasku narzędzi wybierz pozycję Uruchom,> a następnie wpisz
Regedit
polecenie , aby uruchomić Edytor rejestru. - Znajdź i wybierz powyższy klucz w Edytorze rejestru, a następnie wybierz polecenie Modyfikuj w menu Edycja .
- Wpisz żądaną wartość w polu Dane wartości .
Uwaga 16.
Prawidłowa wartość binarna to 0 lub 1, wartość domyślna to 1. Ten parametr określa, czy jest włączona obsługa selektywnego ACK (SACK - RFC 2018).
Poniższy ślad monitora sieci ilustruje hosta uznającego wszystkie dane do numeru sekwencji 54857341 oraz dane z numeru sekwencji 54858789-54861685. Brakujące dane pochodzą z 54857341 do 54858788.
TCP: .A...., len:0, seq:925104-925104, ack:54857341, win:32722, src:1242 dst:139
TCP: Source Port = 0x04DA
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 925104 (0xE1DB0)
TCP: Acknowledgement Number = 54857341 (0x3450E7D)
TCP: Data Offset = 44 (0x2C)
TCP: Reserved = 0 (0x0000)
+ TCP: Flags = 0x10 : .A....
TCP: Window = 32722 (0x7FD2)
TCP: Checksum = 0x4A72
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: Timestamps Option
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
TCP: SACK Option
TCP: Option Type = 0x05
TCP: Option Length = 10 (0xA)
TCP: Left Edge of Block = 54858789 (0x3451425)
TCP: Right Edge of Block = 54861685 (0x3451F75)
Zachowanie retransmisji protokołu TCP i szybkie ponowne przesłanie
Retransmisja TCP
W ramach przeglądu normalnego zachowania retransmisji protokół TCP uruchamia czasomierz retransmisji, gdy każdy segment ruchu wychodzącego jest przekazywany do protokołu internetowego (IP). Jeśli nie otrzymano potwierdzenia dla danych w danym segmencie przed wygaśnięciem czasomierza, segment zostanie ponownie przekazany.
Limit czasu retransmisji (RTO) jest dostosowywany w sposób ciągły w celu dopasowania do cech połączenia przy użyciu obliczeń Smoothed Round Trip Time (SRTT) zgodnie z opisem w RFC 793. Czasomierz dla danego segmentu jest podwajany po każdej retransmisji tego segmentu. Przy użyciu tego algorytmu protokół TCP dostraja się do normalnego opóźnienia połączenia.
Szybkie przetransmit
Protokół TCP ponownie transmisuje dane przed wygaśnięciem czasomierza retransmisji w pewnych okolicznościach. Najczęstszą przyczyną jest funkcja znana jako szybka ponowna transmit. Gdy odbiornik obsługujący szybką retransmitę odbiera dane z numerem sekwencji przekraczającym bieżący oczekiwany, niektóre dane prawdopodobnie zostały porzucone. Aby ułatwić informowanie nadawcy o tym zdarzeniu, odbiorca natychmiast wysyła kod ACK z numerem ACK ustawionym na oczekiwany numer sekwencji. Będzie to kontynuowane dla każdego dodatkowego segmentu TCP, który zostanie dostarczony. Gdy nadawca zacznie odbierać strumień zestawów ACL, który potwierdza ten sam numer sekwencji, może zostać porzucony segment. Nadawca natychmiast ponownie wyśle segment, którego oczekuje odbiorca, bez oczekiwania na wygaśnięcie czasomierza retransmisji. Ta optymalizacja znacznie poprawia wydajność, gdy pakiety są często porzucane.
Domyślnie system Windows ponownie wykonuje wysyłanie segmentu w następujących warunkach:
- Otrzymuje trzy zestawy AKS dla tego samego numeru sekwencji: jeden ACK i dwa duplikaty.
- Numer sekwencji opóźnia bieżący numer.
To zachowanie można kontrolować za pomocą parametru TcpMaxDupAcks
rejestru.
Wartość TcpMaxDupAcks w następującym kluczu rejestru można edytować, aby kontrolować liczbę ACL niezbędnych do szybkiego ponownego uruchamiania:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- Na pasku narzędzi wybierz pozycję Uruchom,> a następnie wpisz
Regedit
polecenie , aby uruchomić Edytor rejestru. - Znajdź i wybierz powyższy klucz w Edytorze rejestru, a następnie wybierz polecenie Modyfikuj w menu Edycja .
- Wpisz żądaną wartość w polu Dane wartości .
Uwaga 16.
Prawidłowy zakres to 1–3, a wartość domyślna to 2.
Ten parametr określa liczbę zduplikowanych zestawów ACL, które muszą zostać odebrane dla tej samej liczby wysłanych danych, zanim fast retransmit
zostanie wyzwolona w celu ponownego wysłania segmentu, który został porzucony podczas przesyłania.