Red Hat Training

A Red Hat training course is available for RHEL 8

25.2. Usando o iproute2 para notificar aplicações sobre múltiplos caminhos disponíveis

Por padrão, o soquete MPTCP começa com um único subfluxo, mas você pode adicionar novos subfluxos e endereços IP à conexão uma vez que você a crie pela primeira vez. Este procedimento descreve como atualizar os limites por conexão para subfluxos e endereços IP, e adicionar novos endereços IP (endpoints) à conexão MPTCP.

Note que o MPTCP ainda não suporta terminais mistos IPv6 e IPv4 para o mesmo soquete. Use endpoints que pertençam à mesma família de endereços.

Procedimento

  1. Defina os limites por conexão e endereço IP para 1 no servidor:

    # ip mptcp limits set subflow 1

  2. Estabelecer os limites por conexão e endereço IP para 1 no cliente:

    # ip mptcp limits set subflow 1 add_addr_accepted 1

  3. Adicione o endereço IP 198.51.100.1 como um novo endpoint MPTCP no servidor:

    # ip mptcp endpoint add 198.51.100.1 dev enp1s0 signal

    Importante

    Você pode definir os seguintes valores para as bandeiras: subflow, backup, signal. Colocando a bandeira em;

    • signal, envia um pacote ADD_ADDR depois que o aperto de mão triplo for concluído
    • subflow, envia um MP_JOIN SYN pelo cliente
    • backup, define o ponto final como um endereço de backup
  4. Iniciar a ligação do servidor a 0.0.0.0 com o argumento -k para evitar que o [systemitem]'ncat' feche a tomada de escuta após aceitar a primeira conexão e fazer o servidor rejeitar MP_JOIN SYN feito pelo cliente.

    # ncat -4 0.0.0.0 -k -l 4321

  5. Inicie o cliente e conecte-se ao servidor para trocar tráfego. Por exemplo, o cliente aqui escreve "Olá mundo" para o servidor 5 vezes, depois ele encerra a conexão.

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

    Imprensa Ctrl+D para desistir.

Etapas de verificação

  1. Verificar a conexão e o limite de endereço IP:

    # ip mptcp limit show

  2. Verificar o ponto final recém-adicionado:

    # ip mptcp endpoint show

  3. Capture o tráfego usando tcpdump e verifique o uso de sub-opções 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

    O pacote tcpdump é necessário para executar este comando.

Recursos adicionais

  • Para mais informações sobre as bandeiras de endpoint disponíveis, consulte a página de manual ip-mptcp(8).