LWIP pila de protocolo: el protocolo IP

1. Descripción general del protocolo IP

protocolo IP (Protocolo de Internet), también conocido como Protocolo de Internet, que pertenece a la capa de red. protocolo IP dirección IP como identificador único, responsable de enviar datos desde el host de origen al host de destino.

protocolo IP es un protocolo de entrega de datagramas no fiable sin conexión, el protocolo en sí no proporciona ninguna comprobación de errores y de mecanismos de recuperación. 

1.1 dirección IP

En Internet, cada host tiene una dirección IP única como una marca de identificación.

(1) Categoría abordar

dirección IP se puede dividir en cinco categorías: una clase, las clases B, Clase C, Clase D, Clase E, la siguiente composición en la figura.

   Características de las direcciones IP, como se muestra a continuación.

   (2) Las direcciones IP Especial

direcciones IP especiales que se utilizan para fines especiales, no se pueden asignar a un host mediante cualquiera de la red.

dirección de difusión limitada  número de red, número de host dirección completa (255.255.255.255) 1, y un host en Internet. Sin embargo, debido a que el router prohíbe el envío de paquetes de datos IP 255.255.255.255 dirección, este paquete sólo será difusión en la red LAN.
dirección de difusión directa  dirección de host número completo 1, lo que indica que todos los hosts en la LAN,
dirección de multidifusión  Las direcciones de clase D que pertenecen a la dirección de multidifusión, un emisor, una pluralidad de receptores. dirección IP de clase D como dirección de destino no se puede utilizar como la dirección IP de origen.
dirección de bucle  direcciones de clase A, todas las direcciones son 127 dirección del segmento de bucle de retroceso para probar la red de protocolo está funcionando. Por ejemplo, mesa de ping 127.1.1.1 puede poner a prueba el protocolo TCP / IP local está funcionando correctamente.
Esta red esta serie  La dirección completa es la dirección IP (0.0.0.0) 0, y esto indica que este host de red. La única dirección que la dirección de origen para la dirección IP situaciones ambiguas locales.

 1.2 LAN, WAN, Internet

LAN (red de área local, abreviado como LAN), también conocida como la red, la red de ordenadores que abarca un área local.

