2012-06-22 8 views
5

(önceden kimliği doğrulanmış) bir istemciye 'büyük' ​​bir yığın veri (1 meg) göndermek için bir SSLStream kullanırken, görüyorum paket fragmantasyonu/dissasembly FAR büyüktür Normal bir NetworkStream kullanırken. istemcide bir zaman uyumsuz okuma kullanılarakSSLStream üzerinden veri gönderirken paket parçalanması

(yani BeginRead()), ReadCallback tekrar tekrar son paket (geri kalan veriler ise) kadar veri arasında tam olarak aynı boyutta bir yığın olarak adlandırılır. Gönderdiğim verilerle (bir zip dosyası), segmentler 16363 bayt uzunluğunda olur. Not: tampon almak listem bu çok daha büyük olduğunu ve boyutu nedir değişen

ben SSL parçalar halinde 18kb daha büyük verileri şifreler anlıyoruz etkisi yoktur, ancak SSL TCP üstüne oturur beri, sanırım olmaz SSL paketlerinin sayısının TCP paketinin parçalanmasıyla alakadar olacağı mu?

Esasen, veri daha uzun yaklaşık 20 kez alıyor tamamen standart bir NetworkStream (localhost üzerinde her ikisi de!)

ben eksik olduğundan daha istemci tarafından okunacak?


DÜZENLEME:

Bir SslStream ait tampon boyutunu almak (veya gönderme) şüpheli başlıyorum sınırlıdır. Senkron okumalar kullanmama rağmen (yani SSLStream.Read()), okumaya çalışılmadan önce ne kadar beklediğime bakılmaksızın daha fazla veri kullanılamaz. Bu, alma arabelleğini 16363 bayta sınırlayacakmış gibi davranır. Altta bulunan NetworkStream'ın SendBufferSize (sunucuda) ve ReceiveBufferSize (istemcide) ayarının bir etkisi yoktur.

+0

IP fragmantasyonu hakkında veya alıcı tarafında kaç adet okuma yapmanız gerektiğinden mi bahsediyorsunuz? –

+0

Yapılan okuma sayısı – Ive

+0

Nasıl gönderiyorsunuz? SSL akışları etrafında arabellek kullanmıyorsanız, kendi SSL kaydındaki bir seferde bir bayt kodlamaktan dolayı 40 kat fazla veri patlaması alabilirsiniz. – EJP

cevap

0

Bu özel bir üye tarafından tanımlanan SslStream tarafından uygulanan bir paket veri boyutu sınırlaması gibi görünür:

SSLStream._SslState.MaxDataSize 

Bu sınırlama uygulandığı anlamak için mücadele ediyorum, yoksa değiştirilebilir eğer, ve soruyu sordunuz here