본문 바로가기

Network

포트 번호에 대한 고찰

 

흨.... 인턴 출근전에 강의노트를 올려두려고 했는데ㅋㅋㅋㅋ

패드를 처음 써보는 내가... 이 노트의 모든 필기 지우기 를 해버리는 바람에 해당 pdf에 있는 모든 필기가 날아갔다ㅋㅋㅋ....

 

 

누굴 탓하겠어... 하다가도

아니 한번더 물어봐줄 수 있자나!!! 경고 한번 더 해줄 수 있짜나!!!!!!

 

ㅋㅋㅋㅋㅋㅋ현실 부정 한번 해주고... 블로그 정리 몰아서 하지 말고 되도록 그때 그때 하기로ㅠ....

 

 

날라간김에 강의 내용은 나중에 정리한건 나중에 올리고 이번엔 질문중에 좋은 내용이 있어서 갖고왔다.

사실 나도 보고 좀 헷갈렸는데 덕분에 정리를 했다.

 

host의 내부 통신에 대한 강의였는데

127.0.0.1 을 통해 변동 가능성이 있는 Ip 주소를 통한 통신보다 안정적으로 내부 프로세스들간의 통신을 할 수 있는 

고정된 ip 주소를 사용한다~ 는 내용이었다.

 

이때 주의할게 127.0.0.1 뒤에 포트번호가 덧붙여 진다는 점!

 

 

 

제가 이해하기로는
IP주소에는 네트워크 주소와 호스트 주소가 있고 포트번호는 호스트 주소에 있는 프로세스
더 정확히 말하면 소켓을 구분하는 번호로 사용된다고 이해하고 있는데요.
 www.naver.com 이나 www.google.com이나 뒤에 :80 포트 번호가 생략된다고 하던데
(https 라면 443 이라고 알고 있습니다)

포트 번호는 호스트 주소에서 프로세스를 구분 하는 용도라고 이해를 했는데
http프로토콜이 80번 포트를 사용한다는게 이해가 가질 않습니다.
http가 프로세스는 아니잖아요? 그런데 어떻게 포트 번호가 있는건지..
 네이버나 구글 url주소를 치면 dns서버에서 ip주소로 변환해서 회사 서버에 접속이 되고
그중에서 http 프로토콜에? 웹서비스 접속을 하려고 하니 80번 포트로 접속을 하는 건지..
그럼 이것은 강의에서 설명하신 포트 중에 서비스 번호를 의미하는건지..
그리고 포트포워딩에서 포트는 위에 포트를 의미 한다기 보다
강의에서 설명하셨던 2계층 포트를 의미하는건가요?

이게 찾은 질문이었다.

 

그 혼합된 두 가지는 제대로 이해하고 있는 것으로 보입니다.

만일 한 컴퓨터에서 외부 TCP 접속을 받을 수 있는 프로세스가 2개(각각을 A와 B로 가정)라고 했을 때 
두 프로세스 모두 TCP 20000번 포트에서 접속을 대기할 수는 없습니다. 애초 접속 대기 소켓 생성과정에서 실패합니다.
그러므로 동시에 A, B 모두 외부 접속을 받으려면 20000, 20001번 등 서로 다른 번호를 사용해야 합니다.

그리고 사설 주소를 사용하는 내부 Host(Host ID: 1~3) 중 셋 모두 TCP 20000번을 열고 
외부 접속을 기다리는 프로세스를 각각 실행 할 수는 있습니다. 
Host가 아예 다르기 때문에 번호가 같다는 것은 전혀 문제가 되지 않습니다. 
따라서 192.168.0.1번, 2번, 3번 모두에서 TCP 20000을 개방해 외부 접속을 기다리는 프로그램이 실행되는 것까지는
아무 문제가 없습니다. 
그런데 공유기에 포트포워딩 설정이 적용되고 설정에 따라 192.168.0.1번의 20000번으로 전달 되도록 유도했다면 
192.168.0.2, 3번 Host는 프로그램 실행 및 접속대기를 하더라도 외부 접속을 받을 수는 없습니다.

이게 답변이었는데 

 

내가 헷갈리는 것과 잘못알고 있던 점을 정리해봤다.

 

