Копирането на файлове се забавя при свързване на VPN: многоканалност на SMB
Копието чака най-бавния си канал, затова добрият тест на пропускателната способност скрива причината. Потвърдете канала на тунела, извадете го от SMB и после измерете двата пътя.
Копирането на файл между два Windows компютъра е бързо, докато и двата не се присъединят към един и същ VPN, и тогава то се срива, докато тест на пропускателната способност по същата двойка все още отчита почти скоростта на линията. Тази разлика е диагнозата: връзката е наред и нещо избира по-лош път за самото прехвърляне. Това нещо обикновено е многоканалността на SMB3, която прави точно това, за което е създадена. Извадете допълнителния канал и копието се връща на физическата връзка.
Симптомът чака най-бавния си канал
Многоканалността позволява на една SMB сесия да използва няколко TCP връзки, по една за всяка подходяща двойка адреси между клиента и сървъра. Когато и двата компютъра са в локалната мрежа и в един и същ тунел, Windows може да свърже адресите от локалната мрежа с адресите на тунела и да приеме двете двойки за използваеми. Накрая сесията има повече канали, отколкото физическата връзка изисква, и един от тях е много по-бавен.
Това не се проваля. То чака, защото сесията не може да завърши по-бързо от най-бавния си канал.
Затова тест на пропускателната способност може да изглежда добър, докато копието пълзи: измерване с един поток може да избере един път, а прехвърлянето е било разпределено по два. Прочетете списъка с канали, преди да промените каквато и да е настройка на адаптера, и го четете, докато копието още работи, защото неактивната сесия не показва нищо. Това, което запишете, трябва да назове интерфейса зад всеки канал, а не само колко бавен е изглеждал резултатът.
Потвърдете, че съществува втори канал
Две команди cmdlet отговарят директно на въпроса. Списъкът на връзките показва каналите в употреба, а обобщението на сесията показва самата връзка. Изпълнете и двете по време на бавното копиране.
Get-SmbMultichannelConnection
Get-SmbConnectionТърсете повече от един ред, отбелязан като избран за същия сървър, после изяснете клиентския адрес в подозрителния ред. Ако този адрес принадлежи на адаптера на тунела, вторият път е реален и потвърден. Ако всеки ред принадлежи на физическия интерфейс, многоканалността не е вашият проблем и копието е бавно по несвързана причина. Направете това потвърждение първо, защото поправката е достатъчно разрушителна, за да заслужи минута доказателства.
Get-NetIPAddress -IPAddress 10.20.30.44Адресите тук са заместители. Заменете ги с това, което показва вашият собствен изход, защото копирането на адрес от блог е начинът, по който работеща команда се превръща в объркващо съобщение за грешка.
Извадете тунела от SMB и после измерете отново
Изключването на многоканалността е най-бързият начин да потвърдите диагнозата и е обратимо. Приложете клиентската настройка на машината, която копира, и сървърната настройка на машината, която хоства споделения ресурс, защото само една страна може да поддържа допълнителния канал жив. Промяната важи за нови връзки, а не за съществуващи, така че отворена сесия я преживява. Рестартирайте двата компютъра или поне затворете всеки манипулатор към споделения ресурс, преди да измервате каквото и да е.
Set-SmbClientConfiguration -EnableMultiChannel $false -Force
Set-SmbServerConfiguration -EnableMultiChannel $false -ForceПотвърдете новото състояние, после вижте какво сървърът вече обявява на клиентите.
Get-SmbClientConfiguration | Select-Object EnableMultiChannel
Get-SmbServerNetworkInterface | Format-List *Интерфейсът на тунела трябва да отпадне от този обявен списък. Ако не отпадне, настройката е попаднала на грешния край или стара сесия още е отворена. Ако споделянето на файлове просто не бива да използва тунела, вместо това отвържете сървърния компонент от този адаптер, което оставя тунела използваем за всяка друга услуга.
Get-NetAdapterBinding -Name "OpenVPN Data Channel Offload"
Disable-NetAdapterBinding -Name "OpenVPN Data Channel Offload" -ComponentID ms_serverПредпочитайте пътя през локалната мрежа, без да се преструвате, че премахва канали
Метриката на интерфейса казва на Windows кой път да предпочита за нови връзки. Тя не премахва канал, който многоканалността вече е решила да отвори. Повишаването на метриката на тунела все пак си струва, защото държи несвързания трафик далеч от бавния път и прави предпочитания маршрут предвидим, но това е подкана, а не филтър.
Get-NetIPInterface | Sort-Object InterfaceMetric | Select-Object InterfaceAlias, InterfaceMetric
Set-NetIPInterface -InterfaceAlias "OpenVPN Data Channel Offload" -AutomaticMetric Disabled -InterfaceMetric 1000Копирайте псевдонима от този изход, вместо да го въвеждате, защото някои инсталации локализират името на адаптера и английският низ няма да съвпадне.
После измерете отново и двете числа: копирането на файла и теста на пропускателната способност по същата двойка. Ако копието се възстанови, а тестът на пропускателната способност никога не е бил бавен, причината е била многоканалността и можете да спрете. Ако и двете се сринат, тунелът е тясното място и многоканалността само го засили. Ако копието остане бавно, докато двата пътя изглеждат правилни, останалият проблем живее в споделения ресурс, хранилището или филтърен драйвер, което е друго разследване.