컴퓨터들이 네트워크로 통신할 때는 서로 데이터를 주고받는 것이 핵심이다.
단순한 요청 하나, "이 웹페이지 좀 보여줘" 같은 것도 사실은 데이터 요청/응답의 일종이다.
그런데 컴퓨터 세계에서는 늘 규칙이 존재한다.
네트워크 통신도 마찬가지다.
현실에서 택배를 보낼 때를 떠올려보자.
무언가를 보내려면 당연히 필요한 것들이 있다:
📦 보낼 물건 (데이터)
🏠 출발지 주소
📍 도착지 주소
이 세 가지는 반드시 있어야 한다.
네트워크 세계도 이 원리를 그대로 따른다.
네트워크에서 데이터를 주고받는 과정을 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)이라고 부른다.
소켓을 만든다는 건,
❝나 지금부터 누군가랑 통신할 준비할게!❞
라고 운영체제에 말하는 것과 같다.
문을 만들고 나면,
이제 도로를 깔아서 목적지와 연결해야 한다.
하지만 네트워크 세계에서는
이 연결이 한 번에 뚝딱 만들어지지 않는다.
[나] 야, 출발해도 돼? (SYN)
[상대] 어, 받아줄게. 너는 누구? (SYN + ACK)
[나] 나 여기야. 고마워! (ACK)
→ 연결 완료!
이렇게 서로 연결되었음을 확인하는 3단계 과정이 필요하다.
이걸 우리는 TCP의 3-way handshake라고 부른다.
실제 코드에선connect()
함수가 이 과정을 대신 수행한다.
내부적으로 위와 같은 연결 확인 절차를 자동으로 처리해준다.
한번 문(= 소켓)을 만들고,
도로(= connect)를 깔아 연결이 되면,
그 다음부터는 자유롭게 데이터를 주고받을 수 있다.
감사합니다 맹쥐 교수님!! 네트워크 A+ 맞을게요