네트워크기초 · 18분 읽기

IPv4 헤더·서브넷 계산·조각화

IPv4의 모든 기본 헤더 필드를 읽고 CIDR·VLSM·요약을 계산한다. MTU를 넘은 패킷이 조각으로 나뉘는 과정과 각 Fragment Offset을 숫자로 추적한다.

개념부터 찾아보기

정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.

이 노트에서 설명할 수 있게 되는 것

  1. 프리픽스로 네트워크·호스트 범위를 계산한다.
  2. IPv4 헤더의 길이·TTL·조각화 정보를 읽는다.
  3. 주소 계획과 실제 다음 홉 선택을 연결한다.
먼저 알면 좋은 개념OSI 계층·TCP/IP와 홉별 캡슐화

01주소에는 경계가 필요하다

  • 주소는 32비트이며 네트워크 부분의 길이를 /24 같은 프리픽스로 표현한다. 주소만 보고 두 장비가 같은 네트워크라고 단정할 수 없다.
    • /24는 앞 24비트가 네트워크 부분이라는 뜻이며, 주소와 마스크를 비트 AND 하면 네트워크 주소를 얻는다.
  • 과거 A·B·C 클래스는 주소 체계를 이해하는 역사적 배경이다. 실제 경로를 해석할 때는 전달된 프리픽스를 사용한다.
    • 은 클래스 경계에 묶이지 않는 주소·경로 표현이고, 은 필요에 따라 서로 다른 길이의 을 사용하는 설계다.
    • 둘을 별도 주소 형식처럼 취급하지 않는다.

0232비트 주소와 마스크의 AND 연산

  • 192.0.2.130을 2진수로 쓰면 11000000.00000000.00000010.10000010이다. /26의 마스크는 255.255.255.192이며 마지막 옥텟은 11000000이다.
    • 두 값을 AND하면 마지막 옥텟이 10000000, 즉 128이 되어 네트워크 주소 192.0.2.128을 얻는다.
    • 마스크의 네트워크 비트는 앞에서부터 연속해야 하므로 255.0.255.0 같은 불연속 값을 일반 프리픽스로 해석할 수 없다.
  • 목적지가 같은 링크인지도 주소와 프리픽스에 근거해 결정된다. .130/26 단말이 .190으로 보낼 때는 직접 상대를 이웃 해석하지만 .200은 다른 /26이므로 적절한 라우트를 사용한다.
    • 기본 게이트웨이가 설정됐다는 사실만으로 모든 목적지를 그쪽에 보내는 것이 아니라, 먼저 목적지에 일치하는 경로 중 가장 긴 프리픽스를 선택한다.
    • 주소만 같고 마스크가 다르면 양쪽의 직접 전달 판단이 어긋날 수 있다.

03/26 계산을 따라가기

  • 문서용 대역 192.0.2.0/24를 /26으로 나누면 각 블록은 64개 주소를 갖는다. 경계는 마지막 옥텟의 0, 64, 128, 192이다.
    • 192.0.2.130/26은 192.0.2.128/26에 속하며 일반적인 브로드캐스트 에서 호스트 범위는 .129부터 .190, 브로드캐스트는 .191이다.
  • 일반적인 에서 호스트 수를 2의 호스트 비트 수 제곱에서 2를 빼서 계산하지만 예외가 있다. /31은 지원되는 점대점 링크에서 두 주소를 모두 종단 주소로 사용할 수 있고, /32는 단일 호스트 경로를 나타낸다.
    • 모든 프리픽스에 무조건 2를 빼면 잘못된 결과가 된다.

