2009-11-04 3 views
2

Nous avons une application qui envoie périodiquement des messages TCP à un débit défini (en utilisant MODBUS TCP). Si un message n'est pas reçu dans une période définie, une alarme est déclenchée. Cependant, de temps en temps, il semble y avoir un retard dans la réception des messages. L'enquête a montré que cela est associé à l'actualisation du cache ARP provoquant un renvoi du message TCP.Comment réduire les retards TCP causés par les vidages ARP pour MODBUS TCP

Le fournisseur de la pile IP nous a dit que c'est le comportement attendu pour TCP. Les questions sont, Est-ce le comportement attendu pour une pile IP? Sinon comment les autres piles fonctionnent-elles pendant la période où la traduction d'adresse IP/MAC n'est pas disponible Si c'est le comportement attendu, comment pouvons-nous réduire le retard des messages TCP pendant cette période? (Des entrées ARP permanentes ont été essayées, mais ne sont pas la meilleure solution)

Répondre

1

Dans mon dernier emploi, j'ai travaillé avec une entreprise de construction de routeurs et de commutateurs. Notre implémentation mettrait en file d'attente les paquets en attente de réponses ARP et les enverrait lorsque la réponse ARP serait reçue. Par conséquent, aucune retransmission TCP n'est requise.

La retransmission dans TCP se produit lorsqu'un ACK n'est pas reçu dans un délai donné. Si la réponse ARP prend beaucoup de temps ou est elle-même perdue, vous pouvez obtenir une retransmission même si le périphérique en attente de la réponse ARP met en attente le paquet.

Il semblerait d'après votre question que la période du message TCP est plus courte que l'heure d'actualisation ARP. Cela implique que la réutilisation de l'ARP ne l'incite pas à rester rafraîchi, ce qui est un comportement possible qui serait utile dans votre situation. Une trace de paquet de la situation se produisant pourrait être utile - êtes-vous en train de perdre le premier paquet? Combien de temps la réponse ARP prend-elle?

Afin d'arrêter la temporisation du cache ARP, vous pouvez essayer de trouver quelque chose qui l'actualisera, comme une autre requête ARP pour la même adresse, ou un ARP gratuit. J'ai trouvé une spécification pour MODBUS TCP mais cela n'a pas aidé. Pouvez-vous poster quelques détails de votre réseau - médias, appareils, vitesses?

0

Votre description suggère que les entrées ARP homologues expirent entre les segments TCP et provoquent l'échec de certains segments suivants en raison de l'absence d'une destination MAC actuelle.

Si vous avez les périphériques MODBUS sur un sous-réseau distinct, alors peut-être que le routeur de destination aura la gentillesse de mettre en file d'attente le segment jusqu'à ce qu'il reçoive un MAC valide. Si vous ne pouvez pas utiliser un sous-réseau distinct, vous pouvez essayer de forcer la session à avoir des keep-alives activées - cela entraînerait l'envoi d'un message vide périodique qui maintiendrait la réinitialisation des minuteurs ARP. Si le surcoût du keep-alive est trop élevé et que vous contrôlez complètement l'application dans votre système, vous pouvez essayer de forcer des messages de longueur nulle vers l'homologue.