네트워크 계층은 상대 호스트의 전송 계층으로부터 세그먼트를 얻어 각 세그먼트를 데이터그램(패킷)으로 캡슐화하고 인접한 라우터에게 데이터그램(패킷)을 보낸다.
수신 호스트의 네트워크 계층은 전송 계층 세그먼트를 추출하여 전송 계층까지 전달한다.
각 라우터의 역할은 입력 링크에서 출력 링크로 데이터그램(패킷)을 전달하는 것이다.
네트워크 계층은 best effort service(최선형 서비스) 프로토콜을 제공한다.
최선형 서비스는 패킷을 보내는 순서대로 수신됨을 보장할 수 없을 뿐만 아니라, 목적지까지의 전송 자체도 보장할 수 없다.
종단 시스템 간 지연 또한 보장되지 않으며, 보장된 최소 대역폭 또한 없다.
즉, 최선을 다해서 데이터그램을 전달하고자 하지만, delay, loss 등의 문제가 발생할 수 있다.
IP 주소는 특정 호스트가 아닌 네트워크 인터페이스를 지칭한다.
인터페이스를 여러 개 가지고 있는 장치인 라우터는 IP를 여러 개 가지고 있다.
인터넷 네트워크 계층 패킷을 데이터그램 또는 패킷이라고 부르며, IPv4 데이터그램 포맷은 다음과 같다.

버전 번호
라우터는 버전 번호를 확인하여 데이터그램의 나머지 부분을 어떻게 해석할지 결정한다.
헤더 길이
IPv4 데이터그램 헤더는 20바이트이다.
서비스타입
각기 다른 유형의 IP 데이터그램을 구별한다.
실시간 데이터그램과 비실시간 트래픽(FTP)을 구분하는데 유용하다.
데이터그램 길이
데이터그램 필드의 길이는 16비트이다.
식별자, 플래그, 단편화 오프셋
IP 단편화와 관련이 있다.
큰 IP 데이터그램이 여러 개의 작은 IP 데이터그램으로 분할된 다음, 목적지로 독립적으로 전달되며 여기서 페이로드 데이터가 최종 호스트의 프랜스포트 계층으로 전달되기 전에 다시 모이게 된다.
새로운 IPv6는 단편화를 허용하지 않는다.
TTL
상위 계층 프로토콜
IP 데이터그램이 최종 목적지에 도착했을 때만 사용된다.
IP 데이터그램에서 데이터 부분이 전달될 목적지의 전송 계층의 특정 프로토콜을 명시한다.
포트 번호가 전송 계층과 애플리케이션 계층을 함께 묶는 접착제 역할을 하는 것처럼, 프로토콜 번호는 네트워크 계층과 전송 계층을 묶는 역할을 한다.
헤더 체크섬
헤더 체크섬은 라우터가 수신한 IP 데이터그램의 비트 오류를 탐지하는데 도움을 준다.
라우터는 수신한 각 IP 데이터그램마다 헤더 체크섬을 계산하고, 이 값과 데이터그램 헤더의 체크섬이 다르면 오류 상태임을 감지한다.
라우터는 보통 오류가 검출된 데이터그램을 폐기한다.
출발지와 목적지 IP 주소
옵션
IP 헤더를 확장한다.
모든 데이터그램 헤더 옵션 필드에 정보를 포함하지 않는 방법으로 오버헤드를 해결하기 위해 헤더 옵션은 거의 사용되지 않는다.
일부 데이터그램은 옵션 처리 유무에 따라서 라우터에서 IP 데이터그램을 처리하는 데 필요한 시간이 크게 달라진다.
이러한 이유로 IP 옵션은 IPv6에 포함되지 않는다.
데이터(페이로드)
호스트는 일반적으로 네트워크와 연결되는 하나의 링크를 갖는다.
호스트 IP가 데이터그램을 보낼 때 이 링크를 통해 데이터그램을 보낸다.
호스트와 물리적 링크 사이의 경계를 인터페이스라고 부른다.
라우터의 작업은 한 링크로부터 데이터그램을 수신하여 다른 링크로 전달하는 것이므로, 라우터는 2개 이상의 연결된 링크가 필요하다.
IPv4의 IP 주소는 32비트(4바이트) 길이다.
모든 호스트와 라우터의 각 인터페이스는 고유한 IP 주소를 갖는다.
이러한 주소는 마음대로 선택할 수 없으며, 인터페이스의 IP 주소 일부는 연결된 서브넷이 결정한다.
호스트들의 인터페이스들과 하나의 라우터 인터페이스로 연결된 네트워크는 서브넷을 구성한다.
IP 주소체계는 이 서브넷에 예를 들어 223.1.1.0/24라는 주소를 할당하는데, 여기서 /24는 서브넷 마스크라 부르며 32비트 주소의 왼쪽 24비트가 서브넷 주소, 즉 네트워크 주소를 의미한다.
위와 같은 주소 형식에서 24와 같이 최상위 비트를 의미하는 값은 IP 주소의 네트워크 부분을 구성하며, 이를 해당 주소의 프리픽스(prefix) 또는 네트워크 프리픽스라고 부른다.
CIDR이 채택되기 전에는 IP 주소의 네트워크 부분을 8, 16, 24 비트로 제한하는 클래스 주소체계로 구성되었다.
그러나 이러한 클래스 주소체계는 IP 주소 할당에 대한 낭비와 부족 문제로 CIDR이 채택된 것이다.
IP 주소의 또 다른 형태인 브로드캐스트 주소는 255.255.255.255가 있다.
호스트가 목적지 주소가 255.255.255.255인 데이터그램을 보내면, 이 메시지는 같은 서브넷에 있는 모든 호스트에게 전달된다.
네트워크 주소는 네트워크를 표현하는 부분으로, 호스트가 속한 특정 네트워크를 식별하는 역할을 한다.
호스트 주소는 호스트를 표현하는 부분으로, 네트워크 내에서 특정 호스트를 식별하는 역할을 한다.
호스트 주소 공간을 크게 할당하면 호스트가 할당되지 않은 다수의 IP 주소가 낭비될 수 있다.
반대로 무조건 호스트 주소 공간을 작게 할당하면 호스트가 사용할 IP 주소가 부족해질 수 있다.
이런 고민을 해결하기 위해 생겨난 개념이 IP 주소의 클래스이다.

