← Documents

네트워크 정리 — What is Network & Server?

🌐

한 줄 소개 — 백엔드 엔지니어로 일하기 전·후로 혼자 공부하며 캡처·필기해 둔 네트워크 학습 노트를, 데이터가 계층(layer)을 타고 캡슐화되어 흐르는 하나의 줄기로 다시 정리한 글이다. 각 장은 이론과, 직접 해 본 실습(tracert·Wireshark·ipconfig·tftpd·NAT 설정·UTP 케이블 등)으로 이뤄진다. OSI 7계층 / TCP·IP 부터 계층별 주소·프로토콜·장비, TCP 3-way handshake, NAT·포트포워딩, HTTP, L4/L7 로드밸런서(KT 클라우드 실무 경험), SSL/TLS 까지 다룬다. (강의: 따라IT 네트워크. 다이어그램은 직접 다시 그렸다.)

1 · 네트워크란?

네트워크노드(node — 네트워크에 속한 컴퓨터나 통신 장비)들이 데이터를 공유할 수 있게 하는 디지털 전기통신망이다. 즉 분산되어 있는 컴퓨터를 통신망으로 연결한 것으로, 여러 장치가 노드 간 연결을 사용해 서로에게 데이터를 교환한다.

인터넷은 문서·그림·영상 같은 여러 데이터를 공유하도록 구성된, 세상에서 가장 큰 — 전 세계를 연결한 네트워크다. 흔히 www 를 인터넷으로 착각하는 경우가 많은데, www 는 인터넷을 통해 웹과 관련된 데이터를 공유하는 한 가지 서비스일 뿐이다.

분류 ① 크기에 따른 분류

  • LAN (Local Area Network)
  • WAN (Wide Area Network)
  • MAN (Metropolitan Area Network)
  • 기타 — VLAN · CAN · PAN 등

집 LAN · 학원 LAN · 회사 LAN 같은 여러 LAN 을 WAN 으로 잇는 식으로 규모가 커진다.

분류 ② 연결 형태(topology)에 따른 분류

  • Star 형 — 중앙 장비에 모든 노드가 연결된 형태
  • Mesh 형 — 여러 노드들이 서로 그물처럼 연결된 형태
  • Tree 형 — 나무의 가지처럼 계층 구조로 연결된 형태
  • 기타 — 링형 · 버스형 · 혼합형 등

통신 방식

  • 유니캐스트(Unicast) — 특정 대상하고만 1:1 로 통신
  • 멀티캐스트(Multicast) — 특정 다수와 1:N 으로 통신
  • 브로드캐스트(Broadcast) — 네트워크에 있는 모든 대상과 통신

네트워크 프로토콜 = 약속(양식)

프로토콜은 일종의 약속·양식이다. 네트워크에서 노드와 노드가 통신할 때 어떤 노드가 어느 노드에게, 어떤 데이터를, 어떻게 보내는지 작성하기 위한 양식 — 택배는 택배만의, 편지는 편지만의, 전화는 전화만의 양식이 있고 각 프로토콜도 해당 프로토콜만의 양식이 있는 것과 같다. 가까운 곳과 연락할 땐 Ethernet(MAC 주소), 멀리 있는 곳엔 IP·ICMP·ARP(IP 주소), 여러 프로그램으로 연락할 땐 TCP·UDP(포트 번호) 프로토콜이 계단처럼 쌓여 하나의 패킷(여러 프로토콜로 캡슐화된 형태)이 된다.

🧪

실습 — ① 네트워크란 무엇인가(tracert 로 경로 추적) · ② 와이어샤크(Wireshark)로 프로토콜이란 무엇인지 직접 확인.

tracert 8.8.8.8 를 찍으면 목적지(구글 DNS)까지 거치는 라우터(hop)들의 IP 가 차례로 보인다 — 발신지에서 착신지까지 경로가 제어되는 것이다.

C:\> tracert 8.8.8.8 1 1 ms 192.168.0.1 ← 우리집 공유기(게이트웨이) 4 31 ms 218.146.35.41 5 31 ms 112.190.32.249 … 30 ms dns.google [8.8.8.8] ← 목적지 도착

Wireshark 로 실제 패킷 하나를 까 보면 한 프레임 안에 Ethernet II → Internet Protocol Version 4 → Transmission Control Protocol → Hypertext Transfer Protocol 이 한 겹씩 쌓여 있는 게 그대로 보인다. 프로토콜이 곧 "양식"이고 패킷이 그 양식들의 중첩이라는 걸 눈으로 확인할 수 있다.

2 · 네트워크 모델 — OSI 7계층과 TCP/IP

