Diferença entre Flows e Transações. Foto fluxo de trânsito noturno
Entenda a diferença entre Flows e Transações na análise de tráfego de rede

Veja a diferença entre flows e transações, e os dados de rede que cada tecnologia é capaz de disponibilizar para ferramentas de análise.

Hoje em dia dependemos das redes de computadores para muitas atividades. Elas conectam nossos celulares, computadores, televisores e até mesmo dispositivos como geladeiras, termostatos e campainhas de casa. Fato é que um volume imenso de informações é trafegado em redes, a todo tempo. Esses dados também são conhecidos como Wire Data – ou seja, dados no fio/rede – e podem ser investigados de diversas maneiras, daí a importância de se compreender a diferença entre flows e transações.

Neste artigo, vamos abordar e comparar as duas tecnologias: Network Flows e Network Transactions.

Network Flow

Segundo o Internet Engineering Task Force (IETF), “flow é uma sequencia de pacotes enviados por uma aplicação para outra aplicação que os recebe”. Um Flow representa o tráfego que aconteceu entre duas aplicações diferentes, em um determinado período. Fornece informações com foco em entrega de tráfego, em nível de IP, sem se preocupar com o payload (o conteúdo em si) dos pacotes. Duas formas bastante comuns de coleta de informações de Flow são o Netflow da Cisco e o IPFIX, definido na RFC 3917.

Como exemplo, estes são valores coletadas pelo NetFlow v.5:

  • Porta de ingresso do tráfego
  • IP de origem
  • IP de destino
  • Protocolo (TCP ou UDP);
  • Porta de origem (TCP ou UDP)
  • Porta de destino (TCP ou UDP)
  • IP Type of Service (para QoS)

Esse tipo de informação é especialmente útil para se identificar o uso de recursos em rede e também para corrigir falhas com QoS (Quality of Service). Porém, não é possível se investigar falhas mais avançadas, relacionadas com o conteúdo de payload, apenas com o uso de Flows.

Network Transaction

Na Zerum construímos um sistema de extração de dados de Wire Data que traz muito mais informações. Nós o chamamos de Zerum WirETL. O WirETL identifica cada transação em nível de aplicação extraindo metadados de performance de cada uma delas, de forma individual e em tempo real. Ou seja, cada GET/POST de transações web em HTTP (que podem ser decriptografadas, se fornecidas as chaves), requisições e respostas em DNS, banco de dados Oracle, compartilhamentos de arquivo em SMB, e muitos outros protocolos, são decodificados. Assim, provemos um nível de visibilidade extremo.

O nível de detalhamento é uma das principais diferenças entre Flows e Transações, mas há outras, como:

  • A distinção entre início e fim dos dados: os dados em um Flow não se referem a uma requisição ou resposta específica. Ou seja, o mesmo flow pode conter inúmeras requisições ou respostas em nível de aplicação, não sendo possível distinguir essas informações dentro do flow. Já na transação temos o par Requisição e Resposta SEMPRE presentes e detalhados;
  • Direção do tráfego: No flow não é possível saber quem originou o tráfego. O flow pode ser unidirecional ou bidirecional, mas ele não informa quem originou a requisição ou se a requisição foi respondida com sucesso. Já nas transações sempre temos quem é a origem e ou destino (informações de IP e MAC de origem e destino) e os status de resposta.

Diversos dados são coletados e publicados pelo Zerum Falcon, para cada transação HTTP. Veja abaixo alguns dos campos/valores extraídos pelo Zerum WirETL:

request Requisição enviada na transação
request_content.type Formato do conteúdo enviado na requisição
request_message.body Conteúdo do corpo da requisição
request_message.cache_control Indica o controle sobre o conteúdo ser cacheado
request_message.connection Indica o controle sobre a vida da conexão (keep alive)
request_message.content_length Tamanho da mensagem do request
request_message.content_type Conteúdo enviado na requisição e sua codificação
request_message.cookies Nome do cookie usado na requisição
request_message.host Host utilizado
request_message.method Método utilizado pela requisição
request_message.referer URL completa enviada pela requisição
request_message.timestamp Timestamp de início do request
request_message.user_agent User agent utilizado pelo cliente
request_message.x_forwarded_for IP de origem da transação registrado no header
response Resposta recebida na transação
response_message.body Conteúdo do corpo da resposta
response_message.cache_control Controle sobre o conteúdo de resposta a ser cacheado
response_message.calculated_content_length Tamanho calculado da mensagem de resposta
response_message.connection Indica a manutenção da conexão de resposta (keep-Alive)
response_message.content_encoding Indica se o conteúdo de resposta está usando compresão
response_message.content_length Tamanho total da mensagem de resposta
response_message.content_type Formato do conteúdo na mensagem de resposta
response_message.date Data e hora na mensagem de resposta
response_message.e_tag Uso do web cache de forma seletiva e otimizada
response_message.keep_alive Tempo de vida do keep-alive
response_message.last_modified Última atualização do conteúdo de resposta
response_message.reason_phrase Mensagem de reação da resposta
response_message.server Nome do tipo do servidor web
response_message.set_cookies Indica se cookie foi enviado juntamente com a resposta
response_message.status_code Código de resposta da solicitação do cliente
response_message.timestamp Timestamp do início da resposta
response_message.transfer_encoding Codificação utilizada na resposta para o usuário
retransmission_count Total de retransmissões que ocorreram no destino e na origem
retransmission_dst Total de retransmissões que ocorreram no destino
retransmission_src Total de retransmissões que ocorreram na origem
server_connection_time Tempo total de conexão entre o cliente e o servidor
server_processing_time Tempo total de processamento do servidor
data_transfer_time Tempo total da transferência de dados
transaction_time Tempo total da transação

E muitos outros…

Nos produtos Zerum Falcon e Zerum Lynx a análise de Wire Data é feita com flows e transações. Essa combinação é útil para se analisar operações e segurança em um nível bastante avançado, jogando uma luz sobre algo que muitas vezes é tão volumoso e rápido que pouco se conhece – como encontrar uma agulha no palheiro.

As informações de flows e transações são extraídas em tempo real, juntamente com metadados que enriquecem análises de performance e segurança – e são armazenadas – permitindo que sejam exploradas de forma intuitiva e/ou utilizadas na construção de alarmes com a utilização dos algoritmos de aprendizado inteligente. Com isso temos detalhes de transações em nível de aplicação que ajudam a otimizar não apenas operações, mas também estratégias de produtos e processos industriais.