반응형
일반적인 포트 번호 범위
TCP/UDP 통신에서는 포트 번호를 이용해서 컴퓨터 안의 어떤 프로그램에게 데이터를 전달할지를 식별합니다. 포트 번호는 0부터 65535까지의 16비트 범위의 숫자로 되어 있습니다.
- 0 ~ 1023 : 잘 알려진 Well-Known Port 라고 부르며, 웹 서버나 메일 서버 등의 일반적인 프로그램들이 사용합니다.
- 1024 ~ 49151 : Registered Port 라고 부르며, 잘 알려져 있는 프로그램들이 아닌 다른 용도의 프로그램들이 사용합니다.
- 49152 ~ 65535 : 동적 포트(Dynamic Port)로 서버가 클라이언트를 식별할 때 사용합니다.
일반적으로 잘 알려진 포트 번호들은 여기에 포스팅되어 있습니다.
포트 번호의 사용법
포트 번호를 사용하는 구체적인 예제는 다음과 같습니다.
클라이언트 → 서버 (Request)
클라이언트에서 웹브라우저를 이용해서 서버로 Request를 보내게 되면,
- 출발지 포트에는 동적 포트 중 랜덤으로 선택한 숫자를 할당 (ex. 50000)
- 목적지 포트에는 웹 서버 포트인 80을 입력
와 같이 세그먼트Segment)를 만들어서 전송합니다.
서버 → 클라이언트 (Response)
웹 서버에서는 클라이언트에게 Response를 보내게 되는데, 이 때
- 출발지 포트에는 웹 서버 포트인 80을 입력
- 목적지 포트에는 클라이언트에게 받은 포트(ex. 위에서 사용한 50000번 포트)
를 이용해서 데이터를 전송합니다.
https://snowdeer.github.io/common-sense/2018/02/01/understanding-about-port/
port번호는 사용할 수 있는 영역이 정해져 있습니다.
0 ~ 1023 : well-known port번호 영역입니다.
이 영역의 port번호는 UNIX/LINUX에서 root 권한으로만 port를 열 수 있습니다.
예약영역이라고 보면 됩니다.
1024 ~ 49151번: 등록된 포트 (registered port)
이 영역은 주로 서버 소켓으로 사용하는 영역입니다.
49152 ~ 65535번 : 동적 포트(dynamic port)
이 영역은 client가 connect(2)시
또는 bind(2)없이 server socket을 생성했어 listen(2)할 경우에 자동으로 할당되는 영역입니다.
server socket에서 자동할당하면,
client에게 할당된 port번호를 알릴방법이 있어야하기 때문에 서버 소켓은 prot번호를 정합니다.
동적 포트영역은 서버 소켓 포트로 사용금지
서버 socket을 생성할 때에 동적 포트 영역의 번호를 bind(2)하여 사용할 수도 있습니다.
그러나 이 경우에는 심각한 장애가 발생할 수 있습니다.
예전에 실제로 발생한 오류인데, 서버소켓을 50000번대로 할당하여 사용하는 프로그램이 있었습니다.
이 프로그램을 실행하기 전에 여러 프로그램들이 기동하면서,
수백개의 프로그램이 Oracle DB서버와 접속을 하였습니다.
이 때에, oracle db에 접속한 프로그램이 connect(2)하면서 동적영역의
port번호를 먼저 선점하여 실행하였습니다.
뒤에 실행한 이 서버 프로그램이 port번호가 사용중이라는 오류와 함께 기동이 되지 않았습니다.
이 경우에는 장애로 이어집니다.
따라서, 동적 포트(dynamic port)영역은 서버 소켓용 port로 절대 사용금지하기 바랍니다.
출처: https://www.it-note.kr/189 [IT 개발자 Note:티스토리]
반응형
'NETWORK' 카테고리의 다른 글
소켓이란? 엔드포인트와의 차이점 (0) | 2023.01.31 |
---|---|
samba 서버 포트 139, 445 (0) | 2022.11.24 |
특정 포트 ping 테스트 (tcping) (0) | 2022.08.02 |
소켓(socket)이란? (0) | 2022.05.16 |
SNI(Server Name Inication) (0) | 2022.02.18 |
댓글