Chapter 23

측정과 문제 해결

“인터넷이 느려요.” 네트워크 담당자가 가장 많이 듣는 말이다. 하지만 이 한마디 뒤에는 수십 가지 원인이 숨어 있다. 케이블이 빠졌을 수도, 주소록(DNS)이 고장 났을 수도, 공유기 안에 패킷이 줄을 서 있을 수도 있다. 의사가 청진기와 혈압계로 진단하듯, 네트워크도 재고 읽는 법이 있다. 이 장에서는 지연이 어디서 생기는지 분해하고, ping과 traceroute를 읽고, 큐가 왜 갑자기 막히는지 이해한 뒤, 직접 장애를 추적해 본다.

지연의 네 가지 원인

패킷 하나가 라우터 하나를 지나 다음 라우터에 닿기까지 걸리는 시간은 네 조각의 합이다.

라우터 A 처리헤더 보기 큐잉 (줄 서기) 전송비트 밀어 넣기 전파 (선로 위 이동) 거리 ÷ 빛의 속도(광섬유 약 20만 km/s) 라우터 B 전송 지연은 “트럭에 짐을 싣는 시간”(차선 수에 반비례), 전파 지연은 “트럭이 도로를 달리는 시간”(도로 길이에 비례)이다.
그림 23-1. 한 구간의 지연 = 처리 + 큐잉 + 전송 + 전파. 실제 경로는 이런 구간 10~20개가 이어진 것이고, 각 구간의 지연이 더해진다.
톨게이트와 고속도로

차량 행렬(패킷의 비트들)이 톨게이트를 지난다. 요금소 직원이 표를 확인하는 시간이 처리, 앞차들이 빠질 때까지 기다리는 시간이 큐잉, 행렬 전체가 요금소를 빠져나가는 시간이 전송(차선이 많으면 빠르다), 다음 톨게이트까지 달리는 시간이 전파다. 차선을 늘려도 서울에서 부산까지 달리는 시간은 그대로다.

SIMULATOR

지연 분해기: 무엇이 지배하는가

상황 예시
처리—
큐잉—
전송—
전파—
합계 (한 구간)—
위 막대는 네 성분의 비율(선형), 아래는 성분별 크기(로그 눈금)다. 처리 지연은 5 µs로 고정했고, 앞의 패킷들도 같은 크기라고 가정했다. 해볼 것: “데이터센터 안”에서는 거리가 짧고 링크가 빨라 무엇이 남는가? “서울→뉴욕”에서는 링크를 아무리 빠르게 해도 합계가 거의 줄지 않는다. “붐비는 Wi-Fi”에서는 큐가 모든 것을 삼킨다.

ping: RTT, 지터, 손실

가장 오래되고 가장 많이 쓰는 측정 도구가 ping이다. 상대에게 ICMP Echo Request(“들리나요?”)를 보내고 Echo Reply가 돌아오기까지의 왕복 시간(RTT)을 잰다. 세 가지를 읽는다.

SIMULATOR

가상 ping: 출력 읽기

상황
 
min / avg / max—
mdev (표준편차)—
지터 (연속 차이 평균)—
손실—
리눅스 ping 형식을 흉내 냈다. mdev는 RTT의 표준편차(√(평균(t²) − 평균(t)²)), 지터는 연속한 두 RTT 차이의 평균이다(RTP가 쓰는 방식과 비슷). 해볼 것: “붐비는 Wi-Fi”는 평균은 괜찮아 보여도 max와 mdev가 크다. 이런 망에서 영상 통화가 끊긴다. 단순화: 큐 지연을 지수 분포로, 손실을 서로 독립으로 뽑았다(실제 손실은 몰려서 일어나는 경우가 많다).

traceroute로 길 읽기

8장에서 본 traceroute는 IP 헤더의 TTL(남은 홉 수)을 이용한다. TTL=1로 보낸 패킷은 첫 라우터에서 0이 되어 버려지고, 그 라우터가 “시간 초과(ICMP Time Exceeded)”를 돌려준다. 그 답장의 출발지가 첫 홉의 주소다. TTL을 2, 3, …으로 늘려 가며 길목의 라우터를 하나씩 드러낸다. 홉마다 3번씩 보내서 RTT 세 개를 보여 준다.

