JUNSEOK
02 · 브라우저와 네트워크·22분·4개 레슨

네트워크 기초

OSI 7계층, TCP/IP, TCP vs UDP, DNS.

**"URL을 치면 무슨 일이 일어나나"**의 가장 낮은 레이어. 네트워크가 무엇인지부터 시작해서, OSI 계층 · TCP/UDP · DNS까지 한 번에 이해한다. 면접에서 갑자기 튀어나와도 당황하지 않을 수 있는 수준이 목표다.


1. 네트워크란 무엇인가

1-1. 가장 단순한 정의

"둘 이상의 컴퓨터가 서로 데이터를 주고받을 수 있도록 연결된 것."

두 대의 컴퓨터를 랜선으로 직접 연결하기만 해도 그것은 이미 네트워크다. 거기에 세 번째 컴퓨터가 들어오고, 그 묶음이 다른 건물의 묶음과 연결되고, 결국 전 세계가 연결된 것이 **인터넷(Internet = Inter-Network)**이다.

1-2. 물리적 실체

네트워크는 추상적 개념처럼 들리지만, 실제로는 전기/빛/전파 신호가 물리 매체 위를 흐르는 일이다.

  • 구리선 (Ethernet 케이블): 전기 신호로 0과 1을 표현
  • 광섬유 (Fiber): 빛의 점멸로 0과 1을 표현. 장거리 · 대용량에 쓰임
  • 전파 (Wi-Fi, 5G): 공기 중 전자기파로 전송

서울에서 뉴욕으로 패킷을 보내면, 실제로 해저 광케이블을 타고 간다. 인터넷은 "구름"이 아니라 물리적 선의 집합이다.

1-3. 왜 FE 개발자가 알아야 하는가

프론트엔드가 하는 거의 모든 일은 네트워크 위에서 일어난다.

  • 페이지 로딩: HTTP 요청으로 HTML/CSS/JS를 받음
  • API 호출: fetch()로 서버에 데이터 요청
  • 이미지, 폰트, 동영상 로딩
  • 로그인, 결제, 실시간 채팅

"왜 이 페이지가 느린가?", "왜 로그인이 풀리지?", "왜 이 요청만 CORS에 막히지?" — 이 질문들에 답하려면 네트워크의 바닥을 알아야 한다.


2. 클라이언트와 서버

2-1. 역할 분리

웹의 기본 구조는 **요청(Request)과 응답(Response)**이다.

[클라이언트]  ── "뭐 주세요" ──▶  [서버]
              ◀── "여기요" ────
  • 클라이언트(Client): 요청하는 쪽. 브라우저, 모바일 앱, 다른 서버
  • 서버(Server): 요청을 받아 응답하는 쪽. 24시간 켜져 있고, 인터넷 어디서나 접근 가능한 위치에 있음

식당 비유가 잘 맞는다. 손님이 메뉴를 주문하고, 주방이 음식을 만들어 내준다. 손님끼리는 직접 얘기하지 않는다 — 주방을 통해 간접적으로 연결될 수는 있어도.

2-2. "서버"라는 단어의 두 가지 의미

  • 하드웨어로서의 서버: 데이터센터에 있는 물리적 컴퓨터
  • 소프트웨어로서의 서버: 그 컴퓨터 위에서 돌아가는, 요청을 받는 프로그램 (nginx, Node.js 앱 등)

한 대의 하드웨어 서버가 여러 개의 소프트웨어 서버를 돌린다. 이게 가능한 이유가 바로 다음에 나올 "포트" 개념이다.

2-3. P2P는 예외

요즘은 P2P (Peer-to-Peer) 구조도 있다. 클라이언트-서버 구분 없이 서로가 서로에게 데이터를 준다. 비트토렌트, WebRTC가 그렇다. 하지만 웹의 99%는 클라이언트-서버 모델이다.


3. IP 주소 · 포트 · URL — 목적지를 찾아가는 법

3-1. IP 주소 — "어느 컴퓨터"

인터넷에 연결된 모든 컴퓨터는 IP 주소를 가진다. 우편 주소처럼, 패킷이 도착할 정확한 목적지를 식별한다.

142.250.204.46    ← 구글의 IP하나 (IPv4)

이 숫자 하나로 지구상 수십억 대 중 하나의 컴퓨터가 특정된다.

3-2. 포트 — "그 컴퓨터의 어느 프로그램"