데이터가 흐르는 과정을 구간별로 나눠 놓은 것이 네트워크 계층 모델이다. 두 종류가 있다.

  • TCP/IP 모델 (4계층) — 1960년대 말 미국방성의 연구에서 시작되어 1980년대 초 프로토콜을 오픈 공개한 것. 현재 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신 규약(프로토콜)의 모음이다. (이게 첫 번째로 나왔다.)
    응용 / 전송 / 네트워크 / 네트워크 인터페이스.
  • OSI 7계층 — 1984년 네트워크 통신을 체계적으로 다루기 위해 ISO 에서 표준으로 지정한 모델. 데이터를 주고받을 때 데이터 자체의 흐름을 각 구간별로 나눠 놓은 것이다. 이후에 표준화를 위해 만들었으나, 현재는 오히려 TCP/IP 모델이 더 맞다.

OSI 7계층의 계층별 프로토콜

계층대표 프로토콜
7 · 응용HTTP · SMTP · IMAP · POP · SNMP · FTP · TELNET · SSH
6 · 표현SMB · AFP · XDR
5 · 세션NetBIOS
4 · 전송TCP · UDP · SPX
3 · 네트워크IP · ICMP · IGMP · ARP · RARP · BGP · OSPF · RIP · IPX
2 · 데이터 링크Ethernet · 토큰링 · PPP · HDLC · 프레임 릴레이 · ISDN · ATM · FDDI
1 · 물리전선 · 전파 · 광섬유 · 동축케이블 · 리피터 · DSU · CSU · 모뎀

전부 외울 필요는 없고 각 계층에서 위 정도만 알아 두면 된다. (다만 프로토콜 구조까지는 알고 있는 게 좋다.)

두 모델 비교 — 공통점과 차이점

공통점은 둘 다 계층적 네트워크 모델이고 계층 간 역할을 분담한다는 점. 차이점은 계층 수의 차이와, TCP/IP 는 프로토콜 기반 / OSI 는 통신 전반에 대한 표준이라는 점이다.

OSI 는 "역할 기반으로 여기까지는 이 계층이 해야 돼!"라는 논리적 느낌이고, TCP/IP 는 "기술적으로 여기까지는 이 기술이 커버된다"는 물리적 느낌이다. TCP/IP 의 1계층(네트워크 인터페이스)을 OSI 는 1·2계층으로 나눴고 — 기술적으로 한 번에 이뤄지는 역할을 굳이 개념적으로 나눈 것 — TCP/IP 의 4계층(응용)을 OSI 는 5·6·7계층으로 나눴다. 실제로 HTTP 도 한 번에 그 전반에 걸친다. HTTP 는 하나인데 5·6·7 어디든 나눌 수 없고 원래 하나인 걸 7계층에 나누어 놓은 것이다.

OSI 7계층 TCP/IP 4계층 7 · 응용 (Application) 6 · 표현 (Presentation) 5 · 세션 (Session) 4 · 전송 (Transport) 3 · 네트워크 (Network) 2 · 데이터 링크 (Data Link) 1 · 물리 (Physical) 응용 (Application)HTTP · DNS · FTP · SSH … 전송 (TCP / UDP) 인터넷 (IP) 네트워크 인터페이스Ethernet · 물리 매체 같은 일을 OSI 는 더 잘게(논리적으로), TCP/IP 는 묶어서(기술적으로) 나눈다
OSI 7계층(논리·참조용)과 TCP/IP 4계층(기술·구현)의 대응

패킷과 PDU — 그리고 캡슐화

패킷이란 네트워크 상에서 전달되는 데이터를 통칭하는 말로, 데이터의 형식화된(블록화된) 단위다. 패킷 = 제어 정보(헤더) + 사용자 데이터(페이로드) 로 이뤄지며, 풋터(footer)는 거의 사용하지 않는다. 페이로드/헤더는 상대적인 개념이다 — IPv4 까지를 페이로드로 삼아 이더넷 헤더를 붙인 것이고, TCP·HTTP 를 페이로드로 삼아 IPv4 를 헤더로 붙인 것. 이렇게 패킷은 계속 붙여 나갈 수 있다.

[캡슐화 — 보내는 쪽] TCP 는 먼 곳의 프로그램과 통신해야 하니까 붙이고(4계층), 먼 곳에 도달해 통신해야 하니까 IPv4 를 헤더로 붙이고(3계층), 가까운 곳과 통신해야 하니까 이더넷 관련 헤더를 붙여 패킷을 만든다(2계층). → 상위 계층에서 하위 계층으로 내려가면서 헤더를 붙인다. 하위 프로토콜 앞에 상위 프로토콜을 붙일 수는 없다 (4→2→3 같은 건 불가능). [디캡슐화 — 받는 쪽] 하위 계층부터 상위 계층으로 올라가면서 확인한다.

