VoIP com QoS (Linux e Cisco) Sistemas Telemáticos, 2005 [email protected], [email protected] Sumário Caso de estudo: VoIP Telefone VoIP com sinalização SIP Definição de uma política de QoS adequada Pelo menos três classes de tráfego: voz, sinalização e restante tráfego… Configuração de Routers CISCO Comandos: class-map, policy-map, service-policy e, eventualmente, access-list… Configuração de Sistemas Linux Filas de espera e disciplinas suportadas Comandos iproute2: ip, tc, iptables VoIP com sinalização SIP O SIP é um protocolo de aplicação (nível 7 OSI), desenvolvido no seio do IETF e descrito no RFC3261 É um parente do HTTP/1.1: Uris, Mensagens de Erro e parser semelhantes Esta espécie de “encapsulamento” em HTTP torna as comunicações interactivas numa simples extensão do Web… A sua principal função é estabelecer e terminar sessões: Independente do protocolo de transporte (UDP, TCP, TLS) Independente dos media (VoIP, Fax, Multicast, Jogos, Comunicações móveis, etc.) Mecanismos de autenticação semelhantes aos do HTTP Conteúdos podem ser cifrados… O SIP transporta mensagens SDP, com descrição exacta das sessões… O SDP específica o formato a usar nos fluxos multimedia, codecs, origem e destino… Os URIs SIP podem identificar utilizadores ou números: sip:[email protected], sip:[email protected] SDP “encapsulado” no SIP v=0 o=costa 140913579 140913586 IN IP4 pc10.labcom.uminho.pt s=X-Lite c=IN IP4 kepler.labcom.uminho.pt t=0 0 m=audio 8000 RTP/AVP 8 3 a=rtpmap:8 PCMA/8000 A=rtpmap:3 GSM/8000 v = Número de versão (ignorado pelo SIP) o = Origem (user, sessionID, session-version, endereço) s = Assunto (ignorado) c = Dados da Conexão (endereço IPv4) t = Tempo (ignorado) m = Media (tipo, porta, perfil RTP/AVP) a = Attribute (perfil, codec, taxa de amostragem) Agentes SIP Os agentes SIP ou são User Agents (UAC) que iniciam e terminam conexões, ou Servers (UAS) que ajudam a estabelecer as conexões… Definição de uma Política de QoS Distinguir todo o tráfego do laboratório em pelo menos três classes de tráfego: Sinalização (SIP) para VoIP Tráfego de voz VoIP (RTP) Outros (Best-Effort) Marcar o tráfego usando o campo ip precedence ou o DSCP (EF, AF…,). Exemplo da auto-configuração CISCO: Implementar a política no router-lab e na estação de trabalho Linux CISCO IOS – Acções de configuração 1. Definir o critério de classificação dos pacotes: Router(config)# class-map <nome-da-classe> Router(config-cmap)# description <descrição> Router(config-cmap)# match <grupo-de-acesso> Router(config-cmap)# exit 2. Definir a política de serviço: Router(config)# policy-map <nome-da-politica> Router(config-pmap)# description <descrição> Router(config-pmap)# class <nome-da-classe> Router(config-pmap-c)# bandwidth … 3. Aplicar a política de QoS ao(s) interface(s): Router(config)# interface FastEthernet 0/0 Router(config-if)# service-policy output <nome-da-política> CISCO IOS – Acções de configuração class-map – critérios de classificação match access-group <numero> Permite usar access-lists para classificar os pacotes match input-interface … Classifica pelo interface de entrada… match protocol … match ip dscp match ip precedence… match rtp … match qos-group … match source-address … match destination address … CISCO IOS – Acções de configuração policy-map – acções possíveis: bandwidth – especifica valor mínimo de largura de banda a garantir… fair-queue – nº de filas a reservar para a class police – especifica o valor máximo de largura de banda a admitir usando o algoritmo Token Bucket (parâmetros que já conhecem) queue-limit – define o máximo de pacotes da fila (se não se usar o WRED) random-detect – activa WRED numa classe com largura de banda garantida… set cos … - permite associar um valor de CoS a nível 2 set ip precedence … - marca os primeiros 6 bits do campo TOS set ip dscp … - marca os primeiros 3 bits do campo TOS set qos-group … - associa em grupos de QoS (0-99) CISCO IOS QoS Filas de espera no CISCO First-in, first-out (FIFO) queuing Priority queuing (PQ) Dá prioridade a um tráfego em relação ao outro… Custom queuing (CQ) Permite dividir a largura de banda disponível pelas várias classes… Flow-based weighted fair queuing (WFQ) Class-based weighted fair queuing (CBWFQ) Low latency queueing (LLQ), Distributed LLQ Permite PQ para tráfego de voz e WFQ para o restante… Só interfaces Serial e Frame relay (??) … Congestion avoidance: WRED – implementação RED CISCO… CISCO IOS QoS Esclarecimentos sobre a marcação: Linux QoS A partir do kernel 2.2 o subsistema de rede foi reescrito para inclusão dos novos conceitos de rede… Os velhinhos comandos arp, ifconfig e route deram lugar ao comando ip (iproute2): ip link list, ip neigh show, ip route show, etc.. Filas de espera e disciplinas: Classless e classfull Configuráveis com o comando “tc” (traffic control) ver configuração: tc qdisc show Marcação de pacotes: iptables … tc filter … Linux QoS Disciplinas classless: pfast_fifo: três bandas, pré-configuradas, baseados no campo ip precedence Configuração por defeito… não alterável… tbf: “token bucket filter” que só deixa entrar na fila pacotes dentro do perfil e descarta os restantes… bom para estrangular um interface: # tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540 sfq: Stochastic Fairness Queueing, distribui os fluxos por n filas, de modo a nenhum fluxo ser prejudicado/beneficiado: # tc qdisc add dev ppp0 root sfq perturb 10 Linux QoS Disciplinas classfull: Os pacotes que entram na fila devem ser “classificados” usando “filtros” de modo a poderem serem colocados numa das “classes” ou “sub-classes” disponíveis… Cada interface tem um ponto de saída “root qdisc”… e também pode ter um qdisc de entrada para policiamento do tráfego que chega… Os handlers das classes têm duas partes: major e minor. A raíz designa-se 1: ou 1:0 Os handlers estrtuturam-se em árvore: 10:1 1:10 1:0 1:1 1:11 root qdisc 10:2 11: 12:1 1:12 12:2 Classes folha Linux QoS Disciplinas classfull: PRIO: priority Por defeito cria três filas FIFO com diferentes prioridades, mas que podem ser alteradas para outra disciplina… a classificação por filas faz-se por filtros e não pelo campo TOS como acontece no pfast_fifo… CBQ: Class Based Queueing Separa a largura de banda pelas classes, calculando tempos de espera de modo a assegurar o reajuste do débito ao especificado para a classe… permite também definir prioridades entre as classes… HTB: Hierarchical Token Bucket Trata-se de um filtro Token Bucket por classes… na prática parecido com o CBQ, assegurando minimos de largura de banda por classe, mas sem a complexidade dos ajustes com tempos de espera… Linux QoS - Exemplos Classificação com filtros: Exemplo baseado no endereço: # tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32\ match ip dst 4.3.2.1/32 flowid 10:1 # tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 \ match ip src 1.2.3.4/32 flowid 10:1 # tc filter add dev eth0 protocol ip parent 10: prio 2 \ flowid 10:2