Red Hat Training

A Red Hat training course is available for RHEL 8

25.2. Uso de iproute2 para notificar a las aplicaciones sobre múltiples rutas disponibles

Por defecto, el socket MPTCP se inicia con un único subflujo, pero puede añadir nuevos subflujos y direcciones IP a la conexión una vez que la cree por primera vez. Este procedimiento describe cómo actualizar los límites por conexión para los subflujos y las direcciones IP, y añadir nuevas direcciones IP (puntos finales) a la conexión MPTCP.

Tenga en cuenta que MPTCP todavía no admite puntos finales mixtos IPv6 e IPv4 para el mismo socket. Utilice puntos finales que pertenezcan a la misma familia de direcciones.

Procedimiento

  1. Establezca los límites por conexión y por dirección IP en 1 en el servidor:

    # ip mptcp limits set subflow 1

  2. Establezca los límites por conexión y por dirección IP en 1 en el cliente:

    # ip mptcp limits set subflow 1 add_addr_accepted 1

  3. Añade la dirección IP 198.51.100.1 como nuevo punto final MPTCP en el servidor:

    # ip mptcp endpoint add 198.51.100.1 dev enp1s0 signal

    Importante

    Puede establecer los siguientes valores para las banderas: subflow, backup, signal. Fijar la bandera en;

    • signal, envía un paquete ADD_ADDR después de que se haya completado el apretón de manos a tres bandas
    • subflow, envía un MP_JOIN SYN por el cliente
    • backup, establece el punto final como dirección de reserva
  4. Inicie el servidor vinculado a 0.0.0.0 con el argumento -k para evitar que [systemitem]'ncat' cierre el socket de escucha después de aceptar la primera conexión y hacer que el servidor rechace MP_JOIN SYN hecho por el cliente.

    # ncat -4 0.0.0.0 -k -l 4321

  5. Inicie el cliente y conéctese al servidor para intercambiar tráfico. Por ejemplo, aquí el cliente escribe "Hola mundo" al servidor 5 veces, y luego termina la conexión.

    # ncat -4 192.0.2.1 4321
    Hello world 1
    Hello world 2
    Hello world 3
    Hello world 4
    Hello world 5

    Pulse Ctrl+D para salir.

Pasos de verificación

  1. Verifique la conexión y el límite de la dirección IP:

    # ip mptcp limit show

  2. Verifique el nuevo punto final añadido:

    # ip mptcp endpoint show

  3. Capturar el tráfico mediante tcpdump y comprobar el uso de la subopción MPTCP:

    # tcpdump -tnni interface tcp port 4321
    client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [S], seq 3107783947, win 29200, options [mss 1460,sackOK,TS val 2568752336 ecr 0,nop,wscale 7,mptcp capable v1], length 0
    client In  IP 192.0.2.1.4321 > 192.0.2.2.56868: Flags [S.], seq 4222339923, ack 3107783948, win 28960, options [mss 1460,sackOK,TS val 1713130246 ecr 2568752336,nop,wscale 7,mptcp capable v1 {0xf51c07a47cc2ba75}], length 0
    client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [.], ack 1, win 229, options [nop,nop,TS val 2568752336 ecr 1713130246,mptcp capable v1 {0xb243376cc5af60bd,0xf51c07a47cc2ba75}], length 0
    client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [P.], seq 1:17, ack 1, win 229, options [nop,nop,TS val 2568752336 ecr 1713130246,mptcp capable v1 {0xb243376cc5af60bd,0xf51c07a47cc2ba75},nop,nop], length 16
    client In  IP 192.0.2.1.4321 > 192.0.2.2.56868: Flags [.], ack 17, win 227, options [nop,nop,TS val 1713130246 ecr 2568752336,mptcp add-addr id 1 198.51.100.1 hmac 0xe445335073818837,mptcp dss ack 5562689076006296132], length 0
    client Out IP 198.51.100.2.42403 > 198.51.100.1.4321: Flags [S], seq 3356992178, win 29200, options [mss 1460,sackOK,TS val 4038525523 ecr 0,nop,wscale 7,mptcp join backup id 0 token 0xad58df1 nonce 0x74a8137f], length 0
    client In  IP 198.51.100.1.4321 > 198.51.100.2.42403: Flags [S.], seq 1680863152, ack 3356992179, win 28960, options [mss 1460,sackOK,TS val 4213669942 ecr 4038525523,nop,wscale 7,mptcp join backup id 0 hmac 0x9eff7a1bf4e65937 nonce 0x77303fd8], length 0
    client Out IP 198.51.100.2.42403 > 198.51.100.1.4321: Flags [.], ack 1, win 229, options [nop,nop,TS val 4038525523 ecr 4213669942,mptcp join hmac 0xdfdc0129424f627ea774c094461328ce49d195bc], length 0
    client In  IP 198.51.100.1.4321 > 198.51.100.2.42403: Flags [.], ack 1, win 227, options [nop,nop,TS val 4213669942 ecr 4038525523,mptcp dss ack 5562689076006296132], length 0

    El paquete tcpdump es necesario para ejecutar este comando.

Recursos adicionales

  • Para más información sobre las banderas disponibles para los puntos finales, consulte la página man ip-mptcp(8).