[L3] Internetworking Protocol(IP)

IP

  • Connectionless: 연결 관리 없음(순서 보장, 재전송, 흐름 제어 부재)
  • Best-Effort: 신뢰성 책임을 상위 계층(TCP 등)에 위임
  • 패킷=Datagram: 패킷 단위를 데이터그램이라 부름

IPv4 Header

  • IHL: 헤더길이이다. -> IP 헤더는 20-60바이트 사이의 길이를 가진다.
  • MTU에 의해 IP 데이터그램 크기가 제한된다.
    • Transport 계층이 IP에 내려준 데이터크기 + IP 헤더크기 > MTU 일 경우 분할(fragment)함.
    • 인터넷 중간의 라우터에서도 위 조건이면 분할
  • Identification: IP주소쌍(A, B)에 대해 매 IP 데이터그램 당 1씩 증가 -> 만약 11888일 경우 다음 데이터그램은 11889
  • reassembly시 같은 IP 데이터그램에 속했던 fragment만을 모으기 위해 쓰인다.

 

Fragmentation & Reassembly

  • More Fragment(MF): 다음 fragment 존재 여부
  • Don't Fragment(DF): Transport 계층이 fragmentation 금지했는지 여부

  • Fragment offset: 분할 이전 IP 페이로드에 위치 (8바이트 단위)

 

 

 

TTL

  • Time to Death: 라우팅 loop로 배달이 안되는 경우 사용되는 자폭 매커니즘

 

  • Protocol: 출발지에서 IP 페이로드를 실은 transport 프로토콜 번호
  • IP 데이터그램이 목적지에 도착 후 IP 페이로드를 받아줄 transport 프로토콜 번호 (TCP=6, UDP=17 ...)

 

 

Checksum 메커니즘

  • 1’s complement of 1’s complement sum 사용
  • 오늘날 NIC 오프로딩 가능, CPU 부하 최소화.

 

 

 

 

Option Field

  • 최대 40바이트
  • 사용하는 옵션 희귀 -> 해킹의 우려로 라우터가 대부분 불허(Drop)
  • 예외적으로 Router Alert, Loose Source Routing 등만 제한적 허용.

Loose source routhing(LSR)

IP 옵션이 해킹에 쓰일 수 있는 예시

 

옵션 코드 Type 131 (Loose Source & Record Route)
의미 송신자가 “이 IP들을 거쳐 가라”는 라우터 리스트를 헤더 옵션에 삽입. 라우터는 자신의 주소를 리스트에 기록하며 다음 주소로 포워딩한다.
패킷 구조 Type(1B) 
  - IHL = 8 (32 B) → 옵션 12 B 포함
- TTL = 1 → 첫 라우터에서 ICMP Time‑Exceeded 유도 (traceroute ‑j)
- Current Route = 163.152.1.1
- Route List = 151.101.229.67 (다음 홉)

 

  1. 방화벽·ACL 우회: 지정한 경유지 중 일부가 내부망이면, 외부 공격자가 내부 주소를 리스트에 넣어 우회 터널을 만들 수 있다.
  2. IP 스푸핑 지원: 출발지 주소를 신뢰구간 내부 IP로 위조 + LSR로 응답 경로 강제 → 필터를 속여 세션 하이재킹 가능.
  3. 트래픽 리다이렉션: 라우팅 테이블 무시 → 패킷을 공격자 통제 노드로 보내 패킷 캡처·변조 수행.
  4. DoS 증폭: Reflection/Amplification 공격 경로를 교묘히 만들어 필터링 회피.

조치사항

  • Ingress / Egress 필터에서 IP Options 포함 패킷 전면 거부.
  • IDS/IPS 규칙에 ip[0] & 0x1F != 0x04 검사(옵션 유무) 추가.
  • 외부 노출 시스템에서 sysctl ‑w net.ipv4.conf.all.accept_source_route=0 확인.

IP 포워딩

라우팅 테이블 구조

  • 목적지 프리픽스($d_r$)
  • 네트워크 마스크(m)
  • 게이트웨이(다음 홉 주소)
  • 출력 인터페이스
  • 엔트리 우선순위(메트릭)

포워딩

  • 입력: IP 데이터그램 목적지 IP주소 ($d_p$)
  • 매칭: $d_r$ == ($d_p$)?
  • 출력: 출력 인터페이스, 다음 홉 IP주소(공유형 링크에서 필요)
  • Longest‑Prefix‑Match 우선, 동점 시 메트릭으로 결정
  • Default route(0.0.0.0/0)는 반드시 존재.

라우팅 테이블 조작

  • route add/change/delete/print
  • 변경 전 테스트 환경에서 검증 필수 (블랙홀 위험)

 

 

IPv6 Header

 

  • Version: 6
  • Traffic class, flow label: QoS 관련 필드 -> 결국 또 안 쓰임
  • Payload Length: 이전 total length와 비슷 -> 헤더 길이 고정으로 payload 길이만 필요
  • Hop Limit: IPv4에서의 TTL

Extension Header

  • 옵션, 라우팅, IPSec 등 payload 영역에 체인연결
  • Routing, Fragment, Auth, ESP 등 모듈화 -> Header 40바이트로 고정 

 

Fragmentation 정책

  • 원칙적으로 분할 비권장
  • MTU 1280 B 이상 경로 보장(PMTU 문제 완화)

 

ref. Next Header 값

 

IPv6 Fragmentation 일어나지 않게 하려면 -> IPv6 데이터그램 크기가 1280바이트 이하

'Computer Science > Network' 카테고리의 다른 글

[L7] Border Gateway Protocol (BGP)  (1) 2025.04.17
[L3] IP Address system  (0) 2025.04.17
[L2] ARP  (0) 2025.04.16