반응형

IPSec(Internet Protocol Security)은 인터넷 프로토콜(IP)에서 데이터를 보호하기 위한 보안 프레임워크입니다.
Layer 3에서 암호화를 제공하며, 인증을 통해 데이터의 기밀성, 무결성, 그리고 송신자의 신원을 보장합니다.

 

 

  • 전송 모드: IP 패킷의 페이로드(데이터)만 암호화.
  • 터널 모드: 전체 IP 패킷을 암호화하여 보안 터널을 형성.

 


터널모드

 

터널 모드에서는 전체 IP 패킷이 암호화되어 원래의 IP 헤더도 숨겨지기 때문에,
암호화된 패킷이 네트워크를 통해 전달되기 위해 새로운 외부 IP 헤더가 추가됩니다.
이 새로운 헤더는 목적지에 도달할 때까지의 경로를 결정하는 데 사용됩니다.
네트워크 라우터들은 이 외부 IP 헤더만 보고 패킷을 라우팅합니다.
목적지에 도착하면, VPN 게이트웨이가 패킷을 복호화하고 원래의 IP 헤더와 데이터를 확인해 최종 목적지로 전달합니다.

 

터널 모드에서는 원본 패킷(원래의 목적지 IP 주소가 포함된 패킷)이 암호화되며,
그 위에 새로운 외부 IP 헤더가 추가됩니다.
이 새로운 헤더의 목적지는 원래 패킷의 목적지가 아닌, VPN 게이트웨이보안 장비입니다.

 

과정 요약:

  1. 암호화: 원본 패킷(헤더와 데이터) 전체가 암호화됨.
  2. 외부 헤더 추가: 새로운 IP 헤더를 추가하여 네트워크에서 라우팅 가능하게 만듦.
  3. 라우팅: 라우터는 새 헤더를 기반으로 패킷을 목적지로 보냄.
  4. 복호화: VPN 게이트웨이에서 복호화 후 원래 목적지로 전달.

이 과정을 통해 암호화된 패킷이 네트워크를 통해 안전하게 목적지까지 도달할 수 있습니다.


IPSec 과정

1. IKE (Internet Key Exchange): 두 장치 간 인증 및 암호화 키 교환을 수행.

2. SA (Security Association): 암호화 및 인증에 대한 보안 매개변수를 설정.
3. SAD (Security Association Database): 설정된 SA가 저장되고, IPSec 통신에 적용될 때 사용됨.
4. ESP(Encapsulating Security Payload) 또는 AH(Authentication Header): 암호화 및 인증을 적용해 트래픽을 보호.
5. 암호화된 패킷이 안전하게 전송되고 복호화됨.

 

 

 

 



1. IKE (Internet Key Exchange)

두 노드간의 인증은 공개 키 암호화 방식(예: 인증서) 또는 사전 공유 키(PSK)를 사용한다.

  • Phase 1 (보안 채널 설정):
    • 목적: 인증과 키 교환을 통해 안전한 보안 채널 생성.
    • 결과: IKE SA 설정, 이후 IKE 메시지는 보안 채널을 통해 보호됨.
  • Phase 2 (IPSec SA 협상):
    • 목적: 실제 데이터 트래픽을 보호할 SA 설정.
    • 결과: IPSec SA가 설정되고, IPSec 트래픽이 이 SA를 통해 암호화 및 인증됨.



2. SA (Security Association)

두 장치 간 보안 매개변수(암호화 알고리즘, 인증 방법, 키 등)에 대한 합의를 의미합니다.



3.SAD
SA는 SAD(Security Association Database)에 저장

 



4. AH(Authentication Header), ESP(Encapsulating Security Payload)


 AH(Authentication Header)

  1. 해시 값 생성: 송신자가 IP 패킷(헤더 및 데이터)을 전송할 때, 해시 함수(예: HMAC-SHA1)를 이용해 패킷의 무결성을 나타내는 해시 값을 생성합니다. 이 해시 값은 인증 키와 함께 패킷에 포함됩니다.
  2. 수신자가 해시 값 계산: 수신자는 동일한 해시 함수를 사용해 패킷의 해시 값을 다시 계산합니다.
  3. 해시 값 비교: 수신자가 계산한 해시 값과 송신자가 보낸 해시 값을 비교하여 무결성을 확인합니다. 값이 같으면 패킷이 전송 중 변경되지 않았다는 것을 보장합니다.

