Veri Şeması Özeti
Veri şemaları, standart bir biçimde kimliği doğrulanmış ve yinelenebilir iletiler sağlamak için I2CP tabanı üzerine oluşturulur. Böylece, uygulamalar bir veri şemasından "gönderici" adresini güvenilir bir şekilde okuyabilir ve adresin gerçekten iletiyi gönderdiğinin bilinmesini sağlar. Bu özellik, bazı uygulamalar için gereklidir, çünkü temel I2P iletisi tamamen hamdır - "gönderici" adresi yoktur (IP paketlerinin aksine). Ayrıca, ileti ve göndericinin kimliği, veri yükü imzalanarak doğrulanır.
Streaming kitaplığı paketleri gibi veri şemaları, uygulama düzeyinde yapılardır. Bu iletişim kuralları, düşük düzeyli taşıyıcılardan bağımsızdır. İletişim kuralları yöneltici tarafından I2NP iletilerine dönüştürülür ve her iki iletişim kuralı da her iki taşıyıcı ile aktarılabilir.
Uygulama Rehberi
Java ile yazılmış uygulamalar veri şeması API kullanabilirken, diğer dillerdeki uygulamalar SAM veri şeması desteğini kullanabilir. Ayrıca SOCKS vekil sunucu içindeki i2ptunnel üzerinde, 'streamr' tünel türlerinde ve udpTunnel sınıflarında sınırlı destek vardır.
Veri Şeması Uzunluğu
Uygulama tasarımcısı, yinelenebilir ve yinelenemeyen veri şemaları arasındaki dengeyi dikkatlice düşünmelidir. Ayrıca, tünel iletileri 1KB boyutunda paketlere bölündüğünden veri şeması boyutu güvenilirliği etkiler. İleti parçaları ne kadar fazlaysa, bunlardan birinin bir ara durak tarafından kaybedilmesi olasılığı yükselir. Birkaç KB boyutundan büyük iletilerin kullanılması önerilmez. Yaklaşık 10 KB üzerinde, teslim olasılığı önemli ölçüde düşer. 16 KB üzerindeki mesajlar NTCP üzerinden teslim edilemez ve bu da teslim şansını daha da düşürür.
Ayrıca, alt katmanlar tarafından eklenen çeşitli ek yüklerin, özellikle asimetrik ElGamal/AES, bir UDP üzerinden Kademlia uygulaması tarafından kullanıldığı gibi aralıklı iletilere büyük bir yük getirdiğine dikkat edin. Uygulamalar şu anda Streaming kitaplığı kullanılarak yoğun trafik için ayarlanmıştır. Örneğin, teslim edilen çok sayıda oturum etiketi ve kısa bir oturum etiketi ömrü vardır. Şu anda I2CP içinde, ElGamal oturum etiketi parametrelerini ayarlamak için herhangi bir yapılandırma parametresi bulunmuyor.
I2CP İletişim Kuralı ve Bağlantoı Noktaları
Veri şemalarının standart I2CP iletişim kuralı numarası PROTO_DATAGRAM (17) şeklindedir. Uygulamalar, iletişim kuralını I2CP başlığında ayarlamayı seçebilir veya seçmeyebilir. Varsayılan olarak ayarlanmamıştır. Aynı hedefte alınan veri şemalarını ve Streaming trafiğini tekilleyecek şekilde ayarlanmalıdır.
Veri şemaları bağlantı yönelimli olmadığından, uygulama, IP üzerinde UDP ile alışıldık şekilde, veri şemalarını belirli eşler veya iletişim oturumlarıyla ilişkilendirmek için bağlantı noktaları gerekebilir. Uygulamalar, I2CP sayfasında açıklandığı gibi I2CP (gzip) üst bilgisine 'from' ve 'to' bağlantı noktaları ekleyebilir.
Veri şeması API yazılımında, yinelenemeyen (ham) ya da yinelenebilir olup olmadığını belirtecek bir yöntem yoktur. Uygulama, uygun türü bekleyecek şekilde tasarlanmalıdır. I2CP iletişim kuralı numarası ya da bağlantı noktası uygulama tarafından veri şeması türünü belirtmek için kullanılmalıdır. PROTO_DATAGRAM (imzalı) ve PROTO_DATAGRAM_RAW I2CP iletişim kuralı numaraları, bu amaç için I2PSession API içinde tanımlanmıştır. İstemci/sunucu veri şeması uygulamalarında yaygın bir tasarım modeli, bir nonce içeren bir istek için imzalı veri şeması kullanmak ve istekten nonce değerini döndürerek yanıt için ham bir veri şeması kullanmaktır.
Defaults:
- PROTO_DATAGRAM = 17
- PROTO_DATAGRAM_RAW = 18
İletişim kuralları ve bağlantı noktaları I2CP I2PSession API içinde, I2PSessionMuxedImpl içinde olduğu gibi uygulanabilir.
Veri Bütünlüğü
Veri bütünlüğü, I2CP katmanında uygulanan gzip CRC-32 sağlaması kullanılarak sağlanır. Veri şeması iletişim kuralında sağlama alanı yoktur.
Paket Kapsülleme
Her veri şeması, I2P aracılığıyla tek bir ileti olarak (ya da bir Garlic iletisi içindeki tek bir diş olarak) gönderilir. İleti kapsüllemesi için I2CP, I2NP ve tünel ileti katmanları kullanılır. Veri şeması iletişim kuralında paket sınırlayıcı bir yöntem veya uzunluk alanı yoktur.