네트워크 주소는 일반적으로 4옥텟으로 이루어져 있으며, 여기서 네트워크 주소와 호스트 주소를 나눈다.
클래스는 네트워크 크기에 따라 IP 주소를 분류하는 기준이다.
클래스를 이용하면 필요한 호스트 IP 개수에 따라 네트워크 크기를 가변적으로 조정해 네트워크 주소와 호스트 주소를 구획할 수 있다.
클래스를 기반으로 IP 주소를 관리하는 주소 체계를 클래스풀 주소 체계라고 한다.
총 5개의 클래스가 있으며, A, B, C, D, E 클래스이다.
이 중 D와 E는 멀티캐스트, 특수한 목적을 위해 예약된 클래스이기 때문에 네트워크의 크기를 나누는데는 실질적으로 A, B, C 클래스가 사용된다.
네트워크 주소는 비트 0으로 시작하고, 1옥텟으로 구성되며, 호스트 주소는 3옥텟으로 구성된다.
이론상으로 2^7개의 네트워크가 존재할 수 있고, 2^24개의 호스트 주소를 가질 수 있다.
IP 주소 첫 옥텟의 최솟값이 10진수로 표현하면 0, 최댓값이 127이기 때문에, IP 주소의 첫 옥텟의 주소가 0~127일 경우 A 클래스임을 짐작할 수 있다.
네트워크 주소는 비트 10으로 시작하고, 2옥텟으로 구성되며, 호스트 주소도 2옥텟으로 구성된다.
이론상으로 2^14개의 네트워크와 2^16개의 호스트 주소를 가질 수 있다.
IP 주소 첫 옥텟의 최솟값을 10진수로 표현하면 128, 최댓값은 191이기 때문에, IP 주소의 첫 옥텟의 주소가 128~191일 경우 B 클래스임을 짐작할 수 있다.
네트워크 주소는 비트 110으로 시작하고, 3옥텟으로 구성되며, 호스트 주소는 1옥텟으로 구성된다.
이론상으로 2^21개의 네트워크 주소와 2^8개의 호스트 주소를 가질 수 있다.
IP 주소 첫 옥텟의 최솟값을 10진수로 표현하면 192, 최댓값은 223이기 때문에, IP 주소의 첫 옥텟의 주소가 192~223일 경우 C 클래스임을 짐작할 수 있다.
클래스풀 주소 체계는 한계가 있다.
클래스별 네트워크의 크기가 고정되어 있기에 여전히 다수의 IP 주소가 낭비될 가능성이 크다는 문제이다.
그래서 클래스풀 주소 체계보다 더 유동적이고 정교하게 네트워크를 구획할 수 있는 클래스리스 주소 체계가 등장했다.
클래스리스 주소 체계에서는 네트워크와 호스트를 구분 짓는 수단으로 서브넷 마스크를 이용한다.

