네트워크 모델 | (2) 네트워크 주소 체계(Port, IP, MAC), IP 라우팅
우리는 네트워크 기능을 인터넷 환경 위에서 구현(또는 활용)하는 사람들이다.
때문에 TCP/IP 기반으로 네트워크를 이해하는 게 좋다고 생각한다. (TCP/IP는 인터넷에 포커싱한 실용적 모델이므로)
왜 우리가 네트워크 자체가 아니라 네트워크 중 하나인 인터넷에 집중을 해야하냐면 ?? -> 보통 사람들은 '네트워크 == 인터넷'이라고 착각할 정도로 인터넷이 표준이 되었으니까 !! 거의 모든게 인터넷 위에 있고, 우리는 인터넷 위에서 생활하고있다고 해도 과언이 아니다.
어쨌든, 이번에는 네트워크 통신을 할 때 한 곳에서 보낸 데이터가 목적지를 찾아가는지를 살펴보고자 한다.
그 과정에서 IP(Internet Protocol)이라는 인터넷 네트워크를 위해 설계된 프로토콜도 다루게 된다.
어떻게 주소를 찾아갈까?
우선, 우리의 프로세스(& 컴퓨터)는 3개의 주소를 달고 있다: 1) 포트(PORT), 2) IP, 3) MAC
- 프로세스 별로 PORT 번호를 갖고있고,
- (PORT의 어원은 말 그대로 항구이다.)
- 호스트 별로 IP 주소와 MAC(Media Access Control) 주소를 갖고 있다.
- IP 주소는 네트워크 장치에 할당되어 있거나, OS가 할당한다.
- 각 컴퓨터에는 NIC(Network Interface Card)라는 하드웨어 장치가 들어있는데, MAC 주소는 이 안에 할당되어있다.
이 3개의 주소를 통해 한쪽에서 쏜 데이터 패킷을 무사히 올바른 도착지까지 넣어주는 것이다.
이를 TCP/IP 모델스럽게 표현하면 다음과 같다.
- Port 번호는 Application 계층(L7)에 해당하는 식별 주소이고,
- IP 주소는 Network 계층(L3)에 해당하는 식별 주소이고,
- (Transport 계층은 지금은 필요 없어서 괄호 처리했다.
IP 주소를 개선하기 위해 TCP, UDP 등이(L4 Transport 계층)이 추가되었고,
이는 주소를 갖는다기보다는 데이터 포장을 한 겹 더 쌓는 식으로 구현된다.)
- (Transport 계층은 지금은 필요 없어서 괄호 처리했다.
- MAC 주소는 Network Access 계층(L2)에 해당하는 식별 주소이다.
다다음쯤 포스팅에서 다룰 예정이지만, 실제 프로세스는 소켓(Socket) 인터페이스를 통해 네트워크 기능을 수행한다.
그러한 경우, 소켓에 Port 번호와 IP 주소가 함께 담겨있다고 추상적으로 이해할 수 있다.
이제 로컬 네트워크 환경에서, 그리고 원격 네트워크 환경에서 이 주소들이 어떻게 활용되는지 상황적으로 이해해보자.
로컬 네트워크 환경에서 주소 찾기
만일 회사 내부망 정도의 로컬 환경이라고 해보자. 앞에서 배웠던 이더넷일 가능성이 크다.
여기서 PC 서로간에 통신을 할 때는 MAC 주소가 주요한 역할을 한다.
- Hub를 통해 들어온 데이터 패킷은 첫번째로 어느 PC로 갈지를 선택해야 한다. 이때 MAC 주소를 통해 올바른 목적지를 찾아간다.
- PC 안에서도 여러개의 프로세스가 있는데, 어느 프로세스에서 네트워크를 요청했는지를 찾아가야 한다. 이때는 PORT 번호를 통해 올바른 프로세스로 데이터를 넣어준다.
원격 네트워크에서 주소 찾기 (IP)
대부분의 상황, 특히 우리가 상주하는 인터넷 환경에서는 라우터를 거쳐서.. 때로는 바다 건너 데이터를 주고받는 경우가 많다.
바다 건너 어딘가에서 PC 1의 프로세스 1-a의 소켓으로 데이터 패킷을 보냈다고 하자.
그럼 다음과 같은 과정을 거친다.
- IP 주소를 이용한 라우팅 (외부 네트워크):
- 어딘가에서 보낸 데이터 패킷은 PC 1의 IP 주소를 목적지 주소로 가지고 있다.
- 인터넷을 통해 라우팅될 때, 라우터들은 이 IP 주소를 사용하여 데이터 패킷을 PC 1이 위치한 네트워크로 전달한다.
- 로컬 네트워크에서의 MAC 주소 사용:
- 데이터 패킷이 PC 1이 있는 로컬 네트워크(허브가 있는 방)에 도착하면, 이제 MAC 주소가 중요해진다. 로컬 네트워크 내에서 각 장치를 구별하는 데 MAC 주소가 사용되기 때문이다. 앞에서 봤던 상황이다.
- 네트워크 상에서, 패킷은 PC 1의 MAC 주소를 기반으로 해당 PC로 전달된다.
Q. 근데 IP 주소를 갖고 있는 데이터 패킷이 어떻게 MAC 주소를 찾아가나?
- 네트워크 상의 각 장치는 IP 주소와 MAC 주소를 모두 가지고 있다.
- 로컬 네트워크 내에서 특정 IP 주소를 가진 장치의 MAC 주소는 ARP(Address Resolution Protocol)를 통해 조회된다. ARP는 IP를 MAC 주소로 변환하는 알고리즘이고, 그 역은 RARP이다.
- 즉, 패킷이 로컬 네트워크에 도달하면, 해당 네트워크의 라우터나 스위치는 ARP를 사용하여 해당 IP 주소를 가진 장치의 MAC 주소를 찾아내어 데이터를 올바른 장치로 전달한다.
이제 3개의 주소체계가 대략 어떤 쓰임새인지, 상황적으로 이해가 됐을 것이다.
이제는 보다 깊게 들어가서 각 주소가 어떤 특징을 갖고있는지 살펴볼 것이다.
특히 Port, IP에 집중해보자!
Port, IP 에 대한 이해
포트(Port) 이해하기
애플리케이션은 네트워크 기능을 이용하기 위해 아래 시스템 레벨을 이용한다.
근데, 하나의 호스트여도 여러 프로세스를 실행하고 있을 수 있고, 각각이 자기만의 네트워크 기능을 활용하고 있을 수 있잖아?
그러니 식별할 수 있는 숫자 주소가 도입되었고, 이것이 포트이다. Port number라고 부르기도 한다.
Port number는 16 bits로 이루어져있음. 따라서 0 ~ 65535의 범위를 갖는다.
- 0 ~ 1023: Well-known ports, System ports
- 잘 알려지고, 일반적으로 쓰이는 포트들은 앞쪽에 고정으로 할당되어 있다.
- ex) HTTP(80), HTTPS(443), DNS(53)
- 1024 ~ 49151: Registered ports (IANA에 등록된 번호들)
- ex) MySQL(3306, Apache tomcat server(8080), Mongo DB(27017)
- 49152 ~ 65535: Dynamic ports
- 등록 안된 번호로, 임시 혹은 자동으로 할당될 때 이쪽 포트를 사용한다.)
IP 이해하기
IP는 단순한 주소가 아니다. 이름에서도 알 수 있듯 '인터넷 프로토콜'이다. 무엇에 대한 규약이냐면, 데이터 패킷을 송신자로부터 수신자까지 잘 전달하기 위해 정한 규약이다. IP는 인터넷이 발전하면서 함께 발전한 프로토콜이고, 인터넷의 기반이라고 할 수 있다. 당연히 전 세계 컴퓨터 네트워크 시스템에서 가장 중요한 통신 프로토콜 중 하나이다.
IP의 역할은 다음과 같다:
- 주소 지정
- 데이터의 라우팅
- 오류 보고
- 패킷 분해, 조립
각 패킷에는 출발지와 목적지의 주소가 포함되어, 네트워크 장비들이 패킷을 올바른 경로로 전송할 수 있게 한다.
위의 상황 묘사에서는 데이터 패킷이 알아서 찾아가는 것처럼 보일 수 있는데, 사실은 네트워크 장비들이 IP 프로토콜에 따라 다음 경로로 패킷을 토스해주는 쪽에 가깝다. 이걸 라우팅(Routing)이라고 한다.
IP 주소 체계
IP 주소는 네트워크와 호스트 부분으로 구분되는 숫자의 집합이다.
네트워크 프로그램은 IP 주소 구조체에 IP 주소를 저장한다.
IP 주소는 두 가지 버전이 있다: IPv4 (81년 개발), IPv6 (98년 개발)
- IPv4 주소는 32비트 길이를 가지며, 점으로 구분된 십진수 형태로 표현된다
- 즉, 실제 0x8002c2f2 라는 IP 주소가 있다면, 이는 우리가 보기에 128.2.194.242 로 표현된다.
- IPv6 주소는 128비트 길이를 가지고 콜론으로 구분된 16진수 형태로 표현된다
- 다음과 같은 형태이다: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
딱 보면 IPv4의 형태가 가장 익숙하지 않나? IPv4는 가장 널리 사용되는 IP 주소 체계이다.
그러나 32비트만으로 표현해야 하기 때문에 주소의 수가 한정적이다.
인터넷의 급속한 성장으로 인해 주소 고갈 문제가 발생했고, 이를 해결하기 위해 IPv6가 도입되었다.
IPv6는 무제한에 가까울 정도로 많은 주소 공간과 개선된 라우팅 및 네트워크 자동 구성 기능을 제공한다. 또한, IPv6는 보안과 모바일 통신을 위한 기능이 향상되었다.
아직은 여러 인프라가 IPv4 기반으로 이루어져 있어 IPv6를 사용하는 호스트는 매우 느린 속도로 늘고 있다.
그러나 미래의 IoT 환경에는 모든 것에 IP 번호가 붙어야할 수도 있으니까.. 거기서는 새로운 majority가 될수도??
DNS (Domain Name System)
근데 우리가 평소에 IP를 다 기억하고 있는건 아니다.
네이버에 들어가려면 www.naver.com, 구글에 들어가려면 www.google.com 등 URL을 입력하지, 네이버 서버와 구글 서버의 ip를 입력하진 않는다.
이게 어떻게 가능하냐면, DNS 서버에서 [URL:ip] 테이블을 관리하고 있기 때문이다.
지역별로 DNS 서버가 있고, 우리가 브라우저 검색창에 URL을 입력하면, 그 요청은 DNS 서버를 들러서 매칭되는 ip로 변환된다.
(사실 DNS 서버를 매번 거치지 않고, 이 또한 캐시를 활용한다. Cache is everywhere...)
만일 특정 서버 이름으로부터 IP를 알아내는 행위를 한다면, 이는 DNS resolution이라고 부른다.
IP 주소 할당 방법
IP 주소는 변경될 수 있냐, 하나 딱 고정되느냐에 따라 정적 IP 주소와 동적 IP 주소로 나뉜다.
- 정적 IP 주소: 정적 IP 주소는 네트워크 관리자에 의해 수동으로 할당되며, 네트워크 장치가 재부팅되거나 네트워크에서 연결이 끊어져도 변경되지 않는 고정된 주소이다. 이 주소는 일반적으로 서버와 같이 고정된 IP 주소가 필요한 장치에 사용된다.
- 동적 IP 주소: 동적 IP 주소는 DHCP 서버에 의해 자동으로 할당되며, 일정 시간이 지나거나 장치가 네트워크에서 연결이 끊긴 후 다시 연결될 때 변경될 수 있다. 이 방식은 대부분의 홈 네트워크 및 소규모 비즈니스 네트워크에서 사용된다.
Q. DHCP(Dynamic Host Configuration Protocol) 서버?
- DHCP 서버는 라우터 내부에서 작동하거나, 전용 서버가 있거나, 클라우드 기반이거나, ISP가 관리하거나 .. 하는 서버이다.
- 역할은 다음과 같다
- 자동 IP 주소 할당: DHCP는 네트워크 상의 장치들에게 자동으로 IP 주소를 할당하는 프로토콜이다. DHCP 서버는 IP 주소 풀(pool)에서 사용 가능한 주소를 관리하고, 네트워크에 새로 연결되는 장치에 IP 주소를 할당한다.
- 설정 및 관리 간소화: DHCP를 사용하면 네트워크 관리자는 각 장치에 수동으로 IP 주소를 할당할 필요가 없어 네트워크 설정과 관리가 간소화된다. DHCP는 또한 서브넷 마스크, 기본 게이트웨이, DNS 서버 주소와 같은 추가 네트워크 설정도 제공한다.
특수한 IP들
Private IP
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0. ~ 172.31.255.55
- 192.168.0.0 ~ 192.168.255.255
반드시 private하게 써야하는 건 아니지만, private 용도로 쓰도록 약속되어 있다.
특수 지정된 IP
- 127.0.0.1: 호스트 자신을 가리키는 IP
- 0.0.0.0 : 상황에 따라 다르게 쓰인다.
IP 라우팅
데이터를 원하는 목적지로 라우팅 하기 위해서, OS 시스템은 데이터에 꼬리표(헤더)들을 달아서 네트워크 세상으로 내보낸다.
- 출발지 IP, 목적지 IP 등..
전송할 데이터에 이렇게 출발지와 목적지 정보 등이 붙으면 이를 패킷(Packet)이라고 부른다.
IP 라우팅은 데이터 패킷이 송신자로부터 수신자까지의 경로를 결정하는 과정이다. 라우터는 패킷의 목적지 IP 주소를 분석하여 다음 목적지(다음 라우터 또는 최종 목적지)로 패킷을 전송한다.
IP 라우팅 과정
- 패킷 생성과 송신: 데이터를 보내는 장치는 데이터를 IP 패킷으로 변환하고, 네트워크를 통해 전송한다. 패킷에는 송신자와 수신자의 IP 주소가 포함된다.
- 경로 상 라우터 거치기: 패킷은 네트워크 상에서 하나 이상의 라우터를 거치며, 각 라우터는 패킷의 목적지 주소를 바탕으로 다음 경로를 결정한다.
- 엔드포인트 도달: 패킷은 최종 목적지의 네트워크로 전송되며, 수신하는 쪽의 장치는 IP 패킷을 받아 원래 데이터로 변환한다.
사실 라우팅라고만 하면 완벽한 표현은 아니다. 라우팅과 포워딩이라는 개념이 있는데,
- 라우팅: 선택 가능한 모든 경로를 찾는 것
- 포워딩: 경로들 중에서 특정한 경로로 보내는 것
으로 구분된다. 그러나 일반적으로, 모든 경로들 중에 올바른 경로로 보내는 것을 라우팅으로 통칭해서 부른다.
Process (데이터를 보내는 기기의 메인메모리) -> 엔드포인트 -> 상대편 엔드포인트까지 가는 데이터 여정의 전체 과정은 다음 포스팅(네트워크 모델 | (5) 데이터 단위와 흐름 이해하기)에서 다룰 예정..!
추가적으로, IBM docs에 용어표가 있길래 첨부
항목 | 설명 |
클라이언트 | 네트워크 프로세스나 다른 컴퓨터의 데이터, 서비스 또는 자원들을 액세스하는 컴퓨터 또는 프로세스입니다. |
호스트 | 인터넷 네트워크에 접속되고 다른 인터넷 호스트와 통신할 수 있는 컴퓨터입니다. 특정 사용자에 대한 로컬 호스트는 해당 사용자가 작업 중인 컴퓨터입니다. 원격 호스트는 네트워크에 있는.의 임의의 다른 호스트 이름입니다. 통신 네트워크에서 보면 호스트는 패킷의 소스이면서 대상입니다. 모든 호스트가 클라이언트, 서버 또는 둘 다일 수 있습니다. 인터넷 네트워크에서 호스트는 인터넷 이름과 주소로 식별됩니다. |
네트워크 | 둘 이상의 호스트 및 이들 사이의 연결 링크 조합입니다. 물리적 네트워크는 네트워크를 구성하는 하드웨어입니다. 논리적 네트워크는 전체 또는 일부의 하나 이상의 물리적 네트워크에 있는 추상적 구조입니다. 인터넷 네트워크는 논리적 네트워크의 한 예입니다. 인터페이스 프로그램은 논리적 네트워크 작업을 물리적 네트워크 작업으로 변환시키는 일을 처리합니다. |
패킷 | 호스트와 네트워크 사이의 한 트랜잭션에 대한 제어 정보 및 데이터 블록입니다. 패킷은 인터넷 네트워크를 통하여 데이터를 송수신하는 프로세스에 의해 사용되는 교환 미디어입니다. 패킷은 소스에서 대상으로 전송됩니다. |
포트 | 프로세스에 대한 논리적 연결 지점입니다. 데이터는 포트(또는 소켓)을 통해 프로세스 사이에서 전송됩니다. 각 포트는 데이터 송수신을 위한 큐를 제공합니다. 인터페이스 프로그램 네트워크에서 각 포트는 사용 방법에 기초하여 인터넷 포트 번호를 가집니다. 특정 포트는 인터넷 호스트 주소 및 포트 번호의 조합인 인터넷 소켓 주소로 식별됩니다. |
프로세스 | 실행 중인 프로그램입니다. 프로세스는 컴퓨터에서 활동 중인 요소입니다. 터미널, 파일, 기타 입출력 장치는 각기 다른 프로세스를 통해 통신합니다. 따라서 네트워크 통신은 프로세스 간 통신입니다. |
프로토콜 | 물리적 또는 논리적 레벨로 통신을 처리하는 규칙 세트입니다. 프로토콜은 다른 프로토콜을 사용하여 서비스를 제공하는 경우도 있습니다. 예를 들어, 연결 레벨 프로토콜은 전송 레벨 프로토콜을 사용하여 두 호스트 사이의 연결을 유지하는 패킷을 전송합니다. |
서버 | 네트워크상의 다른 컴퓨터 또는 프로세스가 액세스할 수 있는 데이터, 서비스 또는 자원을 제공하는 컴퓨터 또는 프로세스입니다. |
<출처: IBM docs>