CSAPP 11장 | 소켓과 TCP/IP

맹쥐·2025년 5월 3일
23

정글-개발일지

목록 보기
22/24

컴퓨터는 어떻게 데이터를 주고받을까?

컴퓨터들이 네트워크로 통신할 때는 서로 데이터를 주고받는 것이 핵심이다.
단순한 요청 하나, "이 웹페이지 좀 보여줘" 같은 것도 사실은 데이터 요청/응답의 일종이다.

그런데 컴퓨터 세계에서는 늘 규칙이 존재한다.
네트워크 통신도 마찬가지다.

🧠 데이터를 보낼 때 필요한 건?

현실에서 택배를 보낼 때를 떠올려보자.
무언가를 보내려면 당연히 필요한 것들이 있다:

  • 📦 보낼 물건 (데이터)

  • 🏠 출발지 주소

  • 📍 도착지 주소

이 세 가지는 반드시 있어야 한다.
네트워크 세계도 이 원리를 그대로 따른다.


TCP / IP 4계층

네트워크에서 데이터를 주고받는 과정을 4단계로 나눈 개념 모델이다.
쉽게 말하면,

  1. 물건을 포장한다.
  2. 출발지를 적는다.
  3. 도착지를 적는다.
  4. 트럭에 실어 보낸다.

이렇게 택배를 보내는 각 단계를 책임지는 부서가 따로 나뉘어 있다고 보면 된다.

❗️ 여기서 중요한 점,
각 계층마다 "포장 규칙"이 있다.

예를 들어,
  • 물건은 빨간 박스로 포장하고,
  • 출발지는 궁서체
  • 도착지는 굴림체로
  • 트럭을 실을 때는 ~

네트워크에서도 마찬가지로,
각 계층마다 반드시 따라야 하는 규약(프로토콜)이 있다.


📦 TCP/IP 4계층 자세히 뜯어보기

계층하는 일데이터 단위대표 프로토콜
응용 계층사용자 입장에서 요청/응답을 처리함메시지HTTP, FTP, DNS
전송 계층데이터 조각내고 순서 관리, 신뢰성 보장세그먼트TCP, UDP
인터넷 계층목적지까지 어떻게 보낼지 결정패킷IP, ICMP
링크 계층실제로 옆 컴퓨터에게 신호 전송프레임Ethernet, Wi-Fi

예시로 살펴보자 !

예: 너가 웹에서 www.example.com을 연다.

  • 응용 계층 (HTTP)
    → 브라우저가 HTTP 규약에 따라, "GET /index.html" 요청을 만듦

  • 전송 계층 (TCP)
    → TCP 규약에 따라, 데이터를 잘게 나눠서 세그먼트로 포장하고, 순서 번호를 붙임

  • 인터넷 계층 (IP)
    → 목적지 IP 주소(예: 203.0.113.4)를 설정해 패킷으로 만듦

    우리가 흔히 말하는 IP 주소(203.0.113.4 같은 것)
    사실은 인터넷 계층에서 "주소를 쓰는 방식"을 정의한 규칙이다.
    즉,
    “컴퓨터 주소는 이렇게 네 자리 숫자(IPv4)로 표현하자~”
    라고 정해놓은 명명 규칙이 바로 IP 프로토콜인 것이다.

  • 링크 계층 (Ethernet)
    → 목적지 MAC 주소를 붙이고, 프레임으로 만들어 실제 전선 또는 Wi-Fi로 전송!


이 4단계를 거쳐서 만들어진 데이터는
겹겹이 포장된 하나의 “전송용 캡슐”이 된다.

마치 선물 상자를
내용물 → 박스 → 주소 → 택배차량 순으로 싸는 것처럼 말이다.

💊 캡슐화란?

이 과정을 전문 용어로 캡슐화(encapsulation)라고 부른다.
즉, 데이터를 계층별로 한 겹씩 싸서 보내는 과정이다.

그리고 데이터를 받을 때에도 반대로 진행된다.

보낼 땐:
응용 → 전송 → 인터넷 → 링크 계층 순서로 싸서 전송

받을 땐:
링크 → 인터넷 → 전송 → 응용 계층 순서로 포장을 하나씩 벗겨 읽는다.


자, 이때까지 데이터 포장방법을 배웠다.

이제 트럭이 물건을 운반하는 과정을 살펴보자.

트럭이 목적지까지 초행길이면?
먼저 트럭이 나가는 문을 뚫어놔야 한다.

이 문을 소켓(socket)이라고 부른다.

소켓을 만든다는 건,

❝나 지금부터 누군가랑 통신할 준비할게!❞
라고 운영체제에 말하는 것과 같다.


문을 만들고 나면,
이제 도로를 깔아서 목적지와 연결해야 한다.

하지만 네트워크 세계에서는
이 연결이 한 번에 뚝딱 만들어지지 않는다.

3-way handshake 란?

[나]   야, 출발해도 돼? (SYN)
[상대] 어, 받아줄게. 너는 누구? (SYN + ACK)
[나]   나 여기야. 고마워! (ACK)
→ 연결 완료!

이렇게 서로 연결되었음을 확인하는 3단계 과정이 필요하다.
이걸 우리는 TCP의 3-way handshake라고 부른다.

실제 코드에선connect() 함수가 이 과정을 대신 수행한다.
내부적으로 위와 같은 연결 확인 절차를 자동으로 처리해준다.

한번 문(= 소켓)을 만들고,
도로(= connect)를 깔아 연결이 되면,
그 다음부터는 자유롭게 데이터를 주고받을 수 있다.

profile
이유민

2개의 댓글

comment-user-thumbnail
2025년 5월 4일

감사합니다 맹쥐 교수님!! 네트워크 A+ 맞을게요

답글 달기
comment-user-thumbnail
2025년 5월 29일

유익한 글이였습니다~

답글 달기