소켓 통신을 하려면 반드시 결정해야 하는 것이 PORT 번호입니다. 여러분은 어떤 번호를 사용하나요? 저는 지금껏 1,000번 이하만 피하면 된다고 알고 있었습니다. 그래도 안전을 지킨다고 4,000번 이상을 사용했는데, 4,000번 대를 사용한다고 해도 안전한 것이 아니군요.

 

물론 웹 서버, FTP 서버, 텔넷, 삼바, NFS와 같은 기본적인 프로그램만 사용한다면 100번 이상 사용해도 좋겠습니다만, 이와는 달리 좀 특색 있는 프로그램을 사용한다면, 주의 해야겠습니다.

 

웹으로 검색해 보았습니다. 과연 어떤 포트를 사용해야 안전할지 말이죠. 제일 간단하게 설명한 곳은 위키백과였습니다.

위키 백과에서는 3 개의 그룹으로 설명되어 있습니다.

 

포트 번호 지역 설명
0번 ~ 1,023번 잘 알려진 포트(well-known port)
1,024번 ~ 49,151번 등록된 포트 (registered port)
49,152번 ~ 65,535번 동적 포트 (dynamic port)

 

그렇다면 49,152번부터 사용해야 안전하다는 얘기일 것 같은데, 반드시 그렇지는 않네요. 두 번째 항목인 "등록된 포트"는 과연 무엇일까요? 등록? 그렇습니다. 소켓 통신에 사용하는 포트 번호도 국제적으로 관리하는 기구가 있는데, 여기에 동록 했다는 얘기입니다. 여기에 등록한다면 국제적으로 안전한 포트 번호를 할당 받겠지요.

이 페이지를 본다면, 49,152번 이상을 사용한다고 하더라도 안저하지 못합니다. 그 이상의 포트 번호도 많이 지정되어 사용하고 있군요. 눈에 뛰는 것만 몇 가지 적어보면 아래와 같습니다.

  • winfs 5009/tcp Microsoft Windows Filesystem
  • winfs 5009/udp Microsoft Windows Filesystem
  • vnc-server 5900/tcp VNC Server
  • vnc-server 5900/udp VNC Server
  • oracleas-https 7443/tcp Oracle Application Server HTTPS
  • oracleas-https 7443/udp Oracle Application Server HTTPS
  • sun-user-https 7677/tcp Sun App Server - HTTPS
  • sun-user-https 7677/udp Sun App Server - HTTPS

물론 iana에 등록된 PORT를 피해 사용한다고 하더라도 완벽한 안전을 보장 받지는 못할 것입니다. 같이 사용되는 다른 회사 프로그램도 피하고 피한다는 것이 내 프로그램과 같은 포트를 사용할 수 있으니 말이죠.

 

또한 임베디드시스템에서 1,024포트 이상의 것을 사용하는 프로그램과 같이 사용하는 경우는 극히 드물기 때문에 1,024 번호 이상을 사용하면 되겠습니다만, 그래도 안전한 것이 좋은 만큰 앞으로는 외우기도 쉽게 50,000번 이상을 사용하려 합니다.