O que é disponibilidade de redes?

Saltar para o conteúdo principal

Este browser já não é suportado.

Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.

Disponibilidade de rede

  • Artigo
  • 09/22/2022
  • 2 minutos para ler

Neste artigo

O System.Net.NetworkInformation espaço de nome permite-lhe recolher informações sobre eventos de rede, alterações, estatísticas e propriedades. Neste artigo, você vai aprender a usar a System.Net.NetworkInformation.NetworkChange classe para determinar se o endereço de rede ou disponibilidade mudou. Além disso, você verá sobre as estatísticas e propriedades da rede numa base de interface ou protocolo. Finalmente, você usará a System.Net.NetworkInformation.Ping classe para determinar se um hospedeiro remoto é acessível.

Eventos de mudança de rede

A System.Net.NetworkInformation.NetworkChange classe permite-lhe determinar se o endereço de rede ou disponibilidade mudou. Para utilizar esta classe, crie um manipulador de eventos para processar a mudança e associá-la a um NetworkAddressChangedEventHandler ou um NetworkAvailabilityChangedEventHandler.

NetworkChange.NetworkAvailabilityChanged += OnNetworkAvailabilityChanged;

static void OnNetworkAvailabilityChanged(
    object? sender, NetworkAvailabilityEventArgs networkAvailability) =>
    Console.WriteLine($"Network is available: {networkAvailability.IsAvailable}");

Console.WriteLine(
    "Listening changes in network availability. Press any key to continue.");
Console.ReadLine();

NetworkChange.NetworkAvailabilityChanged -= OnNetworkAvailabilityChanged;

O código C# anterior:

  • Regista um manipulador de eventos para o NetworkChange.NetworkAvailabilityChanged evento.
  • O manipulador de eventos simplesmente escreve o estado de disponibilidade para a consola.
  • Uma mensagem é escrita para a consola, informando o utilizador de que o código está a ouvir alterações na disponibilidade da rede e aguarda a saída de uma tecla.
  • Desagrega o manipulador de eventos.
NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged;

static void OnNetworkAddressChanged(
    object? sender, EventArgs args)
{
    foreach ((string name, OperationalStatus status) in
        NetworkInterface.GetAllNetworkInterfaces()
            .Select(networkInterface =>
                (networkInterface.Name, networkInterface.OperationalStatus)))
    {
        Console.WriteLine(
            $"{name} is {status}");
    }
}

Console.WriteLine(
    "Listening for address changes. Press any key to continue.");
Console.ReadLine();

NetworkChange.NetworkAddressChanged -= OnNetworkAddressChanged;

O código C# anterior:

  • Regista um manipulador de eventos para o NetworkChange.NetworkAddressChanged evento.
  • O manipulador de eventos itera- se NetworkInterface.GetAllNetworkInterfaces(), escrevendo o seu nome e estado operacional para a consola.
  • Uma mensagem é escrita para a consola, informando o utilizador de que o código está a ouvir alterações na disponibilidade da rede e aguarda a saída de uma tecla.
  • Desagrega o manipulador de eventos.

Estatísticas e propriedades da rede

Pode recolher estatísticas de rede e propriedades numa base de interface ou protocolo. As NetworkInterfaceclasses NetworkInterfaceTypee PhysicalAddress as classes dão informações sobre uma determinada interface de rede, enquanto as classes dão UdpStatistics informações sobre os IPGlobalStatisticsIPInterfacePropertiesIPGlobalPropertiesTcpStatisticspacotes da camada 3 e da camada 4.

ShowStatistics(NetworkInterfaceComponent.IPv4);
ShowStatistics(NetworkInterfaceComponent.IPv6);

