接続プロトコル (TCP/IP)
こんにちは、nagino です。
SQL Server では接続プロトコルとして以下の 4 つがサポートされています。
-1. 共有メモリ(Shared Memory)
-2. 名前付きパイプ(Named Pipe)
-3. TCP/IP
-4. VIA
このうち、1 はローカル接続専用、4 は特殊なハードウェアが必要なため、通常は 2 と 3 が使用されます。
パフォーマンスや名前解決の問題から、通常はローカル接続では 2、リモート接続では 3 を使用します。
実際に使用しているプロトコルは、sys.dm_exec_connections で確認できます。
例えば以下のクエリで詳細を把握できます。
SELECT
net_transport,
*
FROM sys.dm_exec_connections
さて、2 は TCP ポート 445 で構成されるので良いのですが、3 についてはポートの構成を様々な形で行うことができます。
無名インスタンス(既定のインスタンス)の場合はポート番号は固定となり、IANA に登録されている TCP 1433 で待ち受けしますので、サーバ側もクライアント側も特に接続に支障はありません。
しかし名前付きインスタンスの場合は、デフォルトでポート番号が可変(動的)となります。
もちろん固定にし、FireWall やクライアント側で明示的に指定するのも可能ですが、動的な割り当てとすることもできます。
その場合は SQL Server Browser サービスを使用するのが一般的です。
これは UDP 1434 で待ち受けするサービスで、ローカルで起動している SQL Server のインスタンス名とポート番号を管理しています。
クライアントは UDP 1434 に接続し、接続文字列にあるインスタンス名に対応する SQL Server のポート番号を取得し、その後入手したポート番号で SQL Server に接続します。
このため、ポート番号が可変でも問題なく接続できるようになります。
ただし、この場合は FireWall の構成を工夫する必要があります。(ポート番号での指定ではなく、実行ファイルでの指定など)
