Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2월 4주차 회고 #31

Merged
merged 10 commits into from
Feb 24, 2024
File renamed without changes.
File renamed without changes.
80 changes: 80 additions & 0 deletions docs/playhuck/2024-02-19_[6장] 로드밸런서.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/f3395769-c47e-448c-a120-81325f64eafe">

4계층에서 동작하는 장비도 네트워크 장비에 포함됐다.

4계층의 특징인 포트 번호, 시퀀스 번호, ACK 번호에 대해 이해해야 한다. 통신의 방향성이나 순서와 같은 통신 전반에 대한 관리가 필요하며 이런 정보를 세션 테이블이라는 공간에 담아 관리한다.

### 6.1 4계층 장비의 특징

---

로드밸런서나 방화벽 같은 장비를 세션 장비라고 한다.

세션 장비의 우선 고려 요소

- 세션 테이블


세션 장비는 세션 테이블 기반으로 운용된다.

세션 정보를 저장, 확인하는 작업 전반에 대한 이해가 필요하다.

세션 정보는 세션 테이블에 남아 있는 라이프타임이 존재한다.


- Symmetric 경로 요구


Inbound와 Outbound가 일치해야 한다.

- 정보 변경(LB의 경우)


IP 주소가 변경되며 확장된 L7 로드 밸런서는 Application 프로토콜도 변경된다.


### 6.2 로드 밸런서

---

서버의 장비나 부하를 분산하기 위해 사용하는 장비를 로드 밸런서라고 한다.

- L4 로드 밸런싱


일반적인 로드 밸런서가 동작하는 방식, TCP / UDP 기반으로 동작한다.


- L7 로드 밸런싱


HTTP, FTP, SMTP와 같은 Application protocol 정보를 기반으로 로드 밸런싱을 수행한다.

HTTP 헤더나, URI 정보를 기반으로 부하를 분산한다.

이런 장비를 ADC 라고 하며, Proxy 역할을 수행한다.(Nginx와 유사)


**6.2.1 L4 스위치**

L4 스위치가 동작하기 위해서는, 가상 서버 / 가상 IP / 리얼 서버 / 리얼 IP가 필요하다.

가상 서버는 사용자가 바라보는 실제 서비스이며, 가상 IP는 사용자가 접근해야 하는 IP 주소

리얼 서버는 실제 서비스를 수행하는 서버이고 리얼 IP는 실제 서버의 IP이다.

여기서 L4 스위치는 가상 IP를 리얼 IP로 변경해준다.

**6.2.2 ADC**

ADC는 다양한 동작을 위해 Proxy로 동작한다.

페일오버나 리다이렉션 기능도 지원한다.

**6.2.3 L4 스위치 vs ADC**

ADC는 성능 최적화를 위해 서버에 부하가 걸리는 작업을 별도 수행하는데

그 중 하나가 이미지나 정적 콘텐츠 캐싱이다.

ADC에서는 SSL의 엔드 포인트로 동작해 클라이언트에서 ADC 까지의 구간을 SSL로 처리해주고 ADC와 웹 서벌르 이용해 통신한다.
57 changes: 57 additions & 0 deletions docs/playhuck/2024-02-20_[6장] 방화벽등.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/c4e7b43f-198b-4ac9-8a3a-1b500e28333d">

### 6.3 방화벽

---

네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 사전에 주어진 조건에 맞춰 허용하거나 차단 하는 장비를 방화벽이라고 한다.

세션정보를 저장해 패킷의 인과관계를 확인한다.

### 6.4 계층 장비를 통과할 때의 유의점

---

세션 장비는 세션 테이블 정보를 활용해 application 성능을 최적화하고 보안을 강화하고 패킷을 포워딩할 수 있습니다.

**6.4.1 세션 테이블 유지, 세션 정보 동기화**

세션 테이블은 메모리에 저장되기 때문에 메모리 최적화를 위해 일정 시간만 저장된다.

또한, 악의적 공격에 대비하여 타임아웃값을 더 줄이기도 한다.

