본문 바로가기
  • < / >
Computer Science

OSI_Transport( 4 Layer ) 궁극적인 기능에 대하여

by JunMango 2024. 4. 16.

TCP 는 옛날 기술이다. 그럼에도 OSI 의 전통적인 연결 방법 이라 알아야 하기 때문에 블로그로서 기록을 한다.

 

이글을 적는 이유와 OSI 전체 계층이 아니라 4계층에만 특정하는 이유는

 

4계층은 TCP , UDP 가 나누어지는 계층이고 학교에서 공부를 하다가  4계층에서 process와 port에 대해 정확한 차이를 기록해 두기 위함이다.

 

TCP는 전통적인 기술로서  연결 지향 ( connection-oriented service ) 이다. 비교되는 방법으로는 UDP ( connectionless service ) 가 있다. 물론 이 글에서는 그 둘의 비교가 목표가 아니라 4계층의 궁극적인 것에 대한 것들을 적을 것이다.

 

3계층에서도 port를 지정해 준다. 하지만 여기서의 port는 다르다 . 이것은 매우 중요하니 반드시 구분해야 한다.

 

3계층 즉, Network 계층에서 부여하는 port는  NAT/PAT 에 의해서 부여 되는 것이다.

잠깐 이야기를 하자면 전세계의 IP 는 32bit로 이루어져 있고 이것은 매우 한정적인 자원이다. 그래서 그 문제를 해결하기 위해 있는 것이 

NAT/PAT 이다.

전세계에서 운용하고 있는 IP즉 진짜 IP는 PubilcIP 라고 한다. 하지만 모두가 이것을 이용하면 한정적인 자원이기 때문에 다음 사람이 연결을 하기 위해서는 누군가 연결을 끊어야 한다. 즉, 우리가 구글에서 검색이 필요해서 검색을 해야 할때 다음사람이 검색이 끝날때 까지 기다려야 한다는 것이다. 그래서 PrivateIP 라는 것을 만들었다. 하지만 1대1 변환 이라면 IP 가 한정적인 이유는 해결되지 않는다 그래서 PAT를 통해서 그 문제를 해결한다.

 

NAT는 pubilcIP 를 privateIP 로 바꾸고 PAT는 privateIP에 각각의 port를 부여 한다. 이것이 한정적인 pubilcIP 를 모두가 사용할수 있게 해결 한 방법이다.

 

그럼 4계층에서의 port는 무엇이냐? 이것은 OS 안에서 process를 구분하기 위한 port 이다.

컴퓨터에서 작업 관리자를 보면 PID ( Process ID) 라는 것을 보았을 것이다. 컴퓨터의 운영체제는 보다시피 PID 로서 프로세스를 구분하다. 근데 왜 port가 필요 한 것일까? 

port는 os 에서 PID로 바인딩 하기 위한 창구이다.  port를 사용하는 이유는 다음과 같다.

(1) Process ID는 OS마다 다를 수 있기 때문이다. Process ID는 OS 공통 표준이 없다.

(2) Process ID는 외부 통신을 요청하는 host가 상대방의 PID를 정확히 알 수가 없다.

(3) Process ID는 운영체제에서 실행중인 프로세스에 할당한 것이다. 포트번호랑은 개념이 다르다.

 

그래서 밖에서 통신할때는 상대방 컴퓨터의 PID가 아니라 port number 가 보이는 것이다.

즉, 외부 프로그램이나 서비스가 포트를 점유하고 있는 상태를 port binding 이라고 하며 이것을 할당시키는 작업을 binding 이라고 한다.

 

os 에서는 이미 0~1023 port를 고정적으로 점유 하고 있기 때문에 프로그램을 선점할때는  1024~65,535 port로 바인딩 해줘야 한다.

 tip, 여기서 알수 있는것은 os 는 65,535개 이상의 프로그램을 돌수 없다는 것이다.

 

즉, 4계층의 궁극적인 목표는 process to process로 두 컴퓨터가 양쪽의 port를 지나서 PID 까지 안착 시키는 과정을 말한다.

이것은 TCP 와 UDP 에 상관 없이 이루어지는 중요한 과정이다.

 

마지막으로 5계층 ( session layer ) 에 대해서 적는다면 

5계층에서 말하는 socket address 는  IP+port 이다 이것은 특정 컴퓨터의 특정 프로세스 까지의 정확한 주소를 나타낸다.

'Computer Science' 카테고리의 다른 글

Dockerfile 명령어 설명  (0) 2024.04.20
CloudComputing을 편하게 알아보기  (0) 2024.04.10
gRPC (google Remote Procedure Call) 를 알아보자  (1) 2023.12.08
SOAP & REST  (0) 2023.12.08

댓글