패킷이란?
출발지와 목적지 간의 네트워크를 통해 전송되는 데이터의 단위 (header/payload)
패킷 캡쳐?
네트워크 인터페이스를 오가는 데이터를 살펴보는 동작
-> WireShark가 GUI되어있어서 보기 좋음
-> 네트워크 동작을 이해하고 문제상황을 파악할 수 있음
웹 통신
클라이언트(브라우저)가 서버에 데이터를 요청
서버는 받은 요청에 대해서 응답
HTTP 요청 방식 :
- GET
- POST
- PUT
- DELETE
DNS
도메인 이름을 IP주소로 변환해 주는 시스템
웹 서버 접속 과정:
- 사용자가 브라우저에URL을 입력
- 웹 브라우저는 URL의 도메인에 대해 DNS 서버에 요청
- DNS 서버는 도메인에 해당되는 서버의 IP주소(168.188.어쩌구.저쩌구)를 반환
- 변환된 IP 주소로 실제 웹 서버에 HTTP 요청을 보냄
- 웹 서버로부터 HTTP 응답을 받음
HTTP
클라이언트(브라우저)가 서버에게 규칙대로 메시지를 주고받는 프로토콜(규칙)
- 요청 :
- GET /api/v1/apple/123 HTTP/1.1
- 헤더 :추가 정보(메타데이터)
- 바디 : 실제 데이터(주로 POST/PUT/PATCH에서)
POST /api/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"email":"a@a.com","password":"1234"}
- 응답 : HTTP/1.1 200 OK 상태코드
- 헤더 : 응답정보
- 바디 : 결과 데이터
HTTP/1.1 200 OK
Content-Type: application/json
{"id":123,"name":"비타민C"}
-> HTTP메시지도 패킷안에 담겨서 감
보통 웹(HTTPS 포함) 통신은 이렇게 “포장”돼서 간다:
- HTTP 요청/응답(내용)
↓ (TCP가 쪼개서 전송하고 순서/재전송 담당)
- TCP 세그먼트
↓ (IP가 목적지 주소 붙여서 라우팅)
- IP 패킷
↓ (이더넷/와이파이가 프레임으로 실제 전송)
- 실제 네트워크로 전송
- -> 받는 쪽에서 조각난 패킷 합쳐서 원래 HTTP로 복원
TCP
인터넷에서 데이터를 신뢰성 있게 보내기 위한 전송규칙
보통 웹통신은 HTTP 요청/응답을 TCP 연결 위에서 주고받음
- 연결지향 3-way handshake (SYN → SYN/ACK → ACK)
- 순서보장
- 손실되면 재전송
- 속도조절
+) UDP : 그냥 던짐 (빠르지만 순서없고 유실있음)
Socket
프로그램이 네트워크로 데이터 주고받기 위해 쓰는 ‘통신 창구(인터페이스)
운영체제(OS)가 제공해주고, 앱(브라우저/서버)이 소켓을 통해 TCP/UDP로 통신함
- 서버는 보통
8080 같은 포트(port) 를 열고 기다림(리스닝)
- 클라이언트는 서버의 IP:port 로 연결 시도
- 연결이 성립되면 한 연결은 보통 (클라이언트IP, 클라이언트포트, 서버IP, 서버포트, 프로토콜) 로 구분됨
예시 느낌:
- 브라우저 →
api.apple.banana:443 접속
브라우저는 로컬에서 임시 포트(예: 52134)를 잡고
(내IP:52134) ↔ (서버IP:443) 로 TCP 연결을 만든다.
이더넷
같은 네트워크(같은 LAN) 안에서 데이터를 ‘프레임’ 단위로 전달하는 규칙
LAN: 가까운 범위(집/회사/학교) 안에서 장비들이 같은 네트워크로 묶여있는 걸 말함
라우팅
패킷을 목적지까지 보내기 위해 ‘어느 길(다음 홉)로 보낼지 결정’하는 것
이걸 하는 장비/기능이 라우터(router)
- 내 컴퓨터가 목적지 IP를 보고
- “같은 LAN이면” → 바로 그 장비로 보냄
- “다른 네트워크면” → 게이트웨이(보통 공유기/라우터) 로 보냄
- 라우터는 라우팅 테이블(길 안내 표)을 보고 다음 라우터로 넘기고… 반복해서 목적지까지 감
gateway : 내 LAN 밖(다른 네트워크/인터넷)으로 나갈 때 거쳐가는 출구
VPC
aws에서 제공하는 클라우드 안의 가상 사설 네트워크(LAN과 유사)
서브넷(subnet) : VPC를 더 잘게 조겜(public, private)
- Route Table(라우팅 테이블): “어디로 보내면 되지?” 길 안내표
- Internet Gateway(IGW): VPC가 인터넷과 통신할 수 있게 붙이는 “출구”
- NAT Gateway: Private subnet 인스턴스가 밖으로만(아웃바운드) 나가게 해주는 장치 (인바운드는 막힘)
ALB
AWS의 로드밸런서 중 하나로,
외부(사용자) 요청을 받아서 여러 서버(EC2/ECS 등)로 나눠주는 입구
- 들어온 HTTP/HTTPS 요청을 받아서
- 규칙에 따라 대상(Target Group)으로 전달
- 여러 서버에 분산(로드밸런싱)
네트워크(Network)
= 여러 장치가 ‘통신 규칙(프로토콜)’을 공유해서 데이터를 주고받을 수 있게 연결된 시스템(연결 + 규칙 + 주소체계).
A. 물리적/로컬 의미 (LAN)
- 같은 공유기/스위치 아래 묶인 “동네”
- 보통 같은 와이파이에 붙으면 여기 의미로 “같은 네트워크”라고 말함
B. IP 관점 의미 (서브넷)
- “직접 통신 가능한 IP 주소 범위”
- 예:
192.168.0.0/24 같은 범위를 하나의 네트워크(서브넷) 라고 부름
같은 와이파이라고 무조건 같은 네트워크 아님
- 두 기기의 IP가 같은 대역(예: 192.168.0.x) 이고
- 서브넷 마스크도 같으면 같은 네트워크일 확률 높음
이게 같으면 게이트웨이(라우터) 없이 통신이 가능함
Port
한 컴퓨터(서버) 안에서 “어떤 프로그램(서비스)에게” 데이터를 줄지 구분하는 번호
즉, IP가 ‘어느 컴퓨터냐’를 찾는 주소라면, 포트는 ‘그 컴퓨터의 어느 앱이냐’를 찾는 번호
(클라이언트IP:임시포트) ↔ (서버IP:서비스포트)
- 80: HTTP (웹)
- 443: HTTPS (웹, 암호화)
- 22: SSH (서버 접속)
- 3306: MySQL
- 6379: Redis
- 8080: 개발용 웹서버에서 자주 씀(Spring Boot 기본도 자주 8080)
보안그룹 인바운드
누가 내 서버로 들어올 수 있는지 규칙
- 어떤 프로토콜(TCP/UDP)
- 어떤 포트(22, 80, 443, 8080 등)
- 누가 접속해도 되는지(IP 범위/CIDR, 또는 다른 보안그룹)
예)
- TCP 22번(SSH)은 내 집 IP만 허용
- TCP 443번(HTTPS)은 전 세계 허용
CIDR 표기로 “허용할 IP 범위”
0.0.0.0/0 = 모든 IPv4 주소 전체
→ 쉽게 말해 전 세계 누구나 접속 가능
-> 위험하니까 걍 내 ip로 설정하든가 상황에 맞게하면됨 alb는전체공개해도되는데 ec2를 그렇게 하면 위험하겠다는 느낌으로 판단
프로토콜 = 통신 규칙
1) 웹에서 자주 보는 프로토콜 (애플리케이션 계층)
- HTTP: 웹 요청/응답 (암호화 없음)
- HTTPS: HTTP + TLS(암호화)
- DNS: 도메인 이름 ↔ IP 변환
- SMTP / IMAP / POP3: 이메일 전송/수신
- FTP / SFTP: 파일 전송
- SSH: 원격 접속(터미널)
- WebSocket: 실시간 양방향 통신
- gRPC: 서비스 간 RPC 통신(보통 HTTP/2 위)
2) 전송 계층(Transport)
- TCP: 연결/순서보장/재전송 (대부분의 웹, DB 등)
- UDP: 빠르지만 보장 없음 (스트리밍/게임/VoIP 등)
- (참고) QUIC: UDP 위에서 신뢰성+TLS를 제공, HTTP/3에 사용
3) 인터넷 계층(네트워크 계층)
- IP (IPv4/IPv6): 주소(IP)와 라우팅
- ICMP: ping 같은 진단 메시지
4) 링크 계층(같은 LAN에서 전달 규칙)
- Ethernet: 유선 LAN 전송 규칙
- Wi-Fi(802.11): 무선 LAN 전송 규칙
- ARP: “이 IP의 MAC 주소 뭐야?” (LAN에서 필요)