즉, 인터넷은 통신 기반 시설이고 웹은 그 위에서 동작하는 서비스 중 하나다.
네트워크를 구성하는 요소는 다음과 같다.
데이터를 생성하거나 소비하는 종단 장치를 호스트(Host)라고 한다. 서비스를 제공하면 서버, 요청하면 클라이언트가 되며 하나의 호스트가 상황에 따라 두 역할을 모두 수행할 수도 있다.
송신 측에서는 데이터가 상위 계층에서 하위 계층으로 내려가며 각 계층의 헤더가 추가된다. 이를 캡슐화라고 한다. 수신 측에서는 헤더를 제거하며 데이터를 상위 계층으로 올리는 역캡슐화가 이루어진다.
HTTP 데이터
↓ TCP 헤더 추가
TCP 세그먼트
↓ IP 헤더 추가
IP 패킷
↓ Ethernet 헤더·트레일러 추가
Ethernet 프레임
↓ 신호로 변환
비트
| 계층 | 핵심 역할 | 주요 식별 정보 | PDU |
|---|---|---|---|
| 응용 | 사용자에게 네트워크 서비스 제공 | URL, HTTP 메서드, 헤더 | 데이터·메시지 |
| 전송 | 프로세스 간 통신과 신뢰성 제어 | 포트 번호 | TCP 세그먼트·UDP 데이터그램 |
| 네트워크 | 다른 네트워크까지 경로 선택 | IP 주소 | 패킷 |
| 데이터 링크 | 같은 링크 안에서 데이터 전달 | MAC 주소 | 프레임 |
| 물리 | 전기·빛·무선 신호 전송 | - | 비트 |
NIC(Network Interface Card)는 호스트를 네트워크 매체에 연결하는 인터페이스다.
Ethernet 환경에서는 일반적으로 48비트 MAC 주소를 사용한다. 전통적인 전역 유니캐스트 MAC 주소는 앞 24비트가 제조사를 나타내는 OUI, 뒤 24비트가 제조사가 부여한 식별 영역이다.
다만 MAC 주소 무작위화와 로컬 관리 주소가 사용될 수 있으므로, MAC 주소를 절대 변하지 않는 장치의 신분증으로 보면 안 된다.
L2 스위치는 다음 과정으로 Ethernet 프레임을 전달한다.
스위치는 출발지 주소로 학습하고, 목적지 주소로 전달 위치를 결정한다.
| 구분 | 허브 | L2 스위치 |
|---|---|---|
| 동작 계층 | 물리 계층 | 데이터 링크 계층 |
| 전달 기준 | 신호를 다른 포트에 반복 전송 | MAC 주소 테이블 |
| 충돌 도메인 | 전체가 공유 | 포트마다 분리 |
| 일반적인 통신 방식 | 반이중 | 전이중 |
CSMA/CD는 공유 매체를 사용하는 반이중 Ethernet에서 충돌을 감지하고 재전송하는 방식이다. 현대의 스위치 기반 전이중 Ethernet에서는 포트마다 충돌 도메인이 분리되므로 일반적으로 사용되지 않는다.
Ethernet 프레임에는 IP의 TTL처럼 순환 횟수를 제한하는 필드가 없다. L2 루프가 발생하면 브로드캐스트와 일부 플러딩 프레임이 계속 복제되어 링크와 장비 자원을 소진하는 Broadcast Storm으로 이어질 수 있다.
STP(Spanning Tree Protocol)는 물리적인 중복 링크는 유지하되 일부 경로를 논리적으로 차단해 루프가 없는 구조를 만든다. 현재 경로에 장애가 생기면 차단했던 대체 경로를 활성화할 수 있다.
네트워크 계층은 각각 다른 역할과 주소를 사용하며, 스위치는 출발지 MAC을 학습하고 목적지 MAC을 기준으로 같은 LAN 안에서 프레임을 전달한다.
일반적인 Ethernet II 프레임은 다음 정보를 포함한다.
일반적인 최소 Ethernet 프레임 크기는 헤더 14바이트, 최소 데이터 46바이트, FCS 4바이트를 합친 64바이트다.
표준 Ethernet의 MTU 1500바이트는 한 프레임이 운반하는 상위 계층 페이로드의 일반적인 최댓값이다. 애플리케이션 데이터 전체가 1500바이트로 제한된다는 뜻은 아니다. 큰 데이터는 여러 세그먼트와 패킷, 프레임으로 나뉘어 전달된다.
Jumbo Frame은 일반적인 1500바이트보다 큰 MTU를 사용하는 방식이며, 흔히 약 9000바이트를 사용한다. 통신 경로에 있는 장비들이 해당 크기를 모두 지원해야 한다.
VLAN은 하나의 물리적 스위치를 여러 개의 논리적인 LAN으로 나누는 기술이다.
여러 스위치에 걸쳐 VLAN을 확장할 때는 Trunk Port를 사용한다. IEEE 802.1Q는 Ethernet 프레임에 4바이트 VLAN 태그를 추가해 프레임이 속한 VLAN을 구분한다.
데이터 링크 계층은 같은 LAN 안에서 MAC 주소를 이용해 프레임을 전달한다. 다른 네트워크로 패킷을 보내려면 IP 주소와 Routing이 필요하다.
TTL은 패킷이 라우팅 루프 안에서 영원히 순환하는 것을 방지한다.
ARP는 같은 브로드캐스트 도메인에서 IPv4 주소에 대응하는 MAC 주소를 알아내는 프로토콜이다.
ARP에는 응답의 진위를 검증하는 기능이 없어 공격자가 거짓 IP-MAC 대응 관계를 주입하는 ARP Spoofing이 가능하다.
VLAN은 하나의 스위치를 여러 논리적 LAN으로 나누고, IP와 라우터는 서로 다른 네트워크 사이에서 패킷이 이동할 길을 만든다.
과거의 Classful 주소 체계는 IPv4 주소를 A, B, C 등의 고정된 크기로 나눴다. 하지만 주소 낭비가 크고 유연성이 낮아 현재는 프리픽스 길이로 네트워크 크기를 표현하는 CIDR 기반 Classless 주소 체계가 일반적이다.
| 클래스 | 첫 번째 옥텟 범위 | 기본 프리픽스 |
|---|---|---|
| A | 1~126 | /8 |
| B | 128~191 | /16 |
| C | 192~223 | /24 |
| D | 224~239 | Multicast |
| E | 240~255 | 실험·예약 |
127.0.0.0/8은 Loopback 용도로 예약되어 있다.
서브넷 마스크는 IPv4 주소에서 네트워크 부분과 호스트 부분을 구분한다.
1인 부분: 네트워크 영역0인 부분: 호스트 영역CIDR은 서브넷 마스크에서 1인 비트의 수를 /24와 같은 프리픽스 길이로 표현한다.
예를 들어 192.168.100.150/27의 경우:
255.255.255.2242^(32-27) = 32192.168.100.128192.168.100.159192.168.100.129~158192.168.1.0/24를 60대, 30대, 10대의 장비가 사용할 네트워크로 나누면 큰 네트워크부터 배정할 수 있다.
| 요구 호스트 | 할당 대역 | 사용 가능한 주소 |
|---|---|---|
| 60대 | 192.168.1.0/26 | 192.168.1.1~62 |
| 30대 | 192.168.1.64/27 | 192.168.1.65~94 |
| 10대 | 192.168.1.96/28 | 192.168.1.97~110 |
대표적인 사설 IPv4 대역은 다음과 같다.
10.0.0.0/8172.16.0.0/12192.168.0.0/16사설 IP는 인터넷에서 직접 라우팅되지 않는다. NAT는 네트워크 경계에서 IP 주소를 변환한다.
NAPT(PAT)는 IP와 포트를 함께 변환해 여러 내부 호스트가 하나의 공인 IP를 공유할 수 있게 한다.
NAT는 주소 변환 기술이지 방화벽 그 자체는 아니다. 외부 접근 허용 여부는 별도의 방화벽 정책으로 통제해야 한다.
DHCP는 호스트에 IP 주소와 네트워크 설정을 동적으로 임대한다.
공격자가 Rogue DHCP 서버를 운영하면 악성 게이트웨이나 DNS 서버를 배포할 수 있다. 스위치의 DHCP Snooping을 통해 신뢰할 수 있는 포트에서만 DHCP 응답을 허용할 수 있다.
라우터는 라우팅 테이블을 참고해 목적지까지의 다음 홉을 결정한다.
0.0.0.0/0으로 표현하나의 관리 주체가 운영하는 라우터와 네트워크의 집합을 AS(Autonomous System)라고 한다.
IPsec은 IP 패킷에 인증과 암호화를 적용해 다음 보안 기능을 제공하는 프로토콜 모음이다.
VPN은 공중망 위에 논리적인 사설 네트워크를 구성한다.
Subnetting으로 주소 공간을 효율적으로 나누고, DHCP로 주소를 할당하며, 라우팅 프로토콜로 경로를 학습하고, IPsec VPN으로 네트워크 간 통신을 보호할 수 있다.
IP는 목적지 호스트까지 패킷을 전달하지만 특정 애플리케이션까지 구분하지는 않는다. 전송 계층은 포트 번호를 사용해 호스트에서 실행 중인 프로세스를 식별한다.
| 범위 | 분류 |
|---|---|
0~1023 | Well-known Port |
1024~49151 | Registered Port |
49152~65535 | Dynamic·Private Port |
서버는 주로 Well-known 또는 Registered Port에서 요청을 기다리고, 클라이언트는 연결할 때 임시 포트를 할당받는다.
TCP는 연결형·신뢰성 있는 바이트 스트림 통신을 제공한다.
Client Server
| -------- SYN -------------> |
| <------ SYN + ACK ---------- |
| -------- ACK -------------> |
| 연결 수립 완료 |
MSS(Maximum Segment Size)는 TCP 세그먼트에 담을 수 있는 데이터의 최대 크기다. 일반적인 IPv4 Ethernet 환경에서 옵션이 없다면 다음 값이 흔히 사용된다.
1500(Ethernet MTU) - 20(IPv4 Header) - 20(TCP Header) = 1460bytes
TCP는 ACK와 재전송 타이머를 이용해 데이터 손실을 감지한다. 타임아웃이나 중복 ACK 등으로 손실을 추정하면 필요한 데이터를 재전송한다.
수신 측은 Window Size를 통해 현재 받을 수 있는 데이터 양을 알린다. 송신 측은 ACK를 기다리지 않고 윈도우 범위 안에서 여러 세그먼트를 연속 전송할 수 있다.
UDP는 연결을 미리 수립하지 않으며 전달, 순서, 중복 제거를 보장하지 않는다. 헤더와 처리 과정이 단순해 지연을 줄이기 쉽다.
TCP와 UDP의 차이는 단순히 느림과 빠름이 아니라 신뢰성, 지연, 메시지 경계와 애플리케이션 요구사항의 차이다.
DNS는 사람이 읽기 쉬운 도메인 이름을 IP 주소 등의 자원 레코드로 변환한다. 일반 DNS는 53번 포트를 사용하며 상황에 따라 UDP 또는 TCP로 동작한다.
DNS 조회는 일반적으로 다음 순서로 진행된다.
브라우저·OS 캐시 확인
↓
재귀 Resolver 질의
↓ 캐시 미스
Root DNS → TLD DNS → 권한 있는 DNS
↓
IP 주소 반환 및 TTL 동안 캐시
DNS 응답이 위조되면 사용자가 공격자의 서버로 유도될 수 있다. DNSSEC은 DNS 데이터의 출처 인증과 무결성 검증을 돕지만 통신 내용을 암호화하지는 않는다.
traceroute는 TTL을 1부터 차례로 증가시킨 패킷을 전송한다. 각 라우터에서 TTL이 0이 되면 반환되는 ICMP 응답을 이용해 목적지까지 거치는 경로를 확인한다.
IP가 호스트까지의 전달을 담당한다면 TCP와 UDP는 포트 번호를 이용해 애플리케이션까지 데이터를 전달하고, DNS는 도메인 이름을 통신에 필요한 주소로 변환한다.
URI(Uniform Resource Identifier)는 네트워크상의 자원을 식별하는 통합 개념이다.
URL은 일반적으로 다음 요소로 구성된다.
https://example.com:443/posts/1?lang=ko#summary
└scheme └── authority ──┘└ path ┘└query┘└fragment┘
HTTP는 클라이언트와 서버가 웹 자원을 주고받기 위한 응용 계층 프로토콜이다.
| Method | 용도 |
|---|---|
GET | 자원 조회 |
HEAD | 본문 없이 응답 헤더 조회 |
POST | 서버에 데이터 제출 또는 처리 요청 |
HTTP가 TCP 위에서 동작한다는 사실만으로 통신 내용이 보호되지는 않는다. HTTPS는 HTTP를 TLS로 보호해 기밀성, 무결성과 서버 인증을 제공한다.
URL은 접근할 자원의 위치를 표현하고, HTTP는 해당 자원을 요청과 응답의 형태로 주고받는다.
브라우저에서 웹사이트에 접속하는 과정을 지금까지 배운 내용으로 연결하면 다음과 같다.
MAC 주소, IP 주소와 포트 번호는 서로 대체되는 주소가 아니다.