본문 바로가기

Etc

[이론] Cloud에서 필요한 Networking 최소 개념 (L2~L7)

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 Cloud 입문을 위해서 배경 지식으로 필요한 최소한의 네트워크 개념에 대해서 정리해 보았습니다.

최소한 이 정도 개념은 이해를 하고 Cloud를 접근하는 것이 좋아보입니다. 네트워크를 알고 있는 친구들이 모르는 친구들에 비해 Cloud 이해 속도가 더 빠른 것이 현실이기 때문입니다.

아래 내용으로 이해되지 않는 경우는 언급드린 용어에 대해서 별도로 찾아보시기를 권고드립니다.


OSI 7 Layer

휴지 주문에 대한 배송 흐름도 (예시)
휴지 주문에 대한 배송 흐름도를 네트워크 표현 (예시)

구분 내용
Layer 1 물리계층 (Physical Layer) 
케이블, 리피터, NIC 등 물리 장치
(ex : 부천시 123)
Layer 2 데이터 링크계층 (DataLink Layer) 
브릿지, 스위치 통해 MAC 통신
(ex : 경기C지역센터 ~ 주문자)
Layer 3  네트워크 계층 (Network Layer) 
라우터 통해 IP 통신
(ex :  경기A지역센터~경기C지역센터(라우팅 처리) ~ 주문자)
Layer 4 전송 계층 (Transport Layer) 
로드 밸런서 통해 IP & Port 기반 부하분산 처리
(ex : 본사에서 각 지역센터 재고량 확인 (장애 감시) 및 배송 지시)
Layer 7 응용 계층 (Application Layer)
로드 밸런서 통해 데이터 중 특정 조건에 따라 부하분산 처리
(ex : 본사에서 각 지역센터 재고량 확인 (장애 감시) 및 가장 가까운 지역에 배송 지시)

Layer 2 - Ethernet Frame

Layer 2에서 사용하는 전송 매카니즘

Ethernet Frame 구조

  - Preamble : 프레임 도착 알림 

  - SFD(Start of Frame Delimeter) : 프레임 시작 표시

  - MAC DST : 도착지 MAC 주소

  - MAC SRC : 출발지 MAC 주소

  - TYPE or Length : 길이 or 종류 정보

  - Data : 전송 데이터

  - FCS : 에러 판별

Data(전송 데이터, Payload)에 대한 Layer별 개념

  - 캡슐화 (encapsulation) : 필요한 데이터(Header)를 추가해 나가는 것 (<-> 역캡슐화 (decapsulation))

Layer 2 - Subnetting

IP 주소 낭비를 방지하기 위해 원본 네트워크를 여러개의 서브넷으로 분리하는 과정

Network 주소체계 및 Class 표현 예시

  - A class : 10.0.0.0/8, 8bit=255.0.0.0

  - B class : 10.10.0.0/16, 16bit=255.255.0.0

  - C class : 10.10.1.0/24, 24bit=255.255.255.0

Subnetting (10.10.1.0/24를 2개로 분리하는 예시)

  - 2개의 Layer 2가 생성됨에 따라 10.10.1.0/25 대역과 10.10.1.128/25 대역은 Layer 3 통신을 하게 됩니다.

Layer 2 - VLAN, Flooding

VLAN (Virtual Local Area Network) : 물리적 배치와 상관없이 논리적으로 LAN 구성 

  - 비용 절감 : VLAN을 사용하여 L2 스위치 1대로 L2 스위치 2대 효과 

  - 불필요한 트래픽 감소 : VLAN10에서 발생한 Brodcast는 VLAN20으로 전달되지 않음

     ※ Brodcast는 동일한 Layer 2에만 전달

L2스위치 1대를 2개의 VLAN(VLAN 10, VLAN 20)으로 분리하여 설정

Flooding : 인입된 패킷의 Dst MAC 주소가 MAC 테이블에 없거나 MAC 테이블이 Full이면 동일한 VLAN 모든 물리적인 포트로 패킷 전송

L2 스위치에 신규 MAC(77:77:77:77:77:77)에 대한 요청이 왔으나 MAC Tabled Full로 Flooding 발생

Layer 2 - Tag (IEEE 802.1Q)

VLAN에서 스위치 간에 VID(VLAN Identifier) 정보를 전달하는 방법

  - Tag 통신하는 패킷은 아래 구조처럼 Ethernet Frame에 Tag 관련 컬럼이 추가됩니다.