$ traceroute example.com traceroute to example.com (203.0.113.10), 30 hops max 1 192.168.0.1 (공유기) 1.1 ms 0.9 ms 1.0 ms 2 100.64.0.1 (통신사 첫 장비) 4.8 ms 5.2 ms 4.6 ms 3 * * * ← 응답 안 하는 라우터. 고장 아님 4 core1.seoul.isp.example 7.9 ms 8.3 ms 7.7 ms 5 gw.busan.isp.example 12.0 ms 11.8 ms 12.1 ms 6 la.transpacific.example 138.4 ms 137.9 ms 138.6 ms ← 태평양 횡단: 진짜 지연 7 core2.la.example 212.5 ms 139.0 ms 198.3 ms ← 튀는 값: 착시 8 edge.example.net 140.1 ms 139.6 ms 140.3 ms 9 203.0.113.10 140.4 ms 140.2 ms 140.0 ms

대역폭-지연 곱: 파이프에 담긴 데이터

링크를 물이 흐르는 파이프로 생각하자. 대역폭은 파이프의 굵기, RTT는 길이(왕복)다. 파이프를 가득 채우는 데 필요한 데이터 양이 대역폭-지연 곱(BDP, bandwidth-delay product)이다. TCP(9장)는 확인 응답을 받기 전에 윈도우만큼만 보낼 수 있으므로, 윈도우가 BDP보다 작으면 파이프에 빈틈이 생겨 회선을 다 쓰지 못한다.

BDP = 대역폭 × RTT   ·   최대 처리율 ≈ 윈도우 크기 ÷ RTT
예: 1 Gbps × 100 ms = 108 비트 = 12.5 MB가 늘 “길 위에” 떠 있어야 회선이 꽉 찬다.
보내는 쪽 받는 쪽 빈 파이프 (ACK를 기다리는 중) 길이 = RTT (지연) 굵기 = 대역폭. 파란 상자 = 윈도우만큼 보낸 데이터. 윈도우가 파이프 부피(BDP)보다 작으면 나머지는 비어서 회선을 놀린다.
그림 23-2. 대역폭-지연 곱. 굵고 긴 파이프(고속 장거리 회선)일수록 가득 채우려면 많은 데이터가 동시에 길 위에 있어야 한다.

원래 TCP 헤더의 윈도우 필드는 16비트라 최대 65,535바이트(약 64 KB)였다. 1980년대 회선에는 충분했지만 지금은 턱없이 작아서, 윈도우 크기 조정 옵션(window scaling)으로 최대 1 GB까지 늘린다. 지금도 오래된 장비나 잘못된 설정이 이 옵션을 지우면 “회선은 1 Gbps인데 해외 다운로드가 몇 Mbps”라는 증상이 나온다.

CALCULATOR

BDP와 윈도우 제한

BDP (= 필요한 윈도우)—
64 KB 윈도우의 최대 처리율—
회선 이용률 (64 KB일 때)—
그래프는 RTT(가로, 로그)에 따른 윈도우별 최대 처리율(세로, 로그)이다. 처리율은 윈도우 ÷ RTT와 회선 대역폭 중 작은 값이다. 점은 지금 설정. 해볼 것: RTT를 1 ms(같은 건물)로 줄이면 64 KB로도 수백 Mbps가 나온다. 거리가 멀수록 큰 윈도우가 필요하다. 단순화: 손실과 혼잡 제어는 무시했다.
예측해 보기

1 Gbps 회선으로 RTT 150 ms인 해외 서버에서 받는다. TCP 윈도우가 64 KB로 묶여 있다면 최대 속도는 대략?

BDP 계산기에서 대역폭 1 Gbps, RTT 150 ms로 맞춰 보자.

65,535바이트 × 8 ÷ 0.15초 ≈ 3.5 Mbps. 회선의 0.35%만 쓴다. 1 Gbps를 채우려면 BDP = 1 Gbps × 0.15 s ≈ 18.75 MB의 윈도우가 필요하다. 그래서 윈도우 크기 조정은 장거리 고속 전송의 필수 옵션이다.

큐와 버퍼블로트

패킷은 제멋대로 몰려온다. 평균 도착률이 처리 능력보다 낮아도 잠깐 몰리는 순간에는 줄이 생긴다. 이 줄의 길이를 다루는 수학이 큐잉 이론(queueing theory)이다. 가장 단순한 모델인 M/M/1(무작위 도착, 무작위 처리 시간, 창구 하나)에서 도착률을 λ, 처리율을 μ라 하면 이용률 ρ = λ/μ이고, 패킷이 시스템에 머무는 평균 시간은 다음과 같다.