04서브넷 문제: /25를 네 개로 나누기

  • 192.0.2.0/25에는 128개 주소가 있다. 이를 같은 크기 네 개로 나누려면 네트워크 비트를 두 개 더 빌려 /27로 만든다.
    • /27의 블록 크기는 32이며 시작 주소는 .0, .32, .64, .96이다.
    • 두 번째 192.0.2.32/27의 일반 호스트 범위는 .33~.62, 브로드캐스트는 .63이다.
    • 시작한 /25의 범위 밖인 .128 이후까지 답에 포함하면 원래 조건을 잃은 계산이다.
  • 수는 추가로 빌린 비트 수 k에 대해 2^k, 주소 수는 남은 호스트 비트 h에 대해 2^h다. 일반 브로드캐스트 LAN의 사용 가능한 주소는 여기서 네트워크와 브로드캐스트 두 개를 제외한다.
    • /31 점대점과 /32 호스트 경로의 예외를 분리해야 한다.
    • 분할은 주소 설계이고 ·라우터·필터 같은 실제 전달 경계와 함께 구현해야 격리된다.

05VLSM 계획과 잘못된 범위 찾기

  • 하나의 문서용 /24를 /25와 /26 등으로 나눌 때 큰 블록부터 배치하고 경계가 정렬되는지 확인한다. 예를 들어 192.0.2.0/25는 .0~.127이며 192.0.2.128/26은 .128~.191이므로 겹치지 않는다.
    • .160을 /26의 새 네트워크 시작 주소로 고르면 실제 경계 .128과 충돌한다.
  • 각 에는 필요한 단말 수뿐 아니라 게이트웨이·관리 주소와 확장 여유가 들어간다. 주소 개수를 셀 때 /31 점대점과 /32 단일 호스트 같은 예외를 일반 LAN의 두 주소 제외 규칙과 구분한다.
    • 통신 문제에서는 계산만 맞는지 확인하는 데 그치지 않고 실제 적용된 프리픽스, 중복 주소, 기본 경로, 귀환 경로를 확인한다.
LEARN THROUGH PRACTICE

실습: /24 호스트 판단과 /25 인터페이스 설정 비교

마스크가 로컬·원격 판단을 바꾸는 이유를 show ip와 인터페이스 출력으로 계산한다.

실습 구성과 전제

  • 192.168.3.1/25 설정과 192.168.10.66/24 단말은 별도 사례다. 한 네트워크의 연속 실행으로 합치지 않는다.
  • 호스트와 라우터의 주소·마스크를 각각 기록한다.
  1. 호스트의 같은 네트워크 계산

    • 192.168.10.66/24를 AND하면 192.168.10.0이므로 .130도 같은 링크라고 판단한다. 물리적으로 라우터 너머라는 사실을 자동으로 알아내지는 못한다.
    • GATEWAY 0.0.0.0은 기본 게이트웨이가 설정되지 않은 상태다. 이 때문에 .130을 직접 하는 상황을 일반적인 기본 게이트웨이 동작과 구분한다.
    text
    PC1> show ip
    PC1> show arp

    실습 흐름을 재구성한 명령 예시. 장치·인터페이스 이름은 구성에 맞춰 사용한다.

    L3 · 실습·개념 참고 화면 7원본 크기로 보기 ↗
    • IP/MASK는 192.168.10.66/24다.
    • GATEWAY 0.0.0.0과 MTU 1500이 별도 항목으로 보인다.
    확인 기준

    PC가 .130의 MAC을 직접 찾는다면 /24 판단과 맞는다.

  2. 별도 /25 설정의 범위 계산

    • 255.255.255.128은 /25다. 192.168.3.1은 네트워크 .0, 호스트 .1~.126, 브로드캐스트 .127의 범위에 속한다.
    • ip address의 두 번째 값은 게이트웨이가 아닌 마스크다. no shutdown 뒤 LINK·LINEPROTO up은 원격 경로 성공까지 의미하지 않는다.
    text
    interface Ethernet2/0
     ip address 192.168.3.1 255.255.255.128
     no shutdown
    end
    show ip interface brief

    실제 설정에 맞춘 명령 정리

    L3 · 명령·상태 출력 1원본 크기로 보기 ↗
    • Ethernet2/0에 192.168.3.1 255.255.255.128이 설정된다.
    • no sh 뒤 LINK와 LINEPROTO의 up 메시지가 나타난다.
    확인 기준

    /25를 /24로 읽으면 범위가 두 배가 되어 설계와 달라진다.

  3. 로컬 판단의 패킷 결과 비교

    • .66↔.130 캡처에서 .66이 .130을 하고 라우터 쪽 MAC이 응답한다. 이는 Proxy 맥락으로 읽어야 한다.
    • Echo request의 64와 reply의 63은 반대 방향 패킷이다. 두 값만 빼서 한 요청의 홉 수를 확정하지 않는다.
    L3 · 실습·개념 참고 화면 4원본 크기로 보기 ↗
    • Who has 192.168.10.130? Tell 192.168.10.66이 보인다.
    • 이후 Echo request/reply에 TTL 64·63이 각각 나타난다.
    확인 기준

    감소는 같은 방향의 패킷을 다른 관측 지점에서 비교해야 입증된다.