1. ip 주소와 포트 번호

 ip 주소가 네트워크 상에서 해당 컴퓨터의 주소지라는건 이해했는데 그럼 포트 번호는 정확히 뭘 뜻하는 것인가...

port 번호는 그 컴퓨터 안의 어떤 프로세스인지를 지칭하는 것  이라고 한다.

 

그러니까 포트 번호가 ip 주소 뒤에 붙는 프로토콜의 고유 번호 + 무언가 라고 막연하게 이해했었는데 전혀 잘못 된 것이었다...ㅠ

 

포트 번호로 프로세스를 구분할 수 있고.

프로세스가 포트 번호를 가진다 -> 프로세스가 만든 소켓이 포트 번호를 가진다. 가 정확한 표현이라고 한다.

 

그럼 HTTP가 80번을 가진다는게 왜 성립하는가

 

HTTP라는 프로세스가 80번에 있는게 아니라

웹서버 프로그램(Apache, Nginx 등등)이 HTTP 프로토콜 요청을 처리하려고 80번 포트에서 대기중이기 때문이라고 한다

 

1-1. +)그럼 80번 포트를 닫아두면 http로 통신하려는 인바운드 아웃바운드 전부 다 무시될까?

=> 인바운드는 막히는데 아웃바운드는 나간다.

 

엥? 아웃바운드는 어케 되는거지? 라고 생각했는데

아웃바운드 요청은 대부분 "랜덤 고포트"로 나가기 때문이라고 한다ㅋㅋㅋ

 

 

1-2) 어... 그럼 랜덤 고포트는 뭐야?

클라이언트가 외부 서버와 통신할 때 자동으로 사용하는 임시 포트 번호라고 한다. 통신이 끝나면 사라진다.

 

그러니까 서버의 80번 포트는 대표 번호로 수신만 해서 응대하도록 해둔거고

거래처에 연락할때(아웃바운드)는 영업사원이 개인 번호로 전화를 하는 것 이라고 생각하면 될 것 같다ㅋㅋ

 

그래서 내가 외부로 http 요청을 보낼때는 랜덤 고포트로 보내니까 막히지 않는 다는 것...!

 

 

2. 포트 번호는 호스트 주소에서 프로세스를 구분하는 용도이다 의 뜻

port 번호가 프로세스를 지칭한다는걸  기억하자

 

ip 주소로 어느 컴퓨터 인지 식별하고 그 다음은,

 

하나의 컴퓨터에서 프로세스별로 네트워크를 사용하고 있을거다.

 

- 게임 서버

- 웹 서버

- DB서버

- 메신저 서버 등등...

 

그래서 프로세스가 연 소켓이 가지는 포트번호로 어떤 프로세스에게 통신 내용을 전달할지 구분하는 것!

 

IP 주소 == 아파트 주소

port 번호 ==  아파트 호수

 

그러니까 택배를 누구네 집에 전달할지 구분할때 포트 번호를 쓰는 것이 된다. 

 

3.  공유기에 포트포워딩 설정이 적용되고 설정에 따라 192.168.0.1번의 20000번으로 전달 되도록 유도했다면 
192.168.0.2, 3번 Host는 프로그램 실행 및 접속대기를 하더라도 외부 접속을 받을 수는 없습니다. 

 

이말이 그러니까 192.168.0 ip 주소에 포트 번호가 각각 1,2,3 인 컴퓨터가 3대 있는데

각 3대의 컴퓨터에서 TCP 20000 번의 포트를 열어 두고 통신을 대기중인거다. 각각 다른 컴퓨터이니 같은 포트 번호로

통신을 열어놔도 ok 인거.

 

근데 NAT 공유기는 "단 하나의 공인 IP"만 가진다. 

외부에서 192.168.0:20000 으로 접근하면 3대의 컴퓨터가 모두 20000번의 포트 번호를 열어 뒀으니 

외부에서 들어온 통신이 하나의 컴퓨터로만 가도록 공유기에 포트포워딩 설정이 필요하다.

 

20000 -> 192.168.0.1:20000 이렇게 설정이 되어 있어 나머지 2,3에서는 통신을 받지 못한다는 것.

 

풀어서 천천히 생각해보니 이제 이해가 간다ㅎㅎ

728x90

'Network' 카테고리의 다른 글

네트워크 입문  (0) 2025.10.12