[컴퓨터네트워크] Network Layer: Data transfer | IPv4 datagram, Fragmentation, ICMP, Mobile IP, IPv6

네트워크 계층, 호스트 사이의 길찾기

우리가 인터넷을 사용할 때, 데이터는 마치 여기저기 순간이동을 하는 것처럼 느껴진다. 하지만 그 이면에는 수많은 라우터를 거치며 목적지를 찾아가는 치열한 여정이 있다.

컴퓨터 구조와 운영체제를 공부하며 하드웨어에 가까운 로우 레벨을 다뤘다면, 네트워크 계층(Network Layer)은 그 하드웨어들 사이의 '길'을 만드는 단계다. 이번에 네트워크 스택을 깊게 파보면서 흥미로웠던 점은 인터넷의 근간인 IP(Internet Protocol)가 신뢰할 수 없는(Unreliable) 프로토콜이라는 점, 그리고 이 불안정한 기반 위에서 주소 체계가 어떻게 진화해왔는지였다.

오늘은 네트워크 계층의 핵심인 IPv4의 구조와 주소 체계(Addressing), 네트워크 성능 측정, 그리고 차세대 프로토콜인 IPv6와 Mobile IP까지 폭넓게 정리해 보고자 한다.


1. 네트워크 계층의 존재 이유: 패킷화와 전달

네트워크 계층의 역할은 아주 명확하다. 출발지 호스트에서 목적지 호스트까지 데이터를 안전하게 운반하는 것. 이 과정에는 경로상의 모든 라우터가 관여한다.

Host to Host

1.1 캡슐화와 역캡슐화의 철칙

데이터를 운반하기 위해선 '포장'이 필요하다.

  • 송신: 상위 계층에서 내려온 데이터(Payload)에 헤더를 붙여 패킷을 만든다. (캡슐화)

  • 수신: 목적지에 도착하면 헤더를 떼고 데이터만 상위 계층으로 올린다. (역캡슐화)

여기서 중요한 원칙이 하나 있다. "페이로드는 건드리지 않는다." 출발지는 패킷이 너무 커서 쪼개야 하는 경우(나중에 나올 단편화 개념)가 아니라면 페이로드를 변경할 수 없다. 라우터 역시 단편화가 필요 없는 한, 패킷을 역캡슐화하여 내부 데이터를 들여다보지 않는다. 오직 헤더만 보고 길을 찾는다.

Packet used in the IP


2. 길을 찾는 방법: 라우팅과 포워딩

패킷을 목적지까지 보내는 과정은 크게 두 가지 개념으로 나뉜다.

  1. 라우팅 (Routing): 전체 지도에서 경로를 짜는 것. 출발지에서 목적지까지 가는 최적의 경로를 계산하는 작업이다.

  2. 포워딩 (Forwarding): 갈림길에서 방향을 트는 것. 패킷이 라우터에 도착했을 때, 포워딩 테이블(Forwarding Table)을 보고 적절한 인터페이스로 내보내는 실제 동작이다.


2.1 커넥션리스(Connectionless)와 Best Effort

인터넷은 복잡성을 줄이기 위해 커넥션리스 서비스를 지향한다. 라우터는 오직 '목적지 주소'만 보고 판단하며, 각 패킷은 독립적으로 처리된다. 이로 인해 IPv4는 최선 노력 전달 서비스(Best Effort Delivery Service)라고 불린다. "최선을 다해 배달해 볼게. 하지만 책임은 못 져."라는 뜻이다.

Conectionless Service

2.2 가장 긴 마스크 일치 (Longest Mask Matching)

라우터가 포워딩 결정을 내릴 때 사용하는 핵심 원칙이다. 포워딩 테이블에는 여러 네트워크 주소와 마스크가 존재하는데, 목적지 주소와 비교했을 때 가장 긴 접두사(Prefix)가 일치하는 항목을 최우선으로 선택하여 패킷을 보낸다. 이를 위해 테이블은 긴 접두사를 가진 항목이 먼저 오도록 정렬되는 것이 일반적이다. (더 구체적인 주소를 우선시함)

Longest Mask Matching



3. IPv4 데이터그램 해부: 헤더에는 무엇이 들어있나?

IP 패킷은 '데이터그램(Datagram)'이라고 부른다. 헤더는 보통 20~60바이트이며, 데이터 전송에 필수적인 정보들이 꽉 채워져 있다.

IPv4 Datagram Format

필드명

설명

VER (Version)

