네트워크 계층의 가장 핵심적인 프로토콜이라고 할 수 있는 IP 중심 네트워크 간의 통신이 이루어지는 방법
IP의 목적과 특징
📌 IP의 목적
주소지정: 네트워크 간의 통신 과정에서 호스트를 특정하는 것을 의미
단편화: 데이터를 여러 IP 패킷으로 올바르게 쪼개어 보내는 것을 의미
📌 IP의 특징
신뢰할 수 없는 통신 / 비연결형 통신: 아래에서 설명
주소 지정과 단편화
주소 지정은 IP 주소를 통해 이루어지며, 이는 IP 패킷 헤더를 통해 알 수 있음
IP 패킷 헤더와 페이로드(일부)를 나타낸 이미지

- 송신지 IP 주소와 수신지 IP 주소 필드: 두 필드에는 송수신지를 식별할 수 있는 IP 주소가 명시됨
📌 IP 주소와 구성
하나의 IP 주소는 총 4바이트(32비트)의 크기로 구성되고, 숫자당 8비트로 표현되므로 0~255 범위의 10진수 4개로 표기
각각의 10진수는 점(.)으로 구분하는데, 여기서 점으로 구분된 하나의 10진수를 옥텟이라고 함
예: 192.168.0.1 > 192 168 0 1 각각이 8비트로 표현 가능한 옥텟
IPv6 주소는 128비트로 구성되어 있으며, 16진수로 표현됩니다. IPv6는 더 많은 주소를 제공하며, 주소는 콜론(:)으로 구분된 8개의 16비트 그룹으로 표기됩니다. 예: 2001:0230:abcd:ffff:0000:0000:ffff:1111.
📌 라우터 / 라우팅
라우터: 서로 다른 네트워크에 속한 두 호스트가 네트워크 간 통신을 수행할 때, IP 주소를 바탕으로 목적지까지 IP 패킷을 전달하는 네트워크 장비
라우터: 라우터가 IP 패킷을 전달할 최적의 경로를 결정하고 해당 경로로 패킷을 내보내는 과정
라우터는 IP 주소를 기반으로 패킷의 최적 경로를 결정하여 목적지까지 전달(라우팅)하는 네트워크 장비
공유기도 라우팅을 수행할 수 있으므로 라우터의 일종이라고 볼 수 있음

📌 IPv6
IPv4: 32비트 주소로 약 43억 개 주소 제공, 고갈 우려
> 192.168.1.1
IPv6: 128비트 주소로 사실상 무한에 가까운 주소를 제공하며, 16진수로 표현되고 콜론(:)으로 구분
> 2001:0230:abcd:ffff:0000:0000:ffff:1111
📌 IP 단편화
IP 패킷이 MTU보다 클 경우, 데이터를 여러 개의 작은 패킷으로 나누어 전송하며, 이를 단편화라고 함
MTU (Maximum Transmission Unit): 최대 전송 단위(전송할 수 있는 패킷의 최대 크기)
전송하고자 하는 IP 패킷(IP 헤더와 페이로드)의 크기가 MTU라는 단위보다 클 경우에는 패킷을 MTU 이하의 여러 패킷으로 쪼개서 전송하고, 이렇게 쪼개서 전송된 패킷들은 수신지에서 재조합됨
일반적인 MTU 크기는 1500바이트
프레임에 실릴 수 있는 최대 데이터의 크기도 일반적으로 1500바이트인데, 따라서 MTU는 프레임을 통해 주고받을 수 있는 최대 페이로드의 크기라도 봐도 무방함
📌 IP 패킷 단편화 관련 필드