해시값을 통해 무결성을 검증하기 떄문에, 해시 함수를 이전에 교환하는 과정을 거쳤어야 한다.
해시 함수는 노출되면 안되므로 IKE (Internet Key Exchange) 과정을 거친다.

 


ESP(Encapsulating Security Payload)

  • ESP 헤더: 패킷의 암호화된 페이로드 전에 위치.
  • ESP 트레일러: 암호화된 페이로드 뒤에 위치해 패딩 및 인증 데이터 포함.
  • ESP 인증 데이터: 선택적으로 패킷 무결성 확인.

 


5. 통신

 

 

 

 

 

 

 

 

 

 

 

반응형

'CS > 네트워크' 카테고리의 다른 글

Blocking / Non Blocking, Synchronous / Asynchronous  (0) 2023.10.03
[TCP/IP MODEL]  (0) 2022.08.31
반응형

 

Blocking / Non Blocking Synchronous / Asynchronous

 

 

Blocking / Non Blocking

  • Blocking / Non Blocking은 호출되는 함수가 바로 제어권을 리턴 하느냐 마느냐 가 관심사
    • 제어권을 리턴하지 않으면 Blocking
    • 제어권을 리턴하면 NonBlocking
    제어권이 누구한테 있는지?

Synchronous / Asynchronous

  • Synchronous / Asynchronous는 호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐 가 관심사
    • 호출되는 함수의 작업 완료를 호출한 함수가 확인하면 Synchronous (동기)
    • 호출되는 함수의 작업 완료를 호출된 함수가 확인하면 Asynchronous (비동기)
    호출한 함수의 완료 여부를 누가 확인하는지?
  • 비동기 방식은 멀티 스레드 , 단일 스레드?요점은 비동기 방식은 스레드를 효율적으로 운용하여 반응성을 향상시키는 것비동기 방식 DB I/O가 발생하면 DB I/O는 다른 스레드에게 넘기고, 나머지 작업을 수행
  • 기존 방식 DB I/O가 발생하면 다른 작업을 수행하지 않고, DB데이터가 올 때까지 기다림.
  • 단일 스레드에서도 가능하다고는 하는데, 사실은 다른 프로세스의 스레드를 사용한다.
    다른 스레드 또는 다른 프로세스의 스레드를 사용하므로 결국, 멀티 스레드가 맞다.
  • 동기?
    **작업의 완료 확인 방식에서의 동기(synchronous):** 
    작업을 호출한 쪽이 결과가 반환될 때까지 기다린다는 의미입니다. 
    비동기(asynchronous)는 작업의 완료를 기다리지 않고 다른 작업을 수행하며, 
    작업의 결과는 나중에 돌려받습니다.(콜백, 이벤트, 프로미스 등을 통해).
    
    **쓰레딩과 Race Condition 문맥에서의 동기(synchronization)**: 
    쓰레드 간의 실행 순서나 자원 접근을 조절하는 방식을 의미합니다. 
    즉, 어떤 일련의 작업이 '동기화' 되어 있다면, 그 작업들은 미리 정의된 어떠한 
    순서에 따라 실행되어야 하며, 이를 통해 레이스 컨디션을 방지할 수 있습니다.
    
    **Synchronous (동기):** 시간에 대한 것
    동기 방식은 하나의 작업이 완료되어야 다음 작업이 시작됩니다. 
    여기서는 `시간의 흐름`에 집중이 되어 있습니다.
    **-> 시간**
    
    **Synchronization (동기화):** 상태나 데이터의 일관성 
    여러 프로세스나 쓰레드가 동시에 어떠한 자원을 접근할 때 그 순서와 방식을 
    조절하여 `데이터의 일관성`을 유지하는 것을 의미합니다.
    **-> 상태**
    
  • → 동기가 헷갈리는 이유

 

 

결론

  1. Blocking + Synchronous: 요청을 보내고 응답을 받을 때까지 아무 것도 하지 않는 상태로 대기.이렇게 되면 시스템의 효율성이 떨어짐 긴 대기 시간 동안 다른 중요한 작업을 처리할 수 없게 된다.
  2. Non-Blocking + Asynchronous: 요청을 보내고 바로 다른 작업을 계속 진행. 응답이 오면 해당 응답을 처리하는 콜백 함수나 이벤트 리스너를 통해 처리함 이 방식은 시스템의 효율성, 반응성을 크게 향상 시킬 수 있다.

→ 결국, 작업 시간이 긴 여러 DB I/O, 네트워크 처리는 비동기 방식이 좋다는 내용 👍

 

 


 

예시

프론트

왜 Javascript에서 axios 호출을 비동기식이라고 하는지?