캡슐화 — 내려갈수록 헤더가 하나씩 붙는다 Data 응용 데이터 TCP Data 세그먼트 (4계층 PDU) IPv4 TCP Data 패킷 (3계층 PDU) Eth IPv4 TCP Data 프레임 (2계층 PDU) 받는 쪽은 Eth → IPv4 → TCP → Data 순서로 거꾸로 벗긴다 (디캡슐화)
포장된 정도에 따라 같은 데이터도 계층마다 이름이 다르다 — 4계층 세그먼트 · 3계층 패킷 · 2계층 프레임 (PDU, Protocol Data Unit)

계층별 주소 · 프로토콜 · 장비 (종합)

OSIPDU주소 체계대표 프로토콜장비TCP/IP
응용·표현·세션MessageHTTP·FTP·DNS·SMTP·SSHApplication
전송Segment포트 번호TCP · UDPL4 스위치Transport
네트워크PacketIP 주소IP · ICMP · ARP라우터 · L3 스위치Internet
데이터 링크FrameMAC 주소Ethernet스위치 · 브리지Network
Interface
물리Bit전선·광·전파리피터 · 허브

3 · 2계층 — 데이터 링크 (같은 LAN 안에서)

2계층의 역할 — 가까이에 있는 컴퓨터, 즉 local area network(LAN) 안에서 어떻게 통신하는가를 정의한 것이 2계층이다. 주된 역할은 누가 누구에게 데이터를 보내는지에 대한 흐름 제어(flow control) 와, 오류가 있는지에 대한 오류 제어(error control) — 단 같은 대역(LAN)에 있는 장비들과만 소통한다. 그래서 다른 네트워크 area 와 통신할 때는 반드시 3계층을 거쳐야 한다.

📌

반드시 이해해야 하는 것 — 2·3·4계층에서 사용하는 주소 체계(MAC · IP · 포트). 역할은 살짝 암기해 두면 된다.

2계층의 주소 — MAC 주소 (물리 주소)

2계층에서 LAN 내부 통신에 쓰는 주소가 MAC 주소 — 물리적인 장비(NIC)가 받은 고유한 주소값이다. 16진수 2자리씩 6묶음(48bit)으로 표현하며, 앞 24bit 는 OUI — IEEE 기관이 제조 회사에 부여한 고유 번호 — 이고, 뒤 24bit 는 제조 회사가 장비마다 부여한 고유번호다. (예: E8-03-9A-68-C0-23)

2계층의 프로토콜 — Ethernet II 헤더

LAN 에서 통신할 때 쓰는 Ethernet 프레임은 크게 Destination Address · Source Address · Ethernet Type 3개로 나뉘고, 뒤에 DATA(이더넷 입장에서 페이로드)가 붙는다.

  • Destination Address (6byte) — 목적지 주소. MAC 주소도 6byte 이므로, 이 자리에는 목적지 MAC 주소가 온다.
  • Source Address (6byte) — 출발지 주소. 마찬가지로 MAC 주소.
  • Ethernet Type (2byte) — 페이로드 안의 상위(3계층) 프로토콜이 무엇인지 미리 알려주는 값. IPv4 인지 ARP 인지 미리 알고 있어야 DATA 를 까보기 쉽다. 이게 없으면 3계층 프로토콜이 뭔지 알 수 없다.
Ethernet II 프레임 구조 Preamble8 byte Destination MAC6 byte Source MAC6 byte EtherType2 byte Payload (DATA)46–1500 byte FCS4 byte EtherType 으로 상위 프로토콜 식별 — 0x0800 = IPv4 · 0x0806 = ARP
Ethernet II 헤더 — 목적지·출발지 MAC(각 6byte) + 상위 프로토콜을 가리키는 EtherType(2byte) + 페이로드(DATA)
🧪

실습 (2계층)ipconfig /all 로 내 물리 주소(MAC)를 확인하고, Wireshark 로 프레임을 까서 맨 앞 Destination, 그 다음 Source, 그 다음 EtherType 순서를 확인한다.

EtherType 값으로 상위 프로토콜을 구분한다 — 0x0800 = IPv4, 0x0806 = ARP (0x 가 붙으면 16진수라는 의미).

4 · 3계층 — 네트워크 (멀리 있는 곳으로 라우팅)

2계층이 local area 내부에서 흐름 제어·오류 체크를 하는 게 핵심이라면, 그 영역 밖의 다른 local area 와 통신하려면 어떻게 할까? → 3계층이 필요하고, 그에 걸맞은 장비가 바로 라우터다. 2계층이 MAC 주소로 서로의 위치를 확인했다면, 3계층은 IP 주소로 확인한다. 3계층은 다른 네트워크 대역까지 데이터를 어떻게 전달할지 — 발신지에서 착신지까지의 경로를 제어(라우팅) 한다.