세션 장비의 타임아웃 값이 application의 타임 아웃 값과 다를 때 세션에 막혀 통신에 문제가 생기는 경우가 발생할 수 있다.

1. 세션 장비의 타임아웃과 application의 타임 아웃 값의 Synk
2. 세션 장비에서 타임아웃 발생시, 양 단말에 세션 종료 통보
3. 세션 상태를 체크하는 Heath Check와 같은 주기적인 패킷 발생 기능 작업( AWS ALB health check)

**6.4.2 비대칭 경로 문제**

---

패킷이 지나가는 경로가 2개 이상인 경우 인바운드 패킷과 아웃바운드 패킷의 경로가 같을 수도 있고 다를 수도 있다.

같은 것을 대칭 경로, 다른 것을 비대칭 경로라고 한다.

들어온 경로와 나가는 경로가 다른 경우 정상적 서비스가 어렵다.

비대칭 경로를 방화벽에서 처리할 수 있는

- 첫 번째 방법은 세션 테이블 동기화
- 두 번째 방법은 세션 장비에서 다양한 방법으로 이를 보정하는 것

**6.4.3 하나의 통신에 두 개 이상의 세션이 사용될 때의 고려사항**

---

두 개 이상의 세션을 만드는 경우가 있다.

두 통신 중 한 쪽 세션이 끊겨 있거나 세션 장비의 세션 테이블에서 삭제되면 단방향 통신만 가능하거나 통신하지 못할 수 있다.

프로토콜은 데이터 프로토콜과 컨트롤 프로토콜로 구분할 수 있다.

- 데이터 프로토콜 : 데이터를 실어 나름
- 컨트롤 프로토콜: 데이터가 잘 전송되도록 세션을 제어

특별한 목적의 경우 두 개의 프로토콜을 하나의 프로토콜로 관리하지만 FTP의 경우와 같이 분리된 경우 도 있다.
91 changes: 91 additions & 0 deletions docs/playhuck/2024-02-21_[7장]NAT,PAT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<img src="https://github.com/monthly-cs/2024-01-network/assets/105256335/c6ba5881-e4dd-4649-b2df-1bc2cbf64617">

종단 장비에서 패킷이 시작되어 중간 네트워크 장비에서 이 패킷을 처리하는 과정 외에도 IP 네트워크에는 통신을 도와주고 사용자들을 편하게 해주는 다양한 서비스와 프로토콜이 존재한다.

### 7.1 NAT/PAT

---

NAT(Network Address Translation, 네트워크 주소 변환)은 실생활에서 많이 쓰인다.

노트북과 PC는 공유기, 스마트폰은 어딘가의 통신사 장비 등…

NAT은 기본적으로 네트워크 주소 변환 기술로, 1:1로 변환하기도 하지만 여러 개의 IP를 하나로 변환하기도 한다. 여러개는 실제로는 NAPT라고 한다. NAPT의 경우 실무에서는 PAT라고 한다.

RFC2663에서 “NAT는 IP 주소를 다른 IP주소로 변호나해 라우팅을 원활히 해주는 기술”이라고 정의하고 있다.

이 개념을 좀 더 확장하면 IPv4 주소를 IPv6주소로 변환하거나 그 반대로도 가능하다.

**7.1.1 NAT/PAT의 용도와 필요성**

**Pros**

1. IPv4 주소의 고갈문제
2. 보안 강화

⇒ 외부와 통신할 때 IP를 변환하면 사내 IP 주소 체계를 숨길 수 있다.

3. IP 주소 체계가 같은 두 개의 네트워크 간 통신을 가능하게 해준다.

⇒ 사설 IP의 경우 외부와 통신할 때 공인 IP로 변환되어 통신하므로 주소 체계가 같은 네트워크라고 인식되는 선에서도 서로 통신할 수 있습니다.

4. 불필요한 설정변경을 줄일 수 있다.