평균 체류 시간 W = 1 ÷ (μ − λ) = (1/μ) ÷ (1 − ρ)
ρ = 0.5면 처리 시간의 2배, 0.9면 10배, 0.99면 100배. 이용률이 1에 다가갈수록 대기 시간은 직선이 아니라 폭발적으로 늘어난다.

그래서 망 운영자는 링크를 평균 100% 가까이 쓰지 않는다. 출퇴근길 도로가 80%만 차도 막히기 시작하는 것과 같다. 백본 회선은 보통 평균 이용률이 50~70%를 넘으면 증설을 검토한다.

SIMULATOR

M/M/1 큐: 이용률과 대기 시간

버퍼 크기
 
이용률 ρ—
이론 평균 지연—
측정 평균 지연 (최근)—
버려진 패킷—
위: 실시간으로 도착(왼쪽)하고 처리(오른쪽 창구)되는 패킷 줄. 아래: 이론 곡선 W = 1/(μ − λ)(로그 눈금)과 측정값(주황 점). 단위는 패킷/초, 시뮬레이션은 실제 시간으로 돈다. 해볼 것: λ를 700 → 900 → 980으로 올려 보자. 평균이 처리 능력의 98%일 뿐인데도 줄이 길게 출렁인다. λ가 μ를 넘으면 줄이 버퍼 끝까지 차고, 큰 버퍼에서는 지연이 1초 가까이 된다. 이것이 다음에 볼 버퍼블로트다.
예측해 보기

처리율 μ = 1,000 패킷/초인 링크에서 이용률이 90%에서 95%로 오르면 평균 지연은?

M/M/1 시뮬레이터에서 λ를 900과 950으로 바꿔 이론 평균 지연을 비교하자.

W = 1/(μ − λ)이므로 1/100초 = 10 ms에서 1/50초 = 20 ms가 된다. 이용률 5%포인트 차이로 지연이 두 배가 되는 것, 이것이 높은 이용률 근처의 “무릎”이다.

버퍼블로트: 너무 큰 버퍼의 역설

패킷 손실을 줄이겠다며 공유기·모뎀에 메모리를 넉넉히 넣으면 어떻게 될까? TCP는 손실이 나야 속도를 줄이므로(9장), 큰 버퍼를 끝까지 채운다. 버퍼가 늘 가득하니 그 뒤에 선 모든 패킷이 수백 ms씩 기다린다. 큰 파일을 올리는 동안 같은 집의 게임 핑이 20 ms에서 500 ms로 치솟는 현상, 이것이 버퍼블로트(bufferbloat)다. 2010년경 짐 게티스가 이름을 붙였다.

해결책은 버퍼를 무작정 줄이는 것이 아니라 지연을 보고 관리하는 것이다. 이를 AQM(Active Queue Management)이라 한다. 대표인 CoDel은 패킷이 큐에서 머문 시간을 재서, 최소 체류 시간이 100 ms 동안 계속 5 ms를 넘으면 패킷을 하나씩 일부러 버린다. TCP가 이를 보고 속도를 살짝 줄여 큐가 짧게 유지된다. FQ-CoDel은 여기에 흐름별 큐를 더해, 대용량 업로드와 게임 패킷이 같은 줄에 서지 않게 한다. 리눅스의 기본 큐 관리 방식이고, 많은 공유기 펌웨어와 DOCSIS 3.1 케이블 모뎀(AQM 필수)에 들어갔다.

SIMULATOR

업로드 하나가 게임을 망치는 이유

큐 관리
평균 큐 지연 (업로드)—
회선 이용률—
게임 패킷 평균 RTT—
20 Mbps 업링크(1,500바이트 패킷 기준 초당 약 1,667개), 기본 RTT 40 ms에서 TCP(Reno 방식) 업로드 하나가 20초 동안 도는 모습을 유체 모델로 계산했다. 회색 선은 업로드 큐 지연, 주황 선은 같은 회선을 쓰는 게임 패킷의 RTT다. 해볼 것: 테일 드롭에서 버퍼를 1,000 패킷(약 0.6초 분량)으로 두면 처음 버퍼가 넘친 뒤에도 수백 ms의 큐가 “서 있는” 채로 유지된다. 버퍼를 줄이면 지연은 줄지만 너무 작으면 이용률이 떨어진다. CoDel로 바꾸면 이용률이 조금 줄어드는 대신(흐름 하나뿐인 이 모델에서 약 86%, 흐름이 여럿이면 거의 100%) 지연이 수백 ms에서 수 ms로 내려간다. FQ-CoDel에서는 게임 패킷이 업로드 줄을 아예 건너뛴다.

