Bilinmeyen uzantıları içeren IPv6 uzantı başlıklarını ayrıştırma


113

Çok basit bir net filtre yazıyorum ve IPv6 başlıklarını ICMPv6 türleri, TCP / UDP bağlantı noktası numaraları vb. Gibi şeylerle eşleşecek şekilde ayrıştırmak istediğim yere geliyorum.

Bu yüzden, IPv6 paket formatını derinlemesine okuyorum ve bir çeşit ... şey ... Aslında doğru okuduğumdan emin olmak için defalarca okumak zorunda kaldım. Bana 40 baytlık sabit başlık ile başlamanız ve bir sonraki başlık alanına bakmanız gerektiğini düşünüyorum. Sonra, bir sonraki başlığın sonraki başlık alanına ve sonuna ulaşana kadar bağlantılı bir liste gibi bakmanız gerekir. Yük varsa, onu takip edecek.

Sorun, sabit başlıkta veya uzantı başlıklarında uzunluk alanı olmamasıdır. Bu bağlantılı listeyi sonuna kadar takip edebilmeniz için uzantı başlık türleri ve boyutlarının bir tablosuna sahip olmanız gerekir.

Bu bana garip, hatta muhtemelen tavşan beyinli bir tasarım olarak dikkat çekiyor. Tanınmayan bir uzantı başlık türüyle karşılaşırsam ne olur? Ben ne yaparım? Uzunluğunu bilmiyorum. Sanırım paketi atmam ve engellemem gerekiyor, çünkü bir ağ filtresinde paketin geçişine izin verilmesi, bir saldırganın sahte bir başlık türü ekleyerek ağ filtresinden kaçmasına izin verir. Ancak bu, eğer protokol genişletilirse, yeni uzantı kullanılacaksa şimdiye kadar yazılan her bir IPv6 üstbilgi ayrıştırma yazılımı parçasının aynı anda güncellenmesi gerektiği anlamına gelir.

Peki, kullandıkları uzantıları bilmiyorsam IPv6 başlıklarını nasıl ayrıştırabilirim? Uzunluğunu bilmediğim için bilinmeyen bir uzantı için başlığı nasıl atlayabilirim?


10
Bu soruya dayanarak aptal değilmişim gibi görünüyor ve evet bunu doğru okuyorum: (gerçek dünyada) IPv6'ya yeni bir uzantı başlığı eklemek imkansız. stackoverflow.com/questions/9847923/…
AdamIerymenko

10
Ve evet, aynı zamanda hesaplama başlığı uzunluğunun bağlantılı bir liste geçişi gerektirdiği görülüyor: stackoverflow.com/questions/14762193/… Beni yanlış anlamayın. IPv6 harika ve çok gerekli. Ama bu hala kemik başlı görünüyor.
AdamIerymenko

3
Spesifikasyon (en üstteki yorumda bağlantılıdır), yönlendiricilerin başlıklara bakmaması gerektiğini, bu nedenle hangi başlıkları eklediğinizle ilgilenmemesi gerektiğini söylüyor. Yalnızca hedef düğümün başlıklara bakması gerekir.
Anders

2
Sadece bir not: "saç beyinli" oldukça kafa karıştırıcı bir yazımdır ve "tavşan beyinli" tercih edilmelidir (kaynak: tfd )
pzkpfw

2
Tek bir doğru yazım olduğu ölçüde, "tavşan beyinli".
Alan B

Yanıtlar:


33

Çözümleyemeyeceğiniz bir şeyle karşılaşırsanız, kararınızı vermeniz veya eyleminizi önceden ayrıştırdığınız şeye göre yapmanız gerekir.

Tasarım bu şekildedir, çünkü IPv6'da her uzantı başlığı paketin geri kalanını "sarar". Yönlendirme başlığını görürseniz, daha önce hiç duymadığınız bir başlık, ardından yük, o zaman yükü ayrıştıramazsınız. Yükün anlamı prensipte nasıl yorumlanacağını bilmediğiniz başlığa bağlıdır.

Yönlendiriciler bu tür paketleri yönlendirebilirler çünkü tek ihtiyaçları olan yönlendirme başlığıdır. Derin paket inceleme araçları ve benzeri çok şey bilmesi gerekiyor, ama zaten bu onların kaderi.

Eklemek için düzenlendi: Bu tasarım, orta kutuların yalnızca bildiklerini değiştirebileceği anlamına gelir. Bir orta kutu bilmediği bir başlık görürse, yalnızca iki seçeneği vardır: Reddet veya aktar. IPv4'te bilinmeyen uzantıyı da kaldırabilir ve gerisini aktarabilir. IMO bu özellik, tasarımı daha az genişletilebilir kılar.


