Bu sayfa son olarak 2025-04 tarihinde güncellendi ve 0.9.66 yöneltici sürümü için geçerli.

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

The application designer should carefully consider the tradeoff of repliable vs. non-repliable datagrams. Also, the datagram size will affect reliability, due to tunnel fragmentation into 1KB tunnel messages. The more message fragments, the more likely that one of them will be dropped by an intermediate hop. Messages larger than a few KB are not recommended. Over about 10 KB, the delivery probablility drops dramatically.

Veri şemaları teknik özellikleri sayfasına bakın.

Also note that the various overheads added by lower layers, in particular garlic messages, place a large burden on intermittent messages such as used by a Kademlia-over-UDP application. The implementations are currently tuned for frequent traffic using the streaming library.

I2CP İletişim Kuralı ve Bağlantoı Noktaları

The standard I2CP protocol number for signed (repliable) datagrams is PROTO_DATAGRAM (17). Applications may or may not choose to set the protocol in the I2CP header. The default is implementation-dependent. It must be set to demultiplex datagram and streaming traffic received on the same Destination.

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.

There is no method within the datagram API to specify whether it is non-repliable (raw) or repliable. The application should be designed to expect the appropriate type. The I2CP protocol number or port should be used by the application to indicate datagram type. The I2CP protocol numbers PROTO_DATAGRAM (signed, also known as Datagram1), PROTO_DATAGRAM_RAW, PROTO_DATAGRAM2, and PROTO_DATAGRAM3 are defined in the I2PSession API for this purpose. A common design pattern in client/server datagram applications is to use signed datagrams for a request which includes a nonce, and use a raw datagram for the reply, returning the nonce from the request.

Defaults:

  • PROTO_DATAGRAM = 17
  • PROTO_DATAGRAM_RAW = 18
  • PROTO_DATAGRAM2 = 19
  • PROTO_DATAGRAM3 = 20

İletişim kuralları ve bağlantı noktaları I2CP I2PSession API içinde, I2PSessionMuxedImpl içinde olduğu gibi uygulanabilir.

Veri Bütünlüğü

Data integrity is assured by the gzip CRC-32 checksum implemented in the I2CP layer. Authenticated datagrams (Datagram1 and Datagram2) also ensure integrity. There is no checksum field in the datagram protocol.

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.

Teknik özellikler

Veri şemaları teknik özellikleri sayfasına bakın.