3-1. IP주소와 PORT번호를 통한 데이터 전송 [TCP/IP][C][LINUX]
IP주소 체계는 IPv4와 IPv6으로 나뉩니다. 각각 4바이트 주소체계, 16바이트 주소체계를 뜻하는데 오늘날엔 아직 IPv4를 대중적으로 사용하고 있습니다. (그래서 앞으로도 IPv4를 기준으로 말합니다)
IPv4는 주소는 네트워크 주소와 호스트 주소로 나뉘어 있으며 형태에 따라서 A,B,C,D,E 클래스로 분류되는데, 여기서 E클래스는 일반적이지 않은(예약 되어있는) 클래스입니다.
A,B,C,D 클래스의 구분은 다음과 같습니다.
클래스 A | 1BYTE (네트워크 ID) | 1BYTE*3(호스트 ID) | ||
클래스 B | 1BYTE*2 (네트워크 ID) | 1BYTE*2(호스트 ID) | ||
클래스 C | 1BYTE*3 (네트워크 ID) | 1BYTE(호스트 ID) | ||
클래스 D | 1BYTE*4 (멀티캐스트 IP주소) |
첫 번째 바이트 범위가 127이하(첫 비트 0으로 시작)라면 클래스 A,
128~191(첫 비트 10으로 시작)이면 클래스 B,
192~223(첫 비트 110으로 시작)이면 클래스 C 입니다.
따라서 첫번째 바이트만 보면 네트워크 주소가 몇 바이트인지 (어떤 클래스인지) 알 수 있습니다.
IP를 통해 데이터가 전송될 때, 네트워크 ID로써 라우터로 데이터가 전송되고, 라우터에서 호스트 ID로 전달해줍니다. 라우터(=스위치)는 외부로부터 수신된 데이터를 호스트에 전달하고 호스트가 전달하는 데이터를 외부로 송신해주는 컴퓨터를 뜻합니다.
PORT번호는 컴퓨터로 전송된 데이터를 어떤 응용프로그램으로 전달할 지 정해줍니다. PORT번호는 0~65535(16bit)의 범위를 가지고, 0~1023은 Well-known PORT로 특정 프로그램에 할당되기로 예약되어 있기 때문에 그 밖의 범위를 사용해야 합니다. 또, PORT번호는 중복이 불가능하지만 TCP소켓과 UDP소켓은 PORT번호를 공유하지 않아, 중복되어도 됩니다.
다음 그림은 외부에서 응용프로그램으로 데이터가 전송되는 과정의 예시입니다.
임의의 호스트가 203.211.172.103:8080로 데이터로 전송했는데, 먼저 203.211.172의 네트워크 주소를 갖고 있는 라우터로 전송된 다음 103의 호스트 주소를 갖고 있는 컴퓨터로 전송되고, 8080의 PORT번호를 갖고있는 응용프로그램까지 데이터가 전송되는 모습입니다.