실습에서 확인한 동작 원리

  • 주소 자체보다 마스크로 계산한 네트워크가 로컬 판단을 결정한다.
  • 인터페이스 up· 응답· 왕복은 서로 다른 성공 증거다.

설정·출력 추가로 확인하기 7장

아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.

실습 화면 묶음 01 1장
4/21 · 실습·개념 참고 화면 1원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. IPv4 헤더·서브넷 계산·조각화 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 02 3장
IPv4 헤더 · IP 헤더 (1)원본 크기로 보기 ↗
  • 수업 원본 자료 · IPv4 헤더와 서비스 관련 비트 필드. 원문에서 「IP 헤더」에 배치된 그림 또는 화면이다.
IPv4 헤더 · IP 헤더 (2)원본 크기로 보기 ↗
  • 수업 원본 자료 · IPv4 헤더와 서비스 관련 비트 필드. 원문에서 「IP 헤더」에 배치된 그림 또는 화면이다.
IPv4 헤더 · IP 헤더 (3)원본 크기로 보기 ↗
  • 수업 원본 자료 · IPv4 헤더와 서비스 관련 비트 필드. 원문에서 「IP 헤더」에 배치된 그림 또는 화면이다.
실습 화면 묶음 03 1장
IPv4·IPv6 듀얼 스택원본 크기로 보기 ↗
  • 수업 원본 자료 · 두 주소 체계를 함께 사용하는 구성.
실습 화면 묶음 04 2장
L3 · 실습·개념 참고 화면 5원본 크기로 보기 ↗
  • 「⑤ 라우터 → PC1 (Reply 최종 도착)」 문맥에 삽입된 원본 실습·개념 참고 화면이다. IPv4 헤더·서브넷 계산·조각화 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
L3 · 실습·개념 참고 화면 6원본 크기로 보기 ↗
  • 「⑤ 라우터 → PC1 (Reply 최종 도착)」 문맥에 삽입된 원본 실습·개념 참고 화면이다. IPv4 헤더·서브넷 계산·조각화 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
동작·명령 참고 문서

06CIDR 요약과 과도한 집계의 위험

  • 192.0.2.0/26과 192.0.2.64/26은 앞 25비트가 같고 정확히 192.0.2.0/25를 채운다. 반면 .64/26과 .128/26은 서로 붙어 보여도 같은 /25 경계에 속하지 않는다.
    • 둘을 덮는 더 짧은 프리픽스에는 사용하지 않는 영역까지 포함된다.
    • 요약은 단순히 십진수 주소가 연속하는가가 아니라 공통 선행 비트와 경계 정렬의 문제다.
  • 집계 경로는 개별 경로 수를 줄이고 일부 내부 변화를 외부에 숨길 수 있지만, 요약 범위의 일부에 실제 경로가 없으면 트래픽을 블랙홀로 만들 수 있다. 요약 지점에서 더 구체적인 경로와 폐기 경로를 어떻게 다룰지 설계하는 이유다.
    • 클래스 A/B/C의 기본 경계는 과거 classful 방식의 배경이며 현재 의 을 대체하지 않는다.

