GNU/Linux >> Linux Esercitazione >  >> Linux

Impostare TCP_QUICKACK e TCP_NODELAY

Usa TCP_QUICKACK, non TCP_NODELAY

L'attivazione di TCP_NODELAY ha effetti simili, ma può aumentare il throughput per piccole scritture. Se scrivi un ciclo che invia solo pochi byte (caso peggiore, un byte) a un socket con "write()", e l'algoritmo Nagle è disabilitato con TCP_NODELAY, ogni scrittura diventa un pacchetto IP. Questo aumenta il traffico di un fattore 40, con IP e TCPheader per ogni payload. La prevenzione di Tinygram non ti consentirà di inviare un secondo pacchetto se ne hai uno in volo, a meno che tu non abbia dati sufficienti per riempire il pacchetto di dimensioni massime. Accumula byte per un tempo di andata e ritorno, quindi invia tutto nella coda. È quasi sempre quello che vuoi. Se hai impostato TCP_NODELAY, devi essere molto più consapevole dei problemi di buffering e flushing. Niente di tutto ciò ha importanza per i trasferimenti bulk unidirezionali, che oggi sono la maggior parte degli HTTP. (Non ho mai esaminato l'impatto di questo sull'handshake SSL, dove potrebbe avere importanza.) Versione abbreviata:set TCP_QUICKACK. Se trovi un caso in cui questo peggiora le cose, fammelo sapere. John Nagle

https://news.ycombinator.com/item?id=10608356


Non esiste una relazione diretta tra queste due opzioni, sono solo per scopi diversi.

TCP_NODELAY ha lo scopo di disabilitare/abilitare il buffering del segmento in modo che i dati possano essere inviati al peer il più rapidamente possibile, quindi viene generalmente utilizzato per migliorare l'utilizzo della rete. TCP_QUICKACK viene utilizzato per inviare riconoscimenti il ​​prima possibile rispetto a quelli ritardati in alcuni scambi a livello di protocollo e non è stabile/permanente, le successive transazioni TCP (che possono avvenire sotto il cofano) possono ignorare questa opzione a seconda dell'effettiva elaborazione a livello di protocollo o di eventuali disaccordi effettivi tra le impostazioni dell'utente e il comportamento dello stack.

NOTA TCP_NODELAY è portatile mentre TCP_QUICKACK non lo è (funziona solo con Linux 2.4.4+).


TCP_QUICKACK e TCP_NODELAY influenzare diverse operazioni in TCP. Il tcp(7) la pagina man descrive quali opzioni socket per TCP interferiscono tra loro, ad es. TCP_CORK e TCP_NODELAY .


Risposta breve

  • Per disabilitare l'algoritmo di buffering di Nagle, usa l'opzione socket TCP_NODELAY.
  • Per disabilitare gli ACK ritardati, usa l'opzione socket TCP_QUICKACK.

Dettagli

  • Algoritmo di Nagle

    • L'algoritmo di Nagle, che prende il nome dal suo creatore John Nagle, è un meccanismo per migliorare l'efficienza del TCP riducendo il numero di piccoli pacchetti inviati sulla rete.
    • L'obiettivo era impedire a un nodo di trasmettere molti piccoli pacchetti se l'applicazione consegna i dati al socket piuttosto lentamente.
    • Se un processo sta causando la trasmissione di molti piccoli pacchetti, potrebbe creare un'indebita congestione della rete. Ciò è particolarmente vero se il carico utile di un pacchetto è inferiore ai dati dell'intestazione TCP.
  • ACK ritardato

    • Il riconoscimento ritardato TCP o ACK ritardato è un'altra tecnica utilizzata da alcune implementazioni del TCP nel tentativo di migliorare le prestazioni della rete e ridurre la congestione.
    • L'ACK ritardato è stato inventato per ridurre il numero di ACK necessari per riconoscere i segmenti e ridurre l'overhead del protocollo.
    • ACK ritardato significa che TCP non riconosce immediatamente ogni singolo segmento TCP ricevuto. Diverse risposte ACK possono essere combinate insieme in un'unica risposta, riducendo l'overhead del protocollo.
  • L'algoritmo di Nagle e l'ACK ritardato non funzionano bene insieme in una rete TCP/IP

    • L'ACK ritardato tenta di inviare più dati per segmento, se possibile. Ma parte dell'algoritmo di Nagle dipende da un ACK per inviare i dati.
    • L'algoritmo di Nagle e gli ACK ritardati insieme creano un problema perché gli ACK ritardati sono in attesa di inviare l'ACK mentre quello di Nagle è in attesa di ricevere l'ACK
  • Come posso risolvere i problemi causati dall'algoritmo di Nagle e dagli ACK ritardati

    • Abilita TCP_NODELAY per disabilitare l'algoritmo di Nagle tramite le opzioni socket globali sui server
    • Apporta modifiche al profilo su server proxy e sistemi di bilanciamento del carico:questo è particolarmente rilevante se esegui applicazioni o ambienti che solo a volte hanno traffico altamente interattivo e protocolli chiacchieroni. Attivando e disattivando dinamicamente l'algoritmo di Nagle e TCP_NODELAY a livello di bilanciamento del carico, puoi mantenere in esecuzione in modo ottimale anche mix di traffico altamente eterogenei.
    • Riduci il timer ACK ritardato sui tuoi server e sistemi di bilanciamento del carico. A volte, questo tipo di ottimizzazione viene gestito nel software, a livello di applicazione, ma in caso contrario, potresti comunque essere in grado di gestire dinamicamente il timer ACK a livello di server o di bilanciamento del carico.
    • Mentre apporti queste modifiche, controlla attentamente il traffico di rete e osserva come ogni modifica influisce sulla congestione.

Per maggiori dettagli, fare riferimento a questo


Linux
  1. Come impostare l'indirizzo IP statico e configurare la rete in Linux

  2. Come impostare/creare variabili di ambiente e shell in Linux

  3. Installa python-openstackclient su Linux e Mac OS

  4. Configura un vhost Apache su Ubuntu 20.04 e Debian 10

  5. Configurare e utilizzare SQL Server Management Studio (SSMS)

Come installare e configurare SeedDMS

Come configurare la chiave pubblica e privata SSH in Linux

Come impostare data, ora e fuso orario in RHEL 8

Come impostare data e ora su Linux

Come impostare e annullare l'impostazione delle variabili di ambiente su Linux

Come installare e configurare WordPress con Ansible