연속적인 1과 0으로 구성되어 있어서 IP 주소와 and 연산을 하면 IP 주소에서 네트워크부와 호스트부를 알아낼 수 있다.
서브넷 마스크는 IP 주소와 같은 길이의 비트로 구성되며, 이진수로 표현했을 때 네트워크부는 1로, 호스트부는 0으로 설정된다.
서브넷 마스크를 이용해 클래스를 원하는 크기로 더 잘게 쪼개어 사용하는 것을 서브네팅이라고 한다.
하나의 네트워크 안에는 클래스에 따라 수만개 이상의 호스트를 가지게 되는데, 단일 네트워크의 크기가 너무 큰 경우 특정 기기와의 통신을 시도할 때 브로드캐스트의 영향이 너무 크기 때문에 서브넷 마스크를 사용해 네트워크를 쪼개어 캐스트 영역을 보다 작은 네트워크(서브넷)으로 나눌 수 있다. 이를 통해 작은 네트워크를 조직화하고 관리할 수 있다.
서브넷과 서브넷 마스크에 대해 설명해주세요.
서브넷이란 하나의 네트워크가 분할되어 나눠진 작은 네트워크입니다.
서브넷 마스크는 특정 네트워크를 식별하는데 사용되는 하나의 주소 체계입니다.
서브넷 마스크는 IP주소와 같은 길이의 비트로 구성되며, 이진수로 표현했을 때 네트워크부는 1로, 호스트부는 0으로 설정됩니다.
서브넷 마스크를 표기하는 방법은 크게 두 가지가 있다.
여기서 두 번째 방식으로 표기하는 방법을 CIDR 표기법이라고 부른다.
CIDR
Classless Inter-Domain Routing
예시로 192.168.0.2/25라는 표기가 있다고 가정해보자.
이는 어떤 네트워크에 속한 어떤 호스트를 가리킬까?
IP 주소를 나타내는 192.168.0.2를 2진수로 표현하면
11000000.10101000.00000000.00000010
이다.
그리고 서브넷 마스크를 나타내는 /25는 1이 총 25개,
11111111.11111111.11111111.10000000
을 의미한다.
서브넷 마스크를 IP 주소와 AND 연산을 하면 그 결과는 192.168.0.0 이다.
즉, 네트워크 주소는 192.168.0.0이 된다.
호스트는 7비트로 표현한다는 것을 알 수 있다.
즉, 192.168.0.0 이라는 네트워크에 속한 2라는 호스트를 의미한다.
이처럼 클래스리스 주소 체계란 클래스를 이용하지 않고 서브넷 마스크나 CIDR 표기법으로 네트워크 주소와 호스트 주소를 구분 짓는 방법이다.
현재 우리는 대부분 IPv4를 사용하고 있다.
IPv6로 완전히 넘어가지 못한 이유는 두 가지가 있다.
1. 4에서 6으로 바꾸기 위해선 라우터 장비를 바꿔야 한다.
라우터는 IPv4만 인식하기 때문이다.
라우터는 한 개인이 관리하는 것이 아닌 수많은 사람이 관리하는 것이기 때문에 생태계를 바꾸는 것은 쉽지 않다.
위의 이유로 근본적인 이유를 해결하지 않고 IP 주소를 적게 사용하기 위한 방법을 찾아 적용하고 있다.
전 세계에는 고유한 IP 주소가 있고, 고유하지 않은 IP 주소도 있다.
공인 IP 주소는 전 세계에서 고유한 IP 주소이다. 네트워크 간의 통신, 인터넷을 이용할 때 사용하는 IP 주소가 공인 IP 주소이다.
사설 IP 주소는 사설 네트워크에서 사용하기 위한 IP 주소이다.
인터넷, 외부 네트워크에 공개되지 않은 네트워크를 의미한다.
LAN 내의 많은 호스트는 사설 IP 주소를 사용하기 때문에 우리가 사용하는 모든 네트워크 기기에 IP 주소를 별도로 신청해서 할당받지는 않는다.
사설 IP 주소의 할당 주체는 일반적으로 라우터이다.
할당받은 사설 IP 주소는 해당 호스트가 속한 사설 네트워크에서만 유효한 주소이므로, 얼마든지 다른 네트워크상의 사설 IP 주소와 중복될 수 있다.

