이번 포스트에서는 OSI 7 Layer의 3번째 계층인 네트워크 계층
에 대해서 다뤄보도록 하겠습니다.
이전에 설명한 2계층: 데이터 링크 계층에서는 대표적으로 이더넷을 이용해서 통신을 합니다. 이더넷을 따르면 같은 네트워크에서 속해있는 컴퓨터끼리는 통신이 가능하지만, 다른 네트워크/인터넷에 속한 컴퓨터와는 통신이 불가능합니다.
다른 네트워크의 컴퓨터끼리 통신하고자 필요한 계층이 바로 네트워크 계층
입니다. 더 정확하게는 네트워크 계층에 속한 라우터(Router)
라는 장비가 네트워크 계층을 통해 다른 네트워크끼리 통신할 수 있게 만들어줍니다.
그러면 본격적으로 네트워크 계층에 대해서 자세히 알아보도록 하겠습니다.
네트워크 프로토콜엔 연결 지향
과 비연결 지향
프로토콜 두 분류가 존재합니다.
연결 지향
은 데이터 전송을 하기 전에 연결 설정
과정을 거칩니다. 만약 연결 설정 과정을 거치지 않는다면 연결이 되지않아 데이터 전송이 이루어지지 않게 됩니다.
연결 설정 -> 데이터 전송 -> 연결 해제
연결 지향 방식은 연결 설정 과정에서 라우팅
을 거칩니다. 연결 설정이 된 자원은 연결이 되어있는 동안 다른 자원이 사용할 수 없습니다.
라우팅(Routing): 목적지까지 도달하는 경로를 설정하는 과정
그 외에도 지연시간이 최소화되거나, 패킷이 순서대로 전달된다는 특징이 있습니다.
가장 대표적인 예가 전화로, 한 번 연결되면 다른 사람이 연결(통화)를 할 수 없고, 음성이 말하는 대로 순서대로/지연 없이 들립니다.
비연결 지향
은 연결 설정 과정 없이 통신을 합니다. 연결 과정이 없기 때문에 목적지의 장치가 꺼진 상태에서도 전송이 가능합니다.
장치가 목적지에 대한 연결 정보를 따로 갖고있지 않아서, 연결할 때마다 지연 시간이 발생합니다.
쪼개어진 패킷이 독립적으로 처리되기 때문에 각 패킷의 지연시간이 불규칙하며, 각 패킷마다 라우팅 설정도 달라서 도착 시간도 서로 다릅니다.
대표적인 비연결 지향 네트워크 프로토콜에는 IP(Internet Protocol)
가 있습니다.
IP(Internet Protocol)
은 비연결 지향, 비신뢰성의 특징을 갖는 네트워크 프로토콜입니다. 에러 제어, 흐름 제어가 없습니다. 에러는 검출은 하지만, 복구없이 에러가 발생한 패킷을 폐기처분 합니다.
비신뢰성이라함은 최선을 다해서 패킷을 전달하지만 전송되지 않을 수 있음을 의미합니다. 만약 IP에 신뢰성을 주고싶다면 TCP
라는 것을 함께 사용합니다.
우편을 보낼 때 우편 수신지의 주소를 적습니다. 그래야 우체국에서 주소를 식별하고 관할 우편집중국에 보내고 집중국에서 목적지 관할 우체국으로 보낸 후 집배원이 배달을 해서 우편이 도착하게 됩니다.
이처럼 목적지를 정확하게 알아야 우편을 보낼 수 있듯이 네트워크 통신에서도 목적지 네트워크를 식별할 무언가가 필요합니다. 그것이 바로 IP 주소
입니다. IP 주소
는 네트워크를 식별할 수 있는 고유한 주소입니다. IP 주소
를 이용하면 어떤 네트워크에 속한 어떤 기기인지를 알 수 있습니다. IP 주소
는 연결 당 한 개씩 생성됩니다.
따라서 IP 주소
가 없다면 패킷 전달이 불가능합니다. 그리고 IP 주소
는 고유한 식별 주소이기 때문에 주소가 중복되는 일은 존재하지 않습니다.
지난번에 배운
MAC 주소
는 LAN에서 장치를 식별하는데 사용하는 주소입니다. IP주소와의 차이점은MAC 주소
는 같은 네트워크에 속한 기기를 식별할 때 사용한다는 것입니다.
IP 주소
는 4바이트(32비트) 크기로 구성된 점찍은 십진 표기법을 이용하여 표기합니다.
우리가 일반적으로 알고있는 IP는 IPv4
라는 버전입니다. 인터넷이 처음 등장할 때만 해도, 32비트의 IP주소 (약 43억개)면 충분할 것이라 판단했으나, 시대가 발전함에 따라 IP주소가 부족해지는 현상이 일어났습니다. 이에 따라 더 많은 주소를 만들고자 IPv6
가 등장했습니다.
데이터 링크 계층에서 데이터에 컨테이너 등을 붙이듯이 네트워크 계층에서도 IP는 헤더를 붙입니다. 이 헤더에는 버전, 헤더 길이, 서비스 타입, 전체 패킷 길이, ID, flags, 조각의 위치, TTL, 프로토콜, 체크섬, 출발지 IP, 목적지 IP
의 순서를 가진 정보가 담겨있습니다. 헤더는 20~60바이트의 가변 길이를 가지며, 20바이트는 필수정보를 담고 나머지 바이트에 옵션을 붙이게됩니다.
이렇게 IP 헤더가 포함되어 전송되는 데이터를 IP 패킷
이라고 부릅니다.
버전
에는 IP 프로토콜의 버전
이 담깁니다.
헤더 길이/HLEN(Header LENgth)
는 헤더의 길이(크기)를 나타내며 최소 20바이트를 갖습니다. 길이를 나타낼 때 4바이트씩 끊어서 나타냅니다.
서비스 타입
은 패킷이 갖는 서비스 타입, 응용 서비스가 요구하는 타입, 지연시간/신뢰성/처리량에 대한 정보를 갖습니다.
전체 패킷 길이
는 패킷을 바이트 단위로 나타낸 전체 길이(크기)를 나타냅니다. 0~65525 Byte
의 길이를 갖습니다.
ID
는 패킷이 단편화(Fragmentation)
이 일어났을 경우, 조각을 다시 맞춰 원래 순서로 돌리기 위한, 식별 번호입니다.
단편화(Fragmentation)
는 IP 패킷을 네트워크가 수용 가능하도록 작은 크기로 나눈 패킷 조각들을 의미합니다. 네트워크마다 수용가능한 크기와 형태가 다르기 때문에 단편화를 사용하게 됩니다.
Flags
는 패킷의 상태를 나타내는 정보를 갖는 필드입니다.
총 3bit의 크기로 구성되는데, 첫 1비트는 예약된 비트
라고 부르며 항상 0의 값을 갖습니다.
2번 비트는 단편화(Fragmentation)
의 가능 여부를 나타냅니다. 0이면 패킷이 단편화가 더 가능하다는 것을, 1이면 단편화가 더 이상 불가능하다는 것을 의미합니다.
3번 비트는 단편화된 조각이 더 있음의 여부를 나타냅니다. 0이면 단편화 조각이 더 없다는 것, 즉 마지막 조각임을 의미합니다. 1일 경우엔 조각이 더 있다는 것을 의미합니다.
조각의 위치(오프셋)
은 단편화된 패킷일 경우 몇 번째의 데이터인지 나타내는 역할을 합니다.
TTL
은 Time-To-Live
의 줄임말로 패킷이 거쳐갈 수 있는 라우터의 최대 갯수를 의미합니다. 1씩 감소하며, TTL이 0이 되면 해당 패킷을 폐기합니다.
프로토콜
은 상위 프로토콜에 대한 정보를 제공하는 필드입니다.
헤더 체크섬
은 오류 검사를 수행하는 필드입니다. 언급했듯이 IP는 오류 검출만 하고, 복구가 없기 때문에 오류가 발생하면 패킷을 폐기합니다. 체크섬이 0이면 에러가 없음을 의미합니다. 체크섬 검증은 라우터를 지나갈때 마다 계산합니다.
체크섬 계산은 체크섬 값을 0으로 두고, 헤더 전체를 4바이트씩 쪼개어 1의 보수 연산을 수행합니다.
각각 출발지와 목적지의 IP 주소를 표기하는 필드입니다.
32비트로 구성된 IP는 비트로 구분하지만 네트워크 ID를 늘리거나, 호스트 ID를 작게 만들어 네트워크의 크기를 조정하기도 합니다. 그리고 이 네트워크 크기를 클래스
라는 개념으로 구분합니다. 클래스는 A, B, C, D, E 총 5가지의 클래스로 구분짓습니다.
대규모 네트워크 주소입니다. 첫 바이트가 0으로 시작합니다.
첫 8비트를 네트워크 ID로 사용하고 나머지 24비트를 호스트 ID로 사용합니다.
중규모 네트워크 주소입니다. 첫 바이트가 10으로 시작합니다.
첫 16비트를 네트워크 ID로 사용하고 나머지 16비트를 호스트 ID로 사용합니다.
소규모 네트워크 주소입니다. 첫 바이트 110으로 시작합니다.
첫 24비트를 네트워크 ID로 사용하고, 나머지 8비트를 호스트 ID로 사용합니다.
멀티캐스트(1:다) 통신에 사용합니다. 첫 바이트가 1110으로 시작합니다.
예약된 주소로 특별한 용도에 사용합니다. 첫 바이트가 1111로 시작합니다.
IP 주소가 갖는 값 중에 할당되지않는 주소도 존재합니다.
네트워크 주소
는 전체 네트워크에서 작은 네트워크를 식별하는데 이용되는 주소입니다. 호스트 ID가 10진수 0라면 해당 주소가 전체 네트워크의 대표 주소가 됩니다.
브로드캐스트 주소
는 네트워크의 모든 장비에 한 번에 데이터를 전송하는데 사용되는 전용 IP 주소입니다. 호스트 ID가 10진수 255이면 브로드캐스트 주소입니다.
자신의 IP주소를 네트워크나 브로드캐스트 주소로 설정하면 안됩니다.