1️⃣ 식별자
- 특정 패킷이 어떤 데이터에서 쪼개진 패킷인지를 식별하기 위해 사용되는 필드
- 같은 정보에서 쪼개진 패킷들은 같은 식별자를 공유하기 때문에 식별자를 통해 단편화되어 전송되는 패킷을 구분할 수 있음
2️⃣ 플래그
- 3비트로 구성된 필드로, 첫 번째 비트를 제외한 나머지 2개의 비트는 각각 DF와 MF라는 이름이 붙어 있음
- 첫 번째 비트는 항상 0으로 설정되어 현대에 사용되지 않음
- DF는
IP 단편화를 수행하지 말라(Don't Fragment)는 표시를 남기기 위한 비트
- MF는
단편화된 패킷이 더 있다(More Fragments)는 표시를 남기기 위한 비트

3️⃣ 단편화 오프셋
- 특정 패킷이 초기 데이터에서 얼마나 떨어져 있는지가 명시된 필드
- 단편화되어 전송되는 패킷을 목적지에서 재조합하기 위해 패킷의 올바른 순서를 나타내는 데 사용
한 줄 요약
IP의 목적: 주소지정과 단편화
IP의 특징: 신뢰할 수 없고 비연결형 통신
IP 주소: IPv4는 32비트 주소, IPv6는 128비트 주소
라우터: IP 주소를 기반으로 최적의 경로로 패킷을 전달
IP 단편화: MTU를 초과하는 데이터를 여러 개의 작은 패킷으로 나누어 전송
신뢰할 수 없는 통신과 비연결형 통신
IP는 신뢰할 수 없는 프로토콜이자, 비연결형 프로토콜이라고 이야기함
이러한 IP의 특징은 전송 계층의 주요 프로토콜인 TCP와 UDP의 존재 목적과도 직결됨
📌 신뢰할 수 없는 프로토콜
: 패킷이 수신지까지 제대로 전송되었다고 보장하지 않는 프로토콜을 의미
- 패킷이 유실되거나 목적지에 순서대로 전송되지 않더라도 이에 대한 조치를 취하지 않는 것
신뢰할 수 없는 통신 또는 최선형 전달이라고 함
📌 비연결형 통신
- IP는 비연결형 프로토콜이기도 함. 이는 패킷을 주고받기 전에 사전 연결 과정을 거치지 않는다는 것을 의미
- 즉, 상대 호스트의 수신 가능 여부를 확인하지 않고, 그저 목적지로 패킷을 전송
- TCP와 같은 프로토콜은 패킷을 주고받기 전에 송수신지 간의 연결을 설정하여, 송수신 준비가 되었는지 확인할 수 있음
📌 실제 IP 패킷 예시

- Src, Dst 필드를 통해 송신지 IP 주소는 10.0.0.1이고, 수신지 IP 주소는 10.0.0.2임을 확인
- 식별자: 0x2c2e
- 단편화 오프셋: 0
- 플래그: MoreFragments 비트가 활성화되어 있어, 이 패킷 뒤에 또 다른 단편화된 패킷이 존재함을 알 수 있음

- 식별자: 0x2c2e
- 단편화 오프셋: 1480 (이 패킷은 앞서 살펴본 패킷과 같은 데이터를 단편화하여 보낸 것으로, 1480만큼 떨어진 데이터)
📌 IP 단편화 피하기 - 경로 MTU 발견
- IP 단편화 문제
- IP 단편화는 네트워크 성능에 악영향을 미침. 단편화된 패킷은 불필요한 트래픽 증가와 성능 저하를 초래함
- 경로 MTU (Path MTU)
- 경로 MTU는 단편화 없이 전송할 수 있는 최대 크기를 의미. 경로에 있는 모든 호스트의 처리 가능한 MTU 크기를 고려해야 함
- 경로 MTU 발견
- 경로 MTU 발견 기술은 경로 MTU를 구하고 그 크기만큼 패킷을 전송하여 IP 단편화를 피함. 현대 네트워크는 대부분 이를 지원하여 IP 단편화가 자주 발생하지 않음

IP 주소의 구조
📌 IP 주소 개념
- IP 주소는 네트워크 주소와 호스트 주소로 구성. IP 주소는 32비트로 구성되며, 0~255 범위의 10진수 4개로 표현.
- 네트워크 계층에서 LAN 간의 통신을 가능하게 하며, IP 주소를 기반으로 호스트를 특정함
📌 네트워크 주소와 호스트 주소
- 네트워크 주소는 네트워크 ID 또는 네트워크 식별자라고도 불리며, 해당 네트워크를 식별하는 데 사용
- 호스트 주소는 호스트 ID 또는 호스트 식별자라고 불리며, 네트워크 내 호스트를 특정하는 데 사용
📌 네트워크와 호스트 주소의 크기
- 하나의 IP 주소에서 네트워크 주소와 호스트 주소의 크기는 유동적일 수 있음
- 네트워크 주소의 공간을 작게, 호스트 주소의 공간을 크게 할 수도 있고, 반대로 네트워크 주소의 공간을 크게, 호스트 주소의 공간을 작게 할 수도 있음

(a)의 경우, 호스트 주소에 24비트를 사용하여 많은 호스트에 IP 주소를 할당할 수 있음
(c)의 경우, 호스트 주소에 8비트만 사용하여 상대적으로 적은 수의 호스트에 IP 주소를 할당할 수 있음
클래스풀 주소 체계
📌 네트워크와 호스트 주소 크기
- IP 주소에서 네트워크 주소와 호스트 주소의 크기는 상황에 따라 달라짐
- 호스트 주소의 공간을 너무 크면 IP 주소가 낭비되고, 너무 작으면 호스트에 필요한 IP 주소가 부족해질 수 있음. 이를 해결하기 위해 생겨난 개념이 IP 주소의 클래스
- 클래스: 네트워크의 크기에 따라 유형별로 IP 주소를 분류하는 기준
- 어떤 클래스에 속한 IP 주소인지를 알면 IP 주소에서 네트워크 부분과 호스트 부분이 어느 정도의 크기인지 알 수 있음
📌 클래스풀 주소 체계
- 네트워크 크기에 맞춰 IP 주소를
A, B, C, D, E 5개 클래스로 분류하는 방식
- 클래스
A, B, C 는 실제 네트워크 크기에 따라 사용되며, 클래스 D와 E는 멀티캐스트와 특수 목적을 위한 예약된 클래스

- A클래스: 비트 0 시작 / 1옥텟 구성 / 호스트 주소 3옥텟
- B클래스: 비트 10 시작 / 2옥텟 구성 / 호스트 주소 2옥텟
- C클래스: 비트 110 시작 / 3옥텟 구성 / 호스트 주소 1옥텟
클래스별 IP 주소 표현 가능 범위
- A클래스: 0.0.0.0 ~ 127.255.255.255
- B클래스: 128.0.0.0 ~ 191.255.255.255
- C클래스: 192.0.0.0 ~ 223.255.255.255
클래스별 IP 주소 표현의 가능 범위를 보면 알 수 있듯, 첫 옥텟 주소만 보고 어떤 클래스에 속한 IP 주소인지를 알 수 있음

📌 네트워크/브로드캐스트 주소 / 예약 주소
호스트 주소
- 0.0.0.0은 네트워크 주소, 255.255.255.255는 브로드캐스트 주소로 사용되어 호스트 주소로 사용되지 않음
예약 IP 주소
- 특정 용도로 예약된 IP 주소 범위:
- 0.0.0.0 ~ 255.255.255.255: '이 네트워크의 이 호스트' 지칭에 사용
- 127.0.0.0 ~ 127.255.255.255: 루프백 주소 (localhost)
- 10.0.0.0 ~ 10.255.255.255, 172.16.0.0 ~ 172.31.255.255, 192.168.0.0 ~ 192.168.255.255: 사설 네트워크 주소
루프백 주소: 자기 자신을 가리키는 특별한 주소. 가장 일반적으로 사용되는 '127.0.0.1'인 로컬호스트가 있음
브로드캐스트와 네트워크 주소는 특별한 용도로 예약된 주소이며, 예약 IP 주소는 네트워크 테스트나 사설 네트워크 주소로 사용
클래스리스 주소 체계(CIDR) / 서브넷 마스크
📌 클래스풀 주소 체계의 한계
- 클래스풀 주소 체계에서는 A, B, C 클래스의 네트워크 크기가 고정되어 있음
- A, B, C 클래스 → 8비트, 16비트, 24비트
- 이렇게 고정된 크기의 네트워크만 구성할 수 있어 IP 주소 낭비가 발생할 수 있음
- 예를 들어, A 클래스에서는 너무 많은 IP 주소가 할당되고, C 클래스에서는 IP 주소가 부족할 수 있음
📌 클래스리스 주소 체계
- 클래스풀 주소 체계의 문제를 해결하기 위해 클래스리스 주소 체계가 등장
- 클래스를 사용하지 않고 네트워크와 호스트를 구분
📌 서브넷 마스크
- IP 주소상에서 네트워크 주소를
1로, 호스트 주소를 0으로 표기한 비트열
- 서브네트워크: IP 주소에서 네트워크 주소로 구분할 수 있는 네트워크의 부분집합. 서브넷이라고도함
- 서브네팅: 서브넷 마스크를 이용해 원하는 크기로 클래스를 더 잘게 쪼개어 사용하는 것
A, B, C 클래스의 기본 서브넷 마스크 표기
- A 클래스: 255.0.0.0(11111111.00000000.00000000.00000000)
- B 클래스: 255.255.0.0(11111111.11111111.00000000.00000000)
- C 클래스: 255.255.255.0(11111111.11111111.11111111.00000000)
비트 AND 연산

예시로
IP 주소 192.168.200.102 와
서브넷 마스크 255.255.255.0 를
비트 AND 연산 수행 시 결과는 192.168.200.0이 되고, 네트워크 주소를 나타냄
📌 CIDR 표기법 - 서브넷 마스크 표기법
CIDR 표기법은 IP 주소/서브넷 마스크의 1의 개수로 서브넷 마스크를 간단히 표현하는 방식
- CIDR 표기법은 IP 주소와 서브넷 마스크를 간단하게 슬래시("/") 뒤에 1의 개수로 표시하는 방법
- 예를 들어,
192.168.20.3/30 은 서브넷 마스크에서 1이 30개 있음을 의미하고 255.255.255.252와 동일
- 이 표기법은 서브넷 마스크를 간단히 표현할 수 있어 많이 사용됨
공인 IP 주소와 사설 IP 주소
호스트의 IP 주소는 네트워크 설정이나 명령어를 통해 확인할 수 있고, 온라인 검색을 통해 확인할 수 있음
윈도우: ipconfig/all / 맥os, 리눅스: ifconfig
📌 공인 IP 주소
- 전 세계에서 고유한 주소로, 인터넷을 포함한 네트워크 간 통신에 사용
- 검색 사이트(구글, 네이버 등)에서 확인한 IP 주소가 공인 IP
- 공인 IP 주소는 ISP나 공인 IP 주소 할당 기관을 통해 할당받을 수 있음

📌 사설 IP 주소
- 사설 네트워크에서 사용하기 위한 IP 주소로, 외부 네트워크에 공개되지 않은 네트워크를 의미
- 대부분의 LAN 네트워크는 라우터(공유기)를 통해 사설 IP 주소를 할당
- 여러 네트워크에서 중복될 수 있음
- IP 주소 공간 중에서 사설 IP 주소로 사용하도록 특별히 예약된 IP 주소 공간이 있음
- 10.0.0.0/8: 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0/12: 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0/16: 192.168.0.0 ~ 192.168.255.255
IP 주소의 할당
호스트 IP 주소를 할당하는 방법으로 크게 두 가지 방법으로 할당할 수 있음
정적 할당
수작업으로 IP 주소를 부여하는 방식
- 정적 할당을 통해 할당된 IP 주소를 정적 IP 주소라고 함
- 운영체제를 막론하고
IP 주소, 서브넷 마스크, 게이트웨이(라우터) 주소, DNS 주소 등이 필요
- 게이트웨이: 일반적으로 서로 다른 네트워크를 연결하는 하드웨어적/소프트웨어적 수단을 의미
- 기본 게이트웨이: 호스트가 속한 네트워크의 외부로 나가기 위한 첫 기본 경로를 의미
- 네트워크 외부와 연결된 라우터(공유기)의 주소를 의미하는 경우가 많음
- 게이트웨이(라우터) 주소에는 기본 게이트웨이 역할을 하는 라우터(공유기)의 주소를 입력하면됨

- DNS 주소: 호스트가 도메인 네임을 토대로 IP 주소를 알아내기 위해 질의하는 서버의 주소를 의미
- IP 주소는 호스트끼리 패킷을 주고받을 때 사용되지만, 모든 호스트의 IP 주소를 기억하는 것은 어려운 일이기 때문에, 도메인 이름을 사용하여 호스트를 식별
- 예시: google.com, hanbit.co.kr, minchul.net
- DNS 서버: 도메인 이름과 IP 주소를 쌍으로 저장하고, 호스트가 도메인 이름을 통해 IP 주소를 알 수 있도록 해주는 서버

DNS 주소에 어떤 값을 입력할지 결정하기가 어렵다면 누구나 사용할 수 있도록 공개된 대표적인 네임 서버 주소인 8.8.8.8. 1.1.1.1 등을 입력하면됨
동적 할당: DHCP
프로토콜을 통해 자동으로 IP 주소를 부여하는 방식으로 동적 할당을 통해 할당된 IP 주소를 동적 IP 주소라고 함
- 동적 할당을 과정에서 가장 흔히 사용되는 프로토콜이 DHCP
- DHCP 서버는 호스트에 할당 가능한 IP 주소 목록을 관리하고, IP 주소 할당 요청을 받으면 주소를 할당
- 일반적으로 라우터(공유기)가 DHCP 서버 역할을 수행
동적 IP 주소의 특징
- 동적 IP 주소에는 사용 가능한 기간(임대 기간)이 정해져 있다.
- 동적 IP 주소는 할당받을 때마다 다른 주소를 받을 수 있다.
- 임대 기간이 끝난 IP 주소는 DHCP 서버로 반환되고, 새롭게 다른 주소를 할당받을 수 있음
- 임대 갱신: 기본적으로 임대 갱신은 자동으로 두 번 수행되며, 두 번 모두 실패하면 IP 주소가 반납됨
IP 전송 특징의 보완: ICMP
📌 신뢰할 수 없는 전송과 비연결형 전송
- IP는 신뢰할 수 없는 비연결형 프로토콜. 패킷 유실이나 순서 변경을 점검하지 않으며, 이는 성능상 장점이지만, 신뢰성과 연결 관리가 필요한 경우 보완이 필요함
📌 보완 방법
- 신뢰할 수 있는 연결형 통신을 지원하는 상위 계층의 프로토콜인 TCP를 사용하여 신뢰성 있는 연결형 통신을 보장
- 네트워크 계층의 ICMP를 사용하여 IP 전송의 상태를 확인하고 피드백을 제공

📌 ICMP 역할
- ICMP는 IP 패킷 전송 과정에 대한 피드백 메시지를 제공하는 프로토콜로, 전송 중 발생한 오류나 네트워크 정보를 전달


📌 ICMP를 사용하는 명령어
- ping: 네트워크 연결 상태를 점검하는 명령어로, ICMP를 기반으로 동작
- traceroute(Windows): 네트워크 경로를 확인하는 명령어로, ICMP를 사용하여 패킷 경로를 추적
요약
ICMP는 IP 전송의 신뢰성을 보완하는 프로토콜로, 전송 중 오류를 보고하거나 네트워크 상태를 제공
IP 주소와 MAC 주소의 대응: ARP
📌 ARP (Address Resolution Protocol)
IP 주소와 MAC 주소를 함께 활용하는 통신 과정에서 동일 네트워크 내에 있는 송수신 대상의 IP 주소를 통해 MAC 주소를 알아내는 프로토콜
- IP와 MAC 주소는 함께 사용되지만, IP 주소가 우선적으로 활용됨
- 이 때 상대 호스트의 IP 주소는 알지만 MAC 주소를 모를 수 있음. ARP는 이런 상황에서 사용
📌 ARP 동작 과정
IP 주소를 통해 모르는 MAC 주소를 알아내는 과정은 ARP 요청 메시지와 ARP 응답 메시지를 통해 이루어짐
ARP 요청 메시지: 브로드캐스트 메시지로, 네트워크 내 모든 호스트에게 "이 IP 주소에 대응하는 MAC 주소는 무엇인가요?"라고 묻는것과 같음
ARP 응답 메시지: 해당 IP 주소를 가진 호스트는 자신의 MAC 주소를 응답으로 보냄
📌 ARP 테이블
<IP 주소, MAC 주소>의 항목들로 구성된 표 형태의 정보
- ARP 테이블 항목은 일정 시간이 지나면 삭제되며, 임의로 삭제할 수도 있음
arp -a 명령어를 통해 확인할 수 있음
ARP는 IP 주소를 MAC 주소로 변환하는 프로토콜로, ARP 요청과 ARP 응답을 통해 IP 주소와 MAC 주소의 매핑을 얻고 이를 ARP 테이블에 저장함
참고: 북스터디 - 이것이 취업을 위한 컴퓨터 과학이다 (Chapter 5-3)