TCP/IP와 네트워크 프로토콜 쉽게 이해하기: 개발자를 위한 네트워크 기초 완전정복

안녕하세요, 성장하는 개발자 여러분!

“네트워크는 어렵다”, “왜 인터넷이 안 될까?”라고 생각해본 적 있으신가요? 웹 애플리케이션을 만들면서도 HTTP 요청이 실제로 어떻게 전달되는지, 왜 가끔 timeout이 발생하는지 궁금했을 겁니다.

오늘은 개발자로서 꼭 알아야 할 TCP/IP와 네트워크 프로토콜에 대해 쉽고 재미있게 알아보겠습니다. 복잡한 이론보다는 실무에서 바로 써먹을 수 있는 지식 위주로 설명드릴게요!

1. 네트워크의 기본: 왜 프로토콜이 필요할까?

프로토콜이란?

프로토콜은 컴퓨터끼리 대화하는 약속입니다. 마치 한국어를 모르는 외국인과 대화하려면 영어라는 공통 언어가 필요한 것처럼, 컴퓨터들도 서로 통신하기 위한 공통 언어가 필요합니다.

사람 간 대화: 한국어, 영어, 중국어...
컴퓨터 간 대화: TCP/IP, HTTP, FTP...

패킷 통신의 원리

큰 데이터를 한 번에 보내지 않고 작은 조각(패킷)으로 나누어 보냅니다. 마치 긴 편지를 여러 장의 엽서로 나누어 보내는 것과 같죠.

원본 데이터: "안녕하세요 반갑습니다"
패킷 1: "안녕" + [1/3번째 조각]
패킷 2: "하세요" + [2/3번째 조각]
패킷 3: "반갑습니다" + [3/3번째 조각]

각 패킷에는 헤더라는 주소록이 붙어있어서, 목적지에서 원래 순서대로 조립할 수 있습니다.

2. OSI 7계층: 네트워크의 계층 구조

왜 계층으로 나눌까?

복잡한 네트워크 통신을 단계별로 나누어 각각의 역할을 명확히 하기 위해서입니다. 마치 택배 배송 시스템처럼 각 단계마다 담당자가 있는 것과 같습니다.

7. 응용 계층 (Application)    - 브라우저, 이메일 앱
6. 표현 계층 (Presentation)  - 데이터 암호화, 압축
5. 세션 계층 (Session)       - 연결 관리
4. 전송 계층 (Transport)     - TCP, UDP
3. 네트워크 계층 (Network)    - IP, 라우팅
2. 데이터링크 계층 (Data Link) - 이더넷, WiFi
1. 물리 계층 (Physical)      - 케이블, 전파

실무에서 중요한 계층들

4계층 (전송 계층) – TCP/UDP

# TCP 연결 확인
netstat -an | grep ESTABLISHED

# 특정 포트 리스닝 확인
netstat -tulpn | grep :80

3계층 (네트워크 계층) – IP

# 라우팅 테이블 확인
route -n
ip route show

# 네트워크 경로 추적
traceroute google.com

3. IP 주소: 인터넷의 주소 체계

IP 주소의 구조

IP 주소는 32비트의 이진수이지만, 사람이 읽기 쉽게 4개의 십진수로 표현합니다.

이진수: 11000000.10101000.00000001.00000001
십진수: 192.168.1.1

IP 주소 클래스

Class A (대규모 네트워크)

  • 범위: 1.0.0.0 ~ 126.255.255.255
  • 네트워크부: 첫 번째 옥텟
  • 호스트부: 나머지 3옥텟
  • 예: 대학교, 대기업

Class B (중간 규모 네트워크)

  • 범위: 128.0.0.0 ~ 191.255.255.255
  • 네트워크부: 첫 번째, 두 번째 옥텟
  • 호스트부: 나머지 2옥텟

