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
Download

PPT