07기본 헤더 20바이트의 배치

  • Version은 4비트 값 4, 은 4비트의 32비트 워드 개수다. =5이면 20바이트, 최대 15이면 60바이트다.
    • 16비트는 IP 헤더와 데이터를 모두 포함하며 의 프리앰블·MAC 헤더·FCS를 포함하지 않는다.
    • 따라서 이 값에서 ×4를 빼면 IP 페이로드 길이가 나온다.
  • 16비트, Flags 3비트와 13비트는 조각화에 관련된다. 과 Protocol은 각각 8비트, 은 16비트, 출발지·목적지는 각각 32비트다.
    • Protocol 값 1·6·17은 ··를 의미한다.
    • 옵션이 있다면 뒤쪽에 추가되고 패딩으로 헤더 전체가 4바이트 배수에 맞는다.
    • 헤더 전체가 ‘4바이트’라는 뜻은 아니다.

설명과 함께 보는 보조 도식

구조 살펴보기

IPv4 기본 헤더의 관찰 묶음

옵션 없는 20바이트 헤더를 묶어서 읽는 도식이다.

앞쪽 · 옵션이 있으면 IHL에 따라 헤더가 길어진다.

뒤쪽 · Total Length는 헤더와 데이터의 합계다.

버전·길이·서비스 4 B

Version/IHL 1 B, DSCP/ECN 1 B, Total Length 2 B

조각화 4 B

Identification 2 B와 Flags/Fragment Offset 2 B

TTL·Protocol·검사 4 B

TTL 1 B, Protocol 1 B, Header Checksum 2 B

출발지 4 B

32비트 출발 주소

192.0.2.10

목적지 4 B

32비트 목적 주소

198.51.100.20

각 필드를 누르면 역할과 예시를 확인할 수 있습니다. 칸의 너비는 실제 바이트 비율과 다릅니다.

프로토콜 필드 모식도. 블록 너비는 실제 크기 비율과 다르다.

08DSCP·ECN·TTL·헤더 체크섬

  • 원래 ToS라고 부르던 바이트는 현재 6비트와 2비트로 해석한다. 는 서비스 분류 표시이며 BE·AF·EF 같은 코드 포인트를 정책에 연결할 수 있다.
    • EF 표시만 넣는다고 모든 경유 장비가 우선 전달을 보장하지 않는다.
    • 실제 큐·스케줄링·폴리싱과 도메인 간 재표시 정책이 동작을 결정한다.
  • 의 두 비트는 Not-ECT, ECT(0), ECT(1), CE를 구분한다. 을 사용하는 통신에서 장비는 혼잡을 패킷 폐기 대신 CE 표시로 알릴 수 있고 종단 전송 프로토콜이 그 신호에 반응해야 한다.
    • 과 의 ECE·CWR는 역할이 연결되지만 같은 필드가 아니다.
  • 은 루프가 무한히 이어지지 않게 제한하며 라우터를 통과할 때 감소한다. 전달할 수 없게 소진되면 일반적으로 Time Exceeded의 원인이 된다.
    • 은 헤더만 검사하므로 데이터 무결성을 대신하지 않는다.
    • 라우터가 을 바꾸면 체크섬도 갱신해야 한다.
    • ·의 체크섬은 별도 범위를 검사하며 CRC와 동일한 알고리즘도 아니다.
원리 심화

