Dynamic Host Configuration Protocol (DHCP) : 네트워크에서 IP 주소를 자동으로 할당하는 프로토콜이다.
한 조직의 IP 주소 블록이 할당되면, 네트워크 관리자가 각 호스트나 라우터에 수동으로 IP 주소를 지정한다.
DHCP를 사용하면, 이런 과정 없이 IP 주소 할당을 자동으로 처리할 수 있다.
DHCP는 애플리케이션 계층의 프로그램으로, 네트워크 계층의 TCP/IP를 보조하는 역할이다.

DHCP Discover
DHCP Offer
DHCP Request
클라이언트는 DHCP 서버가 제안한 IP 주소를 사용하기로 결정하고, 응답 메시지를 보낸다. (브로드캐스트)
클라이언트가 서버에게 IP 주소를 요청하는 단계이다.
DCHP Acknowledgment (DCHP ACK)

Opcode (Operation code, 8bits) : DHCP 메시지가 요청(1)인지, 응답(2)인지를 나타낸다.
Flags (16bits) : 첫 번째 비트는 유니캐스트(0)인지, 멀티캐스트(1)인지를 나타낸다. 나머지 15비트는 사용되지 않는다.
Options (64bytes) : 추가 옵션에 대해 명시되어 있는 필드이다. DHCP가 사용하는 여러 설정 정보가 들어있다.


DHCP Discover
클라이언트는 네트워크에 처음 연결되고, 자신의 IP 주소 할당을 요청하는 메시지를 DHCP 서버에게 보낸다.
Source Address : 0.0.0.0 (IP 주소 할당 전)
Destination Address : 255.255.255.255 (브로드캐스트)
DHCP Offer
DHCP 서버는 클라이언트의 요청을 받고, 사용 가능한 IP 주소를 제안한다.
응답 메시지에는 서버의 주소와 호스트의 주소가 들어있다.
할당 시간은 이때 정해진다.
Your Address : 181.14.16.182 (할당 주소)
Server Address : 181.14.16.170 (서버 주소)
Source Address = Server Address
Destination Address : 255.255.255.255 (브로드캐스트)
DHCP Request
클라이언트는 서버로부터 받은 IP 주소를 사용하기로 하고, 해당 IP 주소를 요청하는 메시지를 다시 서버에 보낸다.
Client Address : 181.14.16.182
Server Address : 181.14.16.170 (서버 주소)
Source Address = Client Address
Destination Address : 255.255.255.255 (브로드캐스트)
DHCP ACK
DHCP 서버는 클라이언트의 요청을 승인하고, 해당 IP 주소를 할당한다.
서버는 ACK 메시지를 보내 IP 주소 할당이 완료되었음을 알린다.
최종 ACK 메시지의 형태는 다음과 같다.
Lease time : 해당 IP주소가 호스트에게 할당되는 시간이다.
Network Address Translation (NAT) : 네트워크 주소 변환 기술이다. 내부 네트워크의 호스트들이 공인 IP 주소 없이도 외부 네트워크(인터넷)과 통신할 수 있도록 하는 기술이다.
NAT은 사설 IP 주소와 공인 IP 주소 간의 매핑을 제공하는 기술이다.
내부 네트워크 내의 통신은 사설 IP 주소를 이용하고, 외부 네트워크(인터넷)와의 통신 시 공인 IP 주소를 이용한다. 즉, 네트워크 환경에 따라 IP 주소의 변환이 이루어진다.
NAT 라우터가 사설 네트워크와 인터넷을 연결하며 IP 주소를 변환해준다.
내부 네트워크 장치가 인터넷과 통신할 때, NAT 라우터는 장치의 사설 IP를 NAT 라우터의 IP로 변환하여 외부와 통신한다.
실질적으로 외부 네트워크는 모든 데이터를 NAT 라우터에 보내고, 내부 네트워크 어느 호스트에 보낼지는 NAT 라우터에서 결정한다.

