
네트위크 계층에서는 패킷을 Datagram이라고 한다.
그럼 이제 데이터그램은 어떻게 구성되는지 알아 보자.

IP 헤더의 사이즈는 엄밀히 말하면 옵션 값 떄문에 고정되어 있지 않다.
(옵션값을 제외하고는 TCP 처럼 20 바이트 이다.)
TTL(time to live)
TTL은 네트워크에서 데이터그램이 무한히 순환하지 않도록 한다.
라우터를 지날 때 마다 감소하고, 이 필드가 0이 되면 데이터그램을 폐기한다.
fragmentation offset
IPv4에서는 패킷의 크기가 최대 사이즈(MTU)를 넘으면 작은 패킷으로 나누어 독립적으로 목적지에 보내진다.
그 후 순서에 맞게 조립되어 트랜스포트레이어에 보내진다.
체크섬
IP헤더만의 오류를 체크하는 체크섬이다.
각 호스트(host)나 라우터(router)의 인터페이스에 할당되는 32비트 식별자
호스트나 라우터가 물리적 링크와 연결되는 지점.
(호스트와 물리적 링크 사이의 경계)
IP 주소는 네트워크 상의 장치를 식별하며, 각 인터페이스에 할당된다.
(라우터는 여러 네트워크를 연결하기 위해 다수의 인터페이스를 사용.)

서브넷은 같은 네트워크에 속한 장치들의 그룹으로, 라우터를 거치지 않고 직접 통신할 수 있는 장치들의 집합이다.
서브넷은 라우터와 인터페이스를 제거 했을 때 고립되는 부분이 모두 서브넷이다.
(위의 그림에서는 파란색 부분이 서브넷 이다.)
서브넷(Subnet)은 하나의 네트워크를 작은 네트워크로 분할하여 IP 주소를 효율적으로 관리하고 트래픽을 분산시킨다.
서브넷 부분 (Subnet Part)호스트 부분 (Host Part)
IP 주소를
프리픽스를 사용하여 효율적으로 할당하고 라우팅하는 방식.
IP 주소를 주소/프리픽스 길이 형식으로 표기한다. 223.1.1/24
서브넷 주소 223.1.1/24
뒤에 /24는 서브넷 마스크라 부르는데, 왼쪽 24비트가 서브넷 주소라는 것을 가리킨다.
나머지 8 비트는 호스트
서브넷 마스크의 크기가 작을 수록, 서브넷 파트의 길이는 작아지고,
host 파트의 길이가 길어지며, 서브넷에 속하는 호스트 들의 범위가 더 길어진다.
CIDR를 통해 필요에 따라 다양한 크기의 서브넷을 생성할 수 있어 IP 주소 공간 낭비를 줄일 수 있다.
IP addressing 방법에는 다음의 두 가지 의문이 있다.
- 각 서브넷의 호스트들에게 어떻게 IP주소를 할당할까?
00대학교가 있다면, 그곳에서 사용하는 우리의 컴퓨터에 어떻게 IP를 할당하는거지?
- 그럼 각 서브넷들에게는 어떻게 IP주소를 할당할까?
00대학교의 IP는 어떻게 할당하는 거지?
➡️ 각 서브넷에 IP주소 범위를 할당하는 것은 ICANN 에서 관리 한다.
(루트 DNS서버에 대한 관리도 담당)
그럼 이제 호스트 들에게 할당하는 방법에 대해 알아보자.
각 기관에서의(서브넷) 인터넷 이용자들은 크게 두 가지 방법으로 인터넷에 접속한다.
랜선 연결와이파이 연결랜선연결에 같은 경우에는 한명이 이동하지 않고 그 자리에서만 사용하므로 고정된 IP를 할당하게 된다.
하지만 와이파이 연결 같은 경우는 어떨까?
많은 사람들이 이동하며 접속했다 끊었다를 반복하므로 고정된 IP를 할당하기 여렵다
그래서 이 때 사용되는 프로토콜이 바로 DHCP 이다
호스트가 네트워크에 접속할 때 DHCP 서버가 동적으로 IP를 할당해 준다.
(plug & play)
많은 사람들이 동적으로 할당 받으므로 IP를 재사용 하여 다른 사람에게 할당할 수 있다.
DHCP프로토콜은 UDP를 사용하고 클라이언트 서버 구조로 이루어 진다.
(어플계층 프로토콜이다)
클라는 IP할당을 요청하고
서버는 IP를 할당해 주는 응답을 한다.