Web APIs Ajax 요청, setTimeout(), 이벤트 핸들러의 등록과 같이 웹 브라우저에서 제공하는 기능들을 말한다.

이러한 요청들의 처리가 JavaScript 엔진의 쓰레드와는 다른 쓰레드들에서 이뤄진다는 점이다.

JavaScript 엔진의 스택에서 실행된 비동기 함수가 요청하는 비동기 작업에 대한 정보와 콜백 함수를 웹 API를 통해

브라우저에게 넘기면, 브라우저는 이러한 요청들을 별도의 쓰레드에 위임 해당 요청이 완료되는 순간 콜백 함수를 JavaScript 엔진의 태스크 큐라는 곳에 집어넣는다.

→ JS가 비동기 함수를 실행하면, JS는 이 함수들에 대해 신경 쓰지 않는다. (비동기)

호출된 함수는 브라우저가 신경 쓰며, 작업을 완료하면 JS에게 Call Back 을 준다.

async function fetchExternalData() {
  const response = await fetch('<http://external-service/data>');
  const data = await response.json();

  // 위 요청-응답을 비동기로 브라우저에게 넘겨 처리하고, 아래 작업을 바로 실행함
  otherWork();

  return data;
}

 

 

백엔드

**WebFlux**는 Spring 5에서 도입된 반응형 프로그래밍 모델로, Non-Blocking + Asynchronous 방식 WebFlux는 Project Reactor를 기반으로 하며, **Mono**와 **Flux**라는 반응형 스트림 타입을 제공

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;

@Service
public class ExternalService {

    @Autowired
    private WebClient webClient;

    public Mono<String> fetchExternalData() {
        String data = webClient.get()
                        .uri("/data")
                        .retrieve()
                        .bodyToMono(String.class);

				// 위 요청-응답을 비동기로 처리하고, 아래 작업을 바로 실행함
				otherWork();
    }
}

 

 


 

 

! 질문

비동기 방식이 무엇인가?

→ DB I/O, 네트워크 작업 등의 시간 소요가 큰 작업의 완료를 기다리지 않고, 해당 작업 완료 시 콜백을 통해 결과를 받아오면서 동시에 다른 작업을 계속 수행하는 방식을 의미합니다.

WebFlux, axios를 추가로 설명하면 👍

 

(네트워크에서) 동기 방식이 무엇인가?

→ 여러 개의 요청-응답을 순차적으로 처리하여, 실행하는 것입니다.

반응형

'CS > 네트워크' 카테고리의 다른 글

IPSec(Internet Protocol Security)  (0) 2024.09.20
[TCP/IP MODEL]  (0) 2022.08.31
반응형

 

 

 

 

 

1계층 물리 계층

물리적인 매체를 이용해 비트 스트림을 전송

비트 단위 전송 010100

 

 


 

 

2계층 데이터링크 계층

hop to hop 전송 담당

Mac 주소 사용

유선 - 이더넷 MTU 1500byte

무선 - LTE

 

IP주소를 이용해 바로 옆(라우터, Host)으로 전달하는 역할을 하는 계층

 

데이터를 전송하고자 할 때 매체를 타고 전파된다.

매체를 이용하면 브로드캐스트로 전파된다. (사람이 공기를 이용해 말을 하듯이)

여러 노드가 동시에 매체를 이용하게되면, 충돌이 발생한다. 

 

충돌을 해결하기 위해 여러 시도 -> 정해진 시간마다 노드가 데이터를 보내는 방식

현재 사용하는 방식은 임의로 아무때나 Random Access하는 방식을 사용

임의로 아무때나 매체에 접근하므로 충돌은 언젠간 발생하며, 충돌을 해결해주어야 한다.

 

CSMA(carrier sense multiple access)

데이터를 보내기전에 매체를 감지하여 확인 후 전송한다.

 

CD(collision detection)

보낸 데이터의 충돌을 감지하면 전송을 멈춘다.

랜덤 딜레이를 주고 이후에 다시 전송을 시도한다.

 

 

 

스위치 (STAR형)

스위치가 중간에서 순서를 정리

스위치는 네트워크 관점에서 큰 의미 X

단순하게 연결을 위해 사용하는 것

switch table  [destination MAC : port]

 

 


 

ARP(IP를 사용하므로 사실 3계층에 위치)

IP를 이용해 MAC주소를 알아낸다.

 

프레임은 목적지 MAC주소로 데이터를 전송하므로 

목적지의 MAC주소를 알아야 한다.