사설 IP : 172.18.3.~
NAT 라우터 IP : 200.24.5.8
라우터의 IP 주소로, 외부 네트워크는 라우터와 통신 하는 것으로 인식한다.
이러한 방식으로 라우터를 통해 내부 네트워크와 외부 네트워크간 통신이 이루어진다.
Translation Process
Table Entry 생성 (1)
사설 네트워크에 존재하는 장치가 외부 네트워크로 데이터를 보내려고 한다.
NAT 라우터는 송신지 주소 (Source Address, S)와 목적지 주소(Destination Address, D)를 매핑하여 변환 테이블에 항목을 추가한다.
송신지는 사설 네트워크의 주소, 목적지는 공인 네트워크의 주소이다.
출발지 주소 변경 (2)
NAT 라우터는 사설 네트워크의 출발지 주소를 NAT 라우터의 주소로 설정한다.
목적지 주소는 그대로 유지되며, 변환된 패킷은 외부 네트워크의 목적지를 향해 이동한다.
Table 접근 및 응답 처리 (3)
외부 네트워크의 클라이언트가 응답 패킷을 보낼 때, NAT 라우터의 주소(공인 주소)를 목적지 주소로 설정한다.
NAT 라우터는 응답 패킷의 Source 주소를 확인하고, 변환 테이블을 참조한다.
목적지 주소 변환 (4)
NAT 라우터는 변환 테이블 항목을 참조해 응답 패킷의 출발지 주소와 매핑된 사설 네트워크의 목적지 주소를 불러온다.
목적지 주소를 사설 네트워크 장치의 주소로 변환한다.
Translation Table
포워딩이란, 패킷을 목적지로 가는 경로에 올려놓는 것을 의미한다. 포워딩 과정에서 IP Packet은 어떤 역할을 하는지 알아보도록 하자.
Route method vs Next-hop method
Route method : 목적지까지의 전체 경로가 라우팅 테이블에 기록된다. 즉, 패킷이 이동할 모든 중간 라우터의 경로가 테이블에 기록된다.
Next-hop method : 라우팅 테이블에 패킷이 이동할 다음 라우터(Next-hop)만 기록한다.
Host-specific method vs Network-specific method vs Default method
Host-specific method : 라우팅 테이블 항목이 각 호스트별로 존재한다.
Network-specific method : 라우팅 테이블 항목이 네트워크별로 존재한다.
Default method : 기본(Default) 라우터를 설정하여 어떠한 목적지에 대해 특정한 경로가 설정되지 않은 경우, 기본 경로로 라우팅된다.
클래스리스 주소 체계에서 포워딩 모듈의 동작을 간소화해서 살펴보도록 하자.

패킷 수신 및 목적지 주소 추출
Search Table
라우터가 추출한 목적지 주소를 기반으로 포워딩 테이블을 참조한다.
포워딩 테이블에는 네트워크 주소, 서브넷 마스크, Next-hop IP 주소, 인터페이스 정보(Port)가 저장되어 있다.
Classless 주소 체계이기 때문에, IP 주소와 서브넷 마스크를 통해 목적지의 네트워크 주소를 알아낸다.
패킷 전송
라우터는 검색 결과를 바탕으로 포워딩을 마치고, 패킷을 다음 홉으로 전달한다.
이 과정은 패킷이 최종 목적지에 도착할 때까지 여러 라우터에서 반복된다.
포워딩 테이블은 다음과 같이 구성되어 있다.

네트워크 구성
라우터 R1의 인터페이스 m0 ~ m3에 서브넷들이 연결되어 있다.
각 서브넷의 네트워크 주소와 연결된 호스트의 주소가 주어져 있다.
한 서브넷은 외부 인터넷과 연결되어 있다.(180.70.65.194/26)
위와 같은 네트워크 환경에서, 라우터 R1에 도착한 패킷이 어떻게 처리되는지 확인해보자. 패킷의 목적지 주소는 180.70.65.140이다.
포워딩 결정 과정
첫 번째 마스크 (/26) 적용
subnet mask : 11111111.11111111.11111111.11000000
목적지 주소 : 10110100.01000110.01000001.10001100
and 연산 결과 : 10110100.01000110.01000001.10000000
네트워크 주소 : 180.70.65.128
네트워크 180.70.65.192/26는 목적지 네트워크가 아니다.
두 번째 마스크 (/25) 적용
subnet mask : 11111111.11111111.11111111.10000000
목적지 주소 : 10110100.01000110.01000001.10001100
and 연산 결과 : 10110100.01000110.01000001.10000000
네트워크 주소 : 180.70.65.128
네트워크 180.70.65.128/25는 목적지 네트워크이다.
따라서 라우터는 Next-hop 주소와 인터페이스 번호 m0을 사용하여 패킷을 전송한다.
Address Aggregation (주소 집합) : 주소 집합은 여러 조직의 네트워크를 하나의 더 큰 주소 블록으로 묶어 포워딩 테이블을 단순화하는 기법이다.
위 그림을 예시로 보면, 4개로 나뉘어져 있는 네트워크를 1개의 큰 네트워크로 합친 것을 볼 수 있다.
이 경우 외부 라우터(R2)는 라우터 R1에 대한 포워딩 테이블 항목만 작성하면 된다.
4개의 네트워크가 연결된 R1만 각 서브 네트워크에 대한 포워딩 테이블 항목이 필요하다.
Longest mask matching : 라우터가 목적지 IP 주소를 보고, 포워딩 테이블을 조회할 때 가장 구체적인 서브넷 마스크와 일치하는 경로를 선택한다.
예를 들어, /24 주소와 /26 주소가 있다면, /26 주소가 더 구체적인 네트워크 주소를 나타낸다.
prefix가 긴 주소일수록 네트워크 주소가 구체적이라고 할 수 있는 것이다.