네트워크 기본

Tasker_Jang·2026년 8월 31일
post-thumbnail

1. 우리는 edge에 있고, core에는 router가 있다

인터넷은 크게 network edge(네트워크 엣지)와 network core(네트워크 코어)로 나뉩니다. 노트북, 휴대폰, 서버 같은 end system은 모두 edge에 있습니다. 우리가 배포하는 서비스도 여기 있습니다. core에는 router(라우터)가 있고, 하는 일은 하나입니다. 들어온 데이터를 목적지 방향으로 넘겨주는 것.

여기서 server(서버)의 정의도 담백해집니다. 24시간 켜져 있으면서 고정된 주소로 클라이언트의 요청을 기다리는 쪽이 서버입니다. 특별한 하드웨어가 아니라 "먼저 말을 걸지 않고 기다리는 역할"이 서버를 서버로 만듭니다.

2. edge가 고를 수 있는 두 가지 서비스

edge에 있는 애플리케이션은 통신 방식을 고를 수 있습니다. connection-oriented service(연결 지향 서비스)인 TCP와, connectionless service(비연결형 서비스)인 UDP입니다.

TCPUDP
역할연결을 맺고 byte stream을 순서대로 전달데이터그램을 그냥 던짐
신뢰성reliable, in-order 보장. 유실 시 재전송보장 없음. 유실·순서 뒤바뀜 그대로
오버헤드연결 설정, ACK, flow control(흐름 제어), congestion control(혼잡 제어)거의 없음
쓰이는 곳웹, 파일 전송, 메일실시간 스트리밍, DNS 조회, 게임

TCP가 제공하는 flow control과 congestion control이 각각 무엇을 막아주는지는 전송 계층 편에서 본격적으로 다룹니다. 지금은 "TCP는 대가를 치르고 신뢰성을 사고, UDP는 대가를 치르지 않는 대신 아무것도 사지 않는다" 정도로 충분합니다.

3. packet과 protocol

packet(패킷)은 보내려는 데이터를 일정 크기로 자른 뒤, 어디로 가야 하는지 적은 header(헤더)를 붙인 덩어리입니다. 100MB 파일을 통째로 보내지 않고 잘게 쪼개는 이유는 뒤에서 계속 나옵니다. 일부만 실패해도 그 조각만 다시 보내면 되고, 여러 사용자가 링크를 번갈아 쓸 수 있기 때문입니다.

protocol(프로토콜)은 그 header를 어떻게 쓰고 어떤 순서로 메시지를 주고받을지 정한 통신 규약입니다. 사람으로 치면 "여보세요"를 먼저 말하기로 한 약속입니다.

4. circuit switching vs packet switching

core가 데이터를 나르는 방식은 역사적으로 두 갈래였습니다.

circuit switchingpacket switching
방식출발지-목적지 사이에 경로를 미리 잡고 그 사용자만 씀패킷마다 그때그때 올바른 방향으로 넘김
자원예약된 대역폭을 독점, 안 써도 놀림필요한 순간에만 링크 사용
성능일정한 성능 보장보장 없음, 대신 훨씬 많은 사용자 수용
전통적인 전화망인터넷

인터넷은 packet switching을 택했습니다. 사용자의 트래픽은 대체로 bursty하기 때문입니다. 잠깐 몰아 쓰고 한참 쉬는 패턴에서 회선을 통째로 예약해 두는 것은 낭비입니다. 대신 대가가 따릅니다. 아무도 자리를 예약해 주지 않으므로, 붐비면 밀립니다.

5. packet switching이 치르는 대가: 네 가지 delay

패킷 하나가 노드를 통과할 때 겪는 지연은 네 가지로 나뉩니다. 전체 지연은 이 넷의 합입니다.

지연무엇을 기다리나계산줄이는 방법
nodal processing헤더를 보고 어느 링크로 보낼지 결정고정에 가까움라우터 성능, forwarding 단순화
queueing큐에 있는 앞 패킷들이 빠지기를 대기공식 없음. traffic intensity에 의존트래픽 분산, 링크 증설
transmission패킷 전체를 링크에 밀어 올리는 시간L / R (L=패킷 크기, R=링크 속도)R 키우기, L 줄이기
propagation비트가 물리적으로 링크를 건너는 시간d / s (s는 매질 전파 속도)거리 자체를 줄이기

패킷 길이를 L 비트, 링크 전송률을 R bps라고 하면 transmission delay는 L/R입니다. 네 개 중 셋은 비교적 예측 가능한데, queueing delay만 다릅니다. 패킷 도착률 a, 패킷 길이 L, 링크 처리율 R일 때 La/R을 traffic intensity라고 하며, 이 값이 1에 가까워질수록 큐잉 지연이 급격히 커집니다. 1을 넘으면 큐는 끝없이 쌓입니다.

6. loss와 dumb core

그런데 실제 큐는 유한합니다. 그래서 무한히 밀리는 대신 다른 일이 벌어집니다. 큐가 가득 찬 상태에서 도착한 패킷은 라우터가 버립니다. 즉 인터넷에서 packet loss(패킷 손실)는 대부분 전선이 끊겨서가 아니라 큐가 넘쳐서 생깁니다.

그러면 잃어버린 패킷은 누가 되살릴까요. 라우터가 대신 챙겨줄 것 같지만 아닙니다. 라우터는 버리고 잊습니다. 재전송은 양 끝단, 즉 edge의 TCP가 알아서 감지하고 다시 보냅니다. 이것이 dumb core(멍청한 코어)라는 표현의 의미입니다. 복잡한 판단과 자원 관리는 가장자리에서 하고, 코어는 최대한 단순하게 두는 설계 원칙입니다.

이 결정 하나가 인터넷의 성격을 거의 전부 설명합니다. 코어가 단순하니 라우터는 빠르고 싸게 만들 수 있었고, 새로운 애플리케이션은 코어를 고치지 않고도 등장할 수 있었습니다. 대신 신뢰성이라는 숙제가 통째로 양 끝단에 떠넘겨졌습니다. 앞으로 볼 전송 계층 내용의 상당 부분은 이 떠넘겨진 숙제를 푸는 이야기입니다.

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글