한 컴퓨터 위에는 여러 프로그램이 돌 수 있다. 웹 서버, SSH 서버, 메일 서버, 데이터베이스... 이 중 어느 프로그램에 데이터를 전달할지 구분하는 숫자가 **포트(Port)**다. 0~65535 범위.

142.250.204.46 : 443
  ↑              ↑
  IP 주소        포트 (HTTPS)

비유: IP가 아파트 주소라면, 포트는 호수다. "101동 502호" = IP:포트.

알아둬야 할 포트 번호

포트프로토콜용도
80HTTP일반 웹
443HTTPS보안 웹
22SSH원격 접속
25, 587SMTP메일 발송
53DNS이름 ↔ IP 변환
3000, 5173, 8080(임의)로컬 개발 서버로 흔히 씀

브라우저는 http://...면 기본 80, https://...면 기본 443을 쓴다. 그래서 URL에 포트를 안 써도 된다.

3-3. URL 해부

https://api.example.com:443/users/1?active=true#section
└─┬─┘   └─────┬─────┘ └┬┘└──┬──┘└────┬────┘ └──┬──┘
 스킴     호스트      포트  경로      쿼리     프래그먼트
(프로토콜)              (생략 가능)           (서버 전송 X)
  • 스킴(Scheme): 어떤 프로토콜로 통신할지 (http, https, ws, ftp, file, mailto)
  • 호스트(Host): 도메인 또는 IP 주소
  • 포트: 스킴의 기본값과 다를 때만 명시
  • 경로(Path): 그 서버 안에서의 리소스 위치
  • 쿼리(Query): ?key=value&key2=value2 형태의 추가 파라미터
  • 프래그먼트(Fragment): #something. 서버로 전송되지 않음, 브라우저 내부에서 페이지 내 위치 지정용

⚠️ 함정: 프래그먼트는 서버에 전송 안 됨

fetch("/api/data#section1")  // 서버는 "/api/data"만 본다

