Chapter 10

네트워크의 기초

메시지를 보내면 1초도 안 되어 지구 반대편 친구의 휴대폰에 도착한다. 그 사이에 데이터는 공유기, 통신사 건물, 바닷속 케이블, 수십 대의 라우터를 거친다. 누가 길을 알려 주는 걸까? 중간에 데이터가 사라지면? 이 장에서는 인터넷이라는 거대한 우편 시스템의 규칙을 살펴본다.

통째로 보내지 않고 쪼개서 보낸다

옛날 유선 전화는 통화하는 동안 두 집 사이에 전용 회선을 하나 잡아 두었다. 말을 안 하는 동안에도 회선은 묶여 있다. 인터넷은 다르게 동작한다. 데이터를 수백~1,500바이트 정도의 작은 조각, 즉 패킷(packet)으로 나누고, 각 패킷에 받는 사람 주소와 순서 번호를 붙여 따로따로 보낸다. 이를 패킷 교환이라 한다.

책 한 권을 엽서로 보내기

두꺼운 책을 통째로 보내는 대신 한 쪽씩 엽서에 옮겨 적고 “37/200쪽” 같은 번호를 붙여 우체통에 넣는다. 엽서들은 서로 다른 우체국, 다른 트럭을 타고 가서 뒤죽박죽 순서로 도착하지만, 받는 사람은 번호대로 정리해 책을 복원한다. 엽서 하나가 사라지면 그 쪽만 다시 보내 달라고 하면 된다. 그리고 우편 트럭은 여러 사람의 엽서를 섞어 싣고 다니므로 길을 효율적으로 쓴다.

SIMULATOR

패킷으로 쪼개고, 따로 보내고, 다시 맞추기

 
받은 메시지:
패킷들은 서로 다른 길(위·가운데·아래)을 타서 도착 순서가 뒤섞인다. 받는 쪽은 각 패킷의 번호를 보고 빈자리에 끼워 넣는다. 번호가 없었다면 메시지가 뒤죽박죽이 되었을 것이다.

계층: 봉투 안의 봉투

패킷 하나가 목적지까지 가려면 해결할 문제가 많다. “어떤 앱의 데이터인가?”, “순서와 분실은 누가 챙기나?”, “지구 반대편까지 어떤 길로 가나?”, “바로 옆 공유기까지는 전파로 어떻게 보내나?” 이 문제들을 한꺼번에 풀면 너무 복잡해서, 인터넷은 일을 계층(layer)으로 나눴다. 각 계층은 자기 일만 하고, 데이터를 자기 정보가 적힌 봉투에 넣어 아래 계층에 넘긴다. 이를 캡슐화(encapsulation)라 한다.

계층하는 일봉투에 적는 것우편 비유
응용앱끼리 대화하는 규칙 (HTTP, 메신저 규칙 등)요청 내용편지 내용
전송 (TCP/UDP)앱 구분, 순서, 분실 확인포트 번호, 순서 번호“김철수님께, 3/5쪽”
네트워크 (IP)지구 어디든 찾아가는 길보내는·받는 IP 주소건물 주소
링크 (이더넷/Wi-Fi)바로 옆 장치까지 한 구간 전달다음 장치의 MAC 주소다음 우체국까지 트럭 번호
SIMULATOR

캡슐화: 한 겹씩 싸고, 한 겹씩 벗기기

보내는 쪽은 위에서 아래로 봉투를 씌우고, 받는 쪽은 아래에서 위로 벗긴다. 중간의 라우터는 IP 봉투까지만 열어 보고 다시 새 링크 봉투에 넣어 다음 구간으로 보낸다. 덕분에 Wi-Fi든 광케이블이든 아래 계층이 바뀌어도 위 계층은 신경 쓰지 않는다.

세 가지 주소: IP, 포트, MAC

집 공유기의 비밀: NAT

집의 휴대폰, 노트북, TV는 모두 192.168.0.x 같은 사설 IP를 받는다. 이 주소는 집 안에서만 통한다. 공유기는 바깥으로 나가는 패킷의 보내는 주소를 자기의 공인 IP로 바꿔 적고, 답장이 오면 누구에게 보낼지 표를 보고 되돌려 준다. 회사 대표 전화번호와 내선 번호의 관계와 같다. 이 덕분에 IPv4 주소 43억 개로 수백억 대의 기기가 인터넷을 쓴다.

라우팅: 한 걸음씩 길 찾기

패킷이 서울에서 뉴욕으로 갈 때 처음부터 전체 경로를 아는 사람은 없다. 대신 길목마다 있는 라우터(router)가 패킷의 목적지 IP를 보고 “이 방향으로 가면 더 가깝다”는 표(라우팅 테이블)에 따라 다음 한 걸음만 결정한다. 라우터들은 서로 정보를 주고받으며 이 표를 계속 갱신하고, 어떤 길이 끊기면 몇 초 안에 다른 길로 돌아간다. 인터넷이 핵전쟁에도 살아남는 통신망을 목표로 연구되었다는 이야기가 나온 이유다.

SIMULATOR

라우터 네트워크: 연결선을 눌러 끊어 보세요

목적지
 
