네트워크 학습 노트 목차

IP 계층 — 전 세계 어디로든, 최선을 다해

링크 계층이 같은 LAN 안의 한 걸음을 책임진다면, IP(인터넷 프로토콜) 계층은 그 걸음을 수십 번 이어 붙여 — 지구 반대편의 컴퓨터까지 패킷을 보낸다. 인터넷이 "인터-넷(망과 망의 연결)"인 이유가 여기 있다. 그런데 IP의 약속은 의외로 겸손하다 — "최선을 다해(best-effort) 보내 보겠지만, 도착·순서·중복 없음은 보장하지 않는다." 이 겸손함이 왜 오히려 인터넷을 튼튼하게 만들었는지, 그리고 그 위에 TCP가 왜 필요한지를 본다.

누구에게, 어느 동네인가 — IP 주소와 서브넷

IP 주소(IPv4)는 32비트(192.168.0.5)인데, 이걸 두 부분으로 나눠 읽는 게 핵심이다 — 앞쪽은 *어느 네트워크(동네)*인지, 뒤쪽은 *그 안의 어느 호스트(집)*인지다. 어디서 자르는지를 서브넷 마스크(CIDR 표기 /24)가 정한다 — 192.168.0.0/24앞 24비트가 네트워크, 뒤 8비트가 호스트(254대)다. 왜 이렇게 나눌까? 라우터가 개별 주소가 아니라 네트워크(동네) 단위로 길을 외우게 하기 위해서다. 전 세계 IP를 하나하나 외우는 건 불가능하지만, "192.168.0.x 동네는 저쪽으로"처럼 묶어서 외우면 라우팅 테이블이 감당할 만해진다(CIDR가 이 주소 묶기·집약을 가능하게 했다). (출처: CIDR.)

한 홉씩 — 라우팅과 최장 프리픽스 매칭

패킷이 목적지까지 가는 방식은 한 번에 길 전체를 아는 게 아니라각 라우터가 '다음 한 홉(next hop)만' 정해 넘기는 식이다. 마치 모르는 도시에서 교차로마다 "공항은 저쪽" 표지판을 따라가는 것과 같다.

다이어그램 로딩 중…

각 라우터는 라우팅 테이블에서 목적지 IP가 어느 네트워크에 속하나를 찾아 다음 홉을 정한다. 이때 한 IP가 여러 네트워크 항목에 걸치면0.0.0.0/0(전부), 10.0.0.0/8, 10.1.0.0/16가장 구체적인(프리픽스가 긴) 것을 고른다(최장 프리픽스 매칭). "전국행"보다 "그 도시행" 표지판이 더 정확하듯, 더 좁게 일치하는 길이 우선이다.

여기에 안전장치가 하나 있다. IP 헤더의 **TTL(Time To Live)**은 홉을 지날 때마다 1씩 줄고, 0이 되면 패킷을 버린다 — 라우팅이 꼬여 *패킷이 무한히 빙빙 도는 것(라우팅 루프)*을 막는 것이다. 재미있게도 traceroute는 이 TTL을 역이용한다 — TTL을 1, 2, 3…으로 늘려 보내면 각 홉의 라우터가 "TTL 만료" 응답을 돌려줘, 경로를 한 홉씩 그려 낸다.

그릇이 작을 때 — 단편화, 그리고 best-effort

링크마다 한 번에 보낼 수 있는 최대 크기(MTU, 보통 1500바이트)가 다르다. 패킷이 그보다 크면 조각으로 쪼개(단편화) 보내고 받는 쪽이 다시 합친다(다만 단편화는 비효율·취약점이 있어 요즘은 경로 MTU를 미리 탐지해 애초에 맞춰 보내는 쪽을 선호한다). 그리고 이 모든 과정에서 IP는 — 순서도, 도착도, 중복 없음도 보장하지 않는다. 패킷은 서로 다른 길로 가다 순서가 뒤바뀌거나, 혼잡한 라우터에서 조용히 버려지기도 한다. 이게 IP의 best-effort다. 무책임해 보이지만, 바로 이 단순함 덕에 — 중간 라우터들이 상태를 기억할 필요 없이 패킷마다 독립적으로 빠르게 넘길 수 있고, 한 경로가 끊겨도 다른 길로 우회할 수 있다. 신뢰성이라는 무거운 짐은 양 끝단(TCP)이 지고, 중간은 가볍게 — 이 end-to-end 원칙이 인터넷이 거대해질 수 있었던 비결이다(다음 편 TCP가 그 짐을 진다).

주소가 모자라서 — 사설 IP와 NAT

32비트는 약 43억 개라, 전 세계 기기에 비해 턱없이 부족해졌다(IPv4 고갈). 그래서 두 가지로 버틴다. 하나는 사설 IP(10.0.0.0/8·172.16.0.0/12·192.168.0.0/16) — 인터넷에 라우팅되지 않는, 집·회사 내부 전용 주소다. 다른 하나는 NAT(주소 변환) — 집 안의 여러 기기가 하나의 공인 IP를 공유하게 해 준다.

다이어그램 로딩 중…

공유기는 나가는 패킷의 사설 IP·포트공인 IP·새 포트로 바꿔치기하고, 어느 내부 기기였는지 표로 기억했다가 응답이 오면 되돌린다. 덕분에 공인 IP 하나로 수십 대가 인터넷을 쓴다 — IPv4 고갈을 늦춘 일등 공신이다. 근본 해법은 IPv6(128비트, 사실상 무한)인데, 주소가 넘쳐 NAT가 필요 없어진다. (출처: IPv4 exhaustion & NAT.)

실무에서는 — "내 IP가 뭐야?"의 답이 인 이유가 여기 있다. 기기 안에서 보는 사설 IP(ipconfig의 192.168.x.x)와, 인터넷에서 보이는 공인 IP(NAT 뒤의 1.2.3.4)가 다르다. 그래서 외부에서 내 집 서버로 접속하려면 공유기에서 포트 포워딩(특정 공인 포트→내부 기기)을 열어 줘야 한다. 연결 문제를 볼 땐 ping(상대까지 IP가 닿나)과 traceroute(어느 홉에서 막히나)가 IP 계층의 청진기다.

정리하면, IP 계층은 네트워크(동네) 단위 주소와 *라우터의 홉바이홉 전달(최장 프리픽스 매칭)*로 전 세계 어디로든 패킷을 보낸다 — 단 best-effort라 순서·도착을 보장하지 않고(그 짐은 TCP가 진다), TTL로 루프를 막는다. 부족한 주소는 사설 IP+NAT로 버티고 IPv6로 푼다. 이제 이 믿을 수 없는 IP 위에서, 어떻게 한 바이트도 안 빠뜨리고 순서대로 전달하느냐 — 그게 다음 편 TCP의 이야기다.

링크 계층 — 이더넷·MAC·스위치·ARPTCP — 핸드셰이크·신뢰성·흐름/혼잡 제어