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
- Authentication header
- Encapsulating Security Payload header
- Routing header
- Type 0 Routing header
- Fragment header
- 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
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".
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.
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,
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.
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
implementaczzziones... Cuida la ortografía. Al final tendría que estar una discusión crítica tuya, o sea que concluyas algo.
ResponderEliminar