IP 프로토콜 버전. IPv4이므로 값은 4.

HLEN (Header Length)

헤더 길이를 4바이트 단위로 표시.

Total Length

헤더 + 데이터를 합친 전체 길이 (최대 65,535바이트).

TTL (Time-to-live)

패킷의 수명. 라우터를 지날 때마다 1씩 감소하며, 0이 되면 폐기된다. (무한 루프 방지)

Protocol

상위 계층 프로토콜 정의 (TCP: 6, UDP: 17, ICMP: 1 등).

Header Checksum

헤더의 오류만 검사한다. TTL이 변하므로 라우터마다 재계산해야 한다.

Source/Dest IP

출발지와 목적지의 32비트 IP 주소.




4. 덩치가 너무 크면 쪼갠다: 단편화(Fragmentation)

네트워크마다 한 번에 보낼 수 있는 최대 크기, 즉 MTU (Maximum Transfer Unit)가 다르다. 만약 패킷이 MTU보다 크다면? 쪼개야 한다. (라우터에 따라 여러번 쪼개질수도 있다)

4.1 단편화의 원칙

  • 어디서? 출발지 호스트나 경로상의 라우터 어디서든 쪼갤 수 있다.

  • 재조립은? 오직 목적지 호스트에서만 한다. (중간 라우터가 재조립까지 하기엔 너무 바쁘다.)

Fragmentation

4.2 단편화 관련 헤더 필드

단편화가 발생하면 헤더의 세 가지 필드가 결정적인 역할을 한다.

  1. Identification (식별자, 16 bits):

    • "우리는 원래 한 몸이었어"를 표시하는 주민등록번호 같은 것이다.

    • 단편화된 모든 조각에는 원본 데이터그램과 동일한 ID가 복사되어, 수신 측에서 이를 보고 같은 그룹임을 식별한다.

  2. Flags (3 bits): 단편화의 상태를 제어하는 신호등이다.

    • 첫 번째 비트: 예약됨 (사용 안 함).

    • D bit (Do Not Fragment): "나를 쪼개지 마라". 이 비트가 1로 설정되어 있는데 패킷 크기가 MTU보다 크다면? 라우터는 패킷을 폐기(Discard)하고 송신자에게 ICMP 에러 메시지를 보낸다. (주로 경로 MTU 발견에 쓰인다.)

    • M bit (More Fragment): "뒤에 조각 더 있어".

      • M=1: 뒤에 이어지는 조각이 더 있음.

      • M=0: 내가 마지막 조각임 (혹은 단편화되지 않은 유일한 패킷임).

  3. Fragmentation Offset (13 bits): 조각 맞추기의 핵심 힌트다.

    • 전체 원본 데이터에서 이 조각이 어디쯤 위치하는지를 나타낸다.

    • 중요한 점: 오프셋 값은 8바이트 단위로 기록된다. 13비트로는 최대 65,535바이트를 다 표현할 수 없기 때문이다.

    • 계산 공식: 실제 시작 바이트 번호 = Offset 값 × 8

    • 예를 들어 Offset 값이 100이라면, 이 조각은 원본 데이터의 800번째 바이트부터 시작되는 내용이라는 뜻이다.

Fragmentation offset


5. IP 주소 체계: 인터넷의 주소록

IPv4 주소는 32비트로 구성되며, 총 주소 공간은 $2^{32}$약 43억 개이다. 이 한정된 자원을 어떻게 효율적으로 나눠 쓸 것인가가 IP 주소 할당의 역사다.

5.1 Classful Addressing (과거의 유산)

초기에는 주소를 A, B, C 등 고정 길이 접두사(Prefix)를 가진 클래스로 나눴다.

  • Class A (8비트 접두사): 너무 크다. 전 세계 128개 조직만 가질 수 있다.

  • Class C (24비트 접두사): 너무 작다. 고작 256개 호스트만 연결 가능하다. 이러한 불균형한 분배는 주소 고갈(Address Depletion) 문제를 가속화시켰다.

Classful Addressing

5.2 Classless Addressing (CIDR)

주소 낭비를 막기 위해 CIDR (Classless Inter-Domain Routing)이 등장했다. 클래스 구분 없이 /n (슬래시 표기법)을 사용하여 네트워크 접두어 길이를 0~32 사이에서 유동적으로 조절한다.

  • 블록 크기: $N = 2^{32-n}$.

  • 네트워크 주소: $n$개의 왼쪽 비트를 유지하고 나머지를 0으로 채운 첫 번째 주소.

  • 주소 마스크(Address Mask): $n$개의 왼쪽 비트가 1인 32비트 숫자. 주소와 마스크를 AND 연산하면 블록의 시작 주소를 알 수 있다.



