160 likes | 312 Views
VoIP com QoS (Linux e Cisco). Sistemas Telemáticos, 2005 costa@di.uminho.pt , macedo@di.uminho.pt. 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…
E N D
VoIP com QoS(Linux e Cisco) Sistemas Telemáticos, 2005 costa@di.uminho.pt, macedo@di.uminho.pt
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: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 • 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 • 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 • 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 … • 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 10:2 1:0 1:1 1:11 11: root qdisc 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