Aller au contenu

UDP et TCP ​

L’UDP et le TCP bruts n’ont pas d’écran à eux. Ils servent pour un appareil avec son propre protocole texte ou binaire — un projecteur, un serveur multimédia, un capteur — et ils apparaissent à plusieurs endroits :

Pour…Utilisez
envoyer un datagramme ou un message TCP comme étape, et attendre la réponseles étapes d’expérience
garder un datagramme pour l’envoyer de nouveau, ou rejouer un que vous avez capturéun signal UDP
envoyer un datagramme depuis un scriptsignallab send udp
envoyer à de nombreux hôtes à la fois, vers une adresse de diffusion ou un groupe de multidiffusionl’écran Diffusion
charger un serveur ou une liaison avec du traficTempête
trouver quels ports TCP un hôte a ouvertsScanner
jouer le côté de l’appareilun émulateur d’appareil UDP ou TCP
dégrader le réseau entre deux extrémitésun relais de dégradation

OSC est un format porté dans des datagrammes UDP ; il a sa propre page : OSC.

Charges utiles ​

Partout où vous écrivez une charge utile brute, elle est de deux genres :

GenreCe qui est envoyéExemple
TexteLes caractères en UTF-8, exactement comme saisis : pas de terminateur, pas de fin de ligne ajoutée. Un protocole ligne a besoin de sa fin de ligne dans le texte.PING
Octets hexOctet pour octet, écrits par paires de chiffres hex. Les espaces, :, - et , entre les paires et un 0x devant elles sont autorisés.de ad be ef, DEADBEEF, 0xde,0xad

Un datagramme porte au plus 65 507 octets. Un nombre impair de chiffres hex, ou aucun, est une erreur avant que quoi que ce soit ne soit envoyé.

INFO

UDP n’a pas d’accusé de réception. « Envoyé » signifie que le datagramme a quitté cet ordinateur, pas que quelque chose l’a reçu. Pour savoir qu’un appareil vous a entendu, attendez sa réponse.

Où cela va ​

Une destination est une adresse IP et un port, ou un nom d’hôte et un port : 192.0.2.20:9000, [2001:db8::20]:9000 (une adresse IPv6 se met entre crochets), projector.local:9000. Cela vaut pour la cible d’une étape UDP, une cible OSC, un signal UDP, signallab send udp et signallab send osc, la liste de Diffusion, la cible de Tempête et l’hôte de l’étape TCP.

Un nom d’hôte est résolu à chaque fois qu’il est utilisé. Quand il a une adresse IPv4, c’est elle qui est utilisée — si bien que localhost atteint un service qui écoute sur 127.0.0.1, où la première adresse qu’un système liste pour lui peut être ::1 — et un nom qui n’a que des adresses IPv6 est joint depuis un socket IPv6. Un nom qui ne se résout pas échoue avec Cannot resolve … ; une destination sans port, ou qui n’est ni l’une ni l’autre forme, avec … is not a valid address. Les adresses sur lesquelles un service écoute (celles d’un moniteur, d’une attente, d’un émulateur) sont toujours IP:port.

Dans les expériences ​

ÉtapeCe qu’elle fait
Datagramme UDPEnvoie sa Charge utile en texte vers Cible hôte:port. La cible est IP:port ou host:port (ci-dessus), et plusieurs cibles séparées par des virgules reçoivent chacune le datagramme. Avec attendre une réponse il envoie depuis Réponse sur (IP:port) et attend là une réponse dans la même étape. Détails
Attente UDPÉcoute sur Écouter sur (IP:port) (IP:port) et attend un datagramme dont la charge utile correspond. Détails
Message TCPSe connecte à Hôte et Port, écrit sa Charge utile en texte, écoute 250 ms une réponse, et ferme. L’étape dit combien d’octets sont revenus, pas ce qu’ils étaient. Détails

La charge utile et la cible UDP, l’hôte et la charge utile TCP, et le motif d’une attente prennent des {{templates}}, si bien qu’un datagramme peut porter l’identifiant de l’exécution ou une valeur extraite par une étape antérieure. Voir Données et modèles.

Mettre un datagramme en correspondance ​

Attente UDP et la réponse de Datagramme UDP choisissent un datagramme par sa charge utile :

Charge utilePrend un datagramme quand
N’importe quel datagrammetoujours : le premier qui arrive
Contient le textesa charge utile, lue comme du texte, contient le motif
Correspond à la regexsa charge utile, lue comme du texte, correspond à l’expression régulière
Contient les octets (hex)ses octets contiennent les octets du motif, écrits en hex

Ce qui a correspondu est gardé dans la variable de l’étape (Variable de réponse, reply sauf si vous la renommez) : text, hex (les 1024 premiers octets), bytes (la taille), from (l’IP:port de l’expéditeur), ms (combien de temps cela a pris) et match (le texte ou les octets trouvés, ou le premier groupe d’une expression régulière).

Une attente commence à écouter au démarrage de l’exécution, pas quand l’étape est atteinte, si bien qu’une réponse qui arrive très vite n’est pas manquée. Elle ne prend que ce qui est arrivé après le dernier envoi sur son chemin.

Limites et valeurs par défaut ​

RéglagePar défautPlage
Étape TCP : Délai d’attente (ms) (connexion, écriture et réponse ensemble)4000 ms1–120 000 ms
Délai d’attente, ms d’une attente ou d’une réponse2000 ms1–120 000 ms
Charge utile UDP—au plus 65 507 octets
Adresse d’écoute—IP:port avec un port ; le Réponse sur (IP:port) d’une réponse peut utiliser le port 0 (n’importe quel port libre)