QoS: 줄 세우기와 속도 제한

모든 패킷이 같지는 않다. 0.1초 늦으면 끊기는 음성 패킷과, 1초 늦어도 아무도 모르는 백업 패킷을 같은 줄에 세울 이유가 없다. QoS(Quality of Service)는 트래픽을 분류해 다르게 대우하는 기술의 묶음이다.

  1. 분류와 표시: IP 헤더의 6비트 DSCP(Differentiated Services Code Point) 필드에 등급을 적는다. 음성은 보통 EF(46, 신속 전달), 일반 웹은 0(최선형)이다.
  2. 우선순위 큐: 높은 등급의 큐가 비어 있지 않으면 그것부터 내보낸다. 음성처럼 작고 급한 트래픽에 좋지만, 무제한이면 낮은 큐가 굶는다.
  3. 가중 공정 큐잉(WFQ): 큐마다 가중치를 주고 대역폭을 비율대로 나눈다(예: 영상 50%, 업무 30%, 나머지 20%). 아무도 굶지 않는다.
  4. 속도 제한: 정해진 속도를 넘는 트래픽을 버리거나(폴리싱) 늦춰서(셰이핑) 내보낸다. 통신사 요금제의 속도 제한, 클라우드 API의 요청 수 제한이 이 방식이다. 핵심 알고리즘이 토큰 버킷(token bucket)이다.
토큰 버킷 = 놀이공원 이용권 통

통에 이용권(토큰)이 일정한 속도 r로 하나씩 채워지고, 통은 최대 b개까지만 담는다. 패킷은 크기만큼 토큰을 내야 나갈 수 있다. 한동안 조용했다면 통이 가득 차 있으니 한꺼번에 b만큼 몰려와도 통과한다(버스트 허용). 하지만 오래 보면 평균 속도는 r을 넘을 수 없다. r은 “평균 얼마나”, b는 “한꺼번에 얼마나”를 정한다.

SIMULATOR

토큰 버킷: 버스트와 출력 트래픽

들어오는 트래픽
초과분 처리
평균 입력—
평균 출력—
버려진 데이터—
위: 입력(회색)과 출력(파랑) 속도, 3초 동안. 아래: 버킷 안의 토큰 양. 버스트 패턴은 0.5초마다 0.1초 동안 200 Mbps로 몰려오고 나머지는 조용하다(평균 40 Mbps). 해볼 것: b를 키우면 버스트 앞부분이 그대로 통과한다. 셰이핑으로 바꾸면 버리는 대신 뒤로 미뤄 출력이 r에 평평하게 깔리는 대신 지연이 생긴다. 단순화: 1 ms 단위 유체 계산, 셰이핑 큐는 무한.
QoS의 현실

DSCP 표시는 내 망 안에서만 믿을 수 있다. 인터넷 구간의 통신사들은 고객이 붙인 표시를 대부분 지우거나 무시한다(누구나 자기 패킷을 ‘최우선’으로 표시할 테니까). 그래서 QoS는 회사망, 통신사 내부망, 그리고 병목인 집 공유기의 업링크에서 가장 효과가 크다.

패킷 캡처와 증상 읽기

측정 도구로도 원인이 안 보이면 실제 패킷을 들여다본다. 패킷 캡처(packet capture)는 네트워크 카드를 지나는 패킷을 그대로 복사해 저장하는 것이다. 명령줄 도구 tcpdump는 필터 문법(tcpdump -i eth0 port 53)으로 원하는 패킷만 골라 pcap 파일로 저장하고, 그래픽 도구 와이어샤크(Wireshark)는 수천 개 프로토콜을 3장처럼 계층별로 풀어 보여 준다. TCP 재전송, 중복 ACK, 0 윈도우 같은 이상 신호를 자동으로 색칠해 주기도 한다.

캡처는 허락받은 곳에서만

패킷 캡처는 남의 통신 내용을 볼 수 있는 강력한 도구다. 자기 기기나 관리 권한이 있는 망에서, 정해진 목적으로만 써야 한다. 허락 없이 남의 통신을 캡처하는 것은 대부분의 나라에서 불법이다. 또 지금은 대부분이 TLS로 암호화되어 있어(22장) 내용보다는 헤더, 타이밍, 핸드셰이크를 읽는 일이 많다.

