[Network] 개발자 입장에서의 Port 번호

Oayenn·2023년 1월 30일
0

네트워크

목록 보기
4/7
post-thumbnail

🔦 본 포스트는 유튜브 널널한 개발자 강의를 기반으로 함을 알립니다.

1. Port 번호

Port란

  • host 내에서 실행되고 있는 애플리케이션(즉, 프로세스)을 구분짓기 위한 16비트의 논리적 할당.

포트 번호는 다음의 세 가지 의미로 해석될 수 있다.

1. Process 식별자
2. Service 식별자 (Network 전문가 입장)
3. Interface 번호 (H/W 전문가 입장)

👉🏻 개발자 입장에서는 Process 식별자로 인식하는 경우가 많다.

운영체제에서 어떤 프로그램을 실행시키면 그 순간 process가 존재하게 된다. OS 구성요소 내부에는 TCP/IP, 디바이스 Driver, NIC가 있다.

TCP/IP는 커널 수준에서 implement 되어 있는데(=구현되어 있는데), 이것을 user mode application이 접근할 수 있도록 인터페이스가 제공된다. 이 인터페이스의 본질은 File이나, 프로토콜을 추상화했기 때문에 File이라 하지 않고 Socket이라 한다.

중요한 것은, 소켓을 생성할 때 TCP 소켓인 경우에 소켓에 attach되는 정보 중 하나가 바로 Port 번호라는 것이다.


Port 번호의 사용

이미 사용 중인 포트는 중복 사용될 수 없으므로 포트 번호를 지정할 때는 해당 포트가 사용 중인지 확인해야 한다.

  • cmd창에 netstat -ano 명령어를 입력해 해당하는 포트에 어떤 프로그램이 할당되어 있는지 확인할 수 있다.
-a : 모든 포트 표시
-n : IP주소:Port 형태로 표시 (ex. 127.0.0.1:54941)
-o : PID 표시 (프로세스 ID, 현재 구동 중인 프로세스의 번호)


2. Process 식별자로서의 Port 번호

TCP/IP Port 번호는 기본적으로 16bit 정보이다. 그렇다면 나올 수 있는 Port 번호의 경우의 수는 2의 16제곱 즉, 0~65535이다. 이 중 0과 65535는 사용하지 않으므로 1~65534번을 사용하는 것이 보통이다.
따라서 총 (2의 16제곱-2)개의 Port가 있다.

  • 어떤 Host 하나가 있을 때(=컴퓨터 하나가 있을 때) IP 주소가 192.168.0.10번이라고 가정하고, ms edge와 chrome의 두 가지 프로그램이 실행된다고 해보자.
    이 프로그램들이 인터넷에 접속하려면 socket을 열게 된다. (그림에서는 구분을 위해 1, 2라는 임의의 번호를 붙임)
  • 1에 attach되는 포트 번호가 30000이라고 가정한다면 2에 attach되는 포트 번호는 30000이 아닌 다른 수를 사용할 수밖에 없다. 예를 들어, 30001.
    🔥따라서, Port 번호는 프로그램 개발자의 입장에서 봤을 때 명백한 Process 식별자이다.

결론

  1. socket을 생성할 때 Port 번호가 바인딩된다.
  2. packet이 네트워크로 유입되어 들어오면 NIC-Driver-IP-TCP를 거쳐 Process에게 전달된다.
  3. 이 때 운영체제 수준에서 L4(TCP)에 도착하면 어떤 프로세스로 갈 것인지 결정하게 된다(그림에서는 edge, chrome). 이 결정은 Port 번호에 의해 이루어진다.


개념 정리

✍🏻 Socket

  • 소켓(socket)은 떨어져 있는 두 host를 연결해주는 인터페이스의 역할을 한다. 다시 말해 소켓은 데이터를 주고 받을 수 있는 구조체로서, 소켓을 통해 데이터 통로가 만들어진다.
  • 따라서 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어 소켓에 데이터를 써 보내거나, 소켓으로부터 데이터를 읽어들여야 한다.
  • 소켓은 프로토콜, IP 주소, Port 번호로 정의된다.

✍🏻 Packet

  • 패킷(packet)이란 네트워크를 통해 전송되는 데이터의 단위이다 (데이터 전송의 단위).
  • 패킷의 크기는 네트워크의 종류마다 달라진다. 인터넷과 같은 컴퓨터 네트워크를 통해 전송되는 데이터는 작은 단위의 패킷으로 나누어 전송하고, 이를 수신하는 기기에서 재조합하는 과정을 거친다.
  • 데이터를 패킷 단위로 쪼개어 보내는 이유는, 큰 데이터의 경우 한 번에 보내기 어려우며 대역폭의 한계가 있기 때문이다. 또한 에러 정정에도 어려움이 있다.
  • 각 패킷에는 번호가 붙어 있기 때문에, 쪼개어 전달하여 무작위로 도착하더라도 순서를 재구성할 수 있다.


Reference

https://helloworld-88.tistory.com/215
https://luv-n-interest.tistory.com/1034
https://studyforus.tistory.com/244

profile
차근차근 쌓아올리기

0개의 댓글