LAN 과 WAN — 서로 다른 네트워크 대역을 라우터로 잇는다 WAN 집 LAN R 학원 LAN R 회사 LAN R LAN 안은 2계층(스위치)이, LAN 과 LAN 사이는 3계층(라우터 · R)이 책임진다
집·학원·회사처럼 서로 다른 LAN(2계층 영역)을 라우터가 WAN 으로 연결한다 — 다른 대역과의 통신은 3계층의 몫

멀리 있는 장비와 통신하려면 IP 주소만이 아니라 다음이 함께 필요하다.

  • IPv4 주소 — 현재 PC 에 할당된 IP.
  • 서브넷 마스크 — IP 주소에 대한 네트워크의 대역을 규정하는 것.
  • 게이트웨이 주소 — 외부와 통신할 때 사용하는 네트워크의 출입구.
  • DNS 서버 — IPv4 로 통신한다지만 실제로는 도메인 주소로 통신한다(네이버 IP 외우고 다니는 사람 없으니까). 도메인 주소를 쳤을 때 IP 주소로 바꿔 주는 것이 DNS 다. (예: 기본 8.8.8.8, 보조 168.126.63.1)

3계층 프로토콜 — ARP · IP · ICMP

  • ARP (Address Resolution Protocol) — 맥 주소를 모를 때 IP 주소를 가지고 MAC 주소를 알아오는 프로토콜.
  • IP — WAN 에서 통신할 때 사용하는 IPv4 프로토콜. (Version 을 단순히 6으로 바꾼다고 IPv6 가 되는 게 아니다 — IPv4 와는 형태가 다르다.) 헤더에 Version·TTL·Protocol·Header Checksum·출발지/목적지 IP 등을 담는다.
  • ICMP — 서로 통신이 되는지 확인할 때 사용(ping 의 바탕). Type·Code·Checksum 으로 단순하다.
IPv4 헤더 08162431 bit Version(4)IHL(4)ToS(8)Total Length(16) Identification(16)Flags(3)Fragment Offset(13) TTL(8)Protocol(8)Header Checksum(16) Source Address (32) Destination Address (32) Options (가변 · 선택)
IPv4 헤더 — 출발지/목적지 IP(각 32bit), TTL · Protocol · Header Checksum 등 (Version 만 6으로 바꾼다고 IPv6 가 되는 것은 아니다)
ARP 패킷 Hardware Type(16)Protocol Type(16) HW Len(8)Proto Len(8)Opcode(16) Sender HW Address (MAC) Sender Protocol Address (IP) Target HW Address (MAC) Target Protocol Address (IP)
ARP — IP 주소로 MAC 주소를 알아온다 (Opcode 로 요청/응답 구분, Sender/Target 의 HW·Protocol 주소를 담음)
ICMP 헤더 081631 bit Type(8)Code(8)Checksum(16) Rest of Header (메시지별 정보)
ICMP 헤더 — ping 같은 통신 확인에 쓰이며 Type · Code · Checksum 으로 단순하다
🧪

실습 (3계층) — IP 프로토콜 / ARP 프로토콜 / ICMP 프로토콜 각각의 이론 및 실습. 라우터는 패킷의 목적지 IP 를 라우팅 테이블과 대조해 어느 인터페이스로 내보낼지 결정한다(=라우팅).

캡슐화될 때 3계층이 여러 번 싸일 수도 있다. 예를 들어 ICMP 를 캡슐레이션하고 그 다음 IP 프로토콜로 다시 캡슐레이션하는 과정을 거치기도 한다.

5 · 4계층 — 전송 (프로세스와 프로세스를 잇다)

4계층 요약 — 프로그램과 프로그램을 연결해 주기 위한 계층(연결하고자 하는 프로그램의 정보를 담는다). MAC 주소(2계층)와 IP 주소(3계층)로 멀리 있는 컴퓨터의 위치까지 찾아갔다면, 3계층까지는 그 컴퓨터를 찾아간 것이고 그 컴퓨터 안에서 그 프로그램 딱 하나를 선택하는 것이 4계층의 일이다.

예를 들어 A 컴퓨터에서 카카오톡으로 쪽지를 보냈는데 B 컴퓨터의 네이트온으로 쪽지가 가지는 않을 거잖아. 즉, 카카오톡 쪽지가 상대의 카카오톡에 연결될 수 있게 해 주는 계층이다.

4계층 프로토콜 — TCP vs UDP

TCPUDP
연결연결 지향 (3-way handshake)비연결
특성신뢰성·순서·흐름/혼잡 제어빠르고 단순, 보장 없음
헤더복잡 (20byte+)단순 (8byte)