5.3 서브네팅과 주소 집합 (Aggregation)

  • 서브네팅(Subnetting): 큰 네트워크를 더 긴 접두사를 가진 여러 작은 서브넷으로 쪼개는 기술이다. 각 서브넷의 크기($N_{sub}$)는 반드시 2의 거듭제곱이어야 한다.

Subnetting

  • 주소 집합(Address Aggregation): 반대로 여러 작은 블록을 하나의 큰 블록으로 뭉쳐서 광고하는 것이다. 이를 경로 요약(Route Summarization)이라고도 하며, 라우팅 테이블의 크기를 획기적으로 줄여준다. 이를 통해 '인터넷-백본 ISP-로컬 ISP'로 이어지는 계층적 라우팅(Hierarchical Routing)이 가능해진다.

Address Aggregation

5.4 NAT (Network Address Translation)

사설 IP(Private IP)를 공인 IP(Global IP)로 변환해주는 기술이다. 사설망 내부의 여러 장치가 하나의 공인 IP를 공유하여 외부와 통신할 수 있게 해주어 IPv4 주소 부족 문제를 완화하는 데 큰 기여를 했다.



6. 네트워크 성능: 지연(Delay)의 해부

네트워크 계층의 성능은 주로 지연(Delay)처리량(Throughput)으로 평가된다. 데이터가 늦게 도착하는 이유는 크게 세 가지다.

  1. 전파 지연(Propagation Delay): 비트가 물리적인 전선(매체)을 타고 이동하는 시간.

    $$Delay_{pg} = \frac{\text{Distance}}{\text{Propagation Speed}}$$
  2. 처리 지연(Processing Delay): 라우터가 패킷 헤더를 까보고, 에러를 체크하고, 어디로 보낼지 결정하는 시간.

  3. 큐잉 지연(Queuing Delay): 라우터가 바빠서 패킷이 큐(대기열)에서 기다리는 시간.

전체 경로에 $n$개의 라우터가 있다면 총 지연은 대략 다음과 같다:

$$Total Delay = (n+1)(Delay_{tr} + Delay_{pg} + Delay_{pr}) + (n)(Delay_{qu})$$

($Delay_{tr}$은 전송 지연)



7. 진화하는 네트워크: ICMPv4, Mobile IP와 IPv6

"배달이 실패하면 반송 사유를 알려줘야 하지 않을까?" (ICMP) "내가 이사를 가도 택배는 알아서 새 주소로 와야 하지 않을까?" (Mobile IP) "전 세계 인구가 늘어나는데 주소가 동나면 어떡하지?" (IPv6)

이러한 고민들은 네트워크 계층을 한 단계 더 진화시켰다. 이번 섹터에서는 IP 프로토콜의 부족한 점을 채워주는 ICMP와 이동성을 보장하는 Mobile IP, 그리고 차세대 인터넷의 표준인 IPv6에 대해 깊이 있게 파헤쳐본다.

7.1 ICMP (Internet Control Message Protocol): IP 감시

IP 프로토콜은 신뢰성이 없고(Unreliable), 오류 보고 기능조차 없다. 패킷이 라우터에서 폐기되어도 송신자는 그 사실을 모른다. 이 결함을 메우기 위해 탄생한 것이 바로 ICMP다.

ICMP는 네트워크 계층 프로토콜이지만, 데이터 링크 계층으로 바로 내려가지 않고 IP 데이터그램 안에 캡슐화되어 전송된다.

7.1.1 오류 보고 메시지 (Error Reporting Messages)

ICMP는 오류를 수정하진 않지만, "무슨 문제가 생겼다"고 송신자에게 보고는 해준다. 오류 메시지는 항상 최초의 출발지(Source)로 보내진다.

  • Destination Unreachable (Type 3): 라우터가 패킷을 전달할 경로를 못 찾거나, 호스트가 해당 포트를 열어두지 않았을 때 발생한다.

  • Source Quench (Type 4): (현재는 잘 안 쓰이지만) 망이 혼잡하니(Congestion) 천천히 보내라는 신호다.

  • Time Exceeded (Type 11):

    • TTL이 0이 되어 패킷이 폐기되었을 때 (무한 루프 방지).

    • 단편화된 패킷 조각들이 제한 시간 내에 모두 도착하지 못했을 때.

  • Redirection (Type 5): "나보다 저쪽 라우터가 더 지름길이야"라고 호스트에게 경로를 수정해 줄 때 쓴다.