사설 IP 주소를 사용하는 호스트가 외부 네트워크와 통신하기 위해 사용하는 기술이다.
NAT을 통해 사설 IP 주소를 사용하는 여러 호스트는 적은 수의 공인 IP 주소를 공유할 수 있다.
NAT를 사용해서 공인 IP의 사용을 줄이고 내부적으로 사용하는 사설 IP가 늘어남으로써 IPv4를 아직까지 사용할 수 있는 것이다.
대부분의 라우터와 공유기는 NAT 기능을 내장하고 있다.
과정은 아래와 같다.

첫째, 공인 IP 주소를 절약할 수 있다.
인터넷상의 공인 IP 주소는 한정되어 있다. 따라서 회사, 학교 등의 단체에 보급된 PC가 각각의 고유한 공인 IP를 모두 보유해야 한다면, 인터넷 주소 감소 속도가 더욱 빨라질 것이다.
둘째, 보안의 목적이다.
공개된 인터넷망은 외부에서 내부로의 해킹이나 침입의 위험이 있다.
따라서 내부망과 공개망 사이에 방화벽을 운영하여 외부 공격으로부터 내부 인터넷망을 지킨다. 내부에서 사설 IP를 사용하는 것은 외부에서 개인 PC나 인터넷 장비로 직접적인 접근을 하지 못하는 이유도 포함한다.
NAT의 동작 원리 - IP masquerading(마스쿼레이딩)
NAT은 하나의 공인 IP 뒤로 여러 개의 사설 IP 공간을 은닉하는 IP masquerading 기법을 사용한다.
다수의 인터넷 디바이스가 하나의 공인 IP를 사용하여 외부 인터넷을 사용하는 것을 가능하게 해준다.
사설 IP를 사용하는 호스트는 클라이언트의 역할로서만 동작하기 때문에, 서버로서의 역할은 할 수 없다.
따라서 사설 IP 내에서 서버를 만들어 배포해도 정상적으로 동작하지 않는다.
정상동작하기 위해선 NAT Table에 직접 IP 주소와 포트번호를 작성하여 추가해주어야 한다.
또 하나는, 라우터에서 공인 IP를 사설 IP로 변환하여 호스트를 특정하게 되는데, 이때 destination IP주소는 동일하고 port 번호만 달라져 그 port 번호로 호스트를 특정한다.
원래 IP 주소로 호스트를 구분하고, port 번호로 프로세스를 특정하는데 사용했지만, 그 역할이 아닌 다른 역할로서 사용하고 있기 때문에, 실제 port 번호의 제용도를 사용하지 못한다.
정적 할당은 호스트에 직접 수작업으로 IP 주소를 부여하는 방식이다.
이렇게 할당된 IP 주소를 정적 IP 주소라고 부른다.
IP 주소를 정적으로만 할당하다 보면 호스트의 수가 많아질 경우 관리가 곤란해질 수 있다.
이럴 때 사용 가능한 IP 주소 할당 방식이 동적 할당이다.
동적 할당은 정적 할당과 달리 IP 주소를 직접 입력하지 않아도 호스트에 IP 주소가 동적으로 할당되는 방식이다.
이렇게 할당된 IP 주소를 동적 IP 주소라고 한다.
동적 IP 주소는 사용되지 않을 경우 회수되고, 할당받을 때마다 다른 주소를 받을 수 있다.
IP 동적 할당에 사용되는 대표적인 프로토콜이 DHCP이다.
기관은 ISP로부터 주소 블록을 획득하여, 개별 IP 주소를 기관 내부의 호스트와 라우터 인터페이스에 할당한다.
호스트에 IP 주소를 할당하는 것은 수동으로 구성이 가능하지만, 일반적으로 동적 호스트 구성 프로토콜(DHCP)을 더 많이 사용한다.
Dynamic Host Configuration Protocol
애플리케이션 계층 프로토콜
DHCP는 클라이언트-서버 프로토콜이다.
클라이언트는 일반적으로 IP 주소를 포함하여 네트워크 설정을 위한 정보를 얻고자 새롭게 도착한 호스트다.
일반적으로, 각 서브넷은 DHCP 서버를 가진다.
만약, 서버가 현재 서브넷에 없다면, 해당 네트워크에 대한 DHCP 서버주소를 알려줄 DHCP 연결 에이전트가 필요하다.
DHCP를 통한 IP 주소 할당은 IP 주소를 할당받고자 하는 호스트와 해당 호스트에게 IP 주소를 제공하는 DHCP 서버간에 메시지를 주고받음으로써 이루어진다.
DHCP 서버 역할은 일반적으로 라우터가 수행한다.
DHCP 서버는 클라이언트에게 할당 가능한 IP 주소 목록을 관리하다, 클라이언트가 요청할 때 IP 주소를 할당한다.
메시지의 종류는 아래와 같다.