TCP 는 연결 지향형 — "연결 잘 됐니?"라고 물어보는, 마치 강사가 "이해했어요?"를 물어보는 과정이 들어간 것과 같다. 그래서 프로토콜 형식이 복잡하다. UDP 는 비연결 지향형 — 연결이 되든 안 되든 일방적으로 보내고 끝내는 것. 강사가 그냥 브로드캐스팅처럼 강의하고 이해됐는지 안 물어보고 끝낸 것과 같다. 그래서 형식이 단순하다.

TCP 헤더 08162431 bit Source Port (16)Destination Port (16) Sequence Number (32) Acknowledgment Number (32) Offset(4)RsvdFlags (CEUAPRSF)Window (16) Checksum (16)Urgent Pointer (16) Options (가변 · 선택)
TCP 헤더 — 출발지/목적지 Port(4계층 주소), Sequence/Acknowledgment Number, Flags(연결 제어), Window 등 — 형식이 복잡하다
UDP 헤더 01631 bit Source Port (16)Destination Port (16) Length (16)Checksum (16)
UDP 헤더 — Port · Length · Checksum 단 4개 필드로 단순하다 (TCP 의 연결 제어 필드가 없다)

포트 번호 — 4계층의 주소

특정 프로그램을 찾아가려면 4계층에도 프로그램의 주소가 필요한데 그게 포트 번호다. (2·3계층에서 주소 체계를 따로 배우고 헤더 형식을 배웠듯, 4계층에서도 Port 라는 주소를 배우고 TCP·UDP 형식을 배우는 것.) 범위로 나뉜다 — Well-known(0–1023, 예: HTTP 80, HTTPS 443, SSH 22), Registered(1024–49151), Dynamic/Ephemeral(49152–65535).

TCP 3-way handshake

TCP 는 데이터를 보내기 전에 양쪽이 연결을 수립한다. 클라이언트가 SYN, 서버가 SYN+ACK, 클라이언트가 다시 ACK 를 보내는 3번의 왕복이다. 이 과정에서 서로의 초기 시퀀스 번호(ISN)를 교환하고 TCP Flags 로 상대의 상태를 파악한다. 핸드셰이크는 TCP(4계층)까지만 처리되고 — 아직 응용 계층은 디캡슐화되지 않는다 — 양쪽이 "이제 보내도 되겠다"고 논리적으로 합의한 뒤에야 응용 데이터가 흐른다. 방화벽·패킷 손실 등으로 통신이 어려운 상황을 미리 거르는 작업인 셈이며, 이 모든 처리는 OS 커널의 TCP/IP 스택이 담당한다.

Client Server ① SYN ② SYN + ACK ③ ACK 연결 수립 완료 → 응용 데이터 전송 시작
3-way handshake — SYN / SYN+ACK / ACK 로 ISN 을 교환하고 논리적 연결을 확립 (자세한 동작은 9장 로드밸런서 절 참고)
🧪

실습 (4계층) — ① 포트 번호 확인 · ② 특정 포트 사용 · ③ UDP 프로토콜 — tftpd 파일 전송 · ④ TCP 프로토콜 분석. (UDP 의 단순함과 TCP 의 핸드셰이크/재전송 차이를 패킷에서 비교해 본다.)

6 · NAT 와 포트포워딩

NAT(Network Address Translation)는 IP 패킷의 출발지/목적지 IP 주소와 TCP/UDP 포트 번호를 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술이다. 패킷에 변화가 생기므로 IP·TCP/UDP 의 체크섬(checksum)도 다시 계산해 재기록해야 한다. 가장 흔한 용도는 사설 네트워크의 여러 호스트가 하나의 공인 IP 로 인터넷에 접속하는 것이지만, 꼭 사설IP↔공인IP 변환에만 쓰는 기술은 아니다.

네트워크 대역이 바뀔 때마다 이더넷 프로토콜을 새로 작성했던 것(그 영역 안에서)과 비슷하게, 3~4계층까지도 프로토콜을 다시 만드는 것이고 그 내용을 NAT Table 에 기록한다. 특정 IP 주소·특정 Port 번호로 가는 것을 다른 IP 주소·다른 Port 번호로 바꿔 주는 것이다.

포트 포워딩의 메커니즘

포트 포워딩은 NAT 를 응용한 기술로, 보통 사설 네트워크 대역을 설정하는 라우터·공유기 등 3계층 장비에서 제공하는 기능이다.

  1. 1번 사설 영역의 Client PC 가 다른(2번) 사설 영역의 서버에게 요청을 보내고 싶다. → 그런데 다른 사설 영역은 보이지 않는다.
  2. 그래서 Client 는 2번 사설 영역의 공인 IP 의 특정 Port 로 요청을 보낸다(저쪽에 보이는 게 그것밖에 없으니까). IPv4 헤더에 IP 가 설정될 때 공인 IP 로 설정된다.
  3. 공유기에 특정 IP 의 특정 포트로 요청이 오면 → 요청을 보낸 IP 와 특정 포트를 보고 특정 디바이스(IP)의 특정 프로그램(포트)으로 연결시켜 준다.

