Genel Bakış
I2CP ve çeşitli I2P taşıma protokolleri arasında yer alan I2P Ağ Protokolü (I2NP), yönlendiriciler arasındaki mesajların yönlendirilmesi ve karıştırılmasından sorumludur ve aynı zamanda bir eş ile iletişim kurarken birden fazla ortak taşıma protokolü desteklendiğinde hangi taşıma protokollerinin kullanılacağının seçilmesini sağlar.
I2NP Tanımı
I2NP (I2P Ağ Protokolü) mesajları, tek sıçramalı, yönlendirici-yönlendirici, noktadan noktaya mesajlar için kullanılabilir. Mesajlar, diğer mesajların içine şifrelenerek ve sarılarak, çoklu sıçramalarla son hedefe güvenli bir şekilde gönderilebilir. Öncelik yalnızca orijinde yerel olarak kullanılır, yani giden teslimat için kuyruğa alınırken.
Aşağıda listelenen öncelikler güncel olmayabilir ve değişikliğe tabidir. Öncelik kuyruğu uygulaması değişiklik gösterebilir.
İleti Biçimi
Aşağıdaki tablo NTCP’de kullanılan geleneksel 16 baytlık başlığı belirtir. SSU ve NTCP2 taşıma katmanları, değiştirilmiş başlıkları kullanır.
| Field | Bytes |
|---|---|
| Type | 1 |
| Unique ID | 4 |
| Expiration | 8 |
| Payload Length | 2 |
| Checksum | 1 |
| Payload | 0 - 61.2KB |
Parça sayısı en fazla 64 olabilir ve mesaj tam olarak hizalanmamış olabilir, bu yüzden mesaj nominal olarak 63 parçaya sığmalıdır.
İlk parçanın maksimum boyutu 956 bayttır (TUNNEL teslimat modu varsayılırsa); takip eden parçanın maksimum boyutu 996 bayttır. Bu nedenle maksimum boyut yaklaşık olarak 956 + (62 * 996) = 62708 bayt veya 61,2 KB’dır.
Ayrıca, aktarımlar ek sınırlamalara sahip olabilir. NTCP sınırı 16KB - 6 = 16378 bayttır. SSU sınırı yaklaşık 32 KB’dır. NTCP2 sınırı yaklaşık 64KB - 20 = 65516 bayttır ve bu, bir tünelin destekleyebileceğinden daha yüksektir.
İstemcinin gördüğü veri birimleri için bu sınırların geçerli olmadığını unutmayın, çünkü yönlendirici bir sarımsak mesajında istemci mesajıyla birlikte bir yanıt leaseset’i ve/veya oturum etiketlerini birleştirebilir. Leaseset ve etiketler birlikte yaklaşık 5,5 KB ekleyebilir. Bu nedenle geçerli veri birimi sınırı yaklaşık 10 KB’dir. Bu sınır gelecekteki bir sürümde artırılacaktır.
Mesaj Türleri
Daha yüksek numaralı öncelik, daha yüksek önceliktir. Trafik büyük ölçüde TunnelDataMessages’tir (öncelik 400), bu yüzden 400’ün üzerindekiler temelde yüksek öncelikli, altındakiler ise düşük önceliklidir. Ayrıca, mesajların çoğu genellikle istemci tünelleri değil, keşif tünelleri aracılığıyla yönlendirilir ve bu nedenle ilk zıplayışlar aynı eş üzerinde olmazsa aynı kuyrukta olmayabilirler.
Ayrıca tüm mesaj türleri şifrelenmeden gönderilmemektedir. Örneğin bir tünel test edilirken, yönlendirici DeliveryStatusMessage’ı GarlicMessage içinde, GarlicMessage ise DataMessage içinde sarmalar.
| Message | Type | Payload Length | Priority | Comments |
|---|---|---|---|---|
| DatabaseLookupMessage | 2 | 500 | May vary | |
| DatabaseSearchReplyMessage | 3 | Typ. 161 | 300 | Size is 65 + 32*(number of hashes) where typically, the hashes for three floodfill routers are returned. |
| DatabaseStoreMessage | 1 | Varies | 460 | Priority may vary. Size is 898 bytes for a typical 2-lease leaseSet. RouterInfo structures are compressed, and size varies; however there is a continuing effort to reduce the amount of data published in a RouterInfo. |
| DataMessage | 20 | 4 - 62080 | 425 | Priority may vary on a per-destination basis |
| DeliveryStatusMessage | 10 | 12 | Used for message replies, and for testing tunnels - generally wrapped in a GarlicMessage | |
| GarlicMessage | 11 | Generally wrapped in a DataMessage - but when unwrapped, given a priority of 100 by the forwarding router | ||
| TunnelBuildMessage | 21 | 4224 | 500 | |
| TunnelBuildReplyMessage | 22 | 4224 | 300 | |
| TunnelDataMessage | 18 | 1028 | 400 | The most common message. Priority for tunnel participants, outbound endpoints, and inbound gateways was reduced to 200 as of release 0.6.1.33. Outbound gateway messages (i.e. those originated locally) remains at 400. |
| TunnelGatewayMessage | 19 | 300/400 | ||
| VariableTunnelBuildMessage | 23 | 1057 - 4225 | 500 | Shorter TunnelBuildMessage as of 0.7.12 |
| VariableTunnelBuildReplyMessage | 24 | 1057 - 4225 | 300 | Shorter TunnelBuildReplyMessage as of 0.7.12 |
| Others (Types 0, 4-9, 12) | 0, 4-9, 12 | Obsolete, Unused |
Tam protokol belirtimi için I2NP Spesifikasyon sayfasına bakın. Ayrıca Ortak Veri Yapısı Spesifikasyonu sayfasına da bakın.
Gelecek Çalışmalar
Mevcut öncelik şemasının genel olarak etkili olup olmadığı ve çeşitli mesajlar için önceliklerin daha fazla ayarlanması gerekip gerekmediği henüz açık değil. Bu, daha ileri araştırma, analiz ve testler için bir konudur.