1. OSI 7계층 & TCP/IP 4계층
네트워크 통신 과정을 이해하기 쉽게 계층별로 나눈 모델이 바로 OSI 7계층과 TCP/IP 4계층입니다. OSI 모델은 통신의 전체 과정을 7단계로 정교하게 나누어 설명하는 개념 모델이며, TCP/IP 모델은 현재 인터넷에서 실제로 사용되는 실용적인 모델입니다.
OSI 7계층 (Open Systems Interconnection model)
국제표준화기구(ISO)가 제정한 개념 모델입니다. 통신 과정을 7개의 추상화된 계층으로 나누어 설명하며, "네트워크가 어떻게 동작해야 하는가?"에 대한 청사진을 제시합니다.
TCP/IP 4계층 (TCP/IP model)
현재 인터넷에서 실제로 사용되는 프로토콜 스택을 4개의 계층으로 단순화한 실용 모델입니다.
| OSI 7계층 | TCP/IP 4계층 | 주요 역할 |
|---|
| 7. 응용 (Application) | 4. 응용 (Application) | 사용자 서비스 제공 (HTTP, FTP, DNS) |
| 6. 표현 (Presentation) | | 데이터 변환, 암호화, 압축 |
| 5. 세션 (Session) | | 통신 세션 수립 및 관리 |
| 4. 전송 (Transport) | 3. 전송 (Transport) | 종단 간 신뢰성 있는 전송 (TCP, UDP) |
| 3. 네트워크 (Network) | 2. 인터넷 (Internet) | 경로 탐색, IP 주소 할당 (IP, ICMP) |
| 2. 데이터 링크 (Data Link) | 1. 네트워크 액세스 | 물리적 주소(MAC) 사용, 오류 검출 |
| 1. 물리 (Physical) | | 0과 1의 전기 신호 전송 |
2. 핵심 원리: 데이터 캡슐화 (Encapsulation)
OSI 7계층을 이해하는 가장 중요한 열쇠는 캡슐화입니다.
데이터를 보낼 때(송신) 데이터는 7계층에서 1계층으로 내려갑니다. 이때 각 계층은 데이터에 헤더(Header)라는 자신의 정보를 덧붙입니다.
이는 마치 편지를 봉투에 넣고, 그 봉투를 다시 택배 상자에 넣는 과정과 같습니다.
- 7계층 (응용): 사용자 데이터 (Data)
- 4계층 (전송): 7계층 데이터 + TCP/UDP 헤더 = 세그먼트 (Segment)
- 3계층 (네트워크): 세그먼트 + IP 헤더 = 패킷 (Packet)
- 2계층 (데이터 링크): 패킷 + 이더넷 헤더/트레일러 = 프레임 (Frame)
- 1계층 (물리): 프레임이 비트(Bit) 신호로 변환되어 전송
데이터를 받는 쪽(수신)은 이 과정을 거꾸로 수행합니다. 1계층부터 7계층으로 올라오면서 각 계층에 맞는 헤더를 하나씩 제거(디캡슐화)하며 최종 데이터를 얻습니다.
3. OSI 7계층 상세 설명
7계층: 응용 계층 (Application Layer)
- 역할: 사용자가 네트워크에 접근할 수 있도록 최종 인터페이스를 제공합니다. 우리가 사용하는 크롬, 파일질라, 아웃룩 같은 프로그램들이 이 계층에서 동작합니다.
- 주요 프로토콜:
- HTTP/HTTPS: 웹 서핑
- FTP: 파일 전송
- SMTP: 이메일 전송
- DNS: 도메인 이름을 IP 주소로 변환
- DHCP: IP 주소 자동 할당
6계층: 표현 계층 (Presentation Layer)
- 역할:
번역기 역할을 합니다. 시스템마다 다른 데이터 표현 방식(e.g., ASCII, EBCDIC)을 공통된 형식으로 변환합니다.
- 주요 기능:
- 데이터 암호화/복호화: (e.g., SSL/TLS)
- 데이터 압축/해제: 데이터 용량을 줄여 전송 효율을 높입니다.
- 포맷 변환: JPEG, MPEG, GIF 등
5계층: 세션 계층 (Session Layer)
- 역할:
대화 관리자입니다. 두 응용 프로그램 간의 세션(연결)을 수립, 유지, 관리, 종료합니다.
- 주요 기능:
- 동기화: 통신이 끊겼을 때, 마지막 동기화 지점(Checkpoint)부터 재개할 수 있도록 합니다. (e.g., 대용량 파일 다운로드 이어받기)
- 대화 제어: 데이터 전송 방식을 결정합니다. (e.g., 전이중(Full-duplex), 반이중(Half-duplex))
4계층: 전송 계층 (Transport Layer)
- 역할:
종단 간(End-to-End), 즉 출발지 컴퓨터에서 목적지 컴퓨터까지의 신뢰성 있고 정확한 데이터 전송을 책임집니다.
- 핵심 기능:
- 프로토콜 결정: TCP (신뢰성) 또는 UDP (속도)를 사용합니다.
- 포트 번호(Port Number): IP 주소가 컴퓨터를 찾는 주소라면, 포트 번호는 그 컴퓨터 안의 특정 응용 프로그램(프로세스)을 찾는 주소입니다. (e.g., HTTP=80번, HTTPS=443번)
- 분할 및 재조립 (Segmentation): 큰 데이터를 작은
세그먼트 단위로 나누고, 수신 측에서 다시 조립합니다.
- 오류 제어 및 흐름 제어: (TCP의 경우)
3계층: 네트워크 계층 (Network Layer)
- 역할: IP 주소를 사용하여 데이터를 목적지까지 전달할 최적의 경로를 찾는(
Routing) 역할을 합니다.
- 핵심 기능:
- 논리 주소 (IP 주소): 전 세계에서 유일하게 식별 가능한 주소를 데이터(패킷)에 부여합니다.
- 라우팅: 라우터 장비가 라우팅 테이블을 참조하여 패킷을 다음 목적지로 중개합니다.
- 장비: 라우터(Router)
2계층: 데이터 링크 계층 (Data Link Layer)
- 역할: 동일 네트워크(LAN) 내에서 데이터를 안전하게 전송합니다. 물리 계층에서 발생할 수 있는
오류를 감지하고 수정합니다.
- 핵심 기능:
- 물리 주소 (MAC 주소): 장비의 네트워크 카드(NIC)에 고유하게 부여된 하드웨어 주소입니다.
- 오류 검출: 데이터(프레임)에 오류가 있는지 검사합니다.
- 장비: 스위치(Switch), 브리지(Bridge)
1계층: 물리 계층 (Physical Layer)
- 역할: 데이터(0과 1의 비트)를 실제 전기적, 기계적 신호로 변환하여 케이블(UTP, 광케이블)이나 무선(Wi-Fi) 매체를 통해 전송합니다.
- 핵심 기능: 데이터 전송 그 자체. 데이터의 내용은 전혀 신경 쓰지 않고 오직 신호를 보내고 받는 역할만 합니다.
- 장비: 케이블, 허브, 리피터
4. TCP vs UDP
전송 계층(L4)의 두 가지 핵심 프로토콜입니다.
TCP (Transmission Control Protocol)
"신뢰할 수 있는 배송 서비스"
- 특징: 연결 지향형입니다. 데이터를 보내기 전에 반드시
3-way handshake를 통해 상대방과 연결을 확인합니다.
- 신뢰성 보장 방법:
- 순서 번호 (Sequence Numbers): 데이터를 조각(세그먼트)으로 나눌 때마다 번호를 매겨, 받는 쪽에서 순서대로 재조립할 수 있게 합니다.
- 응답 (Acknowledgement, ACK): 데이터를 받을 때마다 "몇 번 데이터 잘 받았다"고 응답을 보냅니다. 응답이 없으면 데이터를 재전송합니다.
- 흐름 제어 (Flow Control): 받는 쪽이 처리할 수 있는 양만큼만 데이터를 보냅니다. (슬라이딩 윈도우 기법)
- 혼잡 제어 (Congestion Control): 네트워크가 혼잡하다고 판단되면, 전송 속도를 스스로 줄여 네트워크 마비를 방지합니다.
- 단점: 신뢰성을 확보하기 위한 절차가 많아 UDP보다 속도가 느립니다.
- 사용 예시: 웹(HTTP), 파일 전송(FTP), 이메일(SMTP) (데이터 유실이 치명적인 서비스)
UDP (User Datagram Protocol)
"빠른 특급 우편"
- 특징: 비연결 지향형입니다. 연결 과정 없이 데이터를 "그냥" 보냅니다.
- 신뢰성: 순서 보장, 재전송, 흐름 제어 등 아무것도 보장하지 않습니다. 데이터가 중간에 사라지거나 순서가 뒤바뀌어 도착할 수 있습니다.
- 장점: 신뢰성 관련 오버헤드가 없어 속도가 매우 빠릅니다.
- 사용 예시:
- 실시간 스트리밍 (유튜브): 영상이 1초 정도 끊겨도(데이터 유실), 멈춰서 재전송을 기다리는 것보다 계속 재생하는 것이 낫습니다.
- 온라인 게임: 약간의 패킷 손실이 있더라도 빠른 반응 속도가 더 중요합니다.
- DNS: 빠른 응답이 필요한 간단한 요청/응답
5. 3-way & 4-way Handshake 상태 분석
TCP 연결의 핵심 과정입니다.
3-way handshake (연결 설정)
- (SYN)
Client -> Server (Client: SYN-SENT)
- 클라이언트가 서버에게 "연결 요청(SYN)" 플래그와 함께 임의의 순서 번호(seq=x)를 보냅니다.
- (SYN+ACK)
Server -> Client (Server: SYN-RECEIVED)
- 서버는 요청을 받고 "알겠다(ACK)" 플래그와 함께 "나도 연결 요청(SYN)" 플래그를 보냅니다.
- 이때 "너의 x번 잘 받았다"는 의미로 (ack=x+1), 자신의 순서 번호(seq=y)를 보냅니다.
- (ACK)
Client -> Server (Client/Server: ESTABLISHED)
- 클라이언트는 서버의 응답을 받고 "너의 y번 잘 받았다"는 의미로 (ack=y+1)를 보냅니다.
- 이때부터 양측은 ESTABLISHED (연결 확립) 상태가 되어 데이터 통신을 시작합니다.
4-way handshake (연결 해제)
4-way인 이유는, 클라이언트가 "연결 종료"를 요청해도 서버는 아직 보낼 데이터가 남아있을 수 있기 때문에, 양측이 각자 "종료 준비가 되었다"고 알려야 하기 때문입니다.
- (FIN)
Client -> Server (Client: FIN-WAIT-1)
- 클라이언트가 "데이터 전송 끝(FIN)" 플래그를 보냅니다.
- (ACK)
Server -> Client (Server: CLOSE-WAIT, Client: FIN-WAIT-2)
- 서버는 "알겠다(ACK)" 응답을 보냅니다.
- 이때 서버는 아직 보낼 데이터가 남아있다면 마저 전송합니다.
- (FIN)
Server -> Client (Server: LAST-ACK)
- 서버도 모든 데이터를 다 보냈다면 "나도 끝(FIN)" 플래그를 보냅니다.
- (ACK)
Client -> Server (Client: TIME-WAIT)
- 클라이언트는 "알겠다(ACK)" 응답을 보냅니다.
- TIME_WAIT: 클라이언트는 마지막 ACK가 서버에게 도달하지 못했을 경우를 대비해 일정 시간 대기합니다. 이 상태가 끝나야 연결이 완전히 CLOSED 됩니다. 서버는 ACK를 받으면 바로 CLOSED 됩니다.
번역기, 빠른 특급 우편 등 이해하기 쉽게 키워드가 있어서 좋았어요!