해시 라우터(/#/about)가 새로고침 시 서버에 /about이 아니라 /로 가는 이유가 여기 있다.

3-4. 도메인과 IP의 관계

사람이 142.250.204.46을 외울 순 없다. 그래서 **도메인(Domain)**이라는 이름을 쓴다: google.com. 이 이름을 실제 IP로 바꿔주는 것이 DNS다 (7장에서 다룸).


4. 패킷 — 데이터가 쪼개져서 가는 이유

4-1. 패킷이란

큰 데이터를 그대로 한 번에 보내지 않는다. 작은 조각(패킷, Packet)으로 쪼개서 각각을 독립적으로 전송한다.

원본 파일 (100MB)
      ↓ 쪼갠다
[패킷1][패킷2][패킷3]...[패킷N]   ← 각자 헤더를 붙여 따로 출발

각 패킷에는 "어디로 가는지(목적지 IP), 몇 번째인지(시퀀스 번호), 어디서 왔는지(출발지 IP)" 정보가 붙는다.

4-2. 왜 쪼개는가

  1. 오류 회복: 큰 덩어리 중 일부가 손상되면 전체를 다시 보내야 한다. 쪼개두면 손상된 조각만 재전송.
  2. 공정성: 한 통신이 네트워크를 독점하지 않고, 여러 통신이 패킷 단위로 끼어들 수 있음.
  3. 경로 유연성: 각 패킷이 서로 다른 경로로 갈 수 있음. 한 경로가 혼잡하면 다른 길로.

4-3. 재조립

수신 측은 시퀀스 번호를 보고 순서대로 재조립한다. 중간에 몇 개가 늦게 도착해도, 빠진 번호를 기다렸다가 순서대로 합친다. 이 작업을 하는 레이어가 TCP다.


5. LAN · WAN · 인터넷

  • LAN (Local Area Network): 집, 사무실 같은 좁은 범위. 공유기 하나에 묶인 기기들.
  • WAN (Wide Area Network): LAN을 넘어선 넓은 범위. 도시, 국가, 전 세계.
  • 인터넷: 전 세계의 WAN이 연결된 거대한 네트워크.
[내 PC] ── [공유기] ── [ISP] ── [인터넷 백본] ── [구글 ISP] ── [구글 서버]
         LAN          WAN          인터넷         WAN         LAN

ISP(Internet Service Provider, KT/SKB/LG U+ 등)가 집의 LAN을 인터넷에 연결해주는 사업자다.


6. 왜 계층으로 나누는가

네트워크는 복잡하다. 전기 신호, 프레임, 패킷, 세션, 암호화, 애플리케이션 프로토콜 — 이걸 한 덩어리로 이해하는 것은 불가능하다. 그래서 역할별로 계층(Layer)을 쪼갠다. 각 계층은 위/아래 계층의 내부 구현을 몰라도 된다.

FE 개발자에게 이 추상화는 익숙하다. <Button> 컴포넌트는 div의 내부 렌더링을 몰라도 되고, fetch()는 TCP 재전송을 몰라도 된다.

6-1. OSI 7계층

이론적 모델. 외울 필요 없고 흐름으로 이해한다.

계층이름담당예시
7응용 (Application)앱이 보는 데이터HTTP, DNS, SMTP
6표현 (Presentation)인코딩, 암호화TLS, JPEG
5세션 (Session)연결 세션 관리(거의 전송 계층에 흡수됨)
4전송 (Transport)종단 간 신뢰성TCP, UDP
3네트워크 (Network)라우팅IP
2데이터 링크프레임, MAC 주소Ethernet, Wi-Fi
1물리전기 신호구리선, 광케이블

6-2. TCP/IP 4계층

현실에서 실제로 구현되는 모델. OSI를 단순화한 것.

계층OSI 매핑예시
응용5-7HTTP, DNS, TLS
전송4TCP, UDP
인터넷3IP, ICMP
네트워크 접근1-2Ethernet, Wi-Fi

6-3. 캡슐화 (Encapsulation)

데이터는 하위 계층으로 내려갈 때마다 헤더가 붙는다.

[HTTP 요청]                                        ← 응용 레이어
[TCP 헤더][HTTP 요청]                              ← 전송 레이어
[IP 헤더][TCP 헤더][HTTP 요청]                     ← 네트워크 레이어
[Ethernet 헤더][IP 헤더][TCP 헤더][HTTP 요청][꼬리] ← 링크 레이어

수신 측에서는 역순으로 헤더를 벗겨낸다. 이 "캡슐화" 덕분에 각 계층이 서로의 내부를 몰라도 되는 것이다.

비유: 편지를 봉투에 넣고, 봉투를 택배 상자에 넣고, 상자를 트럭에 싣는다. 받는 쪽은 트럭에서 상자를 꺼내고, 봉투를 꺼내고, 편지를 읽는다. 각 단계는 자기 층만 알면 된다.


7. IP 주소와 라우팅

7-1. IPv4와 IPv6

  • IPv4: 32비트. 192.168.0.1 형태. 약 43억 개 — 이미 고갈.
  • IPv6: 128비트. 2001:db8::1 형태. 사실상 무한.

IPv4 고갈로 **NAT (Network Address Translation)**을 쓴다. 공유기 하나가 공인 IP 1개 뒤로 수십 대의 내부 기기를 숨긴다. 그래서 집의 PC가 192.168.x.x 같은 사설 IP를 가지는 것이다.

구분공인 IP사설 IP
범위인터넷 전체에서 유일LAN 내부에서만 유일
142.250.204.46192.168.0.10
용도서버, 공유기의 외부 면집 PC, 스마트폰

localhost와 127.0.0.1

127.0.0.1 = localhost = "내 컴퓨터 자기 자신"

로컬 개발 서버를 http://localhost:3000으로 여는 것은 내 컴퓨터의 3000번 포트에 접속한다는 뜻.

7-2. 라우팅

패킷은 목적지 IP만 들고 길을 찾아간다. 각 라우터는 "목적지가 이쪽이면 저쪽으로" 테이블을 유지하고 전달한다. 홉(hop) 단위로 이동한다.

[내 PC] → [공유기] → [ISP 라우터] → [백본 라우터 1] → ... → [구글]

                     각 홉마다 다음 경로 결정

traceroute google.com을 해보면 내 요청이 몇 홉을 거쳐 가는지 실제로 보인다. 보통 10~20 홉, 해외 서버는 30 홉 이상.

7-3. 게이트웨이

LAN의 기기가 외부로 나갈 때 거치는 출입구 역할의 라우터. 집의 공유기가 LAN의 게이트웨이다. 패킷의 목적지가 LAN 내부가 아니면 게이트웨이로 보낸다.


8. TCP vs UDP — 전송 계층의 두 얼굴

8-1. 비교

TCPUDP
연결3-way handshake 필요비연결
신뢰성순서, 재전송 보장없음
혼잡 제어O (느려질 수 있음)X
오버헤드큼 (헤더 20~60B)작음 (8B)
용도HTTP, SSH, 파일 전송DNS, 영상 스트림, 게임, HTTP/3

8-2. TCP: "신뢰성 있는 파이프"

  • 데이터는 순서대로 도착
  • 유실되면 재전송
  • 수신자가 버거우면 송신자가 속도 늦춤 (흐름 제어)
  • 네트워크가 혼잡하면 알아서 느려짐 (혼잡 제어)

비유: 등기 우편. 받는 사람이 도장 찍어야 완료되고, 못 받았다 하면 다시 보낸다. 대신 느리고 절차가 많다.

대가: 연결 수립에 RTT가 필요, 헤더가 크다, 재전송 대기가 생긴다.

8-3. UDP: "그냥 던진다"

  • 연결 수립 없이 바로 전송
  • 유실돼도 모른다
  • 순서 섞일 수 있다

비유: 엽서. 주소 적고 그냥 우체통에 넣는다. 도착 확인 없음. 대신 빠르고 간단.

장점: 빠르고 가볍다. 실시간 영상 스트림은 한 프레임 빠진 게 낫지, 재전송 기다리는 동안 화면 멎는 게 더 나쁘다.

HTTP/3이 UDP 위에서 동작하는 이유도 여기에 있다 — "TCP의 신뢰성을 UDP 위에 앱 레이어(QUIC)에서 다시 구현"해서, TCP의 구식 혼잡 제어를 벗어났다.

8-4. RTT (Round Trip Time)

왕복 시간. 패킷이 상대까지 갔다 오는 데 걸리는 시간. TCP 연결 수립이 "1-RTT"라는 건 패킷이 한 번 왕복할 시간이 걸린다는 뜻.

  • 같은 도시: 5~20ms
  • 한국 ↔ 일본: 30~50ms
  • 한국 ↔ 미국 서부: 100~150ms
  • 한국 ↔ 유럽: 250~350ms

RTT는 빛의 속도와 지리적 거리에 묶여 있어, 아무리 최적화해도 물리적으로 줄일 수 없다. 그래서 CDN(엣지 서버)을 사용자 근처에 둔다.


9. 3-way / 4-way Handshake

9-1. 3-way Handshake (연결 수립)

클라이언트              서버
   │─────── SYN ──────→│    (연결 요청, 시퀀스 번호 x)
   │←──── SYN+ACK ─────│    (수락, 시퀀스 번호 y, ack=x+1)
   │─────── ACK ──────→│    (확정, ack=y+1)

3번의 왕복으로 양쪽이 "상대가 내 신호를 받을 수 있음"을 확인한다. 이제 데이터 전송 시작.

  • SYN (Synchronize): "연결 시작하자"
  • ACK (Acknowledge): "알았음"

9-2. 왜 3번인가

  • 1번: 클라→서버 방향만 확인
  • 2번: 서버가 클라의 응답 능력을 확인 못 함
  • 3번: 양쪽 다 상대의 송수신 가능 확인
  • 4번: 2, 3번째를 합쳐(SYN+ACK) 불필요

9-3. 4-way Handshake (연결 종료)

클라이언트              서버
   │─────── FIN ──────→│    (더 보낼 것 없음)
   │←─────── ACK ──────│    (알았음)
   │                   │    (서버 쪽 나머지 데이터 전송)
   │←─────── FIN ──────│    (서버도 종료)
   │─────── ACK ──────→│    (알았음)

양방향 종료를 독립적으로 처리한다. 한쪽이 먼저 끝나도 다른 쪽은 계속 보낼 수 있다.

9-4. TIME_WAIT 상태

마지막 ACK를 보낸 쪽은 잠시 (보통 2×MSL, 약 4분) TIME_WAIT 상태에 머문다. 왜?

  1. 마지막 ACK가 유실됐을 경우, 상대가 FIN을 재전송할 수 있음 → 내가 응답해야 함
  2. 같은 포트로 새 연결이 열렸을 때, 예전 연결의 지연된 패킷과 섞이는 걸 방지

MSL (Maximum Segment Lifetime): 패킷이 네트워크에서 살아 있을 수 있는 최대 시간. 표준은 2분.

서버에 TIME_WAIT이 대량으로 쌓이면 포트가 부족해 새 연결을 못 맺는 문제가 생긴다. SO_REUSEADDR, tcp_tw_reuse 등으로 튜닝.


10. 흐름 제어와 혼잡 제어

10-1. 흐름 제어 (Flow Control)

수신자 버퍼 기준. 수신자가 "지금 창이 N바이트 남았다"고 광고(Window Size). 송신자는 그 이상 안 보낸다.

비유: 접시 한 개를 닦는 속도로만 설거지통에 접시를 내준다. 쌓이면 받아낼 수 없으니까.

10-2. 혼잡 제어 (Congestion Control)

네트워크 전체 기준. 손실이 감지되면 "네트워크가 혼잡하다"고 판단하고 속도를 줄인다.

  • Slow Start: 시작은 작게, 매 RTT마다 2배로 올림
  • Congestion Avoidance: 어느 임계점(threshold) 이후 1씩 증가
  • Fast Retransmit / Fast Recovery: 손실 감지 시 빠른 복구

AIMD (Additive Increase Multiplicative Decrease)

  • 잘 되면 1씩 증가 (더하기)
  • 손실이 나면 반으로 뚝 떨어뜨림 (곱하기)

이 패턴 덕분에 여러 TCP 연결이 있어도 자동으로 대역폭이 공평하게 분배된다.

10-3. 흐름 vs 혼잡

흐름 제어혼잡 제어
대상종단 (end-to-end)네트워크 전체
트리거수신자 버퍼손실 감지
광고 방식Window Size암묵적 (손실로 추론)

11. DNS — 이름을 IP로 바꾸는 인터넷 전화번호부

11-1. DNS는 무엇인가

이름 → IP 주소 변환 서비스. google.com142.250.204.46.

google.com을 직접 외워 치는 사람은 없다. 하지만 컴퓨터는 IP로만 통신할 수 있다. 이 갭을 메우는 게 DNS다.

11-2. 계층 구조

.              ← 루트 (Root)
com            ← TLD (Top-Level Domain)
google.com     ← SLD (Second-Level Domain)
www.google.com ← 호스트

DNS 서버도 이 계층을 그대로 따른다. **Root 서버 13개(실제론 Anycast로 수백 대)**가 TLD 서버를 안내, TLD 서버가 권한 서버(Authoritative)를 안내, 권한 서버가 실제 IP를 안다.

11-3. 실제 DNS 조회 흐름

www.google.com을 쳤을 때:

1. 브라우저 캐시 확인         → 없으면
2. OS hosts 파일 확인         → 없으면
3. OS DNS 캐시 확인           → 없으면
4. ISP DNS 서버에 질의        → ISP 캐시에 없으면
5. ISP DNS가 Root에 질의      → "com 서버는 여기"
6. ISP DNS가 com TLD에 질의   → "google.com 권한 서버는 여기"
7. ISP DNS가 권한 서버에 질의 → "www.google.com은 142.250.204.46"
8. 응답을 각 단계에서 캐시하며 브라우저까지 전달

11-4. 재귀 질의 vs 반복 질의

  • 재귀 질의: "어떻게든 답을 가져와라"는 요청. 내 로컬 DNS(ISP 등)에게 하는 질의.
  • 반복 질의: 로컬 DNS가 Root → TLD → Authoritative로 단계별로 질의하는 것.

11-5. 캐싱 계층

브라우저 캐시 → OS 캐시 → ISP DNS 캐시 → 권한 서버
(가장 짧음)                              (가장 긺, TTL 따름)

각 캐시가 TTL (Time To Live) 동안 응답을 기억한다. TTL이 짧으면 변경이 빨리 전파되지만 DNS 조회가 잦아지고, 길면 반대.

11-6. DNS 레코드 타입

타입용도
AIPv4 주소
AAAAIPv6 주소
CNAME다른 도메인의 별칭
MX메일 서버
TXT임의 텍스트 (SPF, DKIM 등)
NS이 도메인의 권한 서버

11-7. ⚠️ 함정: DNS 변경이 즉시 반영되지 않는 이유

배포 때 도메인을 새 서버로 옮겨도 기존 TTL이 만료되기 전까지 옛 IP로 가는 사용자가 있다. 마이그레이션 직전에 TTL을 짧게 줄이고, 바뀐 뒤 원복하는 관례가 있다.

11-8. DNS over HTTPS (DoH)

기존 DNS는 평문. ISP가 질의를 엿보거나 변조 가능. DoH는 HTTPS로 감싼 DNS. Cloudflare 1.1.1.1, Google 8.8.8.8이 DoH를 제공한다.


12. URL을 치면 일어나는 일 (전체 흐름)

지금까지의 내용을 묶은 시간 순서.

1. URL 파싱
   "https://www.google.com/search?q=cs"
   → scheme=https, host=www.google.com, path=/search, query=q=cs

2. DNS 조회
   브라우저 캐시 → OS 캐시 → ISP DNS → (필요시) Root → TLD → 권한 서버
   결과: 142.250.204.46

3. TCP 3-way handshake (142.250.204.46:443 으로)
   SYNSYN+ACKACK

4. TLS 핸드셰이크 (HTTPS이므로)
   ClientHello → ServerHello + 인증서 → 키 교환 → Finished

5. HTTP 요청 전송
   GET /search?q=cs HTTP/1.1
   Host: www.google.com
   ...

6. 서버 처리 + 응답
   HTTP/1.1 200 OK
   Content-Type: text/html
   <html>...</html>

7. 브라우저가 HTML 수신 → 파싱 시작
   (3~7 단계는 keep-alive로 연결을 재사용할 수 있음)

8. HTML리소스 (CSS, JS, 이미지) 추가 요청
2~7 반복 (하지만 DNS·TCP·TLS는 재사용)

9. 연결 종료 (또는 keep-alive 유지)
   4-way handshake

이후 응답 HTML을 파싱하고, 필요한 리소스를 다시 요청하고, 렌더링 — 여기부터는 2-5. 브라우저 렌더링 과정의 영역.


연습 문제

  1. fetch('https://api.example.com/data')가 데이터를 받기까지 거치는 모든 단계를 계층별로 나열하라.
  2. TCP가 신뢰성을 보장하는 메커니즘 3가지를 들고 각각이 필요한 이유를 설명하라.
  3. 3-way handshake가 왜 3번인가? 2번이면 왜 안 되는가?
  4. TIME_WAIT이 존재하는 이유 2가지를 설명하라.
  5. DNS 레코드 변경 후 사용자에게 즉시 반영되지 않는 이유를 TTL과 캐싱 계층으로 설명하라.
  6. 영상 스트리밍이 UDP를 쓰는 이유를, "한 프레임 빠지는 것 vs 기다리는 것" 관점에서 설명하라.
  7. HTTP/3이 UDP 위에서 동작함에도 신뢰성을 제공할 수 있는 이유를 설명하라.
  8. 집의 PC가 192.168.0.10을 쓰는데도 외부 사이트에 접속할 수 있는 이유를 NAT 관점에서 설명하라.
  9. URL에서 프래그먼트(#section)가 서버로 전송되지 않는 사실이 SPA 라우팅에 어떤 영향을 주는가?
  10. 한국에서 미국 서버까지의 RTT가 왜 물리적으로 줄어들 수 없는지 설명하라.

연습 문제 정답

1. fetch의 전체 단계

0. URL 파싱
1. DNS 조회 (브라우저→OSISP→권한 서버, TTL 동안 캐시 재사용)
2. TCP 3-way handshake (대상 IP:443)
3. TLS 1.3 핸드셰이크 (1-RTT)
4. HTTP 요청 전송 (GET ... HTTP/1.1 ... 헤더 ... body)
5. 서버 처리 + 응답 수신
6. 연결 유지(keep-alive) 또는 4-way 종료

계층별로는:
- 응용: HTTP, TLS, DNS
- 전송: TCP
- 네트워크: IP 라우팅
- 링크: Ethernet/Wi-Fi

2. TCP 신뢰성 3가지

  • 시퀀스 번호 + ACK: 패킷 순서 보장 및 수신 확인. 없으면 순서가 뒤섞임.
  • 재전송 타이머: ACK가 일정 시간 안 오면 재전송. 네트워크가 불안정해도 데이터 전달 보장.
  • 체크섬: 패킷 오류 감지 → 폐기 후 재전송 유도. 비트 변조를 잡음.

흐름 제어(버퍼 오버플로우 방지), 혼잡 제어(네트워크 전체 공정성)도 TCP의 역할.

3. 왜 3-way

  • 1-way: 클라→서버 방향만 확인
  • 2-way: 서버가 클라의 응답 능력을 확인 못 함
  • 3-way: 양쪽 다 상대의 송수신 가능 확인
  • 4번째는 2, 3번째와 합쳐 보낼 수 있어 불필요

4. TIME_WAIT 이유

  • 지연된 마지막 ACK가 유실됐을 때 상대의 FIN 재전송에 응답해야 함
  • 같은 포트를 재사용하는 새 연결에 예전 연결의 지연 패킷이 섞이는 것을 방지

5. DNS 변경 지연

TTL 동안 각 중간 계층(브라우저, OS, ISP)이 옛 IP를 캐시. TTL 만료 전까지 옛 IP로 응답. 예: TTL이 3600(1시간)이면 최악의 경우 1시간 동안 옛 서버로 트래픽이 간다.

6. UDP와 영상

재전송을 기다리면 화면 정지. 프레임 하나 잃고 다음 프레임 띄우는 게 체감 품질이 낫다. 실시간성이 신뢰성보다 중요한 맥락.

7. HTTP/3과 UDP

UDP는 단지 "전송 파이프". HTTP/3은 UDP 위에서 QUIC이라는 애플리케이션 레이어 프로토콜로 TCP가 하던 일(순서, 재전송, 혼잡 제어)을 재구현. 장점은:

  • 스트림별 독립성 → TCP 레벨 HOL Blocking 없음
  • TLS와 연결 수립을 합쳐 더 적은 RTT
  • 연결 마이그레이션 (Wi-Fi ↔ LTE 전환에서 연결 유지)

8. NAT와 사설 IP

공유기가 사설 IP ↔ 공인 IP를 매핑한다. 집 PC가 외부로 요청할 때 공유기가 "내 공인 IP"로 바꿔 보내고, 응답이 오면 어느 사설 IP가 요청했는지 테이블을 보고 되돌려준다. 그래서 내부 기기는 192.168.x.x여도 외부와 소통 가능.

9. 프래그먼트와 SPA 라우팅

해시 라우터(/#/about)는 서버에 /만 보낸다. 새로고침해도 서버가 /만 처리하면 되므로 서버 설정이 단순. 반면 HTML5 History API(/about)를 쓰면 서버가 모든 경로를 index.html로 fallback 처리해줘야 한다.

10. RTT와 빛의 속도

패킷은 전기/빛 신호로 전달되므로 빛의 속도가 상한. 한국↔미국 서부는 광케이블로 왕복 9000km 이상 → 이론적 최소 RTT도 30ms 이상. 실제로는 라우터 홉과 혼잡으로 100~150ms. 이 물리적 하한 때문에 사용자 근처에 CDN/엣지 서버를 두는 방식이 필요하다.


체크리스트

  • 네트워크의 물리적 실체(케이블·전파·해저케이블)를 설명할 수 있다
  • 클라이언트-서버 모델의 기본 흐름을 그릴 수 있다
  • IP 주소와 포트의 관계를 "아파트 주소와 호수"로 설명할 수 있다
  • URL의 각 부분(스킴/호스트/포트/경로/쿼리/프래그먼트)을 구분할 수 있다
  • 패킷으로 쪼개서 보내는 이유를 3가지 이상 들 수 있다
  • LAN/WAN/인터넷의 관계를 설명할 수 있다
  • OSI 7계층과 TCP/IP 4계층의 매핑을 안다
  • 캡슐화가 각 계층을 독립시키는 원리를 안다
  • IPv4와 IPv6의 차이, NAT의 존재 이유, 사설 IP 개념을 안다
  • TCP와 UDP의 특성과 용도를 구분할 수 있다
  • RTT의 개념과 물리적 하한을 안다
  • 3-way handshake를 그릴 수 있다
  • 4-way handshake와 TIME_WAIT의 이유를 설명할 수 있다
  • 흐름 제어와 혼잡 제어를 구분할 수 있다
  • AIMD와 Slow Start의 개념을 안다
  • DNS의 계층 구조와 캐싱 단계를 안다
  • 재귀 질의와 반복 질의의 차이를 안다
  • DNS 레코드 타입 (A/AAAA/CNAME/MX/TXT) 용도를 안다
  • URL 입력부터 응답까지의 전체 흐름을 순서대로 말할 수 있다

다음: 2-2. HTTP와 HTTPS

진도 체크시작 전
NEXT · 2-2

HTTP와 HTTPS

HTTP 1.1/2/3 차이, TLS 1.3 핸드셰이크, 인증서.

이어서 학습하기 →