09헤더 체크섬의 1의 보수 계산과 증분 갱신

  • 체크섬은 옵션을 포함한 IP 헤더만 덮는다. 계산 시 체크섬 필드를 0으로 두고 16비트 단위로 더하며 16비트를 넘은 캐리를 하위 비트에 다시 더한다.
  • 송신자는 접힌 합을 비트 반전해 헤더에 저장한다. 수신자는 체크섬까지 포함한 1의 보수 합이 0xffff가 되는지를 검사하는 방법을 사용할 수 있다.
  • 과 Protocol은 연속한 두 8비트 필드다. =64, =6이면 이 16비트 값은 0x4006이고, 한 홉 감소 뒤 0x3f06이 된다.
  • 변경 전 체크섬 HC, 변경 전 워드 m, 새 워드 m′이면 HC′=~(~HC+~m+m′)를 1의 보수 덧셈으로 계산한다. RFC 1624의 식은 0의 두 표현에 의한 경계 오류도 처리한다.
  • 변화는 헤더 체크섬에 영향을 주지만 · 의사 헤더에는 이 없다. 주소 변환은 IP 체크섬과 전송 계층 의사 헤더 양쪽에 영향을 주므로 처리가 다르다.
예제로 추적

10TTL 64→63일 때 체크섬을 직접 갱신하기

  1. 다른 헤더 바이트는 고정이고 이전 체크섬 HC=0xb861, =64, Protocol=6인 유효 헤더를 가정한다. 전체 헤더를 다시 더하는 대신 변한 워드만 이용한다.
  2. ~HC=0x479e, m=0x4006, ~m=0xbff9, m′=0x3f06이다. 반전은 16비트 범위로 제한하며 일반 정수의 음수 연산으로 해석하지 않는다.
  3. 0x479e+0xbff9+0x3f06=0x1469d다. 상위 캐리 1을 하위 0x469d에 더하면 0x469e가 된다.
  4. 0x469e를 반전하면 HC′=0xb961이다. 이 예에서는 이 1 감소하면서 체크섬이 0x0100 증가했지만 일반 변경에는 전체 증분 식을 사용한다.
  5. 라우터 전후 캡처에서 주소·식별자·길이는 같고 과 체크섬만 이 값처럼 바뀌었다면 한 홉 전달과 일치한다. 옵션· 등 다른 변경이 있으면 그 필드도 계산에 포함한다.

11DF·MF·Fragment Offset이 조각을 설명한다

  • 는 Don't Fragment, 는 More Fragments다. =1인 패킷이 더 작은 때문에 전달될 수 없으면 라우터는 이를 조각내지 않고 폐기하며 조건이 허용하면 Fragmentation Needed를 보낸다.
    • =0이면 라우터가 필요에 따라 조각화할 수 있다.
    • 재조립은 일반적으로 최종 목적지에서 수행하며, 중간 라우터마다 합쳐 다시 나누는 구조가 아니다.
  • 은 원래 IP 페이로드의 시작에서 해당 조각이 떨어진 위치를 8바이트 단위로 표시한다. 마지막이 아닌 조각의 데이터 길이는 8바이트 배수여야 다음 조각의 위치를 표현할 수 있다.
    • 원래 같은 데이터그램에서 나온 조각은 관련 주소·프로토콜·으로 재조립 관계를 판단한다.
    • =0은 마지막 조각에서도, 애초에 조각나지 않은 패킷에서도 나타날 수 있으므로 Offset과 함께 읽는다.

12MTU 1500에서 4000바이트 패킷을 조각내기

  • 옵션 없는 헤더 20바이트와 데이터 3980바이트, 4000, =0이다. 조각당 최대 데이터는 1500−20=1480바이트이며 8의 배수다.
  • · 헤더는 원래 IP 페이로드 앞부분에 있어 일반적으로 첫 조각에만 들어간다. 뒤 조각의 포트를 직접 읽는 필터에는 한계가 있다.
  • 한 조각이라도 빠지면 재조립이 완성되지 않아 상위 프로토콜이 전체 데이터를 받지 못할 수 있다.
  1. 데이터 0~1479를 넣는다. Offset=0, =1, 전체 길이=1500이다.
  2. 데이터 1480~2959를 넣는다. Offset=1480÷8=185, =1, 전체 길이=1500이다.
  3. 남은 1020바이트를 넣는다. Offset=2960÷8=370, =0, 전체 길이=1040이다.