사설 1번 영역에서는 여전히 2번 영역이 보이지 않지만, 공유기한테 전달을 부탁한 꼴이 된다(공유기는 그 디바이스가 보이니까). 미리 약속된 포트와 IP 로 요청을 보내면 특정 디바이스의 특정 프로그램에 연결시켜 주는 것 — 이것이 포트 포워딩이다. (참고: 가상 머신도 NAT 를 이용해 사설 영역을 만든 것이다.)

포트포워딩 — 공인 IP:Port 요청을 내부 장비:Port 로 매핑 Client 공유기 / 라우터NAT Table · 공인 IP 2 웹서버 :8080 다른 PC :22 공인IP2:80 요청 :80 → 웹서버:8080
외부에서는 공유기의 공인 IP 만 보인다 — 약속된 포트로 온 요청을 내부 특정 장비·포트로 전달
🧪

실습 (NAT) — NAT 와 포트 포워딩 설정 실습 / 사설 IP 를 사용하는 서버로 외부에서 접속해 보기.

당시 남긴 의문 — 라우터에서 3계층 IP 와 라우팅 테이블을 보고 목적지를 사설 영역대에서 계속 바꿔 가며(MAC 주소를 다시 쓰며) 상대 Gateway 까지 갔다. 그러면 포트 포워딩은 정확히 어디서 일어나는가? 처음에 A 는 저 사설 영역 대역을 알 수 있었을까? 아마 공인 IP(예: 192.168.20.1)와 특정 디바이스로 연결되는 포트만 알고 있지 않았을까? (라우터 설정에서 더 실습하며 확인할 것.)

7 · 7계층 — 응용 & HTTP

프로토콜을 개발한다? 소켓 통신 프로그래밍 또한 7계층 영역에 해당한다 — 데이터 보내는 형식을 내가 정하면 그것이 7계층 프로그래밍이다. 7계층 프로토콜은 종류가 정말 많고, 대표적으로 웹을 사용할 때 쓰는 것이 HTTP 다.

웹을 만드는 기술들

웹 사이트를 만든다고 할 때 알아야 하는 기술들 — (필수) HTTP·HTML·JavaScript·CSS·ASP/ASP.NET·JSP·PHP·DB, (선택) Python·Spring·jQuery·Ajax. 역할로 보면:

  • HTML = 웹 페이지를 채울 내용, JavaScript = 페이지에 들어갈 기능, CSS = 페이지를 예쁘게 꾸밀 디자인 — 이들은 client side script(클라이언트에서 동작).
  • HTTP = HTML·JS·CSS 같은 파일을 웹 서버에게 요청하고 받아오는 프로토콜. 이 파일들의 저장은 서버 쪽에 되어 있고 Client 가 받아와서 실행될 뿐이다.
  • ASP/ASP.NET · JSP · PHP = 웹 서버 페이지를 만드는 기술들 (백엔드 개발).

HTTP 의 특징과 버전

HTTP(HyperText Transfer Protocol)는 www 에서 쓰이는 핵심 프로토콜로 문서의 전송을 위해 쓰이며, 오늘날 거의 모든 웹 애플리케이션에서 사용된다. 음성·화상 등 여러 종류의 데이터를 MIME 으로 정의하여 전송할 수 있고, Request / Response(요청/응답) 동작에 기반한다.

  • HTTP 1.0 — "연결 수립 → 동작 → 연결 해제"의 단순함이 특징. 하나의 URL = 하나의 TCP 연결이라, HTML 문서를 받은 뒤 연결을 끊고 다시 연결한다. 문제점: 매번 연결을 끊어서, 예컨대 네이버 메인에서 자원 10개를 받으려면 3-way handshake 를 10번 해야 하는 불상사가 생긴다.
  • HTTP 1.1 — 이 문제를 해결하기 위해 나왔다. "필요한 것 다 받아가고 끊어라" — 한 번 맺은 연결을 유지(keep-alive)한다.

요청 구조Request Line / Headers / 공백 / Body 다 (Packet 의 Header 같은 것이 아니라 Option 같은 것이라 생각하면 된다). URI 의 구조는 scheme://host[:port][/path][?query] — 예: http://IP주소:포트/폴더이름/파일이름. 응답에는 상태 코드가 붙는다 — 2xx(성공)·3xx(리다이렉트)·4xx(클라이언트 오류)·5xx(서버 오류).

🧩

호스트 안에서의 분담 — 한 컴퓨터에서 7계층(웹 브라우저·네트워크 게임·채팅 프로그램 등)은 소켓(SOCKET) 라이브러리 위에서 동작하고, TCP/UDP·IP(3·4계층)는 OS 가 담당하며(커널에 소프트웨어로 구현), 1·2계층은 LAN 드라이버·LAN 카드(NIC) 하드웨어가 담당한다.

