소켓 프로그래밍을 위한 네트워크 구조 제대로 잡기
이번 포스트에서는 클라이언트-서버 모델 위에 실제 통신이 어떻게 이루어지는지를 다루는 네트워크 계층을 정리해 봅니다. 소켓 프로그래밍이 실제로는 전송 계층 수준에서 이뤄지는 작업이라는 점도 명확히 해두고 싶은데요. 이는 이후 실제 코드를 효율적으로 따라가기 위해 반드시 필요한 개념이라고 할 수 있습니다.
네트워크를 구성하는 요소들
- 호스트 (Host)
- 클라이언트나 서버 역할을 하는 컴퓨터
- 우리가 직접 소켓을 실행시키는 주체
- 링크 (Link)
- 유선/무선으로 두 장치를 연결하는 통로 (ex. 이더넷, Wi-Fi)
- 라우터 (Router)
- 데이터가 목적지까지 잘 도달하도록 경로를 설정해주는 중간 관리자
구조적으로 보면 데이터는 "Client Host → Link → Router → Link → Server Host" 순서로 흘러갑니다.
계층 모델로 이해하는 인터넷 구조
인터넷은 계층적으로 설계되어 있는데요. 우리가 소켓을 통해 다루게 되는 범위는 주로 상위 두 계층인 애플리케이션과 전송 계층입니다.
- 애플리케이션 계층: HTTP, FTP 등
- 전송 계층: TCP(신뢰성), UDP(속도 우선)
- 네트워크 계층: IP 주소 기반 라우팅
- 링크 계층: 실제 물리적 전송 (MAC 주소, 이더넷 등)
개발자들은 주로 애플리케이션 + 전송 계층에서 작업을 진행하기 때문에, 하위 계층은 추상화된 상태로 이해만 하는 것을 추천합니다.
패킷이 전달되는 방식 (캡슐화와 전달 경로)
- 상위 계층의 데이터는 하위 계층에서 헤더를 덧붙여 전달됨 (캡슐화)
- 클라이언트(상위 계층→하위 계층) → 링크 → 라우터 → 링크 → 서버(하위 계층→상위 계층)의 경로로 전달
- 각 계층에서 해당 헤더를 보고 필요한 작업을 수행한 뒤 다음 계층에 넘김
- 수신 측에서는 이 순서를 역캡슐화 하며 애플리케이션 계층까지 도달
TCP vs UDP: 어떤 상황에 어떤 전송 계층을 쓸까?
특징 | TCP | UDP |
---|---|---|
연결 방식 | 연결 지향 (3-way handshake) | 비연결 |
신뢰성 | 순서 보장, 데이터 무결성 보장 | 보장 없음 |
속도 | 느림 | 빠름 |
용도 | HTTP, FTP, 이메일 등 | 스트리밍, 게임, DNS 등 |
소켓 프로그래밍에서 연결의 신뢰성과 순서 보장이 필요하면 TCP를, 반응 속도가 중요하고 약간의 손실을 허용할 수 있다면 UDP를 사용합니다.
마치면서
이번 포스트에서는 우리가 다루게 될 네트워크의 추상적 구조와 각 계층의 역할, 그리고 TCP/UDP 전송 계층의 특성과 선택 기준까지 정리해 보았는데요. 이제 소켓을 쓸 때 내가 어느 계층에서 머무르고 있는지, 또 그 아래 계층들이 어떤 식으로 내 데이터를 전달하는지 이해할 수 있게 되었습니다.
다음 편에서는 이 네트워크 구조 위에서 소켓을 제대로 연결하고 데이터를 주고받기 위해 알아야 할 IP/Port, DNS, byte order, handshake 개념을 정리해볼 예정입니다. 감사합니다!
'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글
[CSAPP 11장 완전 정복] 11.4 rawdata 공유 (전체 학습 목표, 학습 정리 자료) (0) | 2025.05.02 |
---|---|
[CSAPP 11장 완전 정복] 11.3 IP, 포트, DNS, 바이트 순서까지, 실전 소켓 프로그래밍 개념 정리 (0) | 2025.05.01 |
[CSAPP 11장 완전 정복] 11.1 소켓 프로그래밍을 위한 클라이언트-서버 모델 개념 잡기 (0) | 2025.05.01 |
[CSAPP 6장 완전 정복] 6.6~6.7 캐시가 프로그램 성능에 미치는 영향 및 6장 전체 요약 (0) | 2025.04.30 |
[CSAPP 6장 완전 정복] 6.5 캐시 친화적인 코드 최적화 전략 알아보기 (0) | 2025.04.30 |