Quand un port dynamique est-il «dynamique»?

23

Je discutais aujourd'hui Dynamic Portsavec l'un de mes collègues et je pourrais utiliser de l'aide pour clarifier leur fonctionnement.

Première question: si le IPALL TCP Dynmaic Portsparamètre est un numéro spécifique (disons 1971), cela signifie-t-il que vous avez un port statique de 1971 ou un port dynamique qui est actuellement de 1971 et peut changer à un moment donné dans le futur.

entrez la description de l'image ici

Deuxième question: c'est celle qui m'intéresse le plus. Nous avons une instance qui a eu le même port (la valeur dans le IPALL TCP Dynmaic Portsparamètre) pendant plusieurs années grâce à des dizaines de redémarrages d'instance. Qu'est-ce qui fait que le port dynamique change réellement après le redémarrage d'une instance?

Kenneth Fisher
la source

Réponses:

22

Cet article de la base de connaissances : comment configurer SQL Server pour écouter sur un port spécifique clarifiera les choses pour vous:

Allocation dynamique des ports

Si vous configurez une instance de SQL Server pour utiliser l'allocation de port dynamique et que vous n'avez pas encore redémarré l'instance de SQL Server, les valeurs de Registre sont définies comme suit:

TCPDynamicPorts = Vide

TCPPort = 0

Toutefois, si vous configurez une instance de SQL Server pour utiliser l'allocation de port dynamique et redémarrez l'instance de SQL Server, les valeurs de Registre sont définies comme suit:

TCPDynamicPorts = port actuel utilisé

TCPPort = port actuel utilisé

Allocation de port statique:

Si vous configurez une instance de SQL Server pour utiliser un port statique et que vous n'avez pas encore redémarré l'instance de SQL Server, les valeurs de Registre sont définies comme suit:

TCPDynamicPorts = Dernier port utilisé

TCPPort = Nouveau port statique à utiliser après le prochain redémarrage; nouveau port statique que vous avez défini à l'aide de l'utilitaire réseau du serveur

Toutefois, si vous configurez une instance de SQL Server pour utiliser un port statique et redémarrez l'instance de SQL Server, les valeurs de Registre sont définies comme suit:

TCPDynamicPorts = Vide

TCPPort = nouveau port statique que vous avez défini à l'aide de l'utilitaire réseau du serveur

pour votre deuxième question -

Chaque fois que vous démarrez le serveur SQL nommé, il utilise le port alloué. Si le port est utilisé par un autre programme , SQL Server choisit un autre port au moment du redémarrage, c'est-à-dire que le port dynamique est choisi au premier démarrage et restera généralement le même lors des prochains redémarrages (stockés dans le Registre) - mais si son utilisé par un autre programme, puis SQL Server choisira un nouveau port. Remarque: Pour les serveurs Prod, j'utilise uniquement des ports statiques - des raisons de sécurité et de facilité de gestion.

Remarque: Plus de chose cool pour le savoir:

Vérifiez si le port dynamique est utilisé ou n'utilise pas T-SQL:

SELECT NAME
    ,protocol_desc
    ,type_desc
    ,state_desc
    ,is_admin_endpoint
    ,port
    ,is_dynamic_port
    ,ip_address
FROM sys.tcp_endpoints

entrez la description de l'image ici

Vous pouvez utiliser netstat -anopour vérifier à l'aide de cmdline.

De plus, vous pouvez vérifier ce qui a été mis en cache plus tôt dans le registre côté client quant au port utilisé pour se connecter au serveur SQL:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect

entrez la description de l'image ici

Kin Shah
la source
Merci et c'est un lien très utile! Savez-vous ce qui fait qu'un port dynamique change de port? Voir Second questiondans ma question ci-dessus.
Kenneth Fisher
@KennethFisher for your second question- Chaque fois que vous démarrez le serveur SQL nommé, il utilise le port qui lui est alloué. Si le port est utilisé par un autre programme, SQL Server choisit un autre port au moment du redémarrage. Le port dynamique est choisi au premier démarrage et restera généralement le même lors des prochains redémarrages (stockés dans le Registre) - mais s'il est utilisé par un autre programme, le serveur SQL choisira un nouveau port. Remarque : Pour les serveurs Prod, j'utilise uniquement des ports statiques - des raisons de sécurité et de facilité de gestion.
Kin Shah
Seriez-vous si gentil d'expliquer pourquoi pensez-vous qu'il vaut la peine d'implémenter un service complètement nouveau (navigateur de serveur SQL) qui fonctionne sur un port statique afin qu'il ne démarre pas si ce port est utilisé, simplement parce que vous voulez démarrer SQL Server dans un cas où certains autres services utilisent des ports que vous êtes trop maladroit pour attacher au logiciel probablement le plus cher que vous utilisez?
kakaz