핵심 규칙: ICMP 오류 메시지에 대한 오류 메시지는 생성하지 않는다. (무한 에러 루프를 방지하기 위함이다.)

 

7.1.2 질의 메시지 (Query Messages)

네트워크의 상태를 진단하거나 정보를 얻기 위해 사용된다.

  • Echo Request & Reply (Type 8 & 0): 우리가 네트워크 연결을 확인할 때 습관적으로 쓰는 ping 명령어가 바로 이 메시지를 사용한다.

  • Timestamp Request & Reply: 두 장비 간의 왕복 시간(RTT)을 측정하거나 시계 동기화를 위해 사용된다.



7.2 Mobile IP: 이동성의 보장

IP 주소는 '위치'를 나타낸다. 따라서 내가 노트북을 들고 서울에서 부산으로 이동하면, 네트워크가 바뀌므로 IP 주소도 바뀌어야 한다. 하지만 IP가 바뀌면 다운로드 중이던 파일이나 스트리밍 연결은 끊어진다. Mobile IP는 이동 중에도 연결을 유지하기 위한 기술이다.

7.2.1 두 개의 주소: 집 주소와 여행지 주소

Mobile IP는 호스트에게 두 개의 IP를 부여한다.

  1. 홈 주소 (Home Address): 변하지 않는 나의 고정 주소.

  2. 임시 주소 (Care-of Address, CoA): 현재 방문한 네트워크에서 빌린 임시 주소.

7.2.2 에이전트(Agent)와 삼각 라우팅 (Triangle Routing)

이 시스템이 돌아가려면 도와주는 조력자(Agent)들이 필요하다.

  • 홈 에이전트 (Home Agent, HA): 내 원래 네트워크(Home Network)에 있는 라우터다. 나에게 오는 우편물을 대신 받아서 내가 있는 곳으로 전달해준다.

  • 외국 에이전트 (Foreign Agent, FA): 내가 방문한 네트워크(Foreign Network)의 라우터다. HA가 보낸 패킷을 받아서 나에게 전달해준다.

Agents

[데이터 전송 과정]

  1. 상대방(Remote Host) $\rightarrow$ 나: 상대방은 내 위치를 모르니 내 '홈 주소'로 패킷을 보낸다.

  2. HA의 가로채기: HA가 이 패킷을 가로채서, 내가 있는 곳의 '임시 주소(CoA)'로 터널링(캡슐화)하여 보낸다.

  3. FA의 전달: FA가 캡슐을 벗겨서 나(Mobile Host)에게 전달한다.

  4. $\rightarrow$ 상대방: 보낼 때는 굳이 HA를 거칠 필요가 없다. 그냥 상대방에게 직접 보낸다.

이 과정에서 패킷의 경로가 상대방 -> HA -> 나 -> 상대방으로 삼각형을 그리게 되는데, 이를 삼각형 라우팅(Triangle Routing)이라 한다. 비효율적일 수 있지만 이동성을 보장하는 핵심 메커니즘이다.

Triangle Routing



7.3 IPv6: 차세대 인터넷 프로토콜

IPv4의 43억 개 주소는 이미 고갈되었다. NAT 등으로 버텨왔지만, IoT(사물인터넷) 시대를 맞아 근본적인 해결책인 IPv6가 등장했다.

IPv6 packet format

7.3.1 IPv6의 혁신적인 변화

  1. 광활한 주소 공간: 32비트에서 128비트로 확장되었다. ($2^{128}$개). 지구상의 모래알 하나하나에 IP를 부여해도 남을 정도다.

  2. 헤더의 단순화: 가변 길이였던 IPv4 헤더와 달리, 40바이트 고정 길이를 사용한다. 라우터가 처리하기 훨씬 수월해졌다.

  3. Checksum 제거: 데이터 링크 계층이나 전송 계층(TCP/UDP)에서 이미 오류 검사를 하므로, 속도를 위해 과감히 뺐다.

  4. 단편화 금지: 라우터는 더 이상 패킷을 쪼개지 않는다. 너무 크면 그냥 버리고 "너무 커(Packet Too Big)"라는 ICMPv6 메시지를 보낸다. 단편화는 오직 송신자만 할 수 있다.

