Passer au contenu principal

Ce que les personnes passant de TCP_OS à STCP remarquent immédiatement, c'est que l'ensemble des statistiques TCP affichées par la commande netstat de TCP_OS est nettement plus complet que celui affiché par STCP. Les statistiques netstat de STCP affichent les statistiques TCP standard RFC-1213. Les statistiques telles que les accusés de réception en double, les données en double, les paquets hors séquence ou les comptes de sondes de fenêtre sont manquantes. Cependant, bon nombre de ces statistiques sont disponibles dans la sortie affichée par la requête analyze_system stcp_meters. Essayez la commande :
analyze_system -request_line ‘stcp_meters -all -long’ -quit

Les arguments et les résultats de stcp_meters sont documentés dans le manuel OpenVOS System Analysis (R073), disponible àstratus. L'ensemble de données n'est pas le même que celui de la commande TCP_OS ; certains compteurs tels que « connexions abandonnées par retransmission » sont manquants, mais il existe également de nouveaux compteurs tels que « fenêtre définie sur zéro après réception ». Une fonctionnalité intéressante est que le pourcentage du compteur est calculé et présenté automatiquement.

Un problème majeur avec les statistiques TCP netstat de TCP_OS et STCP est qu'elles concernent l'ensemble du module : les compteurs de chaque connexion qui a jamais existé (au moins pour le démarrage actuel) sont additionnés pour obtenir les valeurs affichées. Les problèmes, tels que les retransmissions inacceptables, qui affectent une ou plusieurs connexions peuvent se perdre dans les comptes globaux. Le comportement par défaut de stcp_meters présente le même problème, il agrège les compteurs de toutes les connexions depuis le démarrage actuel ; MAIS, stcp_meters peut prendre comme argument l'adresse PCB (protocol control block) d'une seule connexion et afficher les statistiques pour cette seule connexion, ce qui en fait une aide précieuse pour le débogage. Pour trouver l'adresse PCB, vous exécutez netstat avec l'argument PCB_addr, oui, PCB est en majuscules. Une fois netstat terminé, vous trouvez la connexion qui vous intéresse et l'adresse PCB dans la première colonne.

La macro suivante effectue cette opération pour vous : elle exécute netstat, localise la connexion qui vous intéresse, extrait l'adresse PCB, puis exécute stcp_meters. La macro utilise soit l'adresse PCB si vous la connaissez déjà (auquel cas elle ignore la plupart des étapes ci-dessus), soit deux chaînes de caractères pour aider à identifier la connexion qui vous intéresse. Le message d'utilisation indique que les chaînes doivent être l'adresse IP locale, le numéro de port local et l'adresse IP distante, le numéro de port distant. Cela permettra d'identifier de manière unique la connexion, mais vous pouvez vous contenter de moins, par exemple uniquement le numéro de port local et l'adresse IP distante. Si les chaînes spécifiées identifient plus d'une connexion, les compteurs de chacune des connexions s'affichent. La ligne netstat apparaît au-dessus des compteurs pour identifier à quelle connexion ils se rapportent.

Si vous souhaitez afficher les compteurs pour toutes vos connexions établies, essayez la commande
get_connection_meters -local ESTAB -remote :

Dans ce cas, les arguments ne représentent pas les adresses locales et distantes, mais l'état ESTABLISHED et toute ligne contenant un deux-points.

& get_connection_meters commence ici
&
& get_connection_meters.cm
&   version 1.0 09-04-06
&  stratus
&
&begin_parameters
 LOCAL  option (-local),chaîne
 REMOTE option (-remote),chaîne
Option PCB (-pcb), chaîne de caractères  
&end_parameters  
&  
& Assurez-vous que les éléments superflus ne sont pas répercutés dans le fichier de résultats  
&if (process_type) = 'batch' &then &do  
set_ready -format off  
&echo no_command_lines  
&end  
&  
&if (length &PCB&) > 0
&then &do
   &if (length &LOCAL&) > 0
       &then &goto ERROR_ADDRESS
   &if (length &REMOTE&) > 0
       &then &goto ERROR_ADDRESS
   analyze_system -request_line (string stcp_meters &PCB& -all -long) -quit  
   &return  
&end  
&  
&set_string FILE_1 (process_dir)>connect_stcp_meters_1.temp
&set_string FILE_2 (process_dir)>connect_stcp_meters_2.temp
&
&if (length &LOCAL&) = 0
    &then &goto ERROR_ADDRESS
&if (length &REMOTE&) = 0
    &then &goto ERROR_ADDRESS
attach_default_output &FILE_1&
netstat -numeric -PCB_addr
detach_default_output
&
display &FILE_1& -match &LOCAL& -output_path &FILE_2& -no_header
afficher &FICHIER_2& -correspondance &REMOTE& -chemin_sortie &FICHIER_1& -sans_en-tête
&
&attach_input
analyze_system
&set LINE 1
&label AGAIN
&set_string CONNECTION (contenu &FICHIER_1& &LINE& -hold)
&if (end_of_file &FILE_1&) = 1 &then &do
    &if &LINE& = 1
       &then &goto ERROR_NOT_FOUND
       &else &do
          quit
          &return
       &end
&end
&
..display_line ============================================================
..display_line ============================================================
..display_line
..display_line &CONNECTION&
..display_line
&set_string PCB (substr (string &CONNECTION&) 1 8)
stcp_meters &PCB& -all -long
&set LINE (calc &LINE& + 1)
&goto AGAIN
&
&
&label ERROR_NOT_FOUND
quit
display_line
display_line
display_line Impossible de trouver la connexion spécifiée dans la sortie netstat
display_line &LOCAL& &REMOTE&
&return
&
&label ERROR_ADDRESS
display_line
display_line Vous devez entrer soit un PCB, soit les deux adresses IP locales et distantes :port
display_line Utilisation :
display_line '        get_connection_meters -pcb PCB'
display_line '    ou'
display_line '        get_connection_meters -local IP:PORT -remote IP:PORT'
&return
&
& get_connection_meters se termine ici