Auteur Sujet: Linux : Analyser les pertes de paquets UDP via un flux multicast RTP  (Lu 9204 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP

Le concept :

De plus en plus de FAI mettent un couche supplèmentaire pour les flux multicast (ceux qui transporte la TV) : RTP (Real-time Transport Protocol)



RTP rajoute 12 octets par paquet IP avec des informations d'horodatage et un n° de séquence. C'est ce dernier qui nous intéresse : il est incrèmenté de un a chaque paquet : Cela nous permet de savoir si nous avons perdu des paquets.

Ce tuto a été testé avec les 3 FAI suivants :
- NeufBox de SFR
- Bbox de Bouygues Telecom
- ClubBox de Club-Internet

Il faut être abonné a l'offre TV pour que cela puisse fonctionner.

Nous allons utiliser VLC pour nous abonner aux flux multicast et Wireshark / Tshark pour analyser ces pertes de paquet.

Voici une liste de quelques IP multicast pour faire les tests :


IP multicast    port    Nom de la chaine TV             Débit IP     diffusion      Flux RTP disponible avec les Box
233.136.0.11665000ARTE SD MPEG42,47 Mb/sflux en clairNeufBox, Bbox de Bouygues Telecom
233.136.0.12765000I>Tele SD MPEG42,47 Mb/sflux en clairNeufBox, Bbox de Bouygues Telecom
233.60.197.864000I>Tele SD MPEG23,5 Mb/sflux en clairNeufBox
233.49.82.737500TF1 HD MPEG4 adsl6,05 Mb/sflux cryptéNeufBox

Le plan de service complet de la NeufBox de SFR est consultable ici : Plan de service TV SFR fibre optique

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #1 le: 27 septembre 2011 à 21:29:27 »
Comment faire sous linux ? (analyse en temps réel, nécessite la ligne de commande)


1ère étape : Installer VLC et Tshark qui sont 2 logiciels libres.

sudo apt install vlc tshark


2ème étape : Configurer Wireshark pour le RTP (Real-time Transport Protocol)

Pour Wireshark 1.4.6 (Ubuntu 11.04) :
1/ mkdir ~/.wireshark
2/ wget https://lafibre.info/download/wireshark/preferences.wireshark1.4.6-ubuntu11.04
3/ mv preferences.wireshark1.4.6-ubuntu11.04 ~/.wireshark/preferences
4/ wget https://lafibre.info/download/wireshark/disabled_protos.wireshark1.4.6-ubuntu11.04
5/ mv disabled_protos.wireshark1.4.6-ubuntu11.04 ~/.wireshark/disabled_protos

Pour Wireshark 1.2.11 (Ubuntu 10.10) :
1/ mkdir ~/.wireshark
2/ wget https://lafibre.info/download/wireshark/preferences.wireshark1.2.11-ubuntu10.10
3/ mv preferences.wireshark1.2.11-ubuntu10.10 ~/.wireshark/preferences
4/ wget https://lafibre.info/download/wireshark/disabled_protos.wireshark1.2.11-ubuntu10.10
5/ mv disabled_protos.wireshark1.2.11-ubuntu10.10 ~/.wireshark/disabled_protos

Pour Wireshark 1.2.7 (Ubuntu 10.04) :
1/ mkdir ~/.wireshark
2/ wget https://lafibre.info/download/wireshark/preferences.wireshark1.2.7-ubuntu10.04
3/ mv preferences.wireshark1.2.7-ubuntu10.04 ~/.wireshark/preferences
4/ wget https://lafibre.info/download/wireshark/disabled_protos.wireshark1.2.7-ubuntu10.04
5/ mv disabled_protos.wireshark1.2.7-ubuntu10.04 ~/.wireshark/disabled_protos

Pour Wireshark 1.2.2 (Ubuntu 9.10) :
1/ mkdir ~/.wireshark
2/ wget https://lafibre.info/download/wireshark/preferences.wireshark1.2.2-ubuntu9.10
3/ mv preferences.wireshark1.2.2-ubuntu9.10 ~/.wireshark/preferences
4/ wget https://lafibre.info/download/wireshark/disabled_protos.wireshark1.2.2-ubuntu9.10
5/ mv disabled_protos.wireshark1.2.2-ubuntu9.10 ~/.wireshark/disabled_protos

Pour Wireshark 1.0.7 (Ubuntu 9.04) :
1/ mkdir ~/.wireshark
2/ wget https://lafibre.info/download/wireshark/preferences.wireshark1.0.7-ubuntu9.04
3/ mv preferences.wireshark1.0.7-ubuntu9.04 ~/.wireshark/preferences
4/ wget https://lafibre.info/download/wireshark/disabled_protos.wireshark1.0.7-ubuntu9.04
5/ mv disabled_protos.wireshark1.0.7-ubuntu9.04 ~/.wireshark/disabled_protos

Pour Wireshark 1.0.3 (Ubuntu 8.10) :
1/ mkdir ~/.wireshark
2/ wget https://lafibre.info/download/wireshark/preferences.wireshark1.0.3-ubuntu8.10
3/ mv preferences.wireshark1.0.3-ubuntu8.10 ~/.wireshark/preferences
4/ wget https://lafibre.info/download/wireshark/disabled_protos.wireshark1.0.3-ubuntu8.10
5/ mv disabled_protos.wireshark1.0.3-ubuntu8.10 ~/.wireshark/disabled_protos


3ème étape : S'abonner au flux multicast avec VLC

cvlc rtp://@233.136.0.116


4ème étape : Lancer la capture + analyse temps réel avec Tshark

Lancer dans un autre terminal sans fermer la commande VLC :
sudo tshark -i eth0 -n -s 68 -w /tmp/capture_temporaire.pcap -a duration:60 -z rtp,streams

- sudo tshark : démarrer tshark, un module de Wireshark en mode root (le mot de passe sera demandé)
- -i eth0 : La première interface Ethernet relié à Internet. En WiFi, l'interface est habituellement wlan0 mais des pertes de paquets lié au WiF vont impacter le test et aucune conclusion sur la qualité du flux vidéo en Ethernet ne pourra être tirée.
- -n -s 68 : capture uniquement les 68 premiers octets de chaque paquet afin de limiter la taille de la capture.
- -w /tmp/capture_temporaire.pcap : indique le chemin ou stocker le fichier temporaire
- -a duration:60 : La durée de la capture (ici de 60 secondes), avant d'analyser les pertes de paquets.

A la fin de la capture il suffit de quitter VLC "CTRL" + "C" pour se dé-abonner du flux multicast

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #2 le: 27 septembre 2011 à 21:30:18 »
Exemples de résultats :

Pas bon :
# tshark -i eth3 -a duration:600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth3
142323 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 141011  1464 (1.0%)         4127.30            1.13            0.24 X
==============================================================

# tshark -i eth3 -a duration:600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth3
141168 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 141068  1283 (0.9%)         5394.35            0.46            0.24 X
==============================================================

Parfait :
# tshark -i eth0 -a duration:600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
142342 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 142269     0 (0.0%)            4.31            0.03            0.02
==============================================================

# tshark -i eth0 -a duration:600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
142430 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 142352     0 (0.0%)            4.30            0.03            0.02
==============================================================

Modem Dlink :
root@bt8silq2:~# tshark -i eth0 -a duration:3600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
855204 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 854739     0 (0.0%)            4.31            0.03            0.02
==============================================================


root@vivien:~# tshark -i eth0 -a duration:3600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
915734 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0x1324FE6A MPEG-II transport streams 845987  8675 (1.0%)         8102.02            0.48            0.12 X
==============================================================

Modem TG787 20min :
root@bt8silq2:~# tshark -i eth0 -a duration:1200 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
285038 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0xB2D9803F MPEG-II transport streams 284895     0 (0.0%)            4.31            0.51            0.01
==============================================================

root@vivien:~# tshark -i eth0 -a duration:1200 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
284856 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0xB2D9803F MPEG-II transport streams 257782 27010 (9.5%)        45797.12            0.65            0.27 X
==============================================================

Modem TG787 20min :
root@bt8silq2:~# tshark -i eth0 -a duration:1200 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
285087 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0xB2D9803F MPEG-II transport streams 284901     0 (0.0%)            4.33            0.83            0.01
==============================================================

root@vivien:~# tshark -i eth0 -a duration:1200 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
287700 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0xB2D9803F MPEG-II transport streams 262157 22702 (8.0%)        31113.13            0.68            0.27 X
==============================================================

Modem TG787 60min :
root@bt8silq2:~# tshark -i eth0 -a duration:3600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
749068 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0xB2D9803F MPEG-II transport streams 748642     0 (0.0%)            4.32            1.24            0.01
==============================================================

root@vivien:~# tshark -i eth0 -a duration:3600 -q -z rtp,streams
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
903653 packets captured
========================= RTP Streams ========================
    Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
  84.96.146.150  5000   233.136.0.116 65000 0xB2D9803F MPEG-II transport streams 826094 28748 (3.4%)        48968.63            0.85            0.27 X
==============================================================

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #3 le: 27 septembre 2011 à 21:31:13 »
Voici un script pour lancer la capture depuis la Crontab en permanence :

#!/bin/bash
####################################################################################
# SYNOPSIS : est appelé depuis la crontab - pas d'options                          #
#                                                                                  #
# DESCRIPTION :                                                                    #
#   Fait une capture pendant 59minutes et 50 secondes                              #
#                                                                                  #
# DEPENDANCES :                                                                    #
#   /bin/bash                                                                      #
#   /bin/date                                                                      #
#   /bin/sync                                                                      #
#   /bin/rm                                                                        #
#   /usr/sbin/ntpdate                                                              #
#   /usr/bin/tshark                                                                #
#   /usr/bin/cvlc                                                                  #
#   /usr/bin/killall                                                               #
#   /usr/bin/sudo                                                                  #
#                                                                                  #
####################################################################################

# abonnement au flux
/usr/bin/sudo -u vgu /usr/bin/cvlc rtp://@233.49.82.73 &
# date de début de capture
/bin/date >> /root/capture.txt
# Capture avec Tshark
/usr/bin/tshark -i eth0 -n -s 68 -w /tmp/ramdisk0/capture_temporaire.pcap -a duration:175 -z rtp,streams >> /root/capture.txt
# désabonnement du flux
/usr/bin/killall vlc
# Supressions des fichiers et sync pour ne pas avoir une grosse écriture qui fait perdre des paquets au début du tcpdump
/bin/rm /tmp/ramdisk0/capture_temporaire.pcap
# MISE A L'HEURE (la mise à l'heure ne soit pas se faire pendant la capture)
/usr/sbin/ntpdate 194.158.119.97 >> /root/ntpdate.vg.log
# Ecriture du cache sur le disque pour que dump ne se produise pas pendant l'écriture
/bin/sync
# date de fin de capture
/bin/date >> /root/capture.txt
# Ecriture du cache sur le disque pour que dump ne se produise pas pendant l'écriture
/bin/sync

Le rendre exécutable : sudo chmod +x capture.sh

Pour mettre les préférence wireshark (2ème étape), il faut se connecter en root avec sudo -i pour avoir les variables environnement du root

La ligne à mettre dans la crontab :
lancement toutes les 3min : 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /root/capture.sh
lancement toutes les 4min : 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56 * * * * /root/capture.sh



#!/bin/bash
####################################################################################
# SYNOPSIS : est appelé depuis la crontab - pas d'options                          #
#                                                                                  #
# DESCRIPTION :                                                                    #
#   Fait une capture pendant 59minutes et 50 secondes                              #
#                                                                                  #
# DEPENDANCES :                                                                    #
#   /bin/bash                                                                      #
#   /bin/date                                                                      #
#   /bin/sync                                                                      #
#   /bin/rm                                                                        #
#   /usr/sbin/ntpdate                                                              #
#   /usr/sbin/tcpdump                                                              #
#   /usr/bin/tshark                                                                #
#   /usr/bin/cvlc                                                                  #
#   /usr/bin/killall                                                               #
#   /usr/bin/sudo                                                                  #
#   /usr/bin/sleep                                                                 #
#                                                                                  #
####################################################################################

# abonnement au flux
/usr/bin/sudo -u vgu /usr/bin/cvlc rtp://@233.49.82.73 &
# date de début de capture
/bin/date >> /root/capture.txt
# Capture avec TCPdump
/usr/sbin/tcpdump -i eth0 -n -s 68 -w /tmp/ramdisk0/capture_temporaire.pcap host 233.49.82.73 &
/bin/sleep 3550
/usr/bin/killall -s INT tcpdump
# désabonnement du flux
/usr/bin/killall -s INT vlc
# Post-traitement avec Tshark
/usr/bin/tshark -n -r /tmp/ramdisk0/capture_temporaire.pcap -q -z rtp,streams >> /root/capture.txt
# Supressions des fichiers et sync pour ne pas avoir une grosse écriture qui fait perdre des paquets au début du tcpdump
/bin/rm /tmp/ramdisk0/capture_temporaire.pcap
# MISE A L'HEURE (la mise à l'heure ne soit pas se faire pendant la capture)
/usr/sbin/ntpdate 194.158.119.97 >> /root/ntpdate.vg.log
# Ecriture du cache sur le disque pour que dump ne se produise pas pendant l'écriture
/bin/sync
# date de fin de capture
/bin/date >> /root/capture.txt
# Ecriture du cache sur le disque pour que dump ne se produise pas pendant l'écriture
/bin/sync

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #4 le: 27 septembre 2011 à 21:32:50 »
Comment faire sous Linux ? (avec interface graphique, analyse en différé)

1ère étape : Installer VLC et Wireshark qui sont 2 logiciels libres.

En graphique sous Ubuntu, allez dans la logithèque Ubuntu et installez VLC et Wireshark.

Pour faire l'installation en ligne de commande :
sudo apt install vlc wireshark


vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #5 le: 27 septembre 2011 à 21:34:05 »
2ème étape : Configurer Wireshark pour le RTP (Real-time Transport Protocol)

Démarrez Wireshark en tant que root.
Allez dans le menu Edit => Preferences...


Cliquez sur la petite flèche à gauche de Protocols


Cherchez RTP dans le bas de la liste (c'est par ordre alphabétique)
Cochez la 2ème case comme montré ci-dessous :

Cliquez sur Valider.

A partir de maintenant Wireshark et Tshark sont capable de décoder le protocole RTP

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #6 le: 27 septembre 2011 à 21:36:04 »
3ème étape : S'abonner au flux multicast avec VLC

Via une ligne de commande il suffit d'entrer la ligne suivante dans un terminal :
cvlc rtp://@233.136.0.116

Via l'interface graphique de VLC cela se fait en 3 étapes :






vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #7 le: 27 septembre 2011 à 21:36:49 »
4ème étape : Lancer Wireshark puis aller dans le menu Capture => Interfaces...

Un menu avec la liste des interface de l'ordinateur s'affiche :
- Une ligne pour votre carte Ethernet
- Une ligne pour votre carte Wifi si vous en avez une
- Une ligne pour une interface virtuelle...


Que faire si aucune interface n'apparait ? Vous êtes sous MacOS X ou Linux et il faut démarrer Wireshark avec les privilèges administrateur pour pouvoir lancer Wireshark => Sous linux Ubuntu, appuyez sur les touches [ALT]+[F2] de votre clavier. Saisissez "gksudo wireshark" puis cliquez sur le bouton "Lancer". Une boite de dialogue de saisie de mot de passe s'affiche. Saisissez le mot de passe de votre compte d'utilisateur actuel.

Cliquez sur le bouton Options situé en face de l'interface où il y à de nombreux paquets (l'interface Ethernet car ce test ne doit pas être fait en Wifi, le flux TV UDP ne permettant pas de renvoyer les paquets perdu contrairement a un flux data TCP)

Un menu de ce type s'affiche :



Vous devez faire 3 modifications (celles entourées en rouge dans la capture ci-dessus) :
- Cochez la case Limit eatch packet to et remplissez la case à coté par 100
- Décochez la case Update list of packets in real time
- Décochez la case Hide capture info dialog

Cliquez sur Start en bas à droite : La capture commence, laissez la continuer pendant 10 minutes.

Notez la qualité de l'image visible dans VLC pendant la capture, notamment la présence de maco-blocs (gros carrés) ou de freezes de l'image : cette information sera confronté à la vision technique (paquets perdus) donnée par la capture

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #8 le: 27 septembre 2011 à 21:37:39 »
5ème étape : Arrêt de la capture

Pour l'arrêter il faut cliquer sur stop :


Vérifiez la barre d'état de Wireshark (la ligne tout en bas) : il doit y avoir marqué Dropped : 0. Si vous avez autre chose que 0, cela signifie que votre machine a eu un peu de mal a écrire le flux et que des paquets ont été perdus. La capture n'est pas parfaite. Il est préférable de la re-faire en veillant a fermer les autres applications (à part VLC bien sur qui est nécessaire pour s'abonner au flux)



La capture temporaire (avant enregistrement) est réalisée dans /tmp

vivien

  • Administrateur
  • *
  • Messages: 29 672
    • Twitter LaFibre.info
Linux : Analyser les pertes de paquets UDP via un flux multicast RTP
« Réponse #9 le: 27 septembre 2011 à 21:38:18 »
6ème étape :Analyser la capture avec Wireshark

Aller dans le menu Telephony puis RTP et enfin Show All Streams



Les pertes de paquets sont indiqués dans la fenêtre ci-dessous :

 

Mobile View