여러 프로토콜 패킷 설명

HTTP, TCP, IP 패킷 구조를 계층별로 설명합니다. request/response, TCP flag와 sequence, IP TTL과 protocol 필드를 패킷 분석 관점으로 정리했습니다.

네트워크 패킷을 분석할 때는 각 프로토콜이 어느 계층에서 어떤 정보를 담는지 먼저 나누어 봐야 합니다. HTTP, TCP, IP 패킷을 중심으로 구조와 해석 포인트를 정리합니다. 개념 글이므로 명령어를 과하게 늘리기보다, 패킷을 볼 때 어느 필드를 어떤 의미로 읽어야 하는지에 집중합니다.

패킷이 겹겹이 감싸지는 구조

HTTP Request/Response
 -> TCP Segment
 -> IP Packet
 -> Ethernet Frame

브라우저에서 웹 서버에 접속하면 HTTP 요청이 만들어지고, TCP는 포트와 연결 상태를 관리하며, IP는 출발지와 목적지 주소를 기준으로 라우팅됩니다. 실제 물리/가상 네트워크에서는 이 데이터가 Ethernet frame에 담겨 이동합니다.

HTTP 패킷 해석

HTTP는 클라이언트와 서버가 요청과 응답을 주고받는 응용 계층 프로토콜입니다. 평문 HTTP라면 패킷 캡처에서 request line, header, body를 직접 볼 수 있습니다. HTTPS는 TLS로 암호화되므로 TCP 연결과 TLS handshake는 볼 수 있지만 HTTP 본문은 복호화 없이는 보이지 않습니다.

HTTP Request 구조

GET /index.html HTTP/1.1
Host: example.com
User-Agent: curl/8.0
Accept: */*
필드 의미
Method GET, POST, PUT, DELETE 같은 요청 동작
Path 요청한 URI 경로
Host 가상호스트 구분에 사용되는 대상 도메인
Header 인증, 캐시, 압축, user-agent 같은 부가 정보

HTTP Response 구조

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1250

응답에서는 status code가 핵심입니다. 200은 성공, 301/302는 리다이렉트, 403은 권한 거부, 404는 리소스 없음, 500대는 서버 오류입니다.

TCP 패킷 해석

TCP는 신뢰성 있는 전송을 위해 sequence number, acknowledgment number, flag, window size를 사용합니다.

필드 의미 분석 포인트
Source/Destination Port 프로세스 식별 클라이언트 임시 포트와 서버 서비스 포트를 구분합니다.
Sequence Number 데이터 순서 재전송, 누락, 순서 꼬임 분석에 사용합니다.
Acknowledgment Number 수신 확인 상대가 어디까지 받았는지 나타냅니다.
Flags SYN, ACK, FIN, RST 등 연결 상태 handshake, 정상 종료, 강제 reset을 구분합니다.
Window Size 수신 가능한 버퍼 크기 window full/zero window는 성능 문제의 단서가 됩니다.

3-way handshake

Client -> Server: SYN
Server -> Client: SYN, ACK
Client -> Server: ACK

SYN만 나가고 SYN, ACK가 돌아오지 않으면 방화벽, 라우팅, 서버 listen 상태를 의심합니다. RST가 돌아오면 대상이 명시적으로 연결을 거부한 것입니다.

IP 패킷 해석

IP는 목적지까지 패킷을 전달하는 역할을 합니다. TCP가 연결 상태를 관리한다면, IP는 출발지와 목적지 주소, TTL, fragment, 상위 프로토콜 번호를 관리합니다.

필드 의미
Source IP 패킷 발신지 주소
Destination IP 패킷 목적지 주소
TTL 라우터를 지날 때마다 감소하는 생존 값
Protocol 상위 프로토콜. TCP는 6, UDP는 17, ICMP는 1
Fragment MTU보다 큰 패킷이 조각났는지 여부

최소 캡처 예시

개념 확인용으로만 간단한 캡처 명령을 사용합니다.

# HTTP 요청만 보기
sudo tcpdump -i eth0 -nn -A 'tcp port 80'

# 특정 호스트와의 TCP 흐름 보기
sudo tcpdump -i eth0 -nn 'host 192.168.10.10 and tcp'

# ICMP 확인
sudo tcpdump -i eth0 -nn icmp

분석 순서

  1. IP 주소가 맞는지 확인합니다.
  2. TCP handshake가 완료되는지 확인합니다.
  3. 연결 후 재전송, RST, FIN 흐름을 봅니다.
  4. HTTP라면 method, host, status code를 확인합니다.
  5. HTTPS라면 TLS handshake와 인증서/SNI 단서를 확인합니다.

패킷 분석은 네트워크 장애와 보안 분석에 모두 유용하지만, 운영망 캡처에는 민감 정보가 포함될 수 있으므로 보관과 공유에 주의해야 합니다.

BGM EVER