Class C (소규모 네트워크)

  • 범위: 192.0.0.0 ~ 223.255.255.255
  • 네트워크부: 첫 번째~세 번째 옥텟
  • 호스트부: 마지막 옥텟
  • 예: 일반 가정, 소규모 사무실

사설 IP vs 공인 IP

사설 IP (Private IP)

Class A: 10.0.0.0 ~ 10.255.255.255
Class B: 172.16.0.0 ~ 172.31.255.255
Class C: 192.168.0.0 ~ 192.168.255.255

NAT(Network Address Translation)

  • 사설 IP를 공인 IP로 변환
  • IP 주소 부족 문제 해결
  • 보안 효과
# 내부 IP 확인
ip addr show
ifconfig

# 외부 IP 확인
curl ifconfig.me

서브넷 마스크

네트워크부와 호스트부를 구분하는 역할을 합니다.

IP: 192.168.1.100
서브넷 마스크: 255.255.255.0 (/24)

네트워크 주소: 192.168.1.0
브로드캐스트 주소: 192.168.1.255
사용 가능한 호스트: 192.168.1.1 ~ 192.168.1.254

4. TCP vs UDP: 신뢰성 vs 속도

TCP (Transmission Control Protocol)

특징

  • 연결 지향적: 3-way handshake로 연결 확립
  • 신뢰성 보장: 데이터 손실 시 재전송
  • 순서 보장: 패킷이 순서대로 도착
  • 속도 상대적으로 느림

3-way Handshake

클라이언트 → 서버: SYN (연결 요청)
서버 → 클라이언트: SYN+ACK (요청 수락)
클라이언트 → 서버: ACK (연결 확립)

사용 예시

  • HTTP/HTTPS (웹)
  • FTP (파일 전송)
  • SMTP (이메일)
  • SSH (원격 접속)

UDP (User Datagram Protocol)

특징

  • 비연결성: 사전 연결 과정 없음
  • 신뢰성 미보장: 데이터 손실 가능
  • 순서 미보장: 패킷 순서가 바뀔 수 있음
  • 속도 빠름

사용 예시

  • DNS (도메인 조회)
  • DHCP (IP 자동 할당)
  • 실시간 스트리밍
  • 온라인 게임
# TCP 포트 80 확인
telnet google.com 80

# UDP DNS 쿼리
nslookup google.com

5. 네트워크 장비: 데이터의 여행

NIC (Network Interface Card)

컴퓨터를 네트워크에 연결하는 관문 역할입니다.

# 네트워크 인터페이스 정보 확인
ip link show
ethtool eth0  # 이더넷 정보

허브 (Hub)

  • 리피터 역할: 신호를 그대로 증폭하여 재전송
  • 콜리전 도메인: 연결된 모든 장비가 하나의 충돌 영역
  • 단점: 대역폭 공유, 보안 취약
  • 현재: 거의 사용하지 않음 (스위치로 대체)

스위치 (Switch)

허브와의 차이점

  • MAC 주소 학습: 어떤 포트에 어떤 장비가 연결되어 있는지 기억
  • 콜리전 도메인 분리: 각 포트가 독립적인 충돌 영역
  • 전이중 통신: 동시에 송신과 수신 가능

스위치의 동작 과정

  1. Learning: MAC 주소를 배우고 테이블에 저장
  2. Flooding: 모르는 주소면 모든 포트로 전송
  3. Forwarding: 아는 주소면 해당 포트로만 전송
  4. Filtering: 같은 세그먼트 내 통신은 차단
# MAC 주소 테이블 확인 (스위치에서)
show mac address-table

# ARP 테이블 확인 (PC에서)
arp -a
ip neigh show

라우터 (Router)

역할

  • 브로드캐스트 도메인 분리: 네트워크를 논리적으로 분할
  • 경로 결정: 최적의 경로로 패킷 전송
  • 보안: 패킷 필터링, 방화벽 기능

기본 게이트웨이 (Default Gateway)