증상먼저 의심할 것확인 방법
모든 사이트가 안 됨, IP로 ping은 됨DNSnslookup / dig가 실패하는지, 다른 DNS 서버로는 되는지
작은 페이지는 되는데 큰 파일·일부 사이트에서 멈춤MTU / PMTU 블랙홀(7장)ping -M do -s 1472로 크기를 바꿔 가며, VPN·터널 구간 확인
되긴 하는데 느림, 특히 바쁜 시간혼잡, 버퍼블로트부하를 걸며 ping(지연 증가), 링크 이용률 그래프
전체적으로 느리고 들쭉날쭉, 재전송 많음패킷 손실 (불량 케이블, 약한 Wi-Fi, 듀플렉스 불일치)인터페이스 오류 카운터, 캡처의 재전송 비율, mtr
해외만 유독 느림BDP·윈도우 제한, 먼 경로traceroute로 경로, 캡처로 윈도우 크기
특정 앱·포트만 연결 안 됨방화벽, 서비스 다운curl·nc로 포트 연결 시도, 시간 초과 vs 즉시 거부 구분
몇 분마다 잠깐씩 끊김Wi-Fi 로밍·간섭, DHCP 갱신 실패, 경로 흔들림시스템 로그, 연속 ping 기록과 시간 대조

시간 초과와 즉시 거부의 차이는 중요한 단서다. 포트에 연결했는데 곧바로 “Connection refused”(TCP RST)가 오면 상대 컴퓨터까지는 닿았지만 그 포트에서 듣는 프로그램이 없다는 뜻이다. 아무 답 없이 시간 초과가 나면 중간의 방화벽이 패킷을 조용히 버리고 있을 가능성이 크다.

아래 계층부터: 장애 추적

경험 많은 엔지니어는 “인터넷이 안 돼요”를 들으면 계층(3장)을 아래에서 위로 하나씩 확인한다. 위 계층은 아래 계층이 멀쩡해야만 동작하므로, 아래에서 처음 실패하는 지점이 원인일 가능성이 가장 크다. 각 단계는 하나의 질문에 답한다.

① 물리·링크: 연결됐나? ② IP: 주소·게이트웨이 받았나? ③ 라우팅: 밖으로 나가나? ④ DNS: 이름이 풀리나? ⑤ 포트·앱: 서비스가 응답하나? 링크 LED, ip link, Wi-Fi 신호 ipconfig / ip addr (169.254.x.x?) ping 게이트웨이 → ping 8.8.8.8 nslookup example.com curl -I https://example.com 아래에서 위로
그림 23-3. 문제 해결의 사다리. 첫 번째로 실패하는 단(段)이 원인의 위치를 알려 준다. 예를 들어 IP로는 ping이 되는데 이름 풀이만 안 되면 범인은 DNS다.
GAME

장애 추적: 숨은 원인을 찾아라

진단 명령 (눌러서 실행)
원인은? (진단 후 하나를 고르세요)
 
이번 문제에 쓴 명령0
맞힌 문제 / 푼 문제0 / 0
평균 명령 수—
여섯 가지 장애 중 하나가 무작위로 숨겨져 있다. 명령 결과를 아래 계층부터 읽어 가며 “처음 실패하는 곳”을 찾자. 적은 명령으로 맞힐수록 좋은 진단이다. 출력은 실제 명령의 형식을 단순화했다. 게이트웨이는 192.168.0.1, 테스트 사이트는 example.com이라고 가정했다.

모니터링: 가용성, SLO, 백분위

장애가 난 뒤에 고치는 것보다 미리 아는 것이 낫다. 운영팀은 장비와 서비스의 상태를 계속 재서 그래프로 보고, 기준을 넘으면 알림을 받는다. 핵심 지표는 세 가지다.

시스템이 여러 부품으로 이루어지면 가용성은 곱셈으로 계산한다. 하나라도 멈추면 전체가 멈추는 직렬 구성은 가용성이 곱해져 낮아지고(99.9% 두 개 → 99.8%), 하나만 살아 있어도 되는 병렬(이중화) 구성은 “둘 다 고장 날 확률”만 남아 크게 높아진다(99% 두 개 → 1 − 0.01² = 99.99%).

CALCULATOR

가용성 계산기: 직렬과 이중화

