VoIP com QoS (Linux e Cisco) Sistemas Telemáticos, 2005 costa@di.uminho.pt, macedo@di.uminho.pt Sumário l Caso de estudo: VoIP Telefone VoIP com sinalização SIP l Definição de uma política de QoS adequada Pelo menos três classes de tráfego: voz, sinalização e restante tráfego l Configuração de Routers CISCO Comandos: class-map, policy-map, service-policy e, eventualmente, access-list l Configuração de Sistemas Linux Filas de espera e disciplinas suportadas Comandos iproute2: ip, tc, iptables 1
VoIP com sinalização SIP l O SIP é um protocolo de aplicação (nível 7 OSI), desenvolvido no seio do IETF e descrito no RFC3261 l É 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 l 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 l 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 l Os URIs SIP podem identificar utilizadores ou números: sip:costa@di.uminho.pt, sip:+351253604442@di.uminho.pt 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 l v = Número de versão (ignorado pelo SIP) l o = Origem (user, sessionid, session-version, endereço) l s = Assunto (ignorado) l c = Dados da Conexão (endereço IPv4) l t = Tempo (ignorado) l m = Media (tipo, porta, perfil RTP/AVP) l a = Attribute (perfil, codec, taxa de amostragem) 2
Agentes SIP l 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 l 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) l Marcar o tráfego usando o campo ip precedence ou o DSCP (EF, AF,). Exemplo da auto-configuração CISCO: l Implementar a política no router-lab e na estação de trabalho Linux 3
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 l class-map critérios de classificação match access-group <numero> l Permite usar access-lists para classificar os pacotes match input-interface l Classifica pelo interface de entrada match protocol match ip dscp match ip precedence match rtp match qos-group match source-address match destination address 4
CISCO IOS Acções de configuração l 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 l Filas de espera no CISCO First-in, first-out (FIFO) queuing Priority queuing (PQ) l Dá prioridade a um tráfego em relação ao outro Custom queuing (CQ) l 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 l Permite PQ para tráfego de voz e WFQ para o restante l Só interfaces Serial e Frame relay (??) Congestion avoidance: WRED implementação RED CISCO 5
CISCO IOS QoS l Esclarecimentos sobre a marcação: Linux QoS l 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.. l Filas de espera e disciplinas: Classless e classfull Configuráveis com o comando tc (traffic control) ver configuração: tc qdisc show l Marcação de pacotes: iptables tc filter 6
Linux QoS l Disciplinas classless: pfast_fifo: três bandas, pré-configuradas, baseados no campo ip precedence l 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: l # tc qdisc add dev ppp0 root sfq perturb 10 Linux QoS l 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 10:2 1:0 1:1 root qdisc 1:11 1:12 11: 12:1 12:2 Classes folha 7
Linux QoS l 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 8