[궁금한 IT지식] 한 프로그램에 여러 개 포트를 사용하는 게 가능할까? (포트와 소켓)
2021. 3. 19. 00:08정답은 YES이다.
(프로그램 개발 단계에서) 우리는 selector/poll 방식을 이용하면 각각의 포트에 대해 정보 및 알림을 받을 수 있고 해당 포트에 대한 연결을 관리할 수 도 있다. 이 방법뿐만 아니라 socket함수를 이용해도 가능하다!
그럼 각각의 포트를 신뢰할 수 있게 제어할 수 있나?
이것도 YES이다.
각각을 포트는 각기 다른 소켓에 의해서 제공되고 제어할 수 있으므로 각각 포트들을 신뢰할 수 있게 처리할 수 있다.
참고로 하나의 프로세스가 하나의 포트를 가진 채로 여러 소켓을 열 수가 있다. (즉, 포트와 소켓은 반드시 1:1 매치가 되진 않는다. 포트 대 소켓은 1:N이 성립한다.) 하나의 프로세스는 같은 프로토콜, 같은 IP주소, 같은 포트 넘버를 가지는 여러개(수십개)의 소켓을 가질 수 있다.
그렇기 때문에 하나의 프로세스는 하나의 포트만으로 다른 여러 호스트에 있는 프로세스의 요청을 처리할 수 있고 게임 서버의 동시 접속자 수가 수십수백만이 될 수 있는 것이다.
프로그래밍 관점에서
프로그램 개발자 관점에서는 시스템이 허용된 포트 내에서 자유롭게 소켓 통신을 구현할 수 있다는 것이다, 프로그램 개발자 관점에서는. 따라서 개발자는 시스템 밑단까지 이해하는게 아닌 포트까지만 이해해도 자유롭게 개발이 가능해진다. (시스템 엔지니어와의 구분으로 인해)
포트와 소켓
포트(Port)는 숫자다. 특정 서비스를 나타내는 고유 숫자이다. (HTTP서비스는 80) 하지만 이 서비스를 제공하기 위해서 여러 프로세스가 이 포트에 데이터가 왔는 지 귀에 대고 잘 들어야(listening) 할 것이다. 왜 여러 프로세스냐고? 여러 사용자게에 제공을 해야할 것이기 때문이다. 그리고 여러 프로세스가 이 포트를 유심히 들어야하는 이유는 여러 사용자는 각기 다른 IP주소를 가지므로 IP주소에 따라 다른 처리를 해주어야 하기 때문이다.
소켓(Socket)은 인터페이스다. 특정 포트를 통해 특정 사용자와 소통하기위한 인터페이스다. (listening 하는 단위라 생각하면 된다. 사람으로 따지면 귀?) 프로그램 내부에서 특정 프로토콜, IP주소, 포트 넘버 등등를 설정하여 그 성격에 맞는 사용자와 소통하기(listening) 위한 인퍼테이스다. 여기서 특정 프로토콜과 포트는 같지만 IP주소(호스트, 서비스 수신자)가 각기 다르면 우리는 소켓을 여러개 설정해야할 것이다. (그래야 한다.)
한 가지 문(포트)에 대해 여러 사람이 귀(소켓)를 대고 유심히 들을 수 있다.
이 질문은 "TCIP/IP가 보이는 그림책"을 읽으면서 궁금해졌습니다.
참고 자료
- Bind one process to multiple ports?
unix.stackexchange.com/questions/128677/bind-one-process-to-multiple-ports/128679
- selector/poll 방식
- 소켓과 포트의 차이
'IT 궁금증' 카테고리의 다른 글
[궁금한 IT지식] 소프트웨어 라이센스에 대해서, (0) | 2021.08.11 |
---|---|
[궁금한 IT지식] 라우터란 도대체 뭘까? 라우터 뜻. (3) | 2021.06.24 |
[궁금한 IT지식] IP가 패킷을 보장하지 않을까? (0) | 2021.03.19 |
[궁금한 IT지식] TBU 라우터가 헤더에 자동으로 추가해서 다음 라우터로 패킷을 보내는 걸까? (0) | 2021.03.19 |