static void ShowStatistics(NetworkInterfaceComponent version)
{
    var properties = IPGlobalProperties.GetIPGlobalProperties();
    var stats = version switch
    {
        NetworkInterfaceComponent.IPv4 => properties.GetTcpIPv4Statistics(),
        _ => properties.GetTcpIPv6Statistics()
    };

    Console.WriteLine($"TCP/{version} Statistics");
    Console.WriteLine($"  Minimum Transmission Timeout : {stats.MinimumTransmissionTimeout:#,#}");
    Console.WriteLine($"  Maximum Transmission Timeout : {stats.MaximumTransmissionTimeout:#,#}");
    Console.WriteLine("  Connection Data");
    Console.WriteLine($"      Current :                  {stats.CurrentConnections:#,#}");
    Console.WriteLine($"      Cumulative :               {stats.CumulativeConnections:#,#}");
    Console.WriteLine($"      Initiated  :               {stats.ConnectionsInitiated:#,#}");
    Console.WriteLine($"      Accepted :                 {stats.ConnectionsAccepted:#,#}");
    Console.WriteLine($"      Failed Attempts :          {stats.FailedConnectionAttempts:#,#}");
    Console.WriteLine($"      Reset :                    {stats.ResetConnections:#,#}");
    Console.WriteLine("  Segment Data");
    Console.WriteLine($"      Received :                 {stats.SegmentsReceived:#,#}");
    Console.WriteLine($"      Sent :                     {stats.SegmentsSent:#,#}");
    Console.WriteLine($"      Retransmitted :            {stats.SegmentsResent:#,#}");
    Console.WriteLine();
}

O código C# anterior:

  • Chama um método personalizado ShowStatistics para exibir as estatísticas de cada protocolo.
  • O ShowStatistics método chama IPGlobalProperties.GetIPGlobalProperties(), e dependendo do dado NetworkInterfaceComponent , ou ligará IPGlobalProperties.GetIPv4GlobalStatistics() ou IPGlobalProperties.GetIPv6GlobalStatistics().
  • Estão TcpStatistics escritos para a consola.

Determinar se um hospedeiro remoto é acessível

Pode utilizar a Ping classe para determinar se um hospedeiro remoto está ligado, na rede e acessível.

using Ping ping = new();

string hostName = "stackoverflow.com";
PingReply reply = await ping.SendPingAsync(hostName);
Console.WriteLine($"Ping status for ({hostName}): {reply.Status}");
if (reply is { Status: IPStatus.Success })
{
    Console.WriteLine($"Address: {reply.Address}");
    Console.WriteLine($"Roundtrip time: {reply.RoundtripTime}");
    Console.WriteLine($"Time to live: {reply.Options?.Ttl}");
    Console.WriteLine();
}

O código C# anterior:

  • Instantiizar um Ping objeto.
  • Chamadas Ping.SendPingAsync(String) com o "stackoverflow.com" parâmetro do nome anfitrião.
  • O estado do ping está escrito na consola.

Ver também

  • Programação de rede em .NET
  • NetworkInterface

O que é disponibilidade de rede?

Disponibilidade refere-se ao tempo durante o qual uma rede ou serviço está disponível para seus usuários.

O que é a disponibilidade de um sistema?

Disponibilidade é uma medida que indica o percentual de tempo que espera-se que o sistema esteja em funcionamento [SDCP]. Tal medida é calculada como tempo de atividade/(tempo de atividade + tempo de inatividade) (Ver Tabela 2.1 aqui).

O que significa disponibilidade em TI?

A disponibilidade de TI se refere a oferta de infraestrutura adequada e confiável de tecnologia para atender e garantir o desempenho das operações e atividades essenciais das empresas, permitindo que possam ser executadas de forma rápida, eficiente e sem problemas técnicos.

O que é uma rede com alta disponibilidade?

Direto ao ponto: alta disponibilidade (H.A – high availability) é a capacidade de garantir a continuidade de serviços utilizados, mesmo em ocasiões de falhas (por exemplo, de hardware, software, interrupção de energia etc.). Ou seja, as funcionalidades do sistema não podem ser interrompidas.