Kopiowanie pliku między dwoma komputerami z Windows jest szybkie, dopóki oba nie dołączą do tej samej sieci VPN, a wtedy się załamuje, podczas gdy test przepustowości przez tę samą parę nadal zgłasza prawie pełną prędkość łącza. Ta różnica to diagnoza: łącze jest sprawne, a coś wybiera gorszą ścieżkę dla samego transferu. Tym czymś jest zwykle wielokanałowość SMB3, robiąca dokładnie to, do czego została zaprojektowana. Usuń dodatkowy kanał z równania, a kopia wróci na łącze fizyczne.

Objaw czeka na swój najwolniejszy kanał

Wielokanałowość pozwala jednej sesji SMB używać kilku połączeń TCP, po jednym dla każdej odpowiedniej pary adresów między klientem a serwerem. Gdy oba komputery znajdują się w sieci lokalnej i w tym samym tunelu, Windows może sparować adresy sieci lokalnej z adresami tunelu i uznać obie pary za użyteczne. Sesja kończy się z większą liczbą kanałów, niż potrzebuje łącze fizyczne, a jeden z nich jest znacznie wolniejszy.

To nie zawodzi. To czeka, ponieważ sesja nie może zakończyć się szybciej niż jej najwolniejszy kanał.

Dlatego test przepustowości może wyglądać zdrowo, podczas gdy kopia pełznie: pomiar pojedynczego strumienia może wybrać jedną ścieżkę, a transfer był rozłożony na dwie. Przeczytaj listę kanałów, zanim zmienisz jakiekolwiek ustawienie karty sieciowej, i czytaj ją, gdy kopia jeszcze trwa, bo bezczynna sesja nic nie pokazuje. To, co zapiszesz, powinno nazwać interfejs stojący za każdym kanałem, a nie tylko to, jak wolny wydawał się wynik.

Potwierdź, że istnieje drugi kanał

Dwa polecenia cmdlet odpowiadają na to pytanie wprost. Lista połączeń pokazuje używane kanały, a podsumowanie sesji pokazuje samo połączenie. Uruchom oba podczas wolnego kopiowania.

Get-SmbMultichannelConnection
Get-SmbConnection

Szukaj więcej niż jednego wiersza oznaczonego jako wybrany dla tego samego serwera, a następnie rozwiąż adres klienta w podejrzanym wierszu. Jeśli ten adres należy do karty tunelu, druga ścieżka jest prawdziwa i potwierdzona. Jeśli każdy wiersz należy do interfejsu fizycznego, wielokanałowość nie jest twoim problemem, a kopia jest wolna z niepowiązanego powodu. Wykonaj to potwierdzenie najpierw, bo naprawa jest wystarczająco zakłócająca, by zasłużyć na minutę dowodów.

Get-NetIPAddress -IPAddress 10.20.30.44

Adresy tutaj są zastępcze. Zastąp je tym, co zgłasza twoje własne wyjście, bo kopiowanie adresu z bloga to sposób, w jaki działające polecenie staje się mylącym komunikatem o błędzie.

Usuń tunel z SMB, a potem zmierz ponownie

Wyłączenie wielokanałowości to najszybszy sposób potwierdzenia diagnozy i jest odwracalne. Zastosuj ustawienie klienta na komputerze kopiującym, a ustawienie serwera na komputerze udostępniającym zasób, bo każda strona osobno może utrzymać dodatkowy kanał przy życiu. Zmiana dotyczy nowych połączeń, a nie istniejących, więc otwarta sesja ją przetrwa. Uruchom ponownie oba komputery albo przynajmniej zamknij wszystkie uchwyty do udziału, zanim cokolwiek zmierzysz.

Set-SmbClientConfiguration -EnableMultiChannel $false -Force
Set-SmbServerConfiguration -EnableMultiChannel $false -Force

Potwierdź nowy stan, a potem zobacz, co serwer teraz ogłasza klientom.

Get-SmbClientConfiguration | Select-Object EnableMultiChannel
Get-SmbServerNetworkInterface | Format-List *

Interfejs tunelu powinien wypaść z tej ogłoszonej listy. Jeśli nie wypadnie, ustawienie trafiło na niewłaściwy koniec albo stara sesja jest nadal otwarta. Jeśli udostępnianie plików po prostu nie może korzystać z tunelu, odłącz komponent serwera od tej karty, co pozostawia tunel użyteczny dla każdej innej usługi.

Get-NetAdapterBinding -Name "OpenVPN Data Channel Offload"
Disable-NetAdapterBinding -Name "OpenVPN Data Channel Offload" -ComponentID ms_server

Preferuj ścieżkę przez sieć lokalną, nie udając, że usuwa kanały

Metryka interfejsu mówi Windowsowi, którą ścieżkę preferować dla nowych połączeń. Nie usuwa kanału, który wielokanałowość już zdecydowała się otworzyć. Podniesienie metryki tunelu nadal się opłaca, bo trzyma niepowiązany ruch z dala od wolnej ścieżki i czyni preferowaną trasę przewidywalną, ale to szturchnięcie, a nie filtr.

Get-NetIPInterface | Sort-Object InterfaceMetric | Select-Object InterfaceAlias, InterfaceMetric
Set-NetIPInterface -InterfaceAlias "OpenVPN Data Channel Offload" -AutomaticMetric Disabled -InterfaceMetric 1000

Skopiuj alias z tego wyjścia, zamiast go wpisywać, bo niektóre instalacje lokalizują nazwę karty i angielski ciąg nie będzie pasować.

Następnie zmierz ponownie obie liczby: kopiowanie pliku i test przepustowości przez tę samą parę. Jeśli kopia się poprawia, a test przepustowości nigdy nie był wolny, przyczyną była wielokanałowość i możesz przestać. Jeśli oba się załamują, tunel jest wąskim gardłem a wielokanałowość tylko to wzmocniła. Jeśli kopia pozostaje wolna, a obie ścieżki wyglądają poprawnie, pozostały problem mieszka w udziale, pamięci masowej lub sterowniku filtru, co jest innym śledztwem.

Powiązane artykuły