Citrix ADC

Caso de uso 2: Configurar la persistencia basada en reglas basada en un par nombre-valor en una secuencia de bytes TCP

Algunos protocolos transmiten pares nombre-valor en una secuencia de bytes TCP. El protocolo de la secuencia de bytes TCP en este ejemplo es el protocolo Financial Information Exchange (FIX). En su implementación tradicional, no XML, el protocolo FIX permite a dos hosts que se comunican a través de una red intercambiar información comercial o comercial como una lista de pares nombre-valor (llamados “campos FIX”). El formato del campo es <tag>=<value><delimiter>. Este formato tradicional de valor de etiqueta hace que el protocolo FIX sea ideal para el caso de uso.

La etiqueta de un campo FIX es un identificador numérico que indica el significado del campo. Por ejemplo, la etiqueta 35 indica el tipo de mensaje. El valor después del signo igual contiene un significado específico para la etiqueta dada y está asociado con un tipo de datos. Por ejemplo, un valor de A para la etiqueta 35 indica que el mensaje es un mensaje de inicio de sesión. El delimitador es el carácter ASCII “Start of Header” (SOH) no imprimible (0x01), que es el símbolo de intercalación (^). A cada campo también se le asigna un nombre. Por ejemplo, el campo con etiqueta 35 es el campo MsgType. A continuación se muestra un ejemplo de un mensaje de inicio de sesión.

8=FIX.4.1 9=61 35=A 49=INVMGR 56=BRKR 34=1 52=20000426-12:05:06 98=0 108=30 10=157

Su elección del tipo de persistencia para una lista de valores de etiqueta como la que se muestra arriba está determinada por las opciones disponibles para extraer una cadena determinada de la lista. Los métodos de persistencia basados en token requieren que especifique el desplazamiento y la longitud del token que quiere extraer de la carga útil. El protocolo FIX no le permite hacerlo, porque el desplazamiento de un campo determinado y la longitud de su valor pueden variar de un mensaje a otro (dependiendo del tipo de mensaje, los campos anteriores y las longitudes de los valores anteriores) y de una implementación a otra (dependiendo de si ). Tales variaciones hacen que sea imposible predecir el desplazamiento exacto de un campo dado o especificar la longitud del valor que se va a extraer como el token. En este caso, por lo tanto, la persistencia basada en reglas es el tipo de persistencia preferido.

Suponga que un servidor virtual fixlb1 está equilibrando la carga conexiones TCP a una granja de servidores que aloja instancias de una aplicación habilitada para Fix, y que quiere configurar la persistencia para las conexiones sobre la base del valor del campo SenderCompid, que identifica a la empresa que envía el mensaje. La etiqueta de este campo FIX es 49 (se muestra en el ejemplo de mensaje de inicio de sesión anterior).

Para configurar la persistencia basada en reglas para el servidor virtual de equilibrio de carga, establezca el tipo de persistencia para el servidor virtual de equilibrio de carga en RULE y configure el parámetro de regla con una expresión. La expresión debe ser aquella que extraiga la parte de la carga útil TCP en la que se espera encontrar el campo SenderCompid, cree la cadena resultante en una lista nombre-valor basada en los delimitadores y, a continuación, extraiga el valor del campo SenderCompid (etiqueta 49), de la siguiente manera:

set lb vserver fixlb1 -persistenceType RULE -rule "CLIENT.TCP.PAYLOAD(300).TYPECAST_NVLIST_T('=','^').VALUE("\49\")"

Nota: Los caracteres de barra invertida se han utilizado en la expresión porque se trata de un comando CLI. Si está utilizando la utilidad de configuración, no introduzca los caracteres de barra invertida.

Si el cliente envía un mensaje FIX que contiene la lista nombre-valor en el ejemplo de mensaje de inicio de sesión anterior, la expresión extrae el valor INVMGR y el dispositivo Citrix ADC crea una sesión de persistencia basada en este valor.

El argumento de la función PAYLOAD () puede ser tan grande como considere necesario para incluir el campo SenderCompid en la cadena extraída por la función. Opcionalmente, puede utilizar la función SET_TEXT_MODE (IGNORECASE) si quiere que el dispositivo ignore mayúsculas y minúsculas al extraer el valor del campo, y la función HASH para crear una sesión de persistencia basada en un hash del valor extraído. La siguiente expresión utiliza las funciones SET_TEXT_MODE (IGNORECASE) y HASH:

CLIENT.TCP.PAYLOAD(500).TYPECAST_NVLIST_T('=','^').SET_TEXT_MODE(IGNORECASE).VALUE("49").HASH

A continuación se presentan más ejemplos de reglas que puede utilizar para configurar la persistencia de conexiones FIX (reemplace <tag> por la etiqueta del campo cuyo valor quiere extraer):

  • Para extraer el valor de cualquier campo FIX en los primeros 300 bytes de la carga útil TCP, puede utilizar la expresión CLIENT.TCP.PAYLOAD(300).BEFORE_STR(“^”).AFTER_STR(“<tag>=”).
  • Para extraer una cadena de 20 bytes de longitud en el desplazamiento 80, convertir la cadena en una lista nombre-valor y, a continuación, extraer el valor del campo que desee, utilice la expresión CLIENT.TCP.PAYLOAD(100).SUBSTR(80,20).TYPECAST_NVLIST_T(‘=’,’^’).VALUE(“<tag>”).
  • Para extraer los primeros 100 bytes de la carga útil TCP, convertir la cadena en una lista nombre-valor y extraer el valor de la tercera aparición del campo que desee, utilice la expresión CLIENT.TCP.PAYLOAD(100).TYPECAST_NVLIST_T(‘=’,’^’).VALUE(“<tag>“,2). Nota: Si el segundo argumento que se pasa a la función VALUE() es n, el dispositivo extrae el valor de la instancia (n+1) <sup>th</sup> del campo porque el recuento comienza desde cero ( 0).

A continuación se presentan más ejemplos de reglas que puede utilizar para configurar la persistencia. Solo las expresiones basadas en la carga útil pueden evaluar los datos que se transmiten a través del protocolo FIX. Las otras expresiones son expresiones más generales para configurar la persistencia basada en protocolos de red más bajos.

  • CLIENT.TCP.PAYLOAD (100)
  • CLIENT.TCP.PAYLOAD (100) .HASH
  • CLIENT.TCP.PAYLOAD (100) .SUBSTR (5,10)
  • CLIENT.TCP.SRCPORT
  • CLIENT.TCP.DSTPORT
  • CLIENT.IP.SRC
  • CLIENT.IP.DST
  • CLIENT.IP.SRC.GET4
  • CLIENT.IP.DST.GET4
  • CLIENT.ETHER.SRCMAC.GET6
  • CLIENT.ETHER.DSTMAC.GET5
  • CLIENT.VLAN.ID

Caso de uso 2: Configurar la persistencia basada en reglas basada en un par nombre-valor en una secuencia de bytes TCP