조각데이터 길이Offset
11480150001
2148015001851
3102010403700

13특수 주소를 정상 호스트 주소와 구별하기

  • 사설 주소는 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16이며 전역 유니캐스트 주소와 사용 범위가 다르다. 127.0.0.0/8은 루프백, 169.254.0.0/16은 링크 로컬에 관련된다.
    • 실패 시 보이는 링크 로컬 주소를 169.254.0.0/16 범위로 구분한다.
    • 0.0.0.0은 문맥에 따라 미지정 출발지 또는 기본 경로 표기에 쓰이며 일반 호스트에 배정하는 주소와 다르다.
  • 255.255.255.255는 제한 브로드캐스트이고 일반 라우터가 다른 링크로 전달하지 않는다. 특정 의 호스트 비트가 모두 1인 directed 는 별도 개념이며 전달 허용 여부가 정책에 좌우된다.
    • L3의 브로드캐스트 IP와 L2의 ff:ff:ff:ff:ff:ff는 계층이 다르다.
    • 이 문서 예시의 192.0.2.0/24·198.51.100.0/24·203.0.113.0/24는 문서용 대역이므로 실제 공인 인터넷 연결을 기대하지 않는다.

14헤더와 경로표를 한 사건으로 읽기

  • 주소 설정과 다음 홉 선택은 서로 다른 단계다. 목적지에 대한 라우트를 먼저 찾고, 그 결과 선택한 온링크 주소를 로 해결한다.
    • 패킷이 라우터를 지날 때 MAC 헤더는 바뀌어도 가 없다면 출발지·목적지 IP는 유지되고 이 감소한다.
  • 큰 패킷만 실패하면 프리픽스 계산보다 ·· 반환 경로가 더 관련될 수 있다. 아래 필터는 특정 조각화 사건을 모아 보는 용도다.
    • 하나의 Identifier가 영원히 유일하지 않으므로 주소·Protocol·시간 범위도 함께 제한해야 한다.
text
Wireshark 표시 필터:
ip.flags.mf == 1 || ip.frag_offset > 0
ip.flags.df == 1
icmp.type == 3 && icmp.code == 4

조회 예:
ip -4 addr show
ip -4 route get 198.51.100.20
show ip route 198.51.100.20

로컬 주소·경로 조회와 조각 관찰 예시. 명령은 플랫폼에 맞는 줄만 사용한다.

검증·예외

15단편 재조립의 식별자와 빠진 바이트 범위

  • 수신지는 출발지·목적지 주소, Protocol, 을 함께 사용해 같은 데이터그램의 단편을 묶는다. 숫자 하나만 같다고 같은 원본 패킷으로 합치지 않는다.
  • 값에 8을 곱하면 원래 IP 데이터 안에서의 시작 바이트다. 각 단편의 실제 데이터 길이는 −×4로 계산한다.
  • =0인 마지막 단편은 최종 데이터 끝을 알려 준다. 앞부분이 빠졌다면 마지막 단편을 받았어도 전체 데이터그램은 완성되지 않는다.
  • 데이터 구간 [0,1480), [2960,3980)만 보이면 중간 [1480,2960)이 비었다. 두 번째로 관측된 단편이 =0이어도 1480바이트의 공백 때문에 재조립할 수 없다.
  • 재조립 대기는 무한하지 않으며 타이머가 만료되면 불완전 데이터그램을 폐기한다. 단편 각각의 IP 체크섬이 정상이라는 사실은 모든 단편이 도착했다는 보장이 아니다.
학습 확인

이해했는지 확인하기

  • 주소와 프리픽스로 네트워크·호스트 범위를 계산할 수 있는가?
  • /31·/32를 일반 브로드캐스트 서브넷과 구분하는가?
  • 요약 경로가 포함하는 전체 범위에 도달 가능한가?

함께 확인할 공식 자료