Dans l’Inspecteur, le datagramme d’une étape UDP apparaît avec la source broadcast (ou experiment quand l’étape attend une réponse), et chaque datagramme qui arrive au port d’une attente avec la source experiment-wait. Une étape TCP apparaît comme deux trames tcp avec la source experiment : la charge utile qu’elle a écrite et, quand il y en a une, la réponse qu’elle a lue. Son entrée de chronologie indique ce qu’elle a envoyé et la taille de la réponse.

Signaux ​

Un signal UDP (brut) de la bibliothèque est une cible et une charge utile, en texte ou en octets hex. Envoyez-le depuis Signaux, ou avec Ctrl+K depuis n’importe quel écran. Sa cible peut être un nom d’hôte.

Tout datagramme que l’Inspecteur a gardé entier peut en devenir un : Enregistrer comme signal fabrique un signal UDP hex, dans le dossier Capturés, qui rejoue ces octets exacts — vers la destination de la trame pour une trame qui a été envoyée, vers l’adresse qui l’a reçue pour une qui est arrivée (sur cet ordinateur, quand c’était toutes les adresses). Un morceau TCP ne le peut pas : c’est une pièce d’un flux. Voir Signaux et Inspecteur.

Un signal UDP texte peut être ajouté à une expérience comme étape Datagramme UDP ; un signal hex ne le peut pas, parce que l’étape envoie du texte.

Depuis la ligne de commande ​

signallab send udp envoie un datagramme :

bash
signallab send udp 127.0.0.1:9000 --text "PING"
signallab send udp 127.0.0.1:9000 --hex "de ad be ef"
text
✔ sent 4 bytes → 127.0.0.1:9000

Donnez exactement l’un de --text et --hex. La cible est IP:port ou host:port (ci-dessus). Il sort avec 0 quand le datagramme est parti, 1 quand l’envoi a échoué, et 2 quand la cible ou le hex est invalide. Il n’y a pas de send tcp. Voir Ligne de commande.

Tempête ​

Tempête est une source de charge pour vos propres serveurs et liaisons : un Inondation UDP envoie des datagrammes d’une taille fixée à un débit fixé, un Inondation de connexions TCP ouvre une connexion, écrit la charge utile et ferme, encore et encore. Le débit est mesuré en direct. Voir Tempête.

Scanner ​

Scanner essaie une connexion TCP vers chaque port d’une plage et liste ceux qui acceptent, avec ce que le service dit en premier si vous demandez des bannières. Voir Scanner.

DANGER

Tempête et Scanner émettent du vrai trafic vers de vrais hôtes. Ne les dirigez que vers des systèmes que vous possédez ou êtes autorisé à tester : une tempête peut saturer une liaison, et les deux peuvent déclencher une détection d’intrusion.

Appareils émulés ​

Sur l’écran Émulateurs, Signal Lab peut être l’appareil :

  • un Appareil UDP répond aux datagrammes par des règles sur leur charge utile — n’importe lequel, contenant un texte, correspondant à une expression régulière, contenant des octets — avec une réponse texte ou hex construite à partir de ce qui est arrivé, vers l’expéditeur ou vers un autre IP:port, après un délai si vous en définissez un ;
  • un Appareil TCP accepte les connexions, découpe ce qui arrive en messages à une fin de ligne que vous choisissez (LF, CR LF, CR, ou chaque morceau dès qu’il arrive), répond à chacun par le même genre de règles, peut envoyer un accueil quand un client se connecte, et peut fermer la connexion après une réponse.

Les deux peuvent aussi tourner comme étape Émulateur pendant toute la durée d’une exécution. Voir Émulateurs.

Dégradation ​

Le relais Dégradation se tient entre un client et sa cible et dégrade ce qui passe : par datagramme en UDP (latence, perte, doublons, réordonnancement, une limite de bande passante) ou par flux en TCP (latence, limite de bande passante, connexions réinitialisées ou laissées semi-ouvertes). Voir Dégradation et, dans une expérience, Défaillances.

« Port unreachable » sous Windows ​

Quand un datagramme atteint un port où rien n’écoute, la machine réceptrice répond habituellement par un message ICMP « port unreachable ». Windows rapporte cette réponse à la prochaine réception du socket émetteur, comme si la connexion avait été réinitialisée — alors qu’UDP n’a pas de connexion.

Signal Lab s’y attend. Ses écouteurs — le moniteur OSC, l’écouteur de découverte, les attentes et réponses d’expérience, les émulateurs UDP et OSC, le relais de dégradation — le notent et continuent d’écouter. Un appareil qui a disparu ne les arrête pas. Un écouteur qui ne peut vraiment plus rien recevoir termine sa tâche, et la console indique pourquoi.

Problèmes ​

Ce que vous voyezCause habituelle
… is not a valid addressLa cible n’a pas de port, ou n’est ni IP:port ni host:port.
Cannot resolve …Le nom d’hôte ne se résout pas sur cet ordinateur.
… refused the connection — nothing is listening on that port (TCP)Rien n’écoute sur ce port, ou un pare-feu le rejette.
No answer from … in time (TCP)L’hôte ne répond pas du tout — mauvaise adresse, ou un pare-feu qui abandonne au lieu de rejeter.
Une attente expire alors que l’appareil répondL’appareil répond au port d’où le datagramme est venu, pas au port de l’attente. Laissez l’envoi attendre lui-même la réponse avec attendre une réponse : il part alors du port où la réponse revient.
Les datagrammes d’autres machines n’arrivent jamaisSous Windows, le pare-feu peut les retenir : autorisez Signal Lab quand l’application le propose. Voir Dépannage.

Chaque message d’erreur est listé dans Messages d’erreur.