OSI 7계층 중 3계층으로 네트워크 간의 통신을 담당하는 계층입니다. 데이터 링크 계층에서는 같은 스위치에 연결되어 있는 컴퓨터끼리만 데이터를 전송할 수 있었습니다. 다른 네트워크로는 전송할 수가 없습니다.
하나의 스위치에 연결되어 있는 컴퓨터들의 모임을 네트워크라고 합시다. 네트워크 계층은 이 네트워크 간의 통신이 가능하게 해줍니다. 라우터(Router)라는 장비를 사용해서 말이죠.
데이터 링크 계층에서 통신하려면 MAC 주소를 알아야했듯이 네트워크 계층에서는 IP 주소를 알아야 하고 어떤 경로로 보낼지도 정해야 하는데 이를 라우팅(Routing)이라고 합니다.
라우터는 거리에 상관없이 통신이 가능합니다. 라우터는 라우팅 테이블(Routing Table)을 이용하여 경로 정보를 관리합니다.
라우터는 아래에 다시 자세히 설명하도록 하겠습니다.
네트워크 계층에서는 IP(Internet Protocol)라는 프로토콜을 사용합니다.
네트워크 계층에서는 캡슐화할 때 IP 헤더를 붙이는데, 이렇게 만들어진 것을 IP 패킷이라고 합니다. IP 헤더는 버전, 헤더 길이, 서비스 유형, 전체 패킷 길이, ID, flags, fragment offset, TTL, 프로토콜, 헤더체크섬, 출발지 IP 주소, 목적지 IP 주소 순서로 구성되어 있습니다.
IP 주소는 실생활에 빗대어보자면 우편물을 보낼 때의 주소와 같습니다. IP 주소는 ISP(Internet Service Provider)에게 받을 수 있고 IPv4(32비트), IPv6(128비트) 두 버전이 있습니다.
IPv4 주소는 부족해진 상황이기 때문에 이를 해결하기 위해 공인 IP 주소와 사설 IP 주소를 사용합니다. ISP가 제공하는 공인 IP 주소는 라우터에만 할당하고 LAN 내의 컴퓨터에는 LAN의 네트워크 관리자가 자유롭게 사설 IP 주소를 할당하거나 라우터의 DHCP 기능을 사용하여 주소를 자동으로 할당합니다.
IP 주소는 MAC 주소와 비트 수가 다릅니다. MAC 주소는 48비트, 16진수로 표현하고 IP 주소는 32비트, 10진수(IPv4)로 표시합니다.
8비트를 옥텟(Octet)이라고 부르기도 합니다. IP 주소는 32비트를 8비트씩 끊어서 4개의 옥텟으로 구분하고 10진수로 변환하여 한 옥텟은 0~255까지 표현됩니다. 읽기 쉽도록 컴퓨터 사용자에게는 10진수로 표시되어 있지만 실제로는 2진수로 되어 있습니다.
IP 주소는 네트워크 ID와 호스트 ID로 되어 있습니다.
따라서 IP 주소는 어떤 네트워크 속하는 어떤 컴퓨터이다라는 것을 나타내는 것입니다.
네트워크 ID의 크기에 따라서 IP 주소의 클래스가 나누어 집니다.
클래스 | 내용 | 네트워크 ID 크기 | 호스트 ID 크기 |
---|---|---|---|
A클래스 | 대규모 네트워크 주소 | 8비트 | 24비트 |
B클래스 | 중형 네트워크 주소 | 16비트 | 16비트 |
C클래스 | 소규모 네트워크 주소 | 24비트 | 8비트 |
D클래스 | 멀티캐스트 주소 | x | x |
E클래스 | 연구 및 특수용도 주소 | x | x |
IP 주소 중에는 네트워크 주소와 브로드캐스트 주소라는 특수한 주소가 있습니다. 네트워크 주소는 호스트 ID가 10진수로 모두 0인 주소입니다. 브로드캐스트 주소는 호스트 ID가 모두 255인 주소입니다. 이 주소들은 컴퓨터나 라우터의 IP로 할당할 수 없습니다.
네트워크 주소는 해당 네트워크를 대표하는 주소입니다. 브로드캐스트 주소는 해당 네트워크에 있는 컴퓨터 모두에게 데이터를 전송할 때 사용되는 주소입니다.
만약 A클래스에 있는 컴퓨터들에게 브로드캐스트로 패킷을 전송한다면 1677만 7214개의 컴퓨테에게 전송해야 합니다. 현실적으로 불가능할 것입니다.
A클래스와 같은 대규모 네트워크를 작은 네트워크로 분할하는 것을 서브넷팅이라고 합니다. 분할된 각각의 네트워크는 서브넷(Subnet)이라고 합니다.
서브넷을 사용할 경우 IP 주소가 네트워크 ID, 서브넷 ID, 호스트 ID로 나눠집니다. 서브넷 ID는 기존 호스트 ID의 일부를 사용하는 것입니다. 서브넷 ID가 몇 번째 비트부터인지 나타내기 위해 서브넷 마스크를 사용합니다.
클래스 | 서브넷 | prefix 표기 |
---|---|---|
A클래스 | 255.0.0.0 | /8 |
B클래스 | 255.255.0.0 | /16 |
C클래스 | 255.255.255.0 | /24 |
서로 다른 네트워크와 통신하려면 라우터가 필요하고 라우터는 네트워크를 분리할 수 있습니다. 허브와 스위치는 네트워크를 분리할 수 없습니다. 스위치와 허브를 사용하면 모든 컴퓨터가 동일한 네트워크에 소속된 것입니다.
네트워크를 분할한 후에 한 컴퓨터가 다른 네트워크의 컴퓨터에 패킷을 보내려 한다면 라우터의 IP 주소를 알아야 합니다. 이처럼 네트워크의 출입구 설정을 기본 게이트웨이(Default Gateway)라고 합니다. 이 때 패킷을 보내고자 하는 컴퓨터는 어디로 보내야 할 지 모르기 때문에 일단 기본 게이트웨이(라우터 IP)로 데이터를 전송합니다. 하지만 게이트웨이만으로는 다른 네트워크의 컴퓨터까지는 데이터가 도착할 수 없습니다. 따라서 라우팅이 필요합니다.
라우팅(Routing)은 경로 정보를 기반으로 현재의 네트워크에서 다른 네트워크로 최적의 경로를 결정합니다. 이 경로 정보가 등록되어 있는 테이블이 라우팅 테이블(Routing Table)입니다.
라우팅 테이블을 등록하는 방법은 2가지가 있습니다.
라우터 간에 정보를 교환하고 라우팅 테이블을 관리하는 프로토콜을 라우팅 프로토콜이라고 합니다. 대표적인 라우팅 프로토콜에는 RIP, OSPF, BGP 등이 있습니다.
라우팅 알고리즘과 라우팅 프로토콜을 혼동할 수 있는데 라우팅 알고리즘은 라우팅 프로토콜의 기능 중 하나라고 생각하시면 됩니다. 라우팅 알고리즘은 최적의 경로를 찾아가며 라우팅 테이블을 갱신하고 관리하는 방법입니다. 라우팅 수행 과정과 라우팅 알고리즘을 합친 것이 라우팅 프로토콜입니다.
포워딩(Forwarding)은 라우터의 입력 포트에서 출력 포트로 패킷을 이동시키는 것입니다. 포워딩은 데이터 링크 계층(브릿지, 스위치)과 네트워크 계층(라우터)에서 수행됩니다. 라우터에서 수행되는 포워딩은 패킷 포워딩(Packet Forwarding)이라고 합니다.
패킷 포워딩의 과정은 다음과 같습니다.
포워팅 테이블(Forwarding Table)에 관해서는 사람마다 이해한 바가 너무 다르고 포스팅도 다양했습니다. 일단 제가 이해한 대로 설명하겠습니다. 앞서 라우팅 알고리즘을 통해 라우팅 테이블을 관리한다고 하였습니다. 이 라우팅 테이블을 참조하여 만들어진 것이 포워딩 테이블이고 이 포워딩 테이블을 통해 적절한 포트로 패킷을 이동시키는 것이 포워딩입니다.
주소 결정 프로토콜(Address Resolution Protocol, ARP)은 네트워크 상에 IP 주소를 MAC 주소로 대응시키기 위해 사용됩니다. 처음 통신을 할 때에는 상대방의 MAC 주소를 모릅니다. 그 때 상대방의 MAC 주소를 알아내기 위해 사용하는 프로토콜입니다.
ARP는 요청과 응답으로 구성된 프로토콜로 라우팅되지 않는 단일 네트워크에서만 동작합니다. ARP와는 반대로 MAC 주소에 맞는 IP 주소를 알아오는 프로토콜은 RARP라고 합니다.
동작 과정은 다음과 같습니다.