클라이언트는 DHCP Discover 메시지를 브로드캐스트로 전송하여 DHCP 서버를 찾는다.
클라이언트는 아직 IP 주소를 할당받지 못했으므로 송신지 IP 주소는 0.0.0.0으로 설정된다.
새롭게 도착한 호스트는 상호작용할 DHCP를 발견한다.
호스트는 자신이 접속될 네트워크의 IP 주소를 알지 못하며 해당 네트워크의 DHCP 서버 주소도 모른다.
이때 DHCP 클라이언트는 DHCP discover 메시지를 포함하는 IP 데이터그램을 목적지 주소를 255.255.255.255로 설정하여 브로드캐스트한다.
DHCP discover 메시지를 받은 DHCP 서버는 DHCP offer 메시지를 클라이언트에게 응답한다.
즉, 서버가 클라이언트에게 할당해 줄 IP 주소를 제안하는 메시지이다.
이때에도 클라이언트는 아직 IP 주소가 없으므로 브로드캐스트 주소를 사용하여 서브넷의 모든 노드로 이 메시지를 브로드캐스트한다.
서브넷에는 여러 DHCP가 존재하기 때문에, 클라이언트는 여러 DHCP 제공 메시지로부터 가장 최적의 위치에 있는 DHCP 서버를 선택한다.
각각의 서버 제공 메시지는 수신된 discover 메시지의 트랜잭션 id, 클라이언트에게 제공될 IP 주소, 서브넷 마스크, IP 주소 임대 기간을 포함한다.
DHCP Offer에 대한 응답 메시지이다.
Offer 메시지 잘 받았고, 써도 되냐고 되묻는 것과 같다.
클라이언트는 서버로부터 받은 메시지들 중 선택하여 선택한 IP 주소를 사용하겠다고 브로드캐스트한다.
브로드캐스트하는 이유는, offer를 제공한 다른 DHCP 서버들에게도 알리기 위해서다.
서버는 request 메시지에 대한 응답 메시지를 보낸다.
이후 DHCP ACK까지 받은 클라이언트는 서버와의 상호작용이 종료되고 할당받은 IP 주소를 자신의 IP 주소로 설정한 뒤 임대 기간 동안 IP 주소를 사용한다.
IP는 어떻게 할당될까요?
IP 주소 할당에는 정적 할당과 동적 할당이 있습니다.
정적 할당은 호스트에 직접 수작업으로 IP 주소를 부여하는 방식입니다.
동적 할당은 정적 할당과 달리 IP 주소를 직접 입력하지 않아도 호스트에 IP 주소가 동적으로 할당되는 방식입니다.
대표적으로 DHCP 프로토콜이 사용됩니다.
NEXT. OSI 3계층 네트워크계층, 라우팅
도서
혼자 공부하는 네트워크