Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, .NET'te QUIC ile ilgili en yaygın sorunları tanılamayı öğreneceksiniz.
Kitaplık System.Net.Quic
, açık kaynak QUIC uygulaması MsQuic'i temel alır. Bu nedenle, davranış, bazen tasarım gereği, sıradan soketlerden farklıdır. Ayrıca UDP protokollerini temel alır ve TCP ile tam olarak aynı deneyimi sağlamaz.
Dinleyici çalışıyor ancak veri almıyor
Bir dinleyici çalışıyorsa ancak hiçbir zaman veri almıyorsa, bunun nedeni aynı bağlantı noktasında dinleyen diğer işlemler olabilir. Hangi işlemin hangi bağlantı noktasını kullandığını doğrulamak için:
sudo ss -tulpw
Bu davranış, MsQuic
'nin daha iyi performans elde etmek için SO_REUSEPORT
'i kullanması tasarımı gereğidir. Daha fazla bilgi için bkz. ListenerStart belgeleri ve özgün sorun dotnet/runtime#59382.
Uyarı
Bu sorun, MsQuic'in bağlantı noktası rezervasyonu yapmayı deneyeceği Windows'ta oluşmaz. Bu, aynı bağlantı noktasında ikinci dinleyiciyi açmaya çalışan uygulamanın başlatılaamamasına neden olur.
QuicListener her zaman HERHANGİ bir adreste dinliyor
Özelliği aracılığıyla belirli bir adres sağlansa ListenEndpoint
bile QuicListener çift yığınlı joker karakter yuvasını açmaya devam eder. Bu davranış, MsQuic
tarafından bilerek tasarlanmıştır.
MsQuic
içinde filtreleme yapmak için dinleme IP adresi hala kullanılıyor. Daha fazla bilgi için listenerStart belgelerine ve özgün soruna [dotnet/runtime#92812] bakın.
İstemci beklenmeyen ALPN hatası alıyor
İstemci, sunucuyla aynı ALPN'yi kullanmasına rağmen bağlanmayı dener, ancak Application layer protocol negotiation error was encountered
alır.
Dinleyici, uygulamanın ne belirttiğinden bağımsız olarak, her zaman çift modlu joker karakter adresine bağlanır. Ardından IP adresine ve ALPN'ye göre gelen bağlantılarla eşleşir. Eşleşme bulunmazsa, yukarıda belirtilen hatayı bildirir. Sonuç olarak, dinleme IP adresi ile bağlantı arasında uyuşmazlık ALPN hatasına neden olur.
Bu hatayı önlemek için dinleyicinin başlatıldığı adrese bağlandığınızdan emin olun. Örneğin, dinleyicinizin dinleme adresini yazdırın:
await using var listener = QuicListener.ListenAsync(new() /* appropriate options */);
Console.WriteLine(listener.LocalEndPoint);
Bu sorun, dotnet/runtime#85412 gibi çeşitli senaryolarda oluşabilir.
Loopback
adresi için sunucu başlatıldı ve aynı makinede çalıştırıldığında her şey düzgün çalıştı. Ancak istemci farklı bir adresten bağlanmaya çalıştığında, adres sunucu geri döngü adresiyle eşleşmiyor ve ALPN hatasıyla reddedildi.
Uyarı
Bu durum dinleyici MsQuic kullandığında , örneğin .NET QuicListener
aracılığıyla gerçekleşir.
Dinleyici, IPv6 devre dışı bırakılmış olsa da başlatmayı başarır.
IPv6 devre dışı bırakılsa da, QuicListener.ListenAsync
bir IPv6 adresiyle başarılı olur. Joker karakter adresine bağlandığından ve bu şekilde başarılı olduğundan MsQuic
, önceki sorunla ilgilidir. Sonuç olarak dinleyici başlatılır ancak bu dinleyiciyle bağlantı oluşturulamıyor. Bu, böyle bir durumda hata fırlatan soketlerden farklı bir davranıştır.
IPv6'nın etkinleştirilip etkinleştirilmediğini denetlemenin birçok yolu vardır, örneğin Linux'ta IPv6 modülünün durumunu denetleyin:
cat /sys/module/ipv6/parameters/disable
# 0 - IPv6 is enable
# 1 - IPv6 is disabled
Yukarıda belirtildiği gibi, Burada MsQuic davranışı kasıtlı olarak yapılır. Ancak bu sorun gelecekte .NET tarafında giderilebilir. Diğer ayrıntılar için bkz. dotnet/runtime#75343.
Dinleyici QUIC_STATUS_ADDRESS_IN_USE
hatası nedeniyle başlayamıyor
Bu, Windows'a özgü bir sorundur. Dinleyici, belirli bir adres ve bağlantı noktası üzerinde çalışan başka bir işlem olmasa da hatayla QuicException
atarQUIC_STATUS_ADDRESS_IN_USE
. Hatanın nedeni dinleyicinin dinlemeye çalıştığı bağlantı noktası için tanımlanan bağlantı noktası dışlama aralığıdır. Dışlama aralıklarını denetlemek için şu komutu çalıştırın:
netsh.exe int ip show excludedportrange protocol=udp
Bir dışlanmış aralıktaki bağlantı noktasına bağlanmaya çalışırken hata alınması beklenen bir davranıştır. Bu nedenle, bunu düzeltmeye yönelik hemen bir plan yoktur. Diğer ayrıntılar dotnet/runtime#71518'de bulunabilir.