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 (다음 홉) |
- 방화벽·ACL 우회: 지정한 경유지 중 일부가 내부망이면, 외부 공격자가 내부 주소를 리스트에 넣어 우회 터널을 만들 수 있다.
- IP 스푸핑 지원: 출발지 주소를 신뢰구간 내부 IP로 위조 + LSR로 응답 경로 강제 → 필터를 속여 세션 하이재킹 가능.
- 트래픽 리다이렉션: 라우팅 테이블 무시 → 패킷을 공격자 통제 노드로 보내 패킷 캡처·변조 수행.
- 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 |