DHCP discover [옵션]
클라가 와이파이에 접속하면 IP할당을 받기 위해 서버에 연결요청을 한다.(broadcasts)
DHCP offer [옵션]
서버는 연결요청을 받으면 할당할 수 있는 IP를 여러개 준다.
(broadcasts)
DHCP request
여러개의 IP 할당중 하나를 고르고 요청을 보낸다.
DHCP ack
서버는 선택받은 IP에 대한 ACK응답을 한다.
1. 클라이언트 → DHCP DISCOVER:
• 연결 중인 노트북은 DHCP를 사용하여 IP 주소, 첫 번째 라우터(게이트웨이)의 주소, 그리고 DNS 서버의 주소를 얻습니다.
2. DHCP 서버 → DHCP OFFER:
• DHCP 서버는 클라이언트에게 사용할 IP 주소, 게이트웨이, DNS 서버 정보를 포함한 제안 메시지를 보냄.
3. 클라이언트 → DHCP REQUEST:
• 클라이언트는 DHCP 서버에게 해당 제안을 수락한다는 요청 메시지를 전송.
4. DHCP 서버 → DHCP ACK:
• DHCP 서버는 클라이언트에게 확정된 IP 주소 및 네트워크 설정 정보를 보냄.
5. 클라이언트 설정 완료:
• 클라이언트는 할당받은 IP 주소, 게이트웨이, DNS 정보를 사용하여 네트워크 통신 시작.
DHCP discover 과 DHCP offer이 옵션인 이유는 이전에 연결해 할당받았던 IP는
추후에 다시 연결할 때 다시 1,2 의 과정 없이 할당을 요청할 수 있기 때문이다.

src: 메시지의 출발지 IP 주소.
(src: 0.0.0.0는 아직 할당되지 않은 기본값)
dest: 메시지의 목적지 IP 주소.
dest: 255.255.255.255 :
(브로드캐스트 주소로, 네트워크 상의 모든 장치에 메시지를 전송.)
yiaddr: 클라이언트에게 할당된 IP 주소.
Transaction ID: 클라이언트-서버 간 특정 DHCP 세션을 식별하기 위한 고유 값.
DHCP(Dynamic Host Configuration Protocol)**의 동작 방식에서
네트워크 전체에 브로드캐스트 메시지를 보내는 이유는 다음과 같습니다:
1. DHCP Discover:
클라이언트는 자신이 DHCP 서버를 찾고 있음을 알리기 위해
255.255.255.255 브로드캐스트 주소로 메시지를 보냅니다.
이 메시지는 같은 네트워크에 있는 모든 기기가 수신하며, DHCP 서버가 있는 경우 응답을 합니다.
2. DHCP Offer:
DHCP 서버는 클라이언트에게 IP 주소를 제안하며,
여전히 클라이언트를 특정할 수 없기 때문에 브로드캐스트로 응답을 보냅니다.
3. DHCP Request:
클라이언트는 제안받은 IP 주소를 요청하며, 이 역시 브로드캐스트로 전달됩니다.
이는 네트워크 상의 다른 DHCP 서버들에게도 클라이언트가
특정 서버와 계약하려는 의도를 알리기 위함입니다.
4. DHCP ACK:
DHCP 서버는 요청을 확인하며, 클라이언트에게 할당된 IP 주소를 최종적으로 확인합니다.
이 단계에서는 특정 클라이언트로 응답을 보낼 수도 있지만,
초기 설정 단계에서는 여전히 브로드캐스트를 사용할 수 있습니다.
이러한 브로드캐스팅 방식으로 데이터를 전송하는 이유는 클라이언트의 IP주소가 아직 할당되지 않아,
dest나 src를 특정할 수 없기 때문이다.
클라이언트에게 IP 주소뿐만 아니라, 네트워크 연결에 필요한 추가 정보를 제공한다.
Allocated IP Address (할당된 IP 주소)First-hop Router (기본 게이트웨이 주소)DNS 서버의 이름과 IP 주소네트워크 마스크
이더넷 프레임은 LAN에서 브로드캐스트(목적지 MAC 주소: FFFFFFFFFFFF)로 전송되며, DHCP 서버가 실행 중인 라우터에서 수신됩니다.
이더넷 프레임이 캡슐화를 제거하며, IP → UDP → DHCP 순서로 디멀티플렉싱(역캡슐화)됩니다.
DHCP 서버는 클라이언트의 IP 주소, 첫 번째 라우터의 IP 주소, DNS 서버의 이름 및 IP 주소를 포함한 DHCP ACK 메시지를 작성합니다.
DHCP 서버의 응답 메시지는 클라이언트로 전달되고, 클라이언트는 DHCP → UDP → IP → Ethernet 순으로 디멀티플렉싱하여 데이터를 해석합니다.
이제 클라이언트는 자신의 IP 주소, DNS 서버의 이름 및 IP 주소, 첫 번째 라우터의 IP 주소를 알게 되어 네트워크 통신을 시작할 준비를 마칩니다.

