Klon se autentificira, broj objekata se pojavi, a zatim ništa ne kreće minutama. Windows prijavljuje VPN kao povezan, ime hosta se razrješava, a preglednik na istom računalu bez poteškoća dohvaća istu stranicu repozitorija. Ta kombinacija upućuje na veličinu paketa, a ne na vjerodajnice, a pitanje veličine mora se postaviti na dva mjesta jer WSL2 ima vlastiti Linux interfejs s vlastitim MTU-om. Jedan broj pripada Windows strani putanje, drugi distribuciji, a čitanje samo VPN adaptera ostavlja pola putanje neispitanim.

Tri signala odvajaju problem veličine od ostalih

Prvi signal je oblik: uspostavljanje veze i mala razmjena uspiju, a zatim masovni prijenos prestaje napredovati. Drugi je simetrija: isti repozitorij i isti transport ne uspijevaju dok drugi host na istoj putanji radi, ili se kvar mijenja s veličinom korisnog tereta, a ne s doba dana. Treći je tišina: nema pogreške autentifikacije, nema odbijanja proxyja, nema kvara razrješavanja imena, samo prijenos koji nikada ne završi.

Ta tri zajedno opravdavaju hipotezu o veličini paketa. Kvar DNS-a, istekli token, odbijeni SSH ključ i proxy koji odbija CONNECT svaki proizvode vlastitu pogrešku, i nijedan ne izgleda kao zastoj nakon uspjeha. Zadržavanje istog repozitorija, transporta i vremenskog okvira tijekom testiranja čini usporedbu poštenom.

Uporedite oba interfejsa prije odluke

Prikupite Windows pogled i Linux pogled u istoj sesiji i zadržite adresu repozitorija umjesto nagađanja koji je interfejs nosi. Naredba u nastavku najprije razrješava odredište kako bi pretraga rute opisala stvarni poslužitelj s kojim se klon povezuje, a on se može razlikovati od imena koje je pokazao preglednik. Pokrenite obje polovice blizu jedna drugoj jer VPN može promijeniti metrike interfejsa između pokušaja.

netsh interface ipv4 show subinterfaces
wsl -d Ubuntu -- bash -lc 'dest=$(getent ahostsv4 github.com | awk \'NR==1{print $1}\'); ip -br link show; ip route get "$dest"'

Pokrenite Linux polovicu unutar distribucije umjesto da zalijepite izlaz u Windows ljusku, jer nazivi interfejsa i odabir rute imaju smisla samo tamo. Zalijepljeni izlaz iz Windows ljuske prijavljuje pogrešne brojeve s velikim samopouzdanjem. Zabilježite uređaj, odabranu rutu i MTU sa svake strane prije nego što bilo što promijenite.

Odlučite treba li broj biti manji

Veći MTU interfejsa od onoga što putanja može nositi nije automatski kvar, jer otkrivanje MTU-a putanje postoji upravo za to. Način kvara pojavljuje se kada je otkrivanje potisnuto: ICMP poruke se filtriraju negdje na putu, pošiljatelj nikada ne sazna granicu, a veliki paketi nestaju dok mali prolaze. To je svojstvo putanje, a ne svojstvo Git-a. To je i razlog zašto mali file može uspjeti na vezi na kojoj veliki nikada ne završi.

Ako dokazi to podržavaju, privremena promjena na Linux interfejsu najjeftiniji je test. Odaberite vrijednost ispod upotrebljive veličine putanje, zabilježite prethodnu i držite sve ostalo nepromijenjenim kako bi usporedba imala smisla. Ako se prijenos dovrši pri manjoj vrijednosti, imate dijagnozu, a ne slučajnost.

ip -br link show dev eth0
sudo ip link set dev eth0 mtu 1380
ip -br link show dev eth0

Odlučite gdje postavka treba živjeti

Iz testa slijede tri opcije, a obično je prikladna samo jedna od njih. Ako manja vrijednost popravi prijenos i vrijednost je doista potrebna ovoj mreži, postavka treba vlasnika životnog ciklusa: startnu kuku u distribuciji, mrežnu konfiguraciju kojom upravlja platforma ili dokumentirani postupak. Ako vrijednost ništa ne popravi, vratite je i vratite se pitanjima transporta, proxyja i autentifikacije.

Postoji li startna kuka zavisi od Windows i WSL verzija koje se koriste i od konfiguriranog mrežnog načina. Zrcaljenje Windows mreže može promijeniti kako VPN komunicira s distribucijom na načine koji su važniji od prilagodbe MTU-a, pa identificirajte način prije nego što osmislite zaobilazno rješenje. Vrijednost koja odgovara jednom operateru ili jednom VPN profilu nije zadana za sljedeći.

Ono što treba izbjegavati jest primamljivo postavljanje: privilegirana mrežna naredba u datoteci za pokretanje svake interaktivne ljuske ili sudo bez lozinke za cijelu ip binarnu datoteku kako bi skripta mogla izvršiti jednu liniju. Oboje pretvara dijagnostiku u trajnu izloženost i čini izvorni problem kasnije teže vidljivim.

Provjerite nakon svježeg početka, zatim poništite

Promjena koja traje samo do ponovnog pokretanja distribucije nije popravak. Ponovno pokrenite distribuciju, ponovno povežite VPN i ponovite izvornu Git operaciju umjesto zamjene poput pinga ili malog HTTP zahtjeva. Zatim potvrdite da interfejs nosi namjeravanu vrijednost u novoj sesiji.

ip -br link show dev eth0
ip route get "$(getent ahostsv4 github.com | awk 'NR==1{print $1}')"

Držite zabilježenu izvornu vrijednost uz promjenu kako bi se eksperiment mogao čisto poništiti, i zabilježite koja je obitelj adresa testirana, jer rezultat IPv4 ne govori ništa o IPv6 vezi na istom hostu. WSL mrežna dokumentacija opisuje načine koji određuju kako popravak treba izgledati; sam MTU broj lokalno je mjerenje, a ne preporuka.

Povezani članci