Host Network Service (HNS)에 의해서 점유되는 포트
"Host Network Service", 줄여서 hns 서비스는, scm에 등록된 설명을 보면 "Provides support for Windows Virtual Networks."와 같이 가상 네트워크를 제공하는 역할을 합니다. 그러니까, (아마도) WSL을 사용하거나 "Windows Containers" 구성 요소를 설치하면 그런 환경들에 가상 네트워크를 제공하는 것입니다.
그런데, hns 구성 요소가 점유하는 포트들이 꽤 됩니다. 지금 제가 사용하는 예약 포트들이 이런 상태인데,
C:\Windows\System32> netsh int ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
80 80
5357 5357
28000 28000
49696 49795
49896 49995
50000 50059 *
50060 50159
50160 50259
50380 50479
50752 50851
50952 51051
51052 51151
51152 51251
51252 51351
63101 63200
63201 63300
63629 63728
63729 63828
63829 63928
63929 64028
* - Administered port exclusions.
hns 서비스를 중지시킨 후 확인해 보면 다음과 같이 바뀌어 있습니다.
C:\Windows\System32> net stop hns
The Host Network Service service is stopping.
The Host Network Service service was stopped successfully.
C:\Windows\System32> netsh int ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
80 80
5357 5357
28000 28000
50000 50059 *
62710 62809
62810 62909
62910 63009
63099 63198
63199 63298
63443 63542
63543 63642
63843 63942
64122 64221
64222 64321
64322 64421
64422 64521
64522 64621
64622 64721
* - Administered port exclusions.
중지시켰는데... 거의 그만큼의 다른 포트가 점유된 것은, hns 서비스의 관리 방식이 독특하기 때문입니다. 즉, stop 시키면 곧바로 다시 start가 되는 식입니다. (지금까지 이런 서비스는 없었던 걸로 압니다. ^^)
(아직 어떤 문서로 읽은 것은 아니지만) 아마도 저 범위는 dynamicport 내에서 이뤄지는 듯합니다.
C:\Windows\System32> netsh int ipv4 show dynamicport tcp
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 49152
Number of Ports : 16384
따라서 동적 포트 범위만 잘 설정해도 아래와 같은 오류를 만나는 경우는 줄어들 것입니다. ^^
소켓 바인딩 시 "System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions" 오류 발생
; https://www.sysnet.pe.kr/2/0/12240
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]