# 기본 게이트웨이 확인
route -n | grep 0.0.0.0
ip route | grep default

# 게이트웨이 연결 테스트
ping 192.168.1.1

6. 실무 네트워크 진단 도구

기본 연결성 테스트

# 기본 ping 테스트
ping google.com

# 패킷 손실률과 RTT 확인
ping -c 10 google.com

# IPv6 ping
ping6 google.com

경로 추적

# 경로 추적 (Linux/Mac)
traceroute google.com

# 경로 추적 (Windows)
tracert google.com

# MTR (지속적인 경로 추적)
mtr google.com

포트 연결 테스트

# 특정 포트 연결 테스트
telnet google.com 80
nc -zv google.com 80

# 여러 포트 스캔
nmap -p 22,80,443 google.com

DNS 조회

# 기본 DNS 조회
nslookup google.com
dig google.com

# 특정 레코드 타입 조회
dig google.com MX
dig google.com AAAA

네트워크 상태 모니터링

# 활성 연결 확인
netstat -tuln
ss -tuln

# 대역폭 사용량 모니터링
iftop
nethogs

# 실시간 네트워크 통계
watch -n 1 cat /proc/net/dev

7. 실무 문제 해결 가이드

문제 1: “인터넷이 안 됩니다”

진단 순서

# 1. 로컬 인터페이스 확인
ip addr show

# 2. 게이트웨이 연결 확인
ping 192.168.1.1

# 3. DNS 서버 확인
ping 8.8.8.8

# 4. 도메인 해석 확인
nslookup google.com

# 5. 외부 연결 확인
ping google.com

문제 2: “서버에 연결이 안 됩니다”

# 포트 열림 확인
telnet server-ip 80

# 방화벽 확인
sudo iptables -L
sudo firewall-cmd --list-all

# 서비스 상태 확인
sudo systemctl status nginx
sudo netstat -tulpn | grep :80

문제 3: “네트워크가 느립니다”

# 대역폭 테스트
speedtest-cli

# 네트워크 지연 확인
ping -c 100 google.com | tail -1

# 경로상 병목 지점 확인
mtr google.com

8. 개발자를 위한 네트워크 최적화 팁

HTTP 성능 최적화

# Keep-Alive 연결 확인
curl -I -H "Connection: keep-alive" http://example.com

# 압축 확인
curl -H "Accept-Encoding: gzip" -I http://example.com

DNS 최적화

# DNS 캐시 플러시
sudo systemctl flush-dns  # Linux
sudo dscacheutil -flushcache  # Mac

# 빠른 DNS 서버 사용
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf

로드밸런싱과 CDN

// Node.js에서 클러스터링
const cluster = require("cluster");
const numCPUs = require("os").cpus().length;

if (cluster.isMaster) {
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  // 워커 프로세스
  require("./app.js");
}

마치며: 네트워크 마스터로의 여정

오늘 배운 내용을 정리하면:

  1. 프로토콜은 컴퓨터 간의 약속
  2. TCP는 신뢰성, UDP는 속도
  3. IP 주소는 인터넷의 주소
  4. 스위치는 MAC 주소, 라우터는 IP 주소로 동작
  5. 문제 발생 시 체계적인 진단이 중요

실무에서 기억할 점

  • 단계별 진단: 물리 계층부터 응용 계층까지 순차적으로
  • 로그 확인: 모든 문제의 답은 로그에 있다
  • 모니터링: 평상시 네트워크 상태를 파악해두자
  • 백업 경로: 중요한 서비스는 이중화 구성

네트워크는 한 번에 다 이해하기 어려운 분야입니다. 하지만 오늘 배운 기초를 바탕으로 실무에서 하나씩 경험해 나가다 보면, 어느새 네트워크 전문가가 되어 있을 거예요!

기억하세요: 네트워크 문제의 80%는 기본기로 해결됩니다. 🌐

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다