🧪

실습 (HTTP) — HTTP 요청/응답 프로토콜의 구조, 헤더 포맷을 보며 직접 HTTP 를 작성·수정해 보기.

8 · 계층별 네트워크 장비

장비는 자신이 이해하는 주소가 곧 자신의 계층을 결정한다.

  • 1계층 (물리) — Repeater(리피터), Hub
  • 2계층 (데이터 링크) — Switch, Bridge
  • 3계층 (네트워크) — Router(라우터), L3 Switch

리피터 · 허브 (1계층)

리피터(Repeater)는 cable 전송으로 약해진 신호를 초기화·증폭·재전송하는 단순 증폭기다. 상위 계층의 MAC·IP 주소를 이해하지 못하고 단지 저항에 의해 약해진 전기 신호를 증폭시켜 줄 뿐이다(거의 안 씀).

허브(Hub)는 리피터처럼 전기 신호를 증폭하면서 LAN 전송 거리를 늘리고 여러 장비를 LAN 에 접속시킨다(멀티 포트 리피터). 한 장비에서 온 프레임을 — 들어온 포트만 빼고 — 연결된 모든 장비로 보낸다. 이를 flooding 이라 한다(MAC 주소를 모름).

허브에 연결된 장비들은 하나의 Collision domain(충돌 영역) 안에 있다 → 같은 충돌 영역 안에 있으니 충돌이 많이 일어난다(네트워크가 느리다).

스위치 · 브리지 (2계층)

브리지·스위치는 허브와 달리 Layer 2 주소인 MAC 주소와 해당 장비의 포트 번호가 기록된 MAC 주소 테이블을 보고 목적지에게만 프레임을 전송한다. 한 포트에서 전송되는 프레임이 테이블상의 특정 포트로만 가므로 다른 포트의 프레임과 충돌하지 않는다.

스위치는 각각의 포트가 독립된 선이다(즉, 충돌할 이유가 없다). 허브는 하나의 길이라 충돌이 많이 일어나지만, 스위치는 충돌 영역을 나눠 놓는다. 스위치도 하드웨어로 처리하는 방식과 소프트웨어로 처리하는 방식이 있는데, 하드웨어로 처리하는 게 훨씬 빠르고 보안도 강력하다(하드웨어에 가까울수록). — 최소한 납땜을 해봤거나 회로를 직접 만들어 보면 알 수 있다.

라우터 · L3 스위치 (3계층)

라우터·L3 스위치는 Layer 3 헤더의 IP 주소를 보고 라우팅 테이블과 맞춰 목적지로 가는 포트로 패킷을 보낸다(=Routing). 다른 네트워크(LAN) 구간의 장비와 통신하려면 반드시 거쳐야 하는 장비다. 게다가 라우터(L3 장비)는 Broadcast 를 차단한다 — 즉 브로드캐스트 도메인을 분리한다. (앞서 ARP 를 배울 때, 2계층 스위치가 MAC 주소를 알아내려고 브로드캐스팅으로 보낸 것을 공유기에서는 밖으로 내보내지 않았던 것이 그 예다.)

충돌 도메인 vs 브로드캐스트 도메인 허브 (L1) 한 충돌 도메인 스위치 (L2) 포트마다 충돌 도메인 분리 라우터 (L3) 브로드캐스트 도메인 분리
허브는 하나의 충돌 도메인, 스위치는 포트별 충돌 도메인 분리, 라우터는 브로드캐스트 도메인까지 분리

하드웨어 vs 소프트웨어, 그리고 케이블

  • 1계층 → 하드웨어(회로)
  • 2계층 → LAN 카드 하드웨어(회로)
  • 3계층 → OS 커널에 소프트웨어로 구현
  • 4계층 → OS 커널에 소프트웨어로 구현
🧪

실습 (장비·케이블) — 통신 케이블의 종류 / UTP 케이블이란(스트레이트·크로스오버 방식), 계층별 UTP 케이블링 / 직접 UTP 케이블 만들기 + Packet Tracer 로 토폴로지를 구성해 패킷 흐름 확인. (요즘 장비는 Auto-MDIX 로 스트레이트·크로스를 자동 처리한다.)

9 · 로드밸런서 — L4 vs L7 (실무)

로드밸런서는 같은 역할의 서버 여러 대에 트래픽을 분산해 부하를 나누고 가용성을 높인다. 동작 계층에 따라 둘로 나뉜다.

  • L4 로드밸런서 — 전송 계층에서 IP 주소 + 포트만 보고 분산한다. 패킷 내용을 직접 확인하지 않아 단순하고 빠르다.
  • L7 로드밸런서 — 응용 계층에서 HTTP 요청 헤더·URL·Host 같은 정보까지 분석해 분산한다. 예컨대 가상 호스팅(하나의 IP 로 여러 도메인 호스팅) 환경에서 Host 헤더를 보고 알맞은 서버로 보낸다. 더 똑똑하지만 더 복잡하고 리소스를 더 쓴다.