MAC주소를 알아내기 위해 IP를 이용한다.

 

출발지 노드는 ARP TABLE [IP : MAC] 을 갖고 있다.

테이블에 IP에 해당되는 MAC 주소가 없다면

ARP TABLE을 채우기위해 브로드캐스트로 ARP를 전송

IP에 해당되는 정보를 가진 노드가 응답으로 자신의 MAC 주소준다.

출발지 노드는 목적지 MAC 주소를 채우고 데이터를 전송

 

스위치를 이용할 때는 데이터 링크(MAC)까지 올라가고,

ARP를 이용하려면 라우터 - 네트워크 계층 (IP)까지 올라가야 한다.

 

라우팅 테이블을 만들 때, ARP 테이블도 만든다.

 


 

 

3계층 네트워크 계층

장비: 라우터 - NAT, Forwarding, 방화벽

Host to Host

IP 주소 사용

 

 

라우터 동작 방식: 라우팅 알고리즘 -> 포워딩 테이블 구성 -> 포워딩

 

 

ip를 하나하나 다 저장하면 방대해지므로

서울, 대전, 부산과 같이 크게 묶은 후 라우팅 테이블의 ip range(Network Id)를 본다.

라우터는 라우팅 테이블을 보고 IP의 subnet mask 만큼 네트워크 IP로,

해당되는 라우터로 패킷을 forward (ip range가 가장 길게 매칭되는 곳으로 전송)

서브넷: 같은 prefix를 갖는 집합

 

 

 

라우팅 테이블 구성 방식

(1) Link state - 다익스트라 알고리즘

브로드캐스팅으로 자신의 링크정보를 네트워크에 뿌린다.

각 점은 각자 다익스트라 알고리즘을 수행하여 라우팅 테이블을 구성한다.

범위는 라우터들이 속한 도메인 범위에서 수행

 

(2) Distance vector - 벨만 포드 알고리즘

min(자신의 옆 라우터 이동 비용 + 도착지까지의 비용)

 

 

Fragmentation

IP 패킷을 2계층 이더넷 MTU에 맞게 분리, 조립하는 과정을 거친다.

재조립에 사용되는 식별자(identification), Offset을 헤더에 갖는다. (같은 데이터면 1씩 증가)

 

 

 


 

 

4계층 전송 계층

Process to Process

 

TCP, UDP

헤더에 포트번호를 갖고 있음

 

TCP, UDP 세그먼트도 이더넷 MTU를 따라야하기 때문에 분리한다.

 

 

 

TCP - 신뢰성 있는 통신

3way handshake(TCP Flags [Syn, Ack, Fin])

를 이용해 통신을 성립 후 신뢰성 지향 송수신을 한다.

버퍼를 이용해 흐름제어, 혼잡제어를 한다.

항상 수신측의 상황을 고려한다.

ack로 세그먼트의 시퀀스 넘버를 요청

 

흐름제어

슬라이딩 윈도우로 흐름을 제어한다.

ack를 받으면 ack 이후를 즉시전송 후 슬라이딩 윈도우를 밀고, 다시 전송한 세그먼트들의 ack를 기다린다.

윈도우의 크기는 수신측 상황에 맞춘다.

 

혼잡제어

송신한 세그먼트들이 timeout될 때 까지 지수적으로 증가시켜서 세그먼트를 전송해본다.

timeout이 발생하면 최종 전송 크기의 반으로 감소시켜 진행하고, 이후 가산 증가시키며 전송

 

 

 

 

 

UDP - 신뢰성 없는 통신

오류제어만 수행한다.

오류가 발생하면 해당 패킷은 폐기

헤더가 작아 커스텀하여 사용하기도 한다.

 


 

 

응용 계층

암호화, 실시간 처리 등을 응용계층에서 전담한다. (OSI 7 layer의 세션, 표현 계층의 역할을 포함한다.)

 

TCP socket 또는 UDP socket 을 형성하여 통신한다.

 

여러개의 소켓이 형성

소켓위에서 응용계층 프로세스가 동작한다.

전송계층의 헤더를 보고 맞는 소켓(port)으로 올린다.

 

 

 

 

HTTP 일 경우

헤더와 바디로 구성된 메세지를 전송계층에 데이터로 넘김

 

 

 

 


 

반응형

'CS > 네트워크' 카테고리의 다른 글

IPSec(Internet Protocol Security)  (0) 2024.09.20
Blocking / Non Blocking, Synchronous / Asynchronous  (0) 2023.10.03

+ Recent posts