구분 구조
Tag 기술
미적용한 경우

VLAN별 케이블링 통해 통신 가능
Tag 기술
적용한 경우

하나의 Tag 포트 통해 통신 가능

Layer 3 - Route

L3 Switch #1의 Routing Table 해석

Destination Gateway Mask Flags Interface 해석
0.0.0.0 10.1Source NAT (SNAT)
0.1.1
0.0.0.0 UG eth1 Default Gateway 설정 정보
10.10.1.0 0.0.0.0 255.255.255.0 U eth1 Linked 정보(eth1에 인터페이스 IP 설정하면 자동 등록되는 대역)
10.10.2.0 0.0.0.0 255.255.255.0 U eth2 Linked 정보(eth2에 인터페이스 IP 설정하면 자동 등록되는 대역)
10.10.3.0 0.0.0.0 255.255.255.0 U eth3 Linked 정보(eth3에 인터페이스 IP 설정하면 자동 등록되는 대역)
20.20.2.0 10.10.2.1 255.255.255.0 U eth2 Static Routing 설정 정보

Routing 우선순위

Layer 3 - VRRP

VRRP (Virtual Router Redundancy Protocol)는 가상 라우터 다중화 프로토콜, 가상 라우터 장애 복구 프로토콜

  - VRRP 구성하면 Active 장비는 Virtual MAC을 상하단의 인접 장비에 주기적으로 전달(GARP)하여 MAC 갱신요청

  - Fail-Over

Layer 3 - NAT (Network Address Translation)

사설 IP를 공인 IP로 변경(or 공인 IP를 사설 IP)에 필요한 주소 변환 서비스 

Firewall, L4/7 Switch, Proxy Server, 망연계 솔루션 등

구분 구조
Source NAT
(SNAT)

사설 대역(10.10.1.0/24)에서 공인 대역(99.99.1.0/24)으로 패킷을 전송할 때 사용
AWS의 ALB는 기본적으로 SNAT 처리하여 패킷을 전송
Destination NAT
(DNAT)

공인 대역(99.99.1.0/24)에서 사설 대역(10.10.2.0/24)으로 패킷을 전송할 때 사용
LoadBalancer는 기본적으로 DNAT 처리하여 패킷을 전송

Layer 4/7 - Handshake

TCP 연결을 성립하거나 종료하기 위한 수행 절,  Application 디버깅 시 아주 중요한 개념

구분 구조
3-way
(세션 연결 시)

Client에서 전송한 SYN 패킷을 Server에서 미수신하는 경우 : 방화벽 or Routing 문제
Server에서 전송한 SYN+ACK 패킷을 Client에서 미수신하는 경우 : Routing 문제
Listen하지 않는 포트로 Request 수신되면 RST_ACK 전송하고 세션 종료
4-way
(세션 종료 시)

RST(Reset) : 수신하는 순간 모든 세션은 강제 종료

Layer 4/7 - CPS, TPS, CC, Throughput

구분 구조
CPS vs TPS

Connection Pre Second : 초당 처리 가능한 Connection 수 (Layer 4에서 중요한 지표)
Transaction Pre Second : 초당 처리 가능한 Transaction 수 (Layer 7에서 중요한 지표)
CC, Throughput

Layer 4/7 - Load Balancing

구분 내용
SLB (Server Load 
Balancing)

IP+Port 기반으로 다수의 서버에 대해서 부하 분산하는 방식
Load Balancing을 위한 Virtual IP 필요
AWS의 ALB, NLB 서비스
GSLB (Global Server
Load Balancing)

LoadBalancer01~02 GSLB 구성상태에서 Client 요청에 대해서 가장 가까운 LoadBalancer로 연결시킴
AWS에서는 Route 53을 통해 구현
FWLB (Firewall 
Load Balancing)

VPNLB (VPN 
Load Balancing)

