핵심 인사이트 (3줄 요약)

  1. 본질: APIPA(Automatic Private IP Addressing) 또는 링크 로컬(Link-local) 주소는, 컴퓨터가 DHCP 서버(공유기 등)로부터 IP를 받아오지 못했을 때 운영체제가 "인터넷은 포기하더라도, 나랑 같은 선에 꽂혀 있는 옆자리 컴퓨터랑이라도 통신하자!"라며 스스로에게 부여하는 임시(비상용) 가짜 IP 주소다.
  2. 규격과 한계: 전 세계 공통으로 169.254.0.0/16 대역을 사용하며, 이 주소를 가진 컴퓨터는 라우터(공유기)를 절대 넘어갈 수 없으므로 밖(인터넷)으로는 100% 통신할 수 없다.
  3. 실무적 의미 (장애의 징후): 네트워크 엔지니어나 일반 사용자가 내 컴퓨터의 IP를 확인했을 때 169.254...가 찍혀 있다면, 이는 통신이 잘 되고 있다는 뜻이 아니라 "DHCP 서버가 죽었거나, 내 랜선이 제대로 안 꽂혔다!"라는 치명적인 장애 발생을 알리는 적색경보로 해석해야 한다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: DHCP(동적 IP 할당) 설정이 켜져 있는 호스트가 DHCP 서버를 찾지 못할 때(Timeout), OS(윈도우 등)가 자체적으로 생성하여 할당하는 B 클래스 대역의 특수 IP 주소. (마이크로소프트가 처음 도입하여 APIPA라 불림).

  • 필요성: 컴퓨터 두 대를 샀다. 둘 다 "자동으로 IP 받기"로 설정되어 있다. 랜선 하나로 두 대를 직접 연결했다. 이때 IP를 나눠주는 공유기(DHCP)가 없으므로 두 컴퓨터는 IP를 받지 못해 통신을 아예 할 수 없게 된다. "아니, 공유기 없이 그냥 선만 꽂아도 지들끼리는 통신하게 만들어야지!"라는 불만에서, OS가 랜덤으로 169.254.x.x를 만들어 서로 통신할 수 있게 만든 최후의 보루(Fallback)다.

  • 💡 비유: APIPA는 국가(DHCP)가 없어서 주민등록증(공인/사설 IP)을 발급받지 못한 무국적자들이, 임시로 무인도에 모여 자기들끼리 **"이름표(169.254)"**를 대충 써 붙이고 노는 것과 같습니다. 자기들끼리(링크 내부)는 이름표를 보고 통신할 수 있지만, 무인도 밖으로 나가는 순간 여권(정상 IP)이 없으므로 경찰(라우터)에게 잡혀 버려집니다.

📢 섹션 요약 비유: 169.254.x.x는 식당에서 주문(DHCP 요청)을 했는데 종업원이 안 오자, 손님이 **"에잇! 내가 주방 가서 대충 컵라면(임시 IP) 끓여 먹고 말지!"**라며 임시방편으로 배를 채우는(랜 통신) 생존 본능입니다.


Ⅱ. APIPA의 동작 메커니즘과 트러블슈팅 (Deep Dive)

1. 셀프 할당(Self-assignment)과 충돌 방지

  1. PC가 부팅되자마자 1계층(랜선 연결)을 확인하고, 2계층 MAC을 띄운 뒤, 3계층 IP를 받기 위해 "DHCP 서버님! 저 IP 좀 주세요!"라고 방송(Discover)을 빵빵 때린다.
  2. 약 1분 정도 기다려도 아무 답이 오지 않는다. (DHCP 장애)
  3. PC의 윈도우 OS는 "안 되겠다, APIPA 대역(169.254.0.1 ~ 169.254.255.254) 중에서 랜덤으로 하나 찍자! 나는 169.254.10.5 해야지!"라고 결정한다.
  4. 혹시 다른 놈이 이 주소를 쓰고 있을지 모르니, ARP로 "누구 169.254.10.5 쓰는 사람 있어?"라고 허공에 찔러본다(Gratuitous ARP). 대답이 없으면 안심하고 자기 랜카드에 그 주소를 박아 넣는다.
  • 라우터들은 라우팅 테이블에 169.254.0.0/16 대역이 목적지이거나 출발지인 패킷이 들어오면 가차 없이 **Drop(폐기)**하도록 세팅되어 있다.
  • 즉, 같은 더미 허브나 L2 스위치(같은 Broadcast Domain)에 꽂힌 PC들끼리만 스타크래프트 로컬 게임이나 파일 공유가 가능할 뿐, 네이버나 구글로는 절대 갈 수 없다.
 ┌─────────────────────────────────────────────────────────────┐
 │                APIPA를 만났을 때의 현실 트러블슈팅(T/S)          │
 ├─────────────────────────────────────────────────────────────┤
 │                                                             │
 │   [ 상황 ] 인터넷이 안 돼서 명령 프롬프트에 `ipconfig`를 쳤다.         │
 │                                                             │
 │   IPv4 주소 . . . . . . . . . : 169.254.85.123              │
 │   서브넷 마스크 . . . . . . . : 255.255.0.0                  │
 │   기본 게이트웨이 . . . . . . : (비어 있음)                    │
 │                                                             │
 │   [ 엔지니어의 뇌 구조 (원인 추적) ]                               │
 │   1. "앗 169.254네! DHCP 서버가 죽었구나!"                       │
 │   2. (벽 랜 단자 점검) "랜선이 딸깍 안 꽂혀있나?"                    │
 │   3. (스위치 점검) "사무실 스위치 포트가 죽었나?"                    │
 │   4. (DHCP 서버 점검) "공유기 전원이 꺼졌나? DHCP 풀이 꽉 찼나?"      │
 │                                                             │
 │   ▶ 결과: "내 PC가 이상한 IP를 잡았어"가 아니라 "내 PC가 IP를      │
 │           못 받고 비상 모드에 들어갔어"라고 해석해야 한다!            │
 └─────────────────────────────────────────────────────────────┘

3. IPv6의 링크 로컬 주소 (fe80::)

IPv4는 169.254를 에러 시 임시로 쓰지만, 차세대 프로토콜인 IPv6에서는 아예 링크 로컬 주소를 통신의 기본 뼈대로 삼았다. IPv6 랜카드를 켜면 무조건 fe80::으로 시작하는 링크 로컬 주소를 먼저 하나 강제로 부여받은 뒤, 이 주소를 이용해 진짜 글로벌 주소를 라우터와 협상한다.

📢 섹션 요약 비유: 내 PC에 169.254 주소가 찍혀 있다는 것은, 소방서(인터넷)와 연결된 화재경보기가 작동하지 않아 건물 자체적으로 **"비상벨(임시 조치)"**을 왱왱 울리며 건물 안의 사람들끼리만 살길을 도모하고 있는 단절 상태를 의미합니다.