97

Tanınmayan bir uzantı başlık türüyle karşılaşırsam ne olur?

Gönderen RFC 2460 :

Bir başlığın işlenmesinin bir sonucu olarak, bir sonraki başlığa ilerlemek için bir düğüm gerekiyorsa, ancak geçerli başlıktaki Sonraki Başlık değeri düğüm tarafından tanınmıyorsa , paketi atmalı ve kaynağa bir ICMP Parametre Sorunu mesajı göndermelidir paketinin 1 bir ICMP Kod değeri ( "tanınmayan Sonraki Üstbilgi karışmış") ve orijinal paket içinde bilinmeyen değer ofset içeren ICMP İşaretçi alanıyla. Bir düğüm, IPv6 üstbilgisi dışındaki herhangi bir başlıkta Sonraki Üstbilgi değeriyle sıfır olarak karşılaşırsa aynı eylem gerçekleştirilmelidir.


15
İyi. Aklımı kaçırdığımı sandım. Yani evet, gerçekten tamamen genişletilemez bir tasarım ... en azından bant içi sinyal ve diğer hackler olmadan. Bu, her iki ucu da kontrol ettiğiniz ve uygulamanızın yalnızca yeni sürümlerini hesaba katmanız gereken, ancak yüzlerce yıl dayanacak şekilde tasarlanmış bir şeyde değil, bir uygulama protokolünde mazur görülebilir mi?
AdamIerymenko

8
Bilinmeyen başlıkları görmezden gelme yeteneğine sahip olmak çok daha karmaşık sorunlara yol açacaktır. (Bir ara proxy, kapsülleyen bir ESP başlığını bilmeden TCP başlıklarını değiştirirse ne olur?) Basitlik bu durumda "genişletilebilir" i geride bırakır!
jman

4
@Max IPv6, dünyadaki her bir atoma bir tane atamak için tam anlamıyla yeterli adrese sahiptir. Bu alanı tüketecek çok sayıda İnternet bağlantılı ekmek kızartma makinesi yok.
Tyler McHenry

8
@Max IPv7'ye kesinlikle ihtiyacımız olmayacağını söylemeyeceğim, ancak IPv6 ile Dünya atmosferindeki her bir kübik milimetreye (130.000 km yukarıda) benzersiz bir adres vermek için yeterli adres alanına sahibiz ... 100.000 kat fazla. Yani, diğer galaksileri kolonileştirmeye başladığımızda endişelenecek bir şeyimiz olabilir, ama o zamana kadar oldukça iyi olmalıyız.
cincodenada

4
Bazı içerik eksik:With one exception, extension headers are not examined or processed by any node along a packet's delivery path, until the packet reaches the node (or each of the set of nodes, in the case of multicast) identified in the Destination Address field of the IPv6 header.
Tobu

28

IPv6'ya yeni bir uzantı başlığı eklemek (gerçek dünyada) imkansızdır.

Yanlış, çünkü:

  1. Tanınmayan uzantı başlıklarına dayalı olarak yalnızca hedef ana bilgisayarın reddetmesine izin verilir ( bağladığınız soruda belirtilen istisna dışında )

  2. Yeni uzantı başlığınız bir şekilde isteğe bağlıysa (olması daha iyi), bununla ilgili bir ICMP hatası alırsınız ve onsuz tekrar deneyebilirsiniz.


1
Ve ICMP paketinin NAT üzerinden gerçek gönderene ulaşacağından emin misiniz?
Dexter

5
@Dexter ipv6 NAT'ı öldürecek ... umarım
Janus Troelsen

2
@Dexter: Bu ICMP paketlerinin birkaç nedenden dolayı ulaşması gerekir. Örneğin, borunun MTU'su küçüldüyse (belki de PPPoE veya VPN nedeniyle paket kapsülleme gerçekleşmişse) ve gönderilen paket çok büyükse, paketin çok büyük olduğunu söyleyen bir ICMP paketi döndürülür.
Bill Lynch

4
@JanusTroelsen herkes umutlarını paylaşmaz.
Dexter

4

RFC 6564 güncellemesi bu durumu kapsar. Tam olarak tanımladığınız senaryoyu ortaya koyar ve sizinki gibi orta kutuların en azından bir süre çalışabileceği herhangi bir yeni uzantı başlığı (eğer varsa) için bir biçim ortaya koyar.

IPv6'yı yeni uzantı başlıkları oluşturarak değil, yeni Hedef Seçenekleri ekleyerek genişletmenin amaçlandığını unutmayın. Bilinmeyen hedef seçenekleriyle uğraşmak sizin için önemsiz veya en azından çok daha kolay olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.