IPv4 헤더 구조와 필드별 역할
IPv4 헤더의 필드 구조와 단편화, QoS, 라우팅, 보안 분석에서 각 필드가 맡는 역할을 정리한다.
2026-08-14 · 최초 발행 2025-07-16
IP 패킷은 데이터만 실어 나르지 않는다. 어느 프로토콜로 처리할지, 어디로 보낼지, 분할된 조각을 어떻게 다시 합칠지 같은 제어 정보가 헤더에 함께 들어 있다. IPv4 헤더를 읽을 수 있으면 패킷 캡처 결과와 라우팅·보안 문제를 해석하는 기준이 생긴다.
패킷 전달을 위한 IPv4 헤더의 구성
IPv4 헤더의 주요 필드는 다음과 같이 요약할 수 있다.
VHTT IFF TPC SD OP
각 문자는 Version, Header Length, Type of Service/DiffServ, Total Length, Identifier, Flags, Fragment Offset, Time to Live, Protocol, Checksum, Source Address, Destination Address, Options, Padding을 뜻한다.
헤더는 기본 헤더와 선택 필드로 나뉜다. 기본 헤더에는 전달과 재조립에 필요한 정보가 들어가고, Options와 Padding은 필요한 경우에만 뒤에 붙는다.
헤더 길이와 패킷 크기를 정하는 필드
Version (4비트)
Version은 패킷이 사용하는 IP 프로토콜 버전을 표시한다. IPv4에서는 값이 4이고 IPv6에서는 6이다. 네트워크 장비는 이 값을 기준으로 패킷 처리 방식을 정한다.
Header Length (4비트)
Header Length는 헤더 길이를 32비트 워드 단위로 기록한다. 최소값은 5이며, 이는 5 × 32비트 = 160비트 = 20바이트다. 최대값은 15이고 15 × 32비트 = 480비트 = 60바이트에 해당한다.
Options 필드의 존재 여부에 따라 실제 헤더 길이는 달라진다.
Total Length (16비트)
Total Length는 헤더와 데이터를 합친 IP 패킷 전체 길이를 바이트 단위로 나타낸다. 헤더만 있을 때 최소값은 20이며, 최대값은 65,535(2^16-1)다. 다만 실제 전송 가능한 크기는 MTU(Maximum Transmission Unit)의 영향을 받는다.
단편화와 재조립에 쓰이는 정보
Identifier (16비트)
Identifier는 분할된 패킷 조각을 구분하는 번호다. 하나의 원본 패킷에서 나뉜 조각은 같은 식별자를 가지며, 수신 측은 이를 이용해 조각들을 재조립한다.
Flags (3비트)
Flags는 단편화 처리 방식을 지정하는 제어 비트다. 첫 번째 비트는 예약되어 있고 항상 0이다.
두 번째 비트인 DF(Don't Fragment)는 패킷 분할 가능 여부를 나타낸다.
- 1: 패킷을 분할하지 말 것
- 0: 필요시 패킷 분할 가능
세 번째 비트인 MF(More Fragments)는 뒤따르는 조각의 존재를 표시한다.
- 1: 더 많은 조각이 있음
- 0: 마지막 조각
Fragment Offset (13비트)
Fragment Offset은 원본 패킷에서 해당 조각이 차지하던 위치를 8바이트 단위로 표시한다. 첫 조각의 오프셋은 0이며, 수신 장치는 이 값을 사용해 올바른 순서로 패킷을 조립한다.
최대값은 8,191(2^13-1)이고, 8바이트 단위를 적용하면 최대 65,528바이트 오프셋까지 표현할 수 있다.
경로와 상위 계층을 식별하는 필드
Time to Live (8비트)
TTL은 패킷이 네트워크에 머물 수 있는 최대 시간 또는 홉 수를 제한한다. 패킷은 라우터를 지날 때마다 1씩 감소하며, 0이 되면 폐기되고 ICMP 오류 메시지가 발신자에게 전송된다. 라우팅 루프로 패킷이 무한히 순환하는 상황을 막기 위한 장치다.
Protocol (8비트)
Protocol 필드는 IP 데이터 영역을 처리할 상위 계층 프로토콜을 지정한다. 대표적인 값은 다음과 같다.
- 1: ICMP
- 6: TCP
- 17: UDP
- 50: ESP(IPsec)
- 51: AH(IPsec)
Source Address (32비트)
Source Address는 패킷을 보낸 호스트의 IP 주소다. 4개의 8비트 옥텟으로 구성되며 192.168.1.1 같은 형태로 표현된다. 응답 패킷의 목적지 주소로 사용될 수 있고, NAT(Network Address Translation) 과정에서 바뀔 수 있다.
Destination Address (32비트)
Destination Address는 패킷의 최종 목적지 IP 주소다. 라우터는 이 주소를 기준으로 전달 경로를 선택한다. 목적지가 멀티캐스트 주소라면 여러 호스트가 패킷을 받을 수 있다.
무결성과 선택 기능을 다루는 필드
Type of Service/DiffServ (8비트)
이 필드는 처음에는 서비스 유형(ToS) 용도로 설계됐고, 현재는 주로 DiffServ(차별화된 서비스)에 사용된다. QoS(Quality of Service)를 구현하고 트래픽 우선순위를 부여하는 데 활용되며, 현대 네트워크에서는 DSCP(Differentiated Services Code Point) 값으로 쓰인다.
Header Checksum (16비트)
Header Checksum은 헤더의 무결성을 확인하는 오류 검출 코드다. 헤더 내용의 1의 보수 합계(one's complement sum)로 계산한다.
라우터를 지날 때 TTL이 바뀌므로 이 체크섬도 매번 다시 계산된다. 데이터 부분은 검사 대상이 아니며, 이는 상위 계층 프로토콜이 처리한다.
Options (가변, 최대 40바이트)
Options는 보안, 소스 라우팅, 타임스탬프처럼 특수 목적의 추가 기능을 제공한다. 이 필드를 사용하면 헤더 길이가 늘어나 처리 효율성은 감소한다. 현대 네트워크에서는 거의 사용되지 않는다.
Padding (가변)
Options가 존재할 때 헤더 전체 길이를 32비트의 배수로 맞추기 위해 0으로 채우는 영역이다. 데이터 정렬과 처리 효율성을 위한 필드다.
패킷 관찰과 네트워크 운영에서의 해석
패킷 분석 도구로 헤더를 확인하면 네트워크 현상을 필드 단위로 좁혀 볼 수 있다. 예를 들어 Wireshark 같은 도구에서 TTL 값이 예상보다 낮다면, 경로가 비정상적으로 길다는 신호일 수 있다.
MTU 문제도 헤더의 단편화 필드와 연결된다. 1500바이트 MTU 네트워크에서 4000바이트 패킷을 전송하면, 패킷은 Fragment Flags와 Fragment Offset을 바탕으로 여러 IP 패킷으로 분할되어 전송된다.
기업 네트워크는 VoIP 트래픽에 우선순위를 부여할 때 Type of Service/DiffServ 필드를 사용할 수 있다. 음성 패킷에는 높은 우선순위 값을, 일반 데이터에는 낮은 우선순위 값을 할당하는 방식이다.
보안 모니터링에서는 Source Address, Destination Address, Protocol 같은 필드가 비정상 트래픽을 찾는 단서가 된다. 내부에서 외부로 나가는 패킷의 Source Address가 내부 네트워크 범위에 속하지 않는다면 IP 스푸핑 공격을 의심할 수 있다. 라우터는 Destination Address를 기반으로 패킷을 전달하고, BGP와 같은 라우팅 프로토콜은 라우팅 테이블을 유지해 최적 경로를 결정한다.
IPv4 헤더가 남긴 제약
IPv4 헤더는 인터넷 데이터 통신의 기반으로 40년 이상 사용됐으며, 단순하면서도 확장 가능한 구조로 네트워크 진단과 문제 해결, 보안 관리에 필요한 정보를 제공한다.
반면 주소 공간은 32비트로 제한되고, 최소 20바이트인 헤더 오버헤드가 존재한다. QoS와 보안 기능도 설계 단계에서 충분히 고려되지 않았으며, Header Checksum 계산은 성능 저하 요인이 될 수 있다.
이 한계를 넘기 위해 IPv6가 개발됐다. IPv6는 128비트 주소 공간과 간소화된 헤더 구조, 향상된 보안 및 QoS 기능을 제공한다.