카테고리 없음

Port 번호

조용우 2025. 2. 13. 23:02

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

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


소켓을 생성할 때 TCP 소켓인 경우에 소켓에 할당되는 정보 중 하나가 바로 Port 번호.

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

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

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.


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

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