7.3.2 IPv6 주소의 종류

  • 유니캐스트 (Unicast): 1:1 통신. 특정 인터페이스 하나를 지칭한다.

  • 애니캐스트 (Anycast): 같은 주소를 가진 그룹 중, 라우팅 비용이 가장 적은(가장 가까운) 하나의 인터페이스로 전달된다.

  • 멀티캐스트 (Multicast): 1:N 통신. 그룹에 속한 모든 멤버에게 전송된다. (IPv4의 브로드캐스트를 대체한다.)

7.3.3 IPv6의 슈퍼히어로: ICMPv6

IPv6로 넘어오면서 ICMP의 역할은 더욱 막강해졌다. IPv4에서는 흩어져 있던 기능들(오류 보고, ARP, IGMP)이 ICMPv6 하나로 통합되었기 때문이다.

통합된 프로토콜 (ARP + IGMP + ICMP = ICMPv6)
  • ARP 삭제: IPv4에서 MAC 주소를 알아내기 위해 쓰던 ARP가 사라졌다. 대신 ICMPv6의 Neighbor Discovery(ND)가 그 역할을 수행한다.

  • IGMP 삭제: 멀티캐스트 그룹 관리를 하던 IGMP 기능이 ICMPv6의 MLD (Multicast Listener Discovery) 메시지로 통합되었다.

ICMPv6


새로운 핵심 메시지들
  1. Packet Too Big (Error Message):

    • IPv6 라우터는 단편화(Fragmentation)를 하지 않는다. 패킷이 MTU보다 크면 그냥 버린다.

    • 이때 라우터는 송신자에게 "패킷이 너무 커. MTU는 이만큼이야."라고 알려주는데, 이것이 바로 Packet Too Big 메시지다. 송신자는 이를 통해 경로 MTU를 파악(PMTU Discovery)하고 스스로 패킷을 쪼개서 보낸다.

  2. Neighbor Discovery (ND Protocol):

    • Router Solicitation (RS) / Advertisement (RA): "여기 라우터 있나요?" / "나 여기 있어, 주소 정보는 이거야." (라우터 찾기)

    • Neighbor Solicitation (NS) / Advertisement (NA): "이 IP 가진 기기, MAC 주소가 뭐야?" / "접니다. 제 MAC 주소는..." (ARP 대체)

  3. Group membership messages (MLD Protocol): 

    • Membership-Query message: "이 네트워크에 특정 멀티캐스트 그룹의 멤버가 있나요?" (그룹 멤버십을 확인)

    • Membership-Report message: "네, 제가 그 그룹의 멤버입니다." (IGMP 대체)


7.3.4 IPv4에서 IPv6로의 전환 전략

하루아침에 전 세계 장비를 바꿀 순 없다. 따라서 과도기적인 기술들이 사용된다.

  1. 듀얼 스택 (Dual Stack): 라우터나 호스트가 IPv4와 IPv6 프로토콜 스택을 모두 가지고 있는 것이다. 상황에 맞춰 골라 쓴다.

    Dual Stack

  2. 터널링 (Tunneling): IPv6 패킷이 IPv4 네트워크를 지나가야 할 때, IPv6 패킷을 IPv4 패킷 데이터 안에 숨겨서(캡슐화) 건너가는 방식이다.

    Tunneling

  3. 헤더 변환 (Header Translation): IPv6 패킷의 헤더를 아예 IPv4 헤더로 변환해버리는 방식이다. (NAT-PT 기술 등)

    Header Translation



마무리

네트워크 계층을 정리하며 느낀 점은, 이 시스템이 완벽함을 포기하는 대신 효율성과 확장성을 택했다는 것이다. 라우터는 복잡한 오류 제어를 하지 않고 오직 '전달'에만 집중한다.

IPv4의 한계를 극복하기 위해 서브네팅, NAT, 그리고 ICMP, IPv6와 Mobile IP까지 기술이 덧대어지고 진화해 온 과정을 이해할 수 있었다. 다음 포스팅에서는 라우팅에 대해 더 구체적으로 알아보고자 한다.

추천글

[컴퓨터 네트워크] 데이터 통신의 기본 요소와 TCP/IP 5계층

[컴퓨터 네트워크] Data-link layer | Frameing, Error Control methods, MAC Protocols

[컴퓨터 네트워크] Physical Layer | 데이터 전송 속도의 한계, 아날로그의 디지털화 & 디지털의 아날로그화

[컴퓨터네트워크] WAN | Cellular System, Satellite Networks


hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2