⇒ 일반적으로 IP를 빌려서 요새는 사용하기 때문에, 회선 사업자를 바꾸거나 IDC를 이전하면 공인 IP를 사용할 수 없고 신규 사업자가 빌려주는 IP를 사용해야 한다.

일반적으로 DNS 같은 것은 공인 IP가 변하기 때문에 수정해야 하지만, NAT/PAT 기술을 적용하면 해당 변경으로 인한 문제를 줄일 수 있다.


**Cons**

1. IP가 변환되면 장애를 인식하기 힘들다.
2. Application 개발할 때 해당 고려사항이 늘어났다. (서비스 복잡성 증가)
3. NAT로 인한 오버헤드나 다양한 문제가 있다.

**7.1.2 NAT 동작 방식**

1. 출발지 IP 10.10.10.10, 목적지 IP 20.20.20.20 포트 80으로 패킷 전송
2. NAT 장비에서 패킷 수신 후 정책에 따라 외부 네트워크와 통신 가능한 공인 IP 11.11.11.11로 IP 주소 변경, NAT 변경 전후의 IP 주소는 NAT 테이블에 저장
3. NAT 장비에서 출발지 주소를 11.11.11.11로 변경해 패킷 전송
4. 수신한 Application에서 Response 발신, 출발지 IP가 20.20.20.20으로 목적지는 공인 IP 11.11.11.11
5. Application으로부터 응답을 수신한 NAT 장비가 자신의 NAT 테이블의 목적지 IP에 대한 원래 패킷을 발생시킨 출발지 IP주소 와 매핑 후 재변환 후 패킷 수신



**7.1.3 PAT 동작 방식**

NAT과 동작 방식이 비슷하지만, IP 주소 뿐만 아니라 서비스 포트까지 변경해 NAT 테이블을 관리하기 때문에 하나의 IP만으로도 다양한 포트 번호를 사용해 사용자를 구분할 수 있다.

만약, 서비스 포트가 동시에 모두 사용중이거나 재사용할 수 없는 경우 PAT이 정상 작동하지 않을 수 있다.

따라서 동시 사용자가 매우 많은 경우 PAT에서 사용하는 공인 IP 주소를 IP 하나가 아닌 풀로 구성해야 한다.

PAT의 경우 SNAT(출발지 주소를 변경하는 NAT) 에서만 사용할 수 있고 목적지 주소를 변경하는 NAT인 DNAT에서는 사용할 수 없다.

**7.1.4 SNAT와 DNAT**

1. SNAT(Source NAT)은 언제 사용할까?

일반적으로 사설에서 공인으로 통신할 때 많이 사용한다.

또, 보안상 회사에서 다른 대외 협력사와 통신 시 내부 IP 주소를 숨기고 싶을 때 대내외적으로 실제 IP 주소를 숨기려고 할 때 사용한다.

또한 IP 대역의 중복이 되지 않기 때문에 다른 IP로 변경해 사용할 수도 있다.

로드 밸런서의 경우, 출발지와 목적지가 동일 대역일 경우 로드 밸런서 구성에 따라 트래픽이 로드 밸런서를 거치지 않고 응답할 수 있어 SNAT를 통해 응답 트래픽이 로드 밸런서를 거치게 할 수 있다.

1. DNAT(Destination NAT)은 언제 사용할까?


DNAT는 로드 밸런서에 많이 사용한다.

사용자가 로드 밸런서에 설정된 Virtual IP로 서비스를 요청하고 로드 밸런서에서 서비스 VIP를 로드 밸런싱될 서버의 실제 IP로 DNAT해 보낸다.

사내가 아닌 대외망과 네트워크 구성에서도 사용한다. IP가 중복될 수 있기 때문이다.


**7.1.5 동적 NAT와 정적 NAT**

출발지와 목적지의 IP를 미리 매핑해 고정해놓은 NAT를 정적 NAT

반대로, NAT를 수행할 때 IP 를 동적으로 변경하는 것을 동적 ANT이라고 한다.
Loading
Loading