WAN ((Wide Area Network, WAN abreviada), también conocida como la red externa, pública, una red de ordenadores conectados a diferentes áreas de la comunicación.

Internet, formado por numerosas líneas de interconexión LAN a través de WAN convergen.

LAN, WAN, inter-relación entre la Internet como se muestra a continuación.

  • enrutador inalámbrico para teléfonos móviles, ordenadores asignar IP LAN (LAN-IP). la dirección IP de router, asignado por el operador (el operador de la dirección IP local), esta dirección se convierte a la dirección IP de la WAN (WAN-IP). dirección IP WAN (WAN-IP) también necesita ser convertida a una dirección de Internet IP pública (Global-IP), para entrar en Internet.
  • IP traducción de direcciones de red de comunicación: LAN-IP <-> WAN IP <-> Global IP.

1.3 Traducción de Direcciones de Red

NAT (Network Address Translation), traducción de direcciones de red, y su función es la de alternar entre la dirección IP de la dirección IP LAN y WAN, LAN completa en IP <-> conversión entre la WAN IP.

Ejemplo:

  • Router que tiene función de NAT tiene dos direcciones IP, una dirección interna, para la comunicación dentro de la LAN; una dirección externa, para comunicar con una red de área amplia, asignados por el operador.
  • Router con función NAT mantiene una tabla de traducción NAT en el interior. Cuando el router recibe el datagrama IP de LAN, un router asignará su puerto interno NAT para datagramas (por ejemplo: el puerto 6666), la dirección IP host de red de área local (192.168.0.181:5555) y la dirección IP WAN (223.166.166.66: 6666) una asignación de la forma. Por lo tanto, permite a los hosts de LAN para comunicarse con una red de área amplia.
  • El NAT, el router conectado a cada LAN anfitrionas NAT asigna un número de puerto exclusivo, y la recuperación del número de puerto fracaso.

2. paquetes IP

2.1 Formato de paquete IP

  •  Versión: El número de versión del protocolo IP. número de versión IPv4 es 4, IPv6 es la versión 6.
  • longitud de la cabecera: espacio de grabación IP, la "palabra" unidad de cabecera ocupada. Contabilización de 4 bits, por lo que la longitud máxima de la cabecera de IP es de 15 * 4 = 60Byte.
  • Tipo de servicio (TOS): se utiliza para distinguir los diferentes paquetes IP. Por ejemplo, para distinguir algunos requisitos especiales de baja latencia, de alto rendimiento o la fiabilidad de los paquetes de datos; enrutador a fin de facilitar una ruta más razonable tales como paquetes IP.
  • Datagramas de longitud: longitud total del paquete de IP, la cabecera de longitud + área de datos de IP, la unidad de "bytes". La longitud es en general no más que la longitud máxima de tramas de datos Ethernet (MTU_MAX = 1500Byte), excede, necesidad de ser transmisión fragmentada. Si la longitud es menor que MTU_MIN (46Byte), necesidad MTU_MIN llena antes de enviar.
  • Identificación: determinar para cada IP fragmentos de datagramas pertenecen al mismo datagrama. Cada transmisión de un datagrama IP, el valor del campo 1; pertenecen a la misma fragmento de datagrama IP, igual al valor del campo.
  • Símbolo: 3BIT contabilidad. La BIT (0) reservado para uso futuro; el BIT (1) que indica que el paquete de datos es un proceso de fragmentación permite 0 la desactiva de procesamiento de fragmentación (En este momento, si la longitud del paquete de datos excede MTU_MAX, entonces el datagrama se descarta); TBI (2) 0 indica que el fragmento es el último fragmento de todo el datagrama, y ​​no viceversa.
  • Fragmento Offset: indica los datos de corrección de fragmentación corriente transportada por todo el datagrama IP a las unidades 8Byte.
  • El tiempo de supervivencia (TTL): Cada vez que un datagrama IP se procesa router, el valor del campo menos 1; cuando disminuye a 0, el datagrama se descarta. asegurando de esta manera que los datagramas IP no siempre estarán circulando en la red (por ejemplo, debido a la elección de un bucle de enrutamiento de largo).
  • protocolo de capa superior: protocolo de transmisión de datos que representa la porción del datagrama IP debe ser entregado (TCP, UDP,).
  • cabecera de comprobación: IP datagrama cabecera suma de comprobación y ayuda a que el router detecta el encabezado del datagrama IP recibido es correcto.
  • Fuente Dirección IP: Dirección IP del host de origen.
  • Dirección de destino IP: Dirección IP del host de destino.
  • Selección: Este campo no tiene que parte. LWIP pila de protocolos sólo reconoce campo de opción, pero no procesa su contenido.
  • área de datos: IP datagramas de la cantidad de datos para llevar.

PD: A diferencia de IPv4 e IPv6 formato de paquete, grabada aquí para paquetes IPv4.

2.2 IP definiciones de la estructura de datos en paquetes

LWIP define ip_hdr estructura descrita cabecera del paquete IP, mientras que los paquetes IP define obtener información de cabecera definiciones de macro, definiciones de macros proporcionan información de cabecera del paquete IP. Fuente Localización: lwip_2_1_2 / src / core / ipv4 / ip4_frag.c

Para definir la estructura ip_hdr desactiva cuando la operación de alineación corporal compilador, porque muchos de los campos de la estructura son por operación de bit.

. 1  PACK_STRUCT_BEGIN
 2  struct ip_hdr
 . 3  {
 . 4      / * versión / longitud de la cabecera * / 
5.      PACK_STRUCT_FLD_8 (u8_t _v_hl);
 . 6      / * tipo de servicio * / 
. 7      PACK_STRUCT_FLD_8 (_tos u8_t);
 . 8      / * de paquetes de datos de longitud total * / 
. 9      PACK_STRUCT_FIELD (u16_t _len);
 10      / * identificador de campo * / 
. 11      PACK_STRUCT_FIELD (u16_t _ID);
 12 es      / * bandera y el desplazamiento * / 
13 es      PACK_STRUCT_FIELD (u16_t _offset);
 14  #define IP_RF 0x8000U / * bandera reservada * /
15  #define IP_DF 0x4000U / * Do bandera no Fragmento * /
 16  #define IP_MF 0x2000U / * Más bandera Frag * /
 . 17  #define IP_OFFMASK 0x1fffU / * Máscara para el segmento * /
 18      / * Tiempo de supervivencia * / 
. 19      PACK_STRUCT_FLD_8 (_ttl u8_t);
 20 es      / * de protocolo superior * / 
21 es      PACK_STRUCT_FLD_8 (_proto u8_t);
 22 es      / * suma de comprobación * / 
23 se      PACK_STRUCT_FIELD (u16_t _chksum);
 24      / * la dirección IP de origen y dirección IP de destino * / 
25      PACK_STRUCT_FLD_S (ip4_addr_p_t la src);
 26 es      PACK_STRUCT_FLD_S (ip4_addr_p_t dest);
 27 PACK_STRUCT_STRUCT};
 28  PACK_STRUCT_END
 29  
30  
31 es  / * Obtener la información del campo de cabecera de datagramas IP de cada macro * / 
32  
33 es  // Obtener Protocol Version 
34 es  #define IPH_V (HDR) ((HDR) -> _ V_HL >> 4.)
 35  // la obtención de la longitud de la cabecera (palabra) 
36  # define IPH_HL (HDR) ((HDR) -> _ V_HL y 0x0F)
 37 [  // llegar llegar byte de cabecera longitud de 
38 es  #define . IPH_HL_BYTES (HDR) ((u8_t) (IPH_HL (HDR) 4 * ))
 39  // obtener el tipo de servicio de 
40  #define IPH_TOS (HDR) ((HDR) -> _ TOS)
 41 se  // obtener la longitud del paquete de datos 
42 es  #defineIPH_LEN (HDR) ((HDR) -> _ len)
 43 es  // obtener el identificador de paquete de datos 
44 es  #define IPH_ID (HDR) ((HDR) -> _ ID)
 45  // consigue el indicador de fragmentación + offset 
46 es  #define IPH_OFFSET (HDR) ((HDR) -> _ offset)
 47  // Obtener el tamaño de desplazamiento (bytes) 
48  # define IPH_OFFSET_BYTES (HDR) \
 49 ((u16_t) ((lwip_ntohs (IPH_OFFSET (HDR)) y IP_OFFMASK) * 8U ))
 50  // Obtener el tiempo de supervivencia 
51 se  #define IPH_TTL (HDR) ((HDR) -> _ TTL)
 52 es  // Obtener el protocolo de capa superior 
53 es  #define IPH_PROTO (HDR) ((HDR) -> _ proto)
 54 es  // Obtener cheque y 
55 #define IPH_CHKSUM (HDR) ((HDR) -> _ chksum)
 56  
57  
58  / * macro se utiliza para llenar en el encabezado del datagrama IP * / 
59  
60  // establecer el número de la versión con la longitud de la cabecera 
61  #define IPH_VHL_SET (HDR, v, hl ) \
 62 (HDR) -> _ V_HL = (u8_t) ((((V) << 4 ) | (hl)))
 63  // establecer el tipo de servicio 
de 64  #define IPH_TOS_SET (HDR, tos) (HDR) -> _ tos = (TOS)
 65  // establecer la longitud total del datagrama 
66  #define IPH_LEN_SET (HDR, len) (HDR) -> _ = len (len)
 67  // fijar el indicador 
68  #define IPH_ID_SET (HDR, ID) (HDR) -> = _ID (ID)
 69 // establecer el indicador de la fragmentación de compensación 
70  # define IPH_OFFSET_SET (HDR, OFF) (HDR) -> _ = desplazamiento (OFF)
 71 es  // establecer el tiempo para vivir 
72  # define IPH_TTL_SET (HDR, TTL) (HDR) -> _ TTL = (u8_t) (TTL)
 73 es  // establecer el protocolo superior 
74  #define IPH_PROTO_SET (HDR, proto) (HDR) -> _ proto = (u8_t) (proto)
 75  // establecer la suma de comprobación 
76  #define IPH_CHKSUM_SET (HDR, chksum ) (HDR) -> _ chksum = (chksum)
de paquetes de datos definiciones de la estructura IP

 3. IP datagrama fragmento

Motivo (1) fragmento tratado

datagrama IP se transmite a la capa de enlace, el vínculo datagramas capa IP encapsulados marco de capa de enlace, la tarjeta hardware transmitirán marco de capa de enlace para el host de destino. La cantidad máxima de datos que se pueden realizar en un marco de capa de enlace se llama la unidad de transmisión máxima (MTU), diferente MTU tarjeta de hardware puede ser diferente. Cuando la longitud del datagrama IP excede el MTU, la necesidad de proceso a ser fragmentado antes de la transmisión.

Principio (2) del procesamiento fragmento

Fragmento datagrama IP de procesamiento, el área de datos es cortar el datagrama IP en varios datagramas IP más pequeños, y transmite la trama de capa de enlace de encapsulado individual.

  • Cada rebanada cabecera IP, además de "bandera", "fragmento compensado" estos dos campos, el resto son los mismos.
  • Unidad "fragmento offset" campo es 8Byte, por lo que la longitud del área de datos de sector debe ser un múltiplo entero de 8.
  • BIT última bandera fragmento (2) es 0, lo que indica que el fragmento es el último fragmento.
  • Después de todos los fragmentos que llegan al host de destino capa IP, de recarga, para formar un paquete IP completo.

(3) el ejemplo de procesamiento de fragmento

4000Byte un host envía datagrama IP, MTU capa de enlace = 1500Byte, la necesidad de que el proceso original fragmentación de datagramas IP.

datagrama IP original (4000Byte) = IP header (20Byte) + área de datos (3980Byte), el área de datos es de corte y relleno cada rebanada IP "flag" cabecera "Fragmento Offset" campo.

El primer fragmento: "Flag" BIT campo (2) = 1, el fragmento de desplazamiento de 0, la longitud del paquete de segmento de datos (1500Byte) = IP header (20Byte) + área de datos (1480Byte);

El segundo fragmento: "Flag" BIT campo (2) = 1, Desplazamiento del fragmento 185 (1480/8), rebanada longitud del paquete de datos (1500Byte) = IP header (20Byte) + área de datos (1480Byte) ;

La tercera sub-hoja: "Flag" BIT campo (2) = 0, fragmento compensado 370 (185 + 185), rebanada longitud del paquete de datos (1040Byte) = (20Byte) + área de datos de cabecera IP (1020Byte) .

 (4) la fuente de procesamiento fragmento

fuente procesamiento Fragmento se posiciona "lwip_2_1_2 / src / core / ipv4 / ip4_frag.c", pide el destino host "ip4_frag) (" función en el datagrama IP y se envía al proceso de fragmentación.

4. Los datagramas IP que envían y reciben

la transmisión de datagramas IP y la recepción, la fuente se encuentra: lwip_2_1_2 / src / core / ipv4 / ip4.c

4.1 IP datagramas enviados

  •  Cuando las necesidades de capa de transporte para enviar los datos, la necesidad de transferencia de datos a transmitir al protocolo de capa de red IP, IP de capa de las llamadas "ip4_output ()" función para enviar datagramas IP.
  • "Ip4_output ()" llamada de función "ip4_route_src ()" Selecciona la función de una tarjeta NIC adecuado de acuerdo con la lista de direcciones IP de destino que emparejan condición: dirección de destino IP y una subred en la dirección de tarjeta de red, o la dirección IP de destino igual a la tarjeta de puerta de enlace dirección. Luego llame "ip4_output_if ()" función para enviar datagramas IP.
  • "Ip4_output_if_src) (" función para ajustar el puntero de carga útil a la dirección inicial de la cabecera del datagrama IP, rellene la información del encabezado IP, y la clasificación datagrama IP. Si la dirección IP de destino igual a la dirección IP de origen del host, se llama "netif_loop_output ()" de nuevo bucle de función a la entrada, y si la longitud del datagrama IP excede el MTU, se llama "ip4_frag) (" transmisión fragmentado función, de lo contrario llamar directamente "netif -> salida de "interfaz de datagrama IP se pasa al protocolo ARP para la transmisión.

4.2 datagramas IP recibidos

  • capa de enlace recibe un datagrama IP, es procesada por función "ethernet_input ()", entonces pasa a la función ") (ip4_input".
  • "Ip4_input ()" primera función comprueba si el encabezado del datagrama IP para la versión del protocolo IPv4, y luego encontrar un objetivo eficaz en la lista de tarjetas de adaptador de red local basada en la dirección IP de destino. No si la dirección IP de destino es igual a la dirección de host, a través de la "ip4_addr_isloopback ()" función para determinar si la dirección IP de destino de la dirección de bucle de retorno. Si el juego para la tarjeta de destino, entonces la llamada a la rebanada "ip4_reass ()" función de recarga, y pasar los datos al protocolo de capa de transporte especificada. Si no encuentra la tarjeta de destino, para los paquetes de difusión borrar directamente los datos reportados para el paquete no broadcast se pueden reenviar a través de la función "ip4_forward ()".

5. Referencias

1. pólvora "el desarrollo de aplicaciones lwip guía práctica."

Supongo que te gusta

Origin www.cnblogs.com/linfeng-learning/p/12456138.html
Recomendado
Clasificación