Windows 포트 징집 이슈
윈도우는 욕먹으려고 작정했는가?
마이크로소프트는 Windows 운영체제를위한 시스템 프로그램을위해 내부 네트워크를 사용하는데 여러가지있는데 이게 유저들에게 랜덤하게 문제를 일으킨다. 윈도우의 포트징집 공식명칭은 Dynamic Port Range 인데 이 글에서는 포토징집 이슈가 뭐고, 왜 문제가 돼며 어떻게 해결하는지 까지 알아보겠다.
문제원인
인터넷을 오래한사람들은 80포트를 http에서 사용하고 443포트는 https에서 사용하는것쯤은 알것이다. 이 인터넷 생태계에서는 이뿐만이라 수많은 표준 포트들이 존재하는데 이들은 대부분 2~3자리로 분포되어있다. 따라서 소프트웨어 개발사들은 4자리 포트를 많이사용하고 개발자들도 4자리 포트를 많이사용한다.
웹사이트개발시 3000 8080 5173번 포트를 주로사용하고
MySQL PostreSQL같은 데이터베이스들도 3306 5432 포트를 사용한다.
물론 이포트들은 독점된것이 아니며 내가 MySQL을 사용하지않는다면 3306포트를 다른용도로 사용해도 상관없다. 하지만 사람들은 협업과 편의성을위해 이 포트를 바꾸거나 겹치도록 설정하는걸 피하는편이다. 내가 지금은 MySQL을 서버를 사용하지않지만, 마인크래프트 서버를 열먼서 MySQL을 사용하게 될수도있다. 이때 3306포트를 다른용도로 사용중이라면 우린 어떤포트로바꿀지 고민해야하는 상황을 마주하게된다. 이런 이유로 4자리숫자는 개발자들에게 점령되어있어서 게임에서는 5자리 숫자포트를 많이 사용한다.
각설하고 윈도우에서도 내부적으로 포트사용이 필요하게되는데 이 포트가 부팅할때마다 랜덤하게 바뀐다. 문제는 이 랜덤하게 바뀌는 포트가 전세계 수천만이 주로사용하는 포트들까지도 겹치도록 설정 되어있다는것이다. 필자는 윈도우 11을사용중인데 현재 윈도우에게 점령당한 포트를 보면 이렇다.
윈도우가 이렇게 천개가넘는 포트를 점령중인데 참고로 포트범위는 65535 까지밖에 안돼는데 이중 천개를 못쓰게 막는다는것이다. 앞서 말했듯 이포트는 무작위로바뀐다. 포트갯수는 사실상 유저가 충돌걱정없이 맘놓고 쓸수있는건 6만개정도인데 이중 천개를 윈도우가 랜덤으로 가져간다.
여기서 치명적인 문제점이 2가지가있다.
문제점 1. 징집포트가 랜덤하게 바뀐다는 점 – 대다수의 유저가 포트충돌 문제를 겪도록 만든다. 물론 직접 포트를 사용하지 않는사람들은 문제를 겪을일이 없지만 포트를 사용하는사람들은 매우 높은확률로 랜덤하게 문제를 겪게된다.
문제점 2. 징집 포트 범위가 지나치게 넓다는 점 – 저렇게 100개의 포트를 징집하지만 실제로 사용하는 포트는 한 두개인경우가 많다. 불필요하게 넓게잡아 충돌가능성을 높히고 유저를 불편하게 한다는것이다.
내가 글 부제로 “윈도우 욕먹으려고 작정했는가?” 라고했는데, 여기서 네트워크에대해 좀 안다는사람이면, IANA 권장사항 따르기 위함 이니 문제가 없다 생각할수도 있겠지만, 이게 위에 언급한 문제점 1, 2와 중첩되어 대다수유저에게 불편을 준다는게 큰 문제란것이다.
해결방법
- 점령당한 포트목록 보는 명령어. (물론 udp도 ipv6도 가능하다 arg를바꾸면된다)
netsh interface ipv4 show excludedportrange protocol=tcp
- Windows가 점령할수있는 포트 제한하기
- “Address already in use: bind”
- “Port 12345 is already in use” (12345는 예시 포트 번호)
- “Unable to bind to port 8080”
- “Failed to start server: Port 3000 is already in use”
위 명령어들로 현재 점령당한 포트를 확인할수있고 윈도우가 점령할 포트도 내가 지정해줄수있다.
두번째 명령어를 사용하면 49152~65531 포트를 윈도우가 점령 할수있게된다
위 처럼해도 여전히 포트 충돌 가능성은 존재하지만 개인적으로는 50000번대 이상을 기본포트로 사용하는 프로그램이나 게임은 본적이 없다. 만약 있다면 본인상황에 맞게 수정하면된다.
윈도우가 실제사용하는 포트는 100개도 되지않지만 혹시 이게 고정이면 보안에 취약해지진 않을까 하는 생각에 범위를 최대한 넓게 설정해줬다. 저 16380개 포트범위에서 매 부팅시마다 윈도우가 포트 천개정도를 골라서 실제로는 십여개를 사용하여 윈도우 작동에 사용한다.
참 비효율적이다. 이해는 안돼지만 혹시나 하는생각에 윈도우가 원하는대로 포트를 많이 할당해줬다.
이는 설정후 모습이다
보면 내가 설정하지않은곳에서도 5426, 27339 포트를 점령중인것으로 보이는데 검색해보니 5426은 Razer 프로그램이 사용중인거같은데 포트충돌이 나지않게하기위해 내부적으로 설정하도록 된것같다. 나중에 찾아보고 필요없으면 삭제해야겠다.
포트 충돌시 나오는 메시지들
- “Address already in use: bind”
- “Port 12345 is already in use” (12345는 예시 포트 번호)
- “Unable to bind to port 8080”
- “Failed to start server: Port 3000 is already in use”