위와 같이 한 ISP(00대학교)가 할당 받은 서브넷 파트의 주소가 위 와 같다면
해당범위에 하위 조직(xx건물)들에 대한 IP 범위가 할당되고
이에 대해 디바이스들이 할당할 수 있는 실제 IP가 정해진다.
여기서는 00대학교에 할당된 주소의 범위가 비트 마스크 20 정도 이고
여기서는 00건물에 할당된 주소의 범위가 비트 마스크 23 정도 이므로
당연하게도 기관에 할당된 범위가 각 건물에 할당된 IP주소의 범위보다 긴 범위이다.
(서브넷 파트가 늘어나면 호스트 파트가 줄어든다.)
Route aggregation(경로 집계)를 하여 네트워크에 기관의 prefix를 알려주어(Advertise) 자신에게 할당 된 IP범위로 오는 패킷을 받을 수 있게 한다.

longest prefix match을 따르기 때문에 1번 ISP 범위 내에 이동한 조직이 포함 되어도, 2번 ISP로 올바르게 전달 될 수 있다.

IPv4의 IP 부족 문제를 완화하기 위해 하나의 IP주소로 여러 디바이스를 연결하는 프로토콜이다.

위와 같은 사설 IP 주소(private IP address)는 로컬 네트워크 환경에서면 사용할 수 있다.
사설 IP 주소또한 서브넷 파트/서브넷 마스크로 범위가 할당된다.
하나의 공인 IP로 모든 기기 관리 가능
➡️ 때문에 IP 절약, 많은 디바이스를 연결하는데 유리하다
내부 IP 주소 변경 시 외부에 영향 없음
➡️ 실제 공인 IP가 아니므로 내부 주소 변경 시 라우터가 가진 translation 테이블만 수정하면 된다. (내부 네트워크 관리가 유연)
ISP 변경 시 내부 주소 유지 가능
➡️ 라우터의 주소가 바뀐다 해도 내부 주소는 바꾸지 않아도 된다.
보안 강화
➡️ 각 디바이스의 사설 주소는 인터넷에서 알 수 가 없으므로 각 디바이스의 보안이 강화된다.
LAN side의 주소를 WAN side의 주소로 매핑해 준다.
해당 매핑 정보를 기억
변환한 정보를 테이블로 기록해 놓는다.
(추후 서버의 응답을 올바른 디바이스로 전달하기 위해)
Incoming 데이터그램
테이블을 확인하여, NAT 주소 와 새로운 포트 번호를
소스 IP 주소(사설 주소)와 포트 번호로 변환한다.

라우터의 스택은 네트워크레이어 까지인데, 트랜스포트레이어의 포트 번호까지 수정한다.
IP의 부족 문제를 해결하는 것은 아님
외부 인터넷은 내부 IP를 모른다.
이는 장점일수 있지만, 내부 디바이스가 서버일 때는 IP주소가 public 하게 알려져야 하는데 그러지 못하므로 추가적인 동작이 필요하다.
하지만, 매우 NAT는 매우 광범위 하게 사용된다.
(집에서 와이파이를 쓰듯, 셀룰러를 쓰듯)
IP 주소의 부족 문제를 해결하기 위해 128 비트를 사용하는 IPv6 개발 되었다.

체크섬 X
트랜스포트레이어에서 체크 하기 때문에 딱히..?
fragmentaion/reassembly X
MTU보다 사이즈가 크면 drop을 하고 에러메세지(ICNP 메세지)를 보낸다.
-> 송신자 측에서 fragmentaion을 진행하는 방식으로 지원한다. (더 빠름)
옵션 X
그리하여 총 헤더 크기는 40 바이트이다.
하지만 버전 6로의 마이그래에션은 여러가지 비용 문제로 현재는 버전 4와 같이 사용되고 있다.
때문에 IPv4를 처리하는 구형 라우터는 IPv6에 대한 데이터그램을 처리하지 못하는 문제가 발생한다.
이를 해결하기 위해 터널링이라는 것을 사용한다.
IPv6에 대한 데이터 그램을 IPv4의 페이로드에 캡슐화하여 데이터를 전송하는 것


버전 6의 라우터에서 터널링이 이루어지고,
터널링 하는 라우터에서 캡슐화를 진행하고,
해당 캡슐화 패킷의 목적지인 다음 IPv6 라우터로 도착하면 다시 de캡슐화를 진행한다.
Logical View (논리적 관점)Physical View (물리적 관점)