경로—
거친 라우터 수 (홉)—
예상 지연 시간—
선 위 숫자는 그 구간의 지연 시간(ms)이다. 라우터들은 지연 합이 가장 작은 길을 고른다. 해볼 것: 지금 쓰는 경로의 선을 하나 눌러 끊어 보자. 경로가 바로 다시 계산된다. 모든 길을 끊으면? 목적지에 갈 수 없다.
traceroute

컴퓨터의 명령 창에서 tracert google.com(윈도우) 또는 traceroute google.com(맥·리눅스)을 입력하면, 내 패킷이 거쳐 가는 실제 라우터 목록과 각 구간의 지연 시간을 볼 수 있다. 보통 10~20개의 라우터를 거친다.

TCP: 잃어버린 패킷 되찾기

IP는 “최선을 다해 배달”할 뿐 보장하지 않는다. 라우터가 너무 바쁘면 패킷을 버리고, 순서가 바뀌기도 한다. 그 위의 TCP(Transmission Control Protocol)가 신뢰성을 책임진다. 받는 쪽은 패킷을 받을 때마다 “몇 번까지 잘 받았다”는 확인 응답(ACK)을 보낸다. 보내는 쪽은 일정 시간 안에 ACK가 오지 않으면 그 패킷이 사라졌다고 보고 다시 보낸다.

ACK를 기다리느라 패킷 하나 보내고 쉬면 너무 느리므로, TCP는 ACK를 받기 전에도 여러 개(윈도우 크기만큼)를 연달아 보낸다.

SIMULATOR

TCP 전송 타임라인

 
보낸 패킷 (재전송 포함)—
잃어버린 패킷—
완료 시간—
왼쪽 세로줄은 보내는 쪽, 오른쪽은 받는 쪽, 아래로 갈수록 시간이 흐른다. 파란 화살표 = 데이터, 초록 = ACK, ✕ = 도중에 사라짐, 주황 = 재전송. 해볼 것: 윈도우를 1로 하면 한 번에 하나씩 보내고 기다리느라 느리다. 윈도우를 키우면 같은 손실률에서도 훨씬 빨리 끝난다.

영상 통화나 온라인 게임은 TCP 대신 UDP를 많이 쓴다. UDP는 확인도 재전송도 하지 않는다. 0.5초 전에 사라진 영상 조각을 다시 받아 봐야 이미 늦었기 때문이다. 정확성이 중요한 파일 전송과 웹은 TCP, 실시간성이 중요한 통화와 게임은 UDP를 주로 쓴다.

대역폭과 지연: 도로의 폭과 길이

인터넷이 “빠르다”는 말에는 두 가지 뜻이 섞여 있다.

차선을 늘리면 한 번에 더 많은 차가 가지만, 서울에서 부산까지 걸리는 시간은 줄지 않는다. 지연에는 넘을 수 없는 한계가 있다. 빛은 광섬유 안에서 1초에 약 20만 km를 간다. 아래 계산기로 거리별 최소 지연을 확인해 보자.

CALCULATOR

빛의 속도로 계산한 최소 왕복 시간

서울에서
광섬유 직선거리 왕복—
실제 경로 (보통 1.5~2배)—
CPU 박자로 치면—
정지 위성 인터넷은 전파가 진공에서 빛의 속도로 가지만 거리가 워낙 멀어(지상 → 위성 → 지상 → 다시 돌아오기) 지연이 크다. 그래서 저궤도(수백 km) 위성 인터넷이 등장했다.

핵심 정리

  1. 인터넷은 데이터를 패킷으로 쪼개 번호를 붙여 따로 보내고, 받는 쪽이 다시 맞춘다.
  2. 통신은 응용 → 전송(TCP/UDP) → 네트워크(IP) → 링크 계층으로 나뉘고, 각 계층이 봉투를 한 겹씩 씌운다(캡슐화).
  3. IP 주소는 컴퓨터, 포트는 그 안의 프로그램, MAC 주소는 바로 옆 장치를 가리킨다.
  4. 라우터는 다음 한 걸음만 결정한다. 길이 끊기면 경로를 다시 계산해 돌아간다.
  5. TCP는 ACK와 재전송으로 분실을 복구하고, 윈도우로 여러 패킷을 겹쳐 보내 속도를 높인다.
  6. 대역폭은 도로의 폭, 지연은 도로의 길이다. 지연은 빛의 속도라는 물리 한계에 묶여 있다.

확인 퀴즈

패킷에 순서 번호를 붙이는 이유는?

번호가 있어야 뒤섞인 패킷을 정렬하고, 몇 번이 안 왔는지 알아 재전송을 요청할 수 있다.

한 컴퓨터에서 웹 브라우저와 메신저가 동시에 데이터를 받는다. 도착한 패킷을 어느 프로그램에게 줄지 정하는 것은?

IP 주소로 컴퓨터(건물)를 찾고, 포트 번호로 그 안의 프로그램(호수)을 찾는다.

라우터가 패킷을 받았을 때 하는 일은?

각 라우터는 “다음 한 걸음”만 결정한다. 그 결정들이 이어져 전체 경로가 된다.

TCP에서 보낸 패킷의 ACK가 정해진 시간 안에 오지 않으면?

시간 초과 후 재전송이 TCP 신뢰성의 핵심이다.

인터넷 요금제를 100 Mbps에서 1 Gbps로 올렸다. 가장 덜 좋아지는 것은?

대역폭(도로 폭)이 늘어도 거리와 빛의 속도가 정하는 지연(도로 길이)은 거의 그대로다.