전체 가용성—
연간 예상 중단—
월간 예상 중단—
가장 약한 고리—
사용자 요청이 왼쪽에서 오른쪽으로 네 단계를 모두 지나야 한다(직렬). 각 단계의 대수를 늘리면 그 단계는 병렬이 되어, 한 대만 살아 있어도 된다. 전체 = Π (1 − (1 − a)n). 해볼 것: 가장 약한 단계 하나만 이중화해도 전체가 크게 좋아진다. 단순화: 고장이 서로 독립이고 전환이 즉시 된다고 가정했다. 실제로는 같은 전원·같은 설정 실수처럼 함께 고장 나는 원인이 이중화의 효과를 깎는다.

핵심 정리

  1. 한 구간의 지연 = 처리 + 큐잉 + 전송(크기 ÷ 속도) + 전파(거리 ÷ 빛 속도). 장거리는 전파, 느린 링크는 전송, 혼잡한 망은 큐잉이 지배한다.
  2. ping의 min은 거리, max·mdev·지터는 큐의 변동, 손실은 혼잡이나 불량 링크를 보여 준다. traceroute에서 끝까지 유지되는 지연만 진짜이고 중간 홉의 튀는 값과 *는 대개 ICMP 처리 정책 탓이다.
  3. BDP = 대역폭 × RTT. TCP 윈도우가 이보다 작으면 처리율은 윈도우 ÷ RTT로 묶인다(64 KB, 150 ms → 약 3.5 Mbps).
  4. M/M/1 큐의 평균 지연은 1/(μ − λ). 이용률이 1에 다가가면 폭증한다. 큰 버퍼를 TCP가 채우면 버퍼블로트가 생기고, CoDel·FQ-CoDel 같은 AQM이 지연을 수 ms로 묶는다.
  5. QoS는 DSCP로 분류하고 우선순위·가중 공정 큐로 줄을 세우며, 토큰 버킷(r = 평균 속도, b = 버스트)으로 속도를 제한한다.
  6. 문제 해결은 링크 → IP·게이트웨이 → 외부 연결 → DNS → 포트·앱 순서로, 처음 실패하는 곳을 찾는다.
  7. 가용성은 직렬이면 곱해져 낮아지고 병렬이면 크게 높아진다. 99.9% = 연 8.76시간. 평균보다 p99가 체감을 결정한다.

확인 퀴즈

서울-뉴욕 회선을 10 Gbps에서 100 Gbps로 올렸다. 1,500바이트 패킷의 한쪽 방향 지연은 어떻게 되나?

11,000 km ÷ 20만 km/s ≈ 55 ms인 전파 지연에 비해 전송 지연(1.2 µs → 0.12 µs)은 무시할 만하다. 대역폭을 올려도 거리는 줄지 않는다.

traceroute에서 7번 홉만 RTT가 250 ms이고 8~12번 홉은 모두 40 ms 안팎이다. 가장 그럴듯한 해석은?

지나가는 패킷의 지연이라면 그 뒤 홉들에도 계속 나타나야 한다. 중간 홉만 튀는 것은 라우터의 제어용 CPU가 ICMP 생성을 뒤로 미루기 때문이다.

대역폭 10 Gbps, RTT 80 ms인 경로의 대역폭-지연 곱은?

1010 bps × 0.08 s = 8×108 비트 = 108 바이트 = 100 MB. 이만큼이 늘 길 위에 있어야 회선이 꽉 찬다.

집에서 대용량 사진을 클라우드에 올리는 동안 게임 핑이 25 ms에서 600 ms로 치솟았다. 가장 효과적인 대책은?

업로드가 업링크 버퍼를 가득 채운 버퍼블로트다. 버퍼를 키우면 더 나빠진다. AQM이 큐를 짧게 유지하고, FQ는 게임 패킷을 별도 줄에 세운다.

노트북의 IP 주소가 169.254.12.34로 나오고 게이트웨이가 비어 있다. 원인으로 가장 그럴듯한 것은?

169.254.0.0/16은 DHCP 응답이 없을 때 기기가 스스로 붙이는 링크 로컬 주소다(7장). 링크는 살아 있지만 IP 단계에서 막혔으니 그 위의 DNS나 앱을 볼 필요가 없다.

가용성 99.9%인 서버 두 대를 직렬로 놓은 경우와 병렬(한 대만 살아도 됨)로 놓은 경우를 차례로 고르면?

직렬은 0.999 × 0.999 ≈ 0.998, 병렬은 1 − 0.001² = 0.999999. 연간 중단으로 치면 약 17.5시간 대 약 32초다(고장이 독립이라는 가정에서).