클라우드가 제공하는 로드밸런서는 보통 이 L4 / L7 을 고르게 해 주며, 흔히 TCP 모드 / HTTP(S) 모드로 노출된다. 구현은 대개 소프트웨어(Nginx · HAProxy · AWS ELB)지만, 전용 회로로 만든 하드웨어 로드밸런서(F5 BIG-IP 등)도 있다.

🛠️

실무에서 부딪힌 것 (KT 클라우드) — 로드밸런서(L4 스위치)를 두고 웹소켓(초기 핸드셰이크는 HTTP) 통신을 했는데, LB 를 HTTP 모드로 두니 TCP 3-way handshake 가 서버 두 대로 쪼개져(ACK 는 1번 PC, SYN-ACK 은 2번 PC 식으로) 연결이 제대로 맺어지지 않았다. TCP 모드로 바꾸자 정상화됐다.

원인 (ChatGPT 와 정리) — HTTP 모드의 LB 는 HTTP 헤더를 읽어 매 요청을 분산(L7 스타일)하려 들어 핸드셰이크 패킷마저 여러 서버로 분산해 버린다. 반면 TCP 모드는 LB 가 TCP 3-way handshake 를 자기가 끝까지 수행·유지하고 연결이 성립할 때까지 대기하므로 세션이 안정적으로 유지된다. 즉, HTTP 모드 = L4 장비가 제공하는 L7 로드밸런싱, TCP 모드 = 순수 L4 로드밸런싱. → 상태를 유지해야 하는 연결(웹소켓 등)은 L4/TCP 모드로 두는 게 안전하다.

곁들여 정리한 3-way handshake 심화 — "연결을 했다"는 건 양쪽이 SYN / SYN+ACK / ACK 로 서로의 초기 시퀀스 번호(ISN)와 상태(TCP Flags)를 교환해 논리적으로 연결되었다고 합의한 것이다. 핸드셰이크 동안에는 TCP(4계층)까지만 디캡슐레이션하고 응용 계층은 까지 않는다 — 합의된 뒤에야 응용 데이터를 보낸다. SYN 을 보냈는데 SYN-ACK 이 없으면 방화벽·라우팅 문제·호스트 장애·SYN flooding 공격 등을 의심한다. 이 모든 처리는 OS 커널의 TCP/IP 스택이 한다. (참고: TCP RFC 793, HTTP RFC 7230)

Client Load BalancerL4: IP+Port · L7: HTTP 헤더 Server AServer BServer C 분산 기준에 따라 L4(빠름) / L7(똑똑함)
L4 는 IP·포트로, L7 은 HTTP 헤더·Host·URL 로 트래픽을 분산

10 · SSL / TLS

SSL/TLS 는 TCP/IP 스택에서 전송 계층(TCP)과 응용 계층 사이에 끼워 넣는 보안 계층이다. 응용 데이터가 위로 올라가기 직전에 보안 한 겹을 Wrapping 한다고 보면 된다. 인증(authentication) · 무결성(integrity) · 암호화(encryption) 를 위해 대칭키·비대칭키, 키 교환, 인증서 같은 암호학 기술을 쓴다. 덕분에 telnet·http·ftp 같은 알려진 TCP 기반 애플리케이션이 데이터를 주고받을 때 보안성이 강화된다 — 보안 변형으로 HTTPS(443), FTPS(989/990), POPS(995), IMAPS(993), SSH(22) 등이 있다. 즉 HTTPS = HTTP over TLS.

일반 (HTTP) 보안 (HTTPS) Application (HTTP) Transport (TCP) Network (IP) Data Link (Ethernet) Application (HTTP) SSL / TLS Transport (TCP) Network (IP) Data Link (Ethernet) TCP 와 Application 사이에 보안 계층을 한 겹 끼워 넣는다
SSL/TLS 는 전송 계층 위에 자리해 응용 데이터를 암호화한다 (HTTPS·FTPS·SSH …)

비교하자면 IPsec 은 네트워크(패킷) 레벨의 보안이고 SSL/TLS 는 응용 데이터 레벨의 보안이다. SSL/TLS 는 호스트 간 Connection + Proxy 형태이고, IPsec 의 Tunnel 모드는 네트워크 중계 역할까지 할 수 있다. 같은 맥락의 보안 기술로 VPN(Virtual Private Network)이 있다.

📓 2022–2023년 제가 네트워크를 직접 공부하며 정리한 개인 학습 노트입니다 · 원본 Notion 에서 보기 ↗