2대 이상의 방화벽(or VPN)에 대하여 부하 분산하는 방식
방화벽(or VPN) 상하단에 Load Balancing(External, Internal) 장비 구성 필요
AWS에서는 NLB 서비스를 통해 구현
GWLB (Gateway Load 
Balancing)
2대 이상의 Gateway에 대해 적절한 부하 분산 알고리즘을 통해 전달
AWS에서는 다른 VPC에 위치한 가상어플라이언스(Gateway 역할)로 라우팅을 할수 있도록 하는 서비스
CSLB (Cache Server 
Load Balancing)
캐시를 주목적으로 하는 서버 부하분산
목적지 IP를 변경하지 않고 부하분산 처리
구분 AWS ALB(Application LoadBalancer) AWS NLB(Network LoadBalancer)
Layer Layer 7 Layer 4
통신 Inbound / Outbound 트래픽 모두 ALB 지나감 Inbound 트래픽만 NLB 지나감
SG(Security Group) 적용 가능 적용 불가능 (Server SG로 트래픽 통제)
고정 EIP(Elastic IP) 적용 불가능 적용 가능
SNAT 기본 SNAT 처리 NLB+NLB 구성에서 SNAT 처리

Layer 4/7 - 용어

구분 내용
Entry 부하분산 동작 수행 시 생성되는 세션 정보 or 연결 유지 정보
Sticky timeout
(IP 지속 연결)
동일한 Client IP에 대해서 이전에 연결된 Server IP로 연결
Health-check Server의 Service 상태 확인 (http/s, tcp, udp, etc)
URI
x-forwarded-for
(XFF)
NAT mode에서 SNAT+DNAT으로 구성할 경우, Destination(Server)에서는 Source IP 확인이 불가능합니다. 
x-forwarded-for를 설정하게 되면, 요청 패킷에 Source IP(Client) 정보를 추가하여 전달할 수 있습니다.

Layer 4/7 - Load Balancing algorithm

구분 내용
Roud Robin (RR) Client 요청 순서대로 Server에 부하분산 처리
Weghited Roud Robin (WRR) Server에 가중치(Weghit)을 설정하여 가중치가 높은 Server에 더 많은 부하분산 처리
Least Connection (LC) Client 연결이 가장 적은 Server에 부하분산 처리
Source Hash (SH) Client IP(Source) 기준으로 부하분산 처리 (ex : 홀수는 1번 Server, 짝수는 2번 Server)
AWS에서는 미지원

Layer 4/7 - NAT mode

구분 내용
DNAT

Client가 SLB VIP으로 Service 연결 요청합니다.
LoadBalancer에서 DNAT(Server)처리하여 Server로 전송합니다.
SNAT
+DNAT

Client가 SLB VIP으로 Service 연결 요청합니다.
LoadBalancer에서 SNAT(SLB VIP), DNAT(Server)처리하여 Server로 전송합니다.
위와 같은 L2 구간(Mac 통신) 구성에서 SNAT 처리하지 않을 경우는 장애가 발생합니다.
Server 응답 패킷을 가운데 위치한 스위치가 LoadBalancer로 돌려주지 않고 Client로 바로 전달하기 때문입니다
DSR

Client가 SLB VIP으로 Service 연결 요청합니다.
LoadBalancer에서 수신 패킷을 그대로 Server로 전달합니다.
Server에는 사전에 LoopBack(SLB VIP) 설정해야하며, Server는 sip를 LoobBack에 설정된 값으로 응답합니다.

Layer 7 - Pattern Rule

Layer 7은 IP+Port가 아닌 Pattern Rule에 의해서 부하분산 처리됩니다.

즉, HTTP Header 정보 중 일치하는 요청을 선별하여 처리합니다.

# HTTP Header 예시

GET/index.html HTTP/1.1
Host: www.gtek.com
Cache-Control:max-age=0
User-Agent:Mozilla/5.0 Chrome/57.0.2987.133 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Referer:http://test.gtek.com/kboard/kboard.php?board=plos
Accept-Encoding: gzip, deflate, sdch
Accept-Language:ko,en-US;q=0.8,en;q=0.6
Cookie: guest=guestHkCsedKItd4BzwnQWRjySO0TNf10+d/8omaY=
구분 내용 예시
Method GET, POST, HEAD GET/index.html HTTP/1.1
Path Prefix, Regex, Suffix 등 https://www.gtek.com/kboard
Host Domain Host: www.gtek.com
User-Agent 브라우저 종류 User-Agent:Mozilla/5.0 Chrome/57.0.2987.133 Safari/537.36
예시의 녹색 부분을 Pattern으로 설정하게 되면, 해당값과 일치하는 요청 패킷에 대해서 L7 부하분산 처리를 합니다.
상기 예시 외 HTTP Header의 값들을 Pattern으로 설정하여 L7 부하분산 처리할 수 있습니다.
Path는 평문으로 작성해도 되고, 정규식(Regex)으로 작성해도 됩니다.
반응형