안녕하세요 서후아빠입니다. ^_^
이번 세션은 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에만 전달
Flooding : 인입된 패킷의 Dst MAC 주소가 MAC 테이블에 없거나 MAC 테이블이 Full이면 동일한 VLAN 모든 물리적인 포트로 패킷 전송
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)으로 작성해도 됩니다. |
'Etc' 카테고리의 다른 글
[이론] 보안장비(FW, VPN, SSLVPN, IPS, WAF) 기본 개념 (0) | 2022.11.24 |
---|---|
[Tip] windows에서 telnet보다 확실하게 서비스 포트 확인하는 방법 (0) | 2022.07.26 |
[Tip] Windows 사용자가 특정 URL는 접속이 안되고, 특정 URL에 해당하는 Public IP는 접속이 될 때 대응 방법 알아보기 (0) | 2022.07.21 |
[Tip] 티스토리(tistory) 블로그 줄간격 설정하기 (2022년 7월 기준) (0) | 2022.07.13 |