lunes, 4 de febrero de 2013

Tarea 1: Clase Redes de Telecomunicación

Advanced Sockets Application Program Interface (API) for IPv6
RFC 3542


En la actualidad la portabilidad de las aplicaciones que utilizan sockets IPv4 es bastante alta, esto se debe a que la mayoria de las implementaczzziones partió de una base común, el código fuente Berkeley.

Con IPv6, no hay ninguna base de código fuente común que puedan usar los ejecutares y la posibilidad de divergencia en este nivel entre diferentes implementaciones es alta. Es necesario una estandarizacion para evitar una falta de portabilidad entre las aplicaciones que utilizan IPv6 raw sockets.

2. Estructuras comunes y definiciones


En esta parte hablamos acerca de Las definiciones de las constantes y estructuras básicas necesarias para aplicaciones utilizar primas sockets IPv6. La API asume que los campos en los encabezados del protocolo se dejan en el orden de bytes de red que es big-endian para los protocolos de internet, si no es el caso los campos se comvierten en tiempo de ejecución usando algo como htons() o htonl(). Dos nuevos archivos de cabecera se definen: netinet ip6.h="" y netinet icmp6.h="".

2.1 Estructura ip6_hdr

Al incluir se define una nueva estructura, e definen cabeceras de extensión para IPv6: 


  • Authentication header
  •  Encapsulating Security Payload header 
  •  Routing header
  •  Type 0 Routing header
  •  Fragment header


Las cabeceras ateriores se les define una estructura menos a las dos primeras, además de que se agregan dos opciones de cabecera:



  •  Hop-by-Hop options header 
  •  Destination options header


IPv6 define muchos nuevos valores para el siguiente campo de cabecera y se definen unas nuevas constantes al incluir "netinet in.h=""". "/netinet"

2.2 Opciones de IPv6

 Las opciones de IPv6 también se obtienen incluyendo y son las siguientes:

 Jumbo Payload 

Optio NSAP Address Option
 Tunnel Limit Option
 Router Alert Option

2.3. Estructura icmp6_hdr 



Al igual que en lo anterior se define una nueva estructura y se definen nuevos valores para el campo de cabecera pero esto se hace añadiendo "netinet/icmp6.h".

2.4Pruebas de direccionamiento de macros

EL API básico define algunos macros para probar una dirección IPPv6 para ciertas propiedades, extiende definiciones adicionales con marcos de dirección de prueba, se define añadiendo "netinet/in.h".

int IN6_ARE_ADDR_EQUAL (const struct in6_addr *const struct in6_addr *);

Devuelve un valor diferente a 0 si las direcciones son iguales sino devuelve el 0.

2.5 Protocolos de archivos


Para IPv6 se definen los sigueintes nombres de protocolos con sus valores que se muestran:

  •  hopopt 0 # hop-by-hop opciones para ipv6
  • ipv6 41 # ipv6  
  • ipv6-route 43 # encabezado de enrutamiento para ipv6
  •  ipv6-frag 44 # fragmento de encabezado de IPv6
  • esp 50 # seguridad de carga útil para encapsular IPv6
  • ah 51 # cabecera de autenticación para ipv6
  •  ipv6-icmp 58 # ICMP para IPv6
  •  ipv6-nonxt 59 # sin encabezado siguiente para ipv6
  • ipv6-opts 60 # Opciones de destino de IPv6




3. IPv6 Raw Sockets

Los conectores directos pasar por alto la capa de transporte, con IPv6 estos conectores su utilizán para ICMPv6 y para leer y escribir los datagramas IPv6.

Los objetos de datos auxiliares se utilizan para transferir las cabeceras de extensión e información Límite HOP. Si una aplicación necesita acceder al paquete IPv6 completa, alguna otra técnica, como el enlace de datos interfaces de BPF o DLPI, se debe utilizar.

Todos los campos con excepción de la etiqueta de flujo en la cabecera IPv6 pueden cambiarse mediante los datos auxiliares y las opciones de socket de la solicitud de salida.

Esta API no define el acceso al campo de etiqueta de flujo, porque hoy no hay uso estándar del campo.

3.1 Checksums

El kernel calcula e inserta el ICMPv6 checksum para ICMPv6 raw sockets, ya que esta suma de comprobación es oblogatoria.

Para otros raw IPv6 sockets la aplicación debe establecer la opción new IPV6_CHECKSUM socket para que el kernel calcule y almacene la suma de comprobación para la salida y verificar el cheksum recibido en la entrada, y descarta el paquete si la suma de comprobación es un error., la suma se incorporará el pseudo-encabezado IPv6.

3.2 ICMPv6 Tipo de Filtrado

ICMPv6 es un superconjunto de ICMPv4, que también incluye la funcionalidad de IGMPv4 y ARPv4, un conector directo ICMPv6 potencialmente puede recibir mensajes de muchos más que sería recibida con una toma de ICMPv4 raw socket.

Para transferir extraños mensajes ICMPv6 desde el kernel hasta el usuario puede incurrir en importantes gastos. Por lo tanto esta API incluye un método de filtrado de mensajes ICMPv6 por el campo de tipo de ICMPv6.

4.ICMPv6 Verificación de paquetes recibidos

Una aplicación puede realizar comprobaciones adicionales de validez del contenido de los mensajes ICMPv6 y descartar paquetes mal formados. La pila de protocolos no se ha de descartar paquetes ICMP si el tipo es desconocido para la pila.

5.  El acceso a IPv6 y encabezados de extensión

Las aplicaciones deben ser capaces de controlar el contenido de encabezado IPv6 cabecera y la extensión cuando se envía, así como ser capaz de recibir el contenido de estos encabezados.

Esto se hace mediante la definición de los tipos de opciones de socket que se pueden usar tanto con setsockopt y con datos auxiliares.

La siguiente información opcional se pueden intercambiar entre la aplicación y el kernel:

1. El envío / recepción de interfaz y fuente / dirección de destino,
2. El límite de saltos,
3. Dirección del siguiente salto,
4. La clase de tráfico,
5. Enrutamiento de cabecera,
6. Hop-by-Hop Opciones de cabecera, y
7. Opciones de destino de cabecera.

En primer lugar, para recibir cualquiera de esta información opcional en un UDP o conector sin procesar, la aplicación debe llamar a setsockopt ().


Para más información: Link 




1 comentario:

  1. implementaczzziones... Cuida la ortografía. Al final tendría que estar una discusión crítica tuya, o sea que concluyas algo.

    ResponderEliminar