CPU 스케줄러는 CPU 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다.

 

 

프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다.
이 알고리즘은


1. CPU 사용률은 높게,
2. 주어진 시간에 많은 일을 하게,

3. 준비 큐에 있는 프로세스는 적게,

4. 응답 시간은 짧게 설정하는 것


을 목표로 한다.


비선점형 방식  

비선점형 방식은 프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 종료하지 않는다.
따라서 컨텍스트 스위칭으로 인한 부하가 적다.

 

  • FCFS (First Come First Serve)
    가장 먼저 온 것을 가장 먼저 처리하는 알고리즘이다.
    길게 실행되는 프로세스가 있다면 준비 큐에서 오래 기다려야 하는 단점이 있다.

  • SJF (Shorts Job First)
    실행시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘이다.
    다만, 긴 시간을 실행해야 되는 프로세스가 실행되지 않는 현상이 일어난다.
    평균 대기 시간이 가장 짧다.

    어떠한 프로세스가 실행 시간이 가장 짧은지 바로 확인이 어렵기 때문에
    과거의 프로세스가 실행된 시간을 토대로 추측해서 사용한다.

  • 우선순위
    기존 SJF 스케줄링에 경우 긴 시간을 실행해야 하는 프로세스가 실행되지 않는 현상을
    오래된 작업일수록 '우선순위를 높히는 방법' 통해 보완한 알고리즘이다.


선점형 방식 

선점형 방식은 현대 운영체제에서 사용하는 방법으로 지금 사용하고 있는 알고리즘은 강제적으로 중단시켜 버리고

강제로 다른 프로세스에게 CPU 소유권을 할당하는 것을 말한다.

 

  • 라운드 로빈 (RR, Round Robin)
    라운드 로빈은 현대 컴퓨터가 사용하는 스케줄링인 우선순위 스케줄링의 일종으로 각 프로세스에서
    동일한 할당 시간을 주고 그 시간 안에 마치지 못하면 다시 준비 큐의 뒤로 보내는 방식이다.

    자기 자신에게 q 라는 할당 시간이 배분되었고 N 개의 프로세스가 운영된다고 하면
    (n-1) * q 시간 뒤에는 자기 차례가 오게 된다.

    이 알고리즘은 로드밸런서에서 트래픽 분산알고리즘으로도 쓰인다.

  • SRF (Short test Remaining Time First)
    SJF 는 알고리즘 진행 중 현재 실행하는 프로세스보다 더 실행 시간이 빠른 프로세스가 들어와도
    먼저 실행하던 프로세스를 마친다음 가장 작은 시간의 프로세스를 실행하는데
    SRF는 알고리즘 실행중에도 지금 프로세스보다 더 빠른 실행 시간의 프로세스가 들어온다면
    기존 프로세스를 중단하고 해당 프로세스를 실행하는 방법이다. 

  • 다단계 큐
    다단계 큐는 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈, FCFS 등
    다른 알고리즘을 적용한 것을 말한다.

    큐 간의 프로세스 이동이 되지 않으므로 스케줄링에 부담이 없지만
    유연성이 없는 단점이 있다.

 

'CS Study :' 카테고리의 다른 글

네트워크 : 프로세스와 스레드  (0) 2023.02.22
운영체제 : 메모리  (0) 2023.02.16
운영체제 : 운영체제와 컴퓨터  (0) 2023.02.15
네트워크 : HTTP  (0) 2023.02.10
네트워크 : IP 주소  (0) 2023.02.10

프로세스는 컴퓨터에서 실행되고 있는 프로그램을 말하며, CPU 스케쥴링의 대상이 되는 작업(task)와 거의 같은 의미로 쓰인다.

스레드는 프로세스 내 작업의 흐름을 이야기한다.

그림처럼 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고,

이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다.

 

즉, 프로세스는 프로그램이 메모리에 올라가 인스턴스화 된 것을 말한다.

예로 구글 크롬 프로그램과 같은 실행 파일이며, 이를 두번 클릭하면 구글 크롬 프로세스로 변환된다.

 


프로세스와 컴파일 과정 (예시 : C언어)

  • 전처리
    소스 코드의 주석을 제거하고 #include, #define 등 헤더 파일을 병합하여 매크로를 치환한다.
    ex) #define... 로 시작되는 전처리 문장을 매크로라고 하며 #define PI 3.14는 PI를 3.14로 치환하는 것을 정의한다.

  • 컴파일러 
    오류 처리, 코드 최적화 작업을 하며 어셈블리어(컴퓨터 언어)로 변환한다.

  • 어셈블러
    어셈블리어는 목적 코드로 변환된다.
    ex) 리눅스의 경우 cs.c 라는 파일을 만들었을 때 sc.o 라는 파일이 만들어지게 된다.

  • 링커 
    프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행파일을 만든다.
    ex) 실행 파일의 확장자는 .exe 나 .out이라는 확장자를 갖는다.

어셈블리어


라이브러리는 정적 라이브러리동적 라이브러리로 나뉜다.

 

  • 정적 라이브러리 
    프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식이다.
    시스템 환경 등 외부 의존도가 낮은 장점이 있지만 코드 중복 등 메모리 효율성이 떨어지는 단점이 있다.

  • 동적 라이브리러 
    프로그램 실행 시 필요할 때만 DLL(Dynamic Link Library) 이라는 함수정보를 통해 참조하여 쓰는 방식이다.
    메모리 효율성에서 장점을 지니지만 외부 의존도가 높아진다는 단점이 있다.

프로세스의 상태 

프로세스의 상태는 여러가지의 상태 값을 갖는다.

  • 생성 
    생성 상태는 프로세스가 생성된 상태를 의미하며 fork() 또는 exec() 함수를 통해 생성한다.
    이때 PCB(Process Control Block)가 할당된다.

    PCB는 간단히 이야기하면 운영체제가 프로세스 스케줄링을 위해 프로세스의 관한 모든 정보를 가지고 있는 데이터베이스다.

    • fork() : 부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수이다.
      fork() 함수로 만든 자식 프로세스는 동일한 코드를 부모와 자식에게 각각 할당한 메모리상에서 실행된다.

    • exec() : 새로운 프로세스를 생성하는 함수이다.

  • 대기 
    대기 상태는 메모리 공간이 충분하면 메모리를 할당받고 아니면 아닌 상태로 대기하고 있으며,
    CPU 스케줄러로 부터 CPU 소유권이 넘어오기를 기다리는 상태이다.

  • 대기 중단 
    대기 중간 상태는 메모리 부족으로 일시 중단되어 있는 상태이다.

  • 실행 상태 
    실행 상태는 CPU 소유권과 메모리를 할당받고 인스트럭션을 수행 중인 상태를 의미한다. (프로세스 실행 중~)
    이를 CPU burst 가 일어났다고도 표현한다.

  • 중단 상태 
    중단 상태(blocked)는어떠한 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태입니다.
    I/O 디바이스에 의한 인터럽트로 이러한 현상이 발생하기도 합니다.
    ex) 프린터 인쇄 버튼을 눌렀을때 프로세스가 잠시 멈춘 듯 할때

  • 일시 중단 상태 
    일시 중단 상태(blocked suspended)는 대기 중단과 유사하다.
    중단된 상태에서 프로세스가 실행되려 했지만 메모리 부족으로 일시 중단된 상태이다.

  • 종료 상태 
    종료 상태는 메모리와 CPU 소유권을 모두 놓고 가는 상태를 말한다.

    부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료도 존재하지만, 자식 프로세스가 할당된 자원의 한계를
    넘어서거나 부모 프로세스가 종료되거나 process.kill 같은 프로세스 종료 명령어 실행 시 종료됩니다.

https://neph3779.github.io/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/5-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B4%80%EB%A6%AC-2/

 

[#5] 프로세스 관리 - 2 - Neph's iOS blog

목차 목차

neph3779.github.io


프로세스의 메모리 구조  

운영체제는 프로세스에 적당한 메모리를 할당하는데 다음 구조를 기반으로 할당합니다.

프로세스의 메모리 구조는
스택(stack), (heap), 데이터 영역(Data segement), 코드 영역(code segement)으로 나눠진다.

 

스택은 위 주소 -> 0xFFFFFFFF 로 부터 할당되고, 힙은 아래 주소로 부터 할당된다.

 

  • 스택 과 힙 
    스택 과 힙은 동적 할당되며, 동적할당은 런타임 단계에서 메모리를 할당 받는 것을 말한다.
    • 스택은 지역 변수, 매개 변수, 실행되는 함수에 의해 늘어나거나 줄어드는 메모리 영역을 말한다.

      예를 들어 main() 함수 안의 변수들도 메모리를 할당받는데 (늘어남) 함수가 종료되면 메모리에 할당된
      변수들을 메모리에서 해제한다. (줄어듬)
      재귀함수를 호출할 때 StackOverflow는 재귀가 실행되면서 변수를 메모리에 계속 할당하다가
      할당된 메모리 자원 영역을 넘어버리면 발생하는 것이다.

      메소드의 정보같은 것이 저장된다.

    • 은 동적으로 할당하는 변수들을 담는다.
      쉽게 말해서 '사용자에 의해 관리되는 영역'이다.
      malloc(), free() 등의 함수를 통해 관리할 수 있으며, 동적으로 관리되는 자료구조의 경우 힙을 사용한다.

      인스턴스 변수나, New 키워드를 사용해 만드는 변수 영역

  • 데이터 영역과 코드 영역 
    이 영역은 정적 할당되는 영역이다.
    정적 할당은 컴파일 단계에서 메모리를 할당하는 것을 말한다.
    • 데이터 영역은 BSS segement 와 Data segement, code text / segement 로 나뉘어서 저장된다.
      • BSS Segement는 전역 변수 또는 static, const로 선언되어 있고
        변수가 0으로 초기화 또는 어떠한 값으로도 초기화 되어 있지 않은 변수가 이곳에 할당된다.

      • Data Segement 전역 변수 또는 static, const로 선언되어 있고
        변수가 0이 아닌 값으로 초기화 되어 있을 때 이곳에 할당된다.

      • code segement는 프로그램의 코드가 이곳에 들어간다.

PCB (Process Control Block) 

PCB는 운영체제에서 프로세스에 대한 메타데이터를 저장한 '데이터'를 말한다.
프로세스의 가장 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다.

  • 메타데이터 : 데이터를 설명하는 작은 데이터

 

PCB의 구조

PCB는 프로세스 스케줄링 상태, 프로세스 ID 등의 다음과 같은 정보로 이루어져 있다.

  • 프로세스 스케줄링 상태
    '준비', '일시 중단' 등 프로세스가 CPU에 대한 소유권을 얻은 이후의 상태

  • 프로세스 ID
    프로세스 ID, 해당 프로세스의 자식 프로세스 ID를 말한다.

  • 프로세스 권한
    컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보

  • 프로그램 카운터
    프로세스에서 실행해야 할 다음 명령어의 주소 포인터

  • CPU 레지스터
    프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보

  • CPU 스케줄링 정보
    CPU 스케줄러에 의해 중단된 시간 등에 대한 정보

  • 계정 정보
    프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보

  • I/O 상태 정보
    프로세스에 할당단 I/O 디바이스 정보

컨텍스트 스위칭

컨텍스트 스위치이란 PCB를 교환하는 과정을 말한다.
한 프로세스의 할당한 시간이 끝나거나 인터럽트에 의해 발생한다.

싱글코어 기준으로 컴퓨터가 많은 프로그램을 동시에 처리하는 것처럼 보이는데 사실 실행되는 프로세스는 한개이며
컨텍스트 스위칭이 매우 빠르게 일어나기에 동시에 구동되는 것처럼 보이는 것이다.



 

그림과 같이 컨텍스트 스위칭이 일어나면
기다리는 동안 유휴시간이 발생하거나 캐시미스가 일어날 수 있다.

스레드에서도 컨텍스트 스위칭이 일어나는데 스레드는 스택 영역을 제외한 모든 메모리를 공유하기에
비용이 더 적고 시간도 적게 든다.

  • 캐시미스 
    컨텍스트 스위칭이 일어날 때 프로세스가 가지고 있는 메모리 주소가 그대로 있으면
    잘못된 주소 변환이 생기므로 캐시클리어 과정을 겪게 되고
    이 때문에 캐시미스가 발생한다.

멀티프로세싱 

멀티프로세싱은 여러 개의 '프로세스' 즉, 멀티프로세스를 통해 2가지 이상의 일을 수행할 수 있는 것을 말한다.

작업을 병렬로 처리 할 수 있어서 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생해도 다른 프로세스를 이용해여
처리할 수 있다는 장점이 있다.

 

웹 브라우저

웹 브라우저는 멀티프로세스 구조를 가지고 있다.

웹 브라우저의 멀티프로세스 구조를 알아보자~

  • 브라우저 프로세스
    주소 표시줄, 북마크 막대, 뒤로 가기 버튼, 앞으로 가기 버튼 등을 담당하며 네트워크 요청이나 파일 접근 권한을 담당한다.

  • 렌더러 프로세스
    웹 사이트가 '보이는' 모든 부분의 모든 것을 제어한다. (보이는 모든 것을 그린다.)

  • 플러그인 프로세스
    웹 사이트에서 사용하는 플러그인을 제어한다.

  • GPU 프로세스
    GPU를 이용해서 화면을 그리는 부분을 제어한다.

 

IPC

멀티프로세스는 IPC(Inter Process Communication)가 가능하다.
IPC란 프로세서끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘을 뜻한다.

IPC 종류에 대해 알아볼텐데 이들은 모두 메모리가 완전히 공유되는 스레드보다는 속도가 떨어진다.

  • 공유 메모리
    공유 메모리는 여러 프로세스가 동일한 메모리 블록에 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록
    공유 메모리를 생성해서 통신하는 것을 이야기한다.

    메모리 자체를 공유하기에 불필요한 복사의 오버헤드가 발생하지 않고 가장 빠르며
    메모리 영역을 프로세스가 공유해야 하기에 동기화가 필요하다.

    하드웨어 관점에서 공유 메모리는 CPU가 접근할 수 있는 큰 메모리인 RAM을 말한다.

  • 파일
    파일은 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터를 말하고
    이를 기반으로 프로세스 통신한다.

  • 소켓
    동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터를 의미한다.
    TCP 와 UDP를 생각하면 된다.

  • 익명 파이프
    익명 파이프는 프로세스간의 FIFO(First In First Out)방식으로 읽히는 임시 공간인 파이프를 통해 데이터를 주고받는다.
    단방향 방식으로 읽기 전용, 쓰기 전용으로 만들어 사용한다.
    하지만, 부모와 자식 프로세스 사이에서만 사용가능하다.

  • 명명된 파이프
    명명된 파이프는 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 양방향 파이프를 말한다.
    다른 네트워크의 프로세스와도 통신이 가능하다.
    보통 파이프 서버와 클라이언트를 연결하기 위해 파이프 인스턴스를 한개 또는 여러개를 기반으로 통신하다.

  • 메시지 큐
    메시지 큐는 메시지를 큐(queue) 데이터 구조 형태로 관리하는 것을 의미한다.
    다른 IPC 방식에 비하여 사용 방법이 매우 직관적이다.

스레드와 멀티스레딩 

스레드는 프로세스의 실행 가능한 가장 작은 단위이다.
프로세스는 여러개의 스레드를 가질 수 있다.

코드 영역, 데이터 영역, 힙 영역, 스택 영역을 각각 생성하는 프로세스와는 달리
스레드는 코드, 데이터, 힙은 스레드끼리 서로 공유한다.

 

멀티스레딩은 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며
스레드끼리 자원을 공유하기에 효율성이 높다.

예를 들어 한 스레드가 중단되어도 다른 스레드는 실행 중일 수 있기 때문에 중단되지 않는 빠른 처리가 가능하다.
또한 동시성에도 큰 장점이 있다.

 

다만, 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 스레드로 이루어져 있는 프로세스에 영향을 줄 수 있다.


공유 자원과 임계 영역

공유 자원은 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 파일, 데이터 등의 자원이나 변수를 이야기한다.

이 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태라고 한다.

 

임계 영역은 둘 이상의 프로세스나 스레드가 공유 자원에 접근할 떄 순서 등의 이유로 결과가 달라지는 코드 영역을 말한다.

임계 영역을 해결하기 위한 방법으로는 크게 3가지가 있는데
뮤텍스, 세마포어, 모니터가 있고

위 방법 모두 상호 배제, 한정 대기, 융통성이라는 조건을 만족한다.

 

상호 배제란 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다.

한정 대기란 특정 프로세스가 영원히 임계 영역에 들어가지 못해선 안된다.

융통성이란 한 프로세스가 다른 프로세스의 일을 방해해선 안된다.

 

  • 뮤텍스
    뮤텍스는 프로세스나 스레드가 공유 자원을 lock(), unlock() 하는 방식입니다.
    공유 자원이 사용 중일땐 lock(), 사용이 끝나면 unlock() 합니다.

  • 세마포어
    세마포어는 일반화된 뮤텍스이다.
    간단한 정수 값과 두 가지 함수 wait() 및 signal()로 공유 자원에 대한 접근을 처리한다.

    wait()는 자신의 차례가 올 때까지 기다리는 함수이며, signal()은 다음 프로세스로 순서를 넘겨주는 함수이다.
    먼저 들어온 프로세스나 스레드가 세마포어의 값을 수정할 때 다른 프로세스는 세마포어 값을 수정할 수 없다.
    • 바이너리 세마포어 
      바이너리 세마포어는 0과 1 두 가지 값만 가질 수 있는 세마포어이다.
      구현의 유사성으로 인해 뮤텍스는 바이너리 세마포어라고도 볼 수 있지만 엄밀히 말하면
      뮤텍스는 잠금 메커니즘이고 바이너리 세마포어는 신호 메커니즘이다.

    • 카운팅 세마포어
      카운팅 세마포어는 여러 개의 값을 가질 수 있는 세마포어이며, 여러 자원에 대한 접근을 제어하는데 사용된다.

  • 모니터
    모니터는 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록
    공유 자원을 숨기고해당 접근에 대한 인터페이스만 제공한다.

    모니터는 세마포어보다 구현하기 쉬우며, 세마포어의 상호 배제는 명시적으로 구현해주어야 하는 반면
    모니터의 상호 배제는 자동으로 이루어진다.

교착 상태 

교착 상태(deadlock)은 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태를 이야기한다.

예를 들어 프로세스 A 와 B 가 각각 서로의 자원을 요청할 때 발생한다.




교착 상태의 원인 

  • 상호 배제
    한 프로세스가 자원을 독점하고 있으며, 다른 프로세스들은 접근이 불가능하다.

  • 점유 대기
    특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태이다.

  • 비선점
    다른 프로세스의 자원을 강제적으로 가지고 올 수 없다.

  • 환형 대기
    프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는
    즉, 서로가 서로의 자원을 요구하는 상태이다.

교착 상태 해결 방법

  1. 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계한다.

  2. 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스 당 요청할 자원들의 최대치를 통해
    자원 할당 가능 여부를 파악하는 '은행원 알고리즘' 을 사용한다.

  3. 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 하나씩 지운다.

  4. 교착 상태는 매우 드물게 일어나기 때문에 이를 처리하는 비용이 훨씬 커서 교착 상태가 발생하다면
    사용자가 직접 작업을 종료한다.
    ex) 프로그램 '응답없음' 시 사용자가강제 종료한다.

'CS Study :' 카테고리의 다른 글

네트워크 : CPU 스케줄링 알고리즘  (0) 2023.02.24
운영체제 : 메모리  (0) 2023.02.16
운영체제 : 운영체제와 컴퓨터  (0) 2023.02.15
네트워크 : HTTP  (0) 2023.02.10
네트워크 : IP 주소  (0) 2023.02.10

CPU는 그저 '메모리'에 올라와있는 프로그램의 명령어를 실행할 뿐이다.

 

메모리 계층 

메모리 계층은 레지스터, 캐시, 메모리(RAM/주기억장치), 저장장치(HDD, SSD) 로 구성되어 있다.

 

  • 레지스터 (Register)  : CPU안에 있는 작은 메모리다.
    휘발성이고 속도가 제일 빠르나 기억용량이 제일 적다.

    레지스터는 CPU의 데이터 처리 속도를 향상시키기 위해 고안된 것이다.
    레지스터가 없던 예전에는 CPU가 메모리에 직접 접근해서 데이터를 가지고 와야 했는데
    이때 많은 시간이 소요되었다.
    따라서 레지스터라는 기억장치를 하나 더 제공함으로써 CPU에서 원할 데이터를
    메모리에서 레지스터에 올려두고 필요할때 레지스터를 통해 원하는 데이터를 가져와 데이터 처리속도를 향상했다.

  • 캐시 (Cache) : 보통 L1, L2 캐시를 지칭하나 L3 캐시도 있다. 
    캐시 또한 휘발성이고 속도가 빠르고 기억용량이 적다.

    프로세서의 CPU 속도(클럭)가 매우 빨라짐에 따라 주기억장치인 메모리와의 속도차이가 현저하게 발생하기 시작했는데
    이 때문에 클럭속도가 아무리 빨라진다 하더라도 메모리에서 데이터를 빠르게 제공해주지 못하여 성능 저하가 발생했다.
    이 때문에 캐시메모리가 필요하게 되었다.  

  • 메모리/RAM (Random Access Memory) : 주기억장치이다.
    메모리는 통칭해서 RAM을 일컫는다.
    휘발성이고 속도와 기억용량을 보통이다.

    초기 컴퓨터는 메모리에서 데이터를 가지고 오기가 매우 어려웠다.
    예를 들어 메모들의 위치를 M[0] ~ M[100] 까지 있다고 가정했을떄, M[56]의 데이터를 가지고 오려면
    M[0] ~ M[56] 까지 순서대로 조회해서 데이터를 가지고 와야했다.
    그러나 근래의 컴퓨터는 메모리가 행렬방식으로 되어 있어 데이터를 랜덤하게 가지고 올 수 있다(RAM).

  • 저장장치 (HDD, SSD) : 보조기억장치를 이야기한다.
    비휘발성이고, 속도가 느리며 대신 기억용량이 많다.

RAM은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 CPU가 필요할 때 빠르게 전달하는 역할을 한다.

메모리 계층이 위로 올라갈수록 가격은 비싸지는데 용량은 적어지고 속도는 빨라지는 특징이 있다.
이러한 계층이 있는 이유는 경제성과 캐시 때문이다.


캐시 

캐시(cache)는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목현상을

줄이기 위한 메모리를 일컫는다.

 

위에서 설명했듯이 CPU 클럭과 메모리 사이에 속도차이가 크기 떄문에 계층 과 계층 사이에 계층을 하나 더 만들어
해결하는데 이를 캐싱 계층이라고 한다.

 

예를 들어 주기억장치 계층은 메모리 계층과 보조기억장치 계층 사이에 존재한다.
따라서 주기억장치는 보조기억장치의 캐싱계층이라고 볼 수 있다.

그렇다면 캐싱 계층을 두지말고 캐시를 직접 설정할 때는 어떻게 해야할까? 

 

이는 자주 사용하는 데이터를 기반으로 설정해야 하는데

자주 사용하는 데이터의 근거가 되는 것은

바로 지역성이다.

 

지역성은 시간 지역성(temporal locality)공간 지역성(spatial locality)으로 나뉜다.

 

  • 시간 지역성 : 최근에 사용한 데이터에 다시 접근하려는 기능을 말한다.
    예를 들어 for문으로 이루어진 코드에는 i++ 이라면 변수 i를 연이어 접근해서 +1을 한다.

  • 공간 지역성 : 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성을 말한다.
    예를 들어 배열 arr에 for문으로 변수 i를 이용해서 데이터를 하나씩 넣는다면
    배열의 각 요소들에 i가 할당되며 해당 배열에 연속적으로 접근하게 된다.

캐시히트와 캐시미스

 

캐시에서 원하는 데이터를 찾았다면 캐시히트라고 하고

데이터가 캐시에 없어 주메모리로 가서 데이터를 가지고 오는 것을 캐시미스라고 한다.

 

그림처럼 캐시히트를 하게되면 데이터를 제어장치를 거쳐 가져오게 된다.
캐시에 경우 CPU 내부 버스를 통해 가져오기에 빠르나, 메모리에 경우 시스템 버스를 통해 가져오므로 느리다.

 

캐시매핑

캐시매핑은 캐시가 히트되기 위해 매핑하는 방법을 말하며 CPU의 레지스터와 주메모리 RAM 간에 데이터를 주고 받을 때

기반으로 설명된다.

* 캐시매핑의 분류는 따로 조사해서 나중에 포스팅 해봐야겠다.

 

 

웹 브라우저의 캐시

소프트웨어적인 대표적인 캐시로는 웹 브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지가 있다.

  • 쿠키
    쿠키는 만료기간이 있는 키-값 저장소이다.
    쿠키 설정시 same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동으로 전송되며,
    최대 4KB 까지 설정가능하다.
    쿠키를 설정할 떄는 document.cookie로 볼 수 없도록 Httponly 옵션을 설정해 주는 것이 중요하다.
    클라이언트나 서버에서 만료기간을 정할 수 있으나 보통 서버에서 만료기간을 설정해준다.

  • 로컬 스토리지 
    로컬 스토리지는 만료기간이 없는 키-값 저장소이다.
    10MB까지 저장가능하며 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생성된다.
    HTML5를 지원하지 않는 브라우저에서는 사용할 수 없으며 클라이언트에서만 수정 가능하다.

  • 세션 스토리지 
    세션 스토리지는 만료기간이 없는 키-값 저장소이다.
    탭 단위로 세션 스토리지를 생성하며, 탭을 닫을 때 해당 데이터가 삭제된다.
    5MB까지 저장가능하며 HTML5를 지원하지 않는 브라우저는 사용불가하며, 클라이언트에서만 수정 가능하다.

 

참고로 데이터베이스를 구축할 때도 메인 데이터베이스 위에 REDIS 같은 데이터베이스 계층을
'캐싱 계층'으로 두어 성능을 향상시키기도 한다.


메모리 관리

가상 메모리 
가상 메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는

사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다.

 

 

  • 이때 가상적으로 주어진 주소를 가상 주소(logical address)라고 하며,
    실제 메모리 상에 있는 주소를 실제 주소(physical address)라고 한다.

  • 가상 주소는 메모리관리장치에 의해 실제 주소로 변환되며,
    이 덕분에 사용자는 실제 주소를 의식할 필요없이 프로그램을 구축할 수 있다.

  • 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고
    프로세스의 주소 정보가 들어있는 '페이지 테이블'로 관리된다.
    이때 속도 향상을 위해 TLB를 쓴다.

 

* TLB * : 메모리와 CPU 사이에 있는 주소변환을 위한 캐시

 

 

스와핑

만약 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근할 경우 페이지 폴트가 발생한다.

이때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고, 하드디스크의 일부분을 마치 메모리처럼 불러와 사용하는 것을

스와핑(swapping)이라고 한다.

스와핑

  • 프로세스가 실행될 때는 메모리에 데이터가 있어야 하지만 필요한 경우 프로세스는 실행 도중에 임시로 보조 메모리(HDD)로
    보내졌다가 다시 돌아올 수 있다.

 

페이지 폴트

페이지 폴트란 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우에 발생한다.

 

페이지 폴트와 그로 인한 스와핑은 밑의 과정으로 이루어진다.

  1. CPU는 물리 메모리를 확인하여 해당 페이지가 없으면 트랩(Exception)을 발생해서 운영체제에 알린다.
  2. 운영체제는 CPU의 동작을 잠시 멈춘다.
  3. 운영체제는 페이지 테이블을 확인하여 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인하고,
    없으면 프로세스를 중단하고 현재 물리 메모리에 비어있는 프레임이 있는지 찾는다.
    물리 메모리에도 없다면 스와핑이 발동된다.
  4. 비어있는 프레임에 해당 페이지는 로드하고, 페이지 테이블을 최신화 한다.
  5. 중단되어있던 CPU를 다시 실행한다.

* 페이지 * : 가상 메모리를 사용하는 최소 단위

* 프레임 * : 실제 메모리를 사용하는 최소 크기 단위

 

 

스레싱 (thrashing)

스레싱은 메모리의 페이지 폴트율이 높은 것을 이야기하며, 이는 컴퓨터의 심각한 성능 저하를 가지고 온다.

https://straw961030.tistory.com/155

 

스레싱(thrashing)이란 무엇인가

우리는 컴퓨터에서 실제 물리 메모리 이외에 프로세스만의 가상 메모리를 사용하며 주소 변환을 통해 물리 메모리에 접근한다고 배웠다. 또한, 페이징 기법이나 세그멘테이션 기법을 통해 나뉘

straw961030.tistory.com

결국 스레싱은 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생한다.

페이지 폴트가 일어나면 CPU 사용이 낮아지고, CPU 사용률이 낮아지면 운영체제는 CPU가 한가한 걸로 파악해
메모리에 더 많은 프로세스를 올리려고 하기에 악순환이 반복된다.

 

이를 해결하기 위한 방법으로 HDD를 사용중이라면 SSD로 변경하거나
운영체제에서 이를 해결하는 방법으로 작업세트PFF가 있다.

https://bubble-dev.tistory.com/entry/OS-%ED%8E%98%EC%9D%B4%EC%A7%80-Thrashing-Working-Set-PFF

 

[OS] 페이지 Thrashing, Working-Set, PFF

Thrashing Page fault 로 인한 페이지 로딩이 너무 빈번하게 요청되어서 실제 데이터를 가져온 뒤 활용도 못해보고 교체되는 문제 CPU 스케쥴러가 CPU utilization(활용률)을 최대화 시키는 방향으로만 스

bubble-dev.tistory.com

 

 

메모리 할당

메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당하는데
연속할당불연속할당으로 나뉜다.

 

  • 연속할당 : 메모리에 '연속적'으로 공간을 할당하는 것을 말한다.
    •  고정 분할 방식은 메모리를 미리 나누어 사용하기에 융통성이 없어 내부 단편화가 발생한다.
       가변 분할 방식은 매 시간 프로그램의 크기에 맞게 동적으로 공간을 할당합니다.
         내부 단편화는 발생하지않지만 외부 단편화가 발생할 수 있다.
       

내부 단편화 -> 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 상태

 외부 단편화 -> 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 상태
  -> 할당할 수 있는 비어있는 메모리 공간

 

  • 불연속할당 : 메모리를 연속적으로 할당하지 않는 불연속 할당은 현재 운영체제가 쓰는 방법으로
    대표적으로 페이징 기법이 있다.
    • 페이징은 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당한다.
      홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해진다.
    • 세그멘테이션은 페이지 단위가 아닌 세그먼트 단위로 나누는 방식이다.
      이는 공유와 보안 측면에서 장점을 가지지만 홀 크기가 균일하지 않은 단점이 있다.
    • 페이지드 세그멘테이선은 프로그램의 의미 단위인 세그먼트로 나눠 공유나 보안 측면에 강점을 두고
      임의의 길이가 아닌 동일한 크기의 페이지 단위로 나누는 것을 말한다.

페이지 교체 알고리즘

메모리는 한정되어 있기 때문에 스와핑이 많이 일어난다.

스와핑은 많이 일어나지 않도록 설계해야 하며 이는 페이지 교체 알고리즘을 기반으로 스와핑이 일어난다.

 

  • 오프라인 알고리즘 : 먼 미래에 참조될 페이지와 현재 할당된 페이지를 바꾸는 알고리즘이다.
    미래에 참조할 알고리즘을 알 수 없기 때문에 사용할 수 없는 알고리즘이다.

  • FIFO (First In First Out) : 가장 먼저 온 페이지를 교체 영역에 가장 먼저 올려두는 것을 말한다.
  • LRU (Least Recentle Used) : 가장 오래된 페이지를 바꾼다. 가장 오래된 것을 파악하기 위해
    계수기, 스택 등을 두어야하는 문제가 있다.

  • NUR (Not Used Recently) : 최근에 사용되지 않은 페이지를 교체하는 알고리즘이다.
    LRU에서 조금 더 진보된 알고리즘이다.

  • LFU (Least Frequently Used) : 가장 참조가 적은 페이지를 교체하는 알고리즘이다.

https://doh-an.tistory.com/28

 

[OS] 페이지 교체 알고리즘 - FIFO/LRU/LFU/MFU/NUR

💡 페이지 교체 알고리즘 운영체제는 주기억장치보다 더 큰 용량의 프로그램을 실행하기 위해 프로그램의 일부만 주기억장치에 적재하여 사용한다. 이를 가상메모리 기법이라 한다. 페이징 기

doh-an.tistory.com

 

'CS Study :' 카테고리의 다른 글

네트워크 : CPU 스케줄링 알고리즘  (0) 2023.02.24
네트워크 : 프로세스와 스레드  (0) 2023.02.22
운영체제 : 운영체제와 컴퓨터  (0) 2023.02.15
네트워크 : HTTP  (0) 2023.02.10
네트워크 : IP 주소  (0) 2023.02.10

운영체제 OS (Operating System)이란?
사용자가 컴퓨터를 쉽게 사용할 수 있도록 해주는 인터페이스이다.

 

운영체제의 역할 

운영체제의 역활은 크게 4가지로 구분할 수 있다.

  1. CPU 스케줄링과 프로세스 관리:
    CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리한다.
  2. 메모리 관리 :
    한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리한다.

  3. 디스크 파일 관리 :
    디스크 파일을 어떤 방식으로 보관할지 관리한다.

  4. I/O 디바이스 (Input/Output) 관리 :
    I/O 디바이스들인 마우스, 키보드와 컴퓨터간에 데이터를 주고 받는 것을 관리한다.

운영체제의 구조  

운영체제의 구조는 다음과 같습니다.

운영체제의 구조

  • GUI (Graphical User Interface) : 사용자가 직접 눈으로 보는 인터페이스를 말한다.
    단순한 명령어 창이 아닌, 마우스 등을 사용하여 아이콘을 클릭해 단순한 동작으로 컴퓨터와 상호동작하는 단계이다.
  • 시스템 콜 (시스템 호출) : 응용 프로그램은 OS가 제공하는 인터페이스를 통해서만 자원을 얻을 수 있다.
    즉, 운영체제가 커널에 접근하기 위한 인터페이스이다.
  • 드라이버 : 하드웨어를 제어하기 위한 소프트웨어이다.

운영체제는 컴퓨터의 자원들을 효율적으로 관리하며 사용자가 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 프로그램 모임이다.

커널이란? 
컴퓨터의 전원을 켜면 운영체제는 이와 동시에 수행된다.
소프트웨어가 컴퓨터 시스템에서 수행되기 위헤서는 메모리에 그 프로그램이 올라가 있어야 한다.
마찬가지고 운영체제도 소프트웨어로서 메모리에 올라가 있어야 한다.

하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가면 한정된 메모리 공간의 낭비가 심할 것이다.
따라서 운영체제 중에서 가장 필요한 부분만 메모리에 먼저 올려두고, 그렇지 않은 부분은 요청이 왔을 때 메모리에 올려 사용한다.

이때, 항상 메모리에 상주하고 있는 부분을 커널이라고 한다.

즉, 운영체제의 가장 핵심적인 부분이자 시스템 콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 한다.


시스템 콜 (System Call)

시스템 콜

  • 유저 모드 (사용자 모드) : 사용자 모드에서 사용자 애플리케이션이 실행된다.
    사용자가 접근할 수 있는 영역에 존재하기 때문에 해당 모드에서는 하드웨어에 접근이 불가능하다.
    시스템 콜을 통하여 접근이 가능하다.

  • 커널 모드 : 운영체제가 CPU를 사용하는 모드이다. 
    시스템 콜을 통해 유저 모드에서 사용자 모드로 전환되면 운영체제는 하드웨어를 제어하는 명령어를 실행한다.

 

시스템 콜이 작동할 때 modebit 을 참고해서 사용자 모드와 커널 모드를 구분합니다. (아래 그림 참조)

https://codybuilder.com/41

유저 모드에서 커널 모드로 modebit 을 사용해서 모드를 구분함으로 혹시나 사용자가 의도하지 않은 공격에 대해
완벽하지는 않지만 보호할 수 있다.

modebit = 1 은 유저 모드를 나타내고, modebit = 2는 커널 모드를 나타낸다.

 

위 그림 처럼 사용자가 어떠한 운영체제 프로그램을 사용하려 하면 커널 모드로 들어가기 위해 modebit = 0 으로 바뀌고,
커널 모드에서 로직을 수행한다 이후 다시 유저모드 전환되며 modebit = 1 로 바뀐다.

 

또한 시스템 콜은 크게 6가지로 분류할 수 있다.

  1. 프로세스 제어
  2. 파일 조작
  3. 장치 관리
  4. 정보 유지
  5. 통신
  6. 보호

https://didu-story.tistory.com/311

 

[Operating System] (iOS) System Call (시스템콜, 시스템 호출이란?)

스터디를 운영하고 있습니다. 해당 repository에 가면 더 많은 정보를 보실 수 있습니다! 특히 close 된 PR을 보시면, 어떤 부분에 대해서 고민하고 스터디원들과 이야기나눴는지 보실 수 있습니다 htt

didu-story.tistory.com

 


컴퓨터의 요소 

컴퓨터는 CPU(Central Processing Unit), DMA(Direct Memory Access), 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져 있다.

CPU (Central Processing Unit) : 산술논리장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치를 말하며, 인터럽트에 의해
단순히 메모리에 존재하는 명령어를 해석하는 장치이다.
관리자 역할을 하는 운영체제의 커널이 프로그램을 메모리에 올려 프로세스로 만들면 CPU가 이를 처리한다.

  • 제어장치 : 제어장치는 프로그램 조작을 지시하는 CPU의 한 부품이다.
    입출력장치 간 통신을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다.

  • 레지스터 : 레지스터는 CPU 안에 있는 매우 빠른 임시기억장치를 일컫는다.
    CPU와 직접 연결되어 있으므로 메모리보다 연산속도가 수십배에서 수백배까지 빠르다.
    CPU 자체적으로 데이터를 저장하는 방법이 없기 때문에 레지스터를 커쳐 메모리를 통해 데이터를 저장한다.

  • 산술논리연산장치 : 덧셈, 뺼셈 같은 두 숫자의 산술 연산과 베타적 논리합, 논리곱 같은 논리 연산을 계산하는 연산 회로이다
  • 인터럽트 : 인터럽트는 어떤 신호가 들어왔을때 CPU를 잠깐 정지시키는 것을 말한다.
    인터럽트 간에는 우선순위가 존재하고 이에 따라 실행되며, 하드웨어 인터럽트와 소프트웨어 인터럽트로 구분된다.


CPU의 연산처리

  1.  제어장치가 메모리에 계산할 값을 로드합니다. 또한, 레지스터에도 로드합니다.
  2.  제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령합니다.
  3.  제어장치가 계산된 값을 다시 '레지스터에서 메모리로' 계산한 값을 저장합니다.

인터럽트 

 

  • 하드웨어 인터럽트 : 
    하드웨어 인터럽트는 키보드를 연결하거나 마우스를 연결하는 등의 IO 디바이스에서 발생하는 인터럽트를 말한다.

    - 입출력 인터럽트 (I/O 인터럽트) :  입출력 작업의 종료나 오류에 의해 CPU의 기능이 요청됨
    - 정전, 전원이상 인터럽트 :  전원의 공급의 이상
    - 기계 착오 인터럽트 : CPU의 기능적인 오류
    - 외부 신호 인터럽트 : I/O 장치가 아닌 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
  • 소프트웨어 인터럽트 : 
    소프트웨어 인터럽트는 트랩(trap) or Exception 이라고도 한다.
    프로세스 오류 등으로 프로세스가 시스템 콜을 호출할 때 발동된다.

    - CPU 내부에서 자신이 실행한 명령이나 CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생
    - 프로그램의 오류에 따라 생기는 인터럽트


DMA 컨트롤러 (Direct Memory Access Controller) : DMA 컨트롤러는 I/O 디바이스가 메모리에

직접 접근할 수 있도록 하는 하드웨어 장치를 말한다.

CPU에만 너무 많은 요청이 들어오기 때문에 CPU의 부하를 덜어 부담을 덜어주는 보조 일꾼이라 보면 된다.

또한 하나의 작업을 CPU와 DMA 컨트롤러가 동시에 하는 것을 방지한다.

메모리 (Memory) : 메모리는 전자회로에서 데이터나 상태, 명령어를 기록하는 장치를 말한다.


크게 보면

CPU는 일꾼

메모리는 공장이라고 보면 된다.

 

공장이 클 수록 더 많은 일을 할 수 있다.

 

'CS Study :' 카테고리의 다른 글

네트워크 : 프로세스와 스레드  (0) 2023.02.22
운영체제 : 메모리  (0) 2023.02.16
네트워크 : HTTP  (0) 2023.02.10
네트워크 : IP 주소  (0) 2023.02.10
네트워크 : 네트워크 기기의 처리 범위  (0) 2023.02.10

HTTP는 앞서 설명한 전송 계층 위에 있는 애플리케이션 계층으로서 웹 서비스 통신에 사용된다.
HTTP/1.0 ~ HTTP/3 으로 발전해왔다.

 

HTTP/1.0

HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었다.

서버로부터 파일을 가져올 때마다 TCP의 3-way-handshake를 계속해서 열어야 하기에
이는 RTT의 증가를 불러오게 되었다.

  • RTT : 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간

 

RTT의 증가를 해결하기 위한 방법

  • 이미지 스플리팅 :
    많은 이미지를 다운로드 받게되면 과부하가 걸리기 떄문에 이미지가 합쳐져 있는 하나의 이미지를 다운받고,
    이를 기반으로 CSS를 통해 다운받은 이미지를 스플리팅해 이미지를 표기하는 방법

  • 코드 압축 : 
    코드를 압축해서 개행 문자, 빈칸을 없애서 코드의 크기를 최소화 하는 방법이다.
    이러면 코드의 용량이 줄어든다.

  • 이미지 Base64 인코딩 : 
    이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법이다.
    이 방법을 이용하면 이미지에 대해 서버에 HTTP 요청을 할 필요가 없어진다.
    하지만 문자열로 인코딩할 경우 용량이 37% 정도 더 커지는 단점이 있다.

HTTP/1.1 

이제 1.0처럼 매번 TCP 3-way-handshake를 하는게 아니라
한번 TCP를 초기화 한 이후 keep-alive 라는 옵션으로 여러 개의 파일을 송수신 할 수 있다.

keep-alive는 1.0에도 있었지만 표준화되어 기본 옵션으로 사용한 것은 1.1 부터이다.

다음 그림처럼 한번 TCP 초기화를 한 이후 그 다음부터는 발생하지 않는 것을 알 수 있다.

하지만 문서 안에 포함된 다수의 리소스(이미지, 동영상, css 파일 등)를 처리하려면
요청할 리소스 개수에 비례해서 대기 시간이 길어지는 단점이 있다.

 

  • HOL Blocking 
    HOL Blocking(Head of Line Blocking)은 네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해
    지연될 때 발생하는 성능 저하 현상을 말한다.
  • 무거운 헤더 구조 
    HTTP/1.1 헤더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무겁다.

 


HTTP/2

HTTP/2 는 SPDY 프로토콜에서 파생된 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며

멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다.

멀티플렉싱 
멀티플렉싱이란 여러 개의 스트림을 사용하여 송수신한다는 것이다.

이를 통해 특정 스트림의 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미치고
나머지 스트림은 멀쩡하게 동작할 수 있다.

( * 스트림 : 시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 데이터 흐름)

이를 통해 단일 연결로 사용하여 병렬로 여러 요청을 받을 수 있고 응답을 줄 수 있다.
이렇게 되면 HTTP/1.x 에서 발생한 HOL Blocking 을 해결할 수 있다.

 

 

헤더 압축 

HTTP/1.x에는 크기가 큰 헤더라는 문제가 있었다.
이를 HTTP/2에서는 허프만 코딩 압축 알고리즘을 사용하는 HPACK 압축 형식을 거쳐 헤더를 압축 한다.

 

  • 허프만 코딩
    허프만 코딩은 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보를 적은 비트 수를 사용하여
    표현하고, 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현해서
    전체 데이터의 표현에 필요한 비트양을 줄이는 원리이다.

 

서버 푸시 

HTTP/1.1에서는 클라이언트가 서버에 요청을 해야 파일을 다운로드받을 수 있었다면,

HTTP/2는 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다.
HTML 파일에 css나 js 파일이 포함되어 있으면 서버가 먼저 푸시한다.

 

SSL/TLS
SSL/TLS는 전송 계층에서 보안을 제공하는 프로토콜이다.
클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록 한다.

공격자가 서버인척 하며 사용자의 정보를 가져가는 인터셉터 방지

SSL/TLS는 보안 세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 사용된다.

 

보안 세션 
보안 세션이란 보안이 시작되고 끝나는 동안 유지되는 세션을 말하고, SSL/TLS는 핸드셰이크를 통해 
보안 세션을 생성하고 이를 기반으로 상태 정보를 공유한다.

인증 메커니즘은 아무 곳에서나 할 수 있는게 아니고 신뢰성이 엄격한 공인된 기업들만 참여할 수 있다.

대표적으로 아마존이 있다.

 

HTTPS 구축 방법
HTTPS 구축 방법은 크게 세가지이다. 직접 CA에서 구매한 인증키를 기반으로 HTTPS 서비스를 구축하거나,

서버 앞단의 HTTPS를 제공하는 로드밸런서를 두거나,

서버 앞단에 HTTPS를 제공하는 CDN(콘텐츠 전송 네트워크)을 둬서 구축한다.

 


HTTP/3 

TCP 위에서 돌아가는 HTTP/2 와는 달리 HTTP/3 은 QUIC이라는 계층 위에서 돌아가며,
TCP 기반이 아닌 UDP 기반으로 돌아간다.

 

또한, HTTP/2 에서 장점이었던 멀티플렉싱을 가지고 있으며

초기 연결 설정 시 지연 시간 감소라는 장점도 있다. (TCP 3-way-handshake를 하지 않음)

 

QUIC의 첫 연결은 1-RTT만 소요된다.
참고로 QUIC은 순방향 오류 수정 매커니즘이 적용되어
전송한 패킷이 손상되었다면 수신 측에서 에러를 검출하고 수정하는 방식이며
열약한 네트워크 환경에서도 낮은 패킷 손실률을 자랑한다.

'CS Study :' 카테고리의 다른 글

운영체제 : 메모리  (0) 2023.02.16
운영체제 : 운영체제와 컴퓨터  (0) 2023.02.15
네트워크 : IP 주소  (0) 2023.02.10
네트워크 : 네트워크 기기의 처리 범위  (0) 2023.02.10
네트워크 : TCP/IP 4계층 모델  (0) 2023.02.02

ARP (Address Resolution Protocol) - 주소 결정 프로토콜 

컴퓨터와 컴퓨터 간의 통신은 흔히 IP 주소 기반으로 통신한다고 알고 있지만
정확히는 IP 주소에서 ARP를 통해 MAC 주소를 찾아 MAC 주소 기반으로 통신하다

 

ARP란 IP 주소로부터 MAC 주소를 구하는 IP와 MAC 주소의 다리 역할을 하는 프로토콜이다.

즉, ARP를 통해 가상 주소인 IP 주소를 실제 주소인 MAC 주소로 변환한다.

이 반대의 경우도 가능하다.

 


홉바이홉 통신 (hop by hop) 

IP 주소를 통해 통신하는 과정을 홉바이홉 통신이라고 한다.

홉이란 건너뛴다는 의미로 통신망에서 각 패킷이 여러 개의 라우터를 건너가는 모습을 비유적으로 표현한 것이다.

즉, 통신 장치에 있는 '라우팅 테이블'의 IP를 통해 시작 주소부터 시작하여 다음 IP로 계속해서 이동하는 '라우팅' 과정을 거쳐
패킷이 최종 목적지까지 도달하는 통신을 말한다.

 

  • 라우팅 테이블
    컴퓨터 네트워크에서 목적지 주소를 목적지에 도달하기 위한 네트워크 노선으로 변환시키는 목적으로 사용된다.
    각 라우터의 라우팅 테이블은 모든 목적지 정보에 대해 해당 목적지에 도달하기 위해서 거쳐야 할 다음 라우터의 정보를 가지고 있다.

  • 게이트웨이 : 
    게이트웨이는 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는
    관문 역할을 하는 컴퓨터나 소프트웨어를 두루 일컫는 용어이다.
    사용자는 인터넷에 접속하기 위해 수많은 톨게이트인 게이트웨이를 거쳐야 하며
    게이트웨이는 서로 다른 네트워크상의 통신 프로토콜을 변환해주는 역할을 하기도 한다.

netstat -r


IP 주소 체계  

IP 주소는 IPv4 와 IPv6로 나뉜다.

  • IPv4 : 
    32비트를 8비트 단위로 점을 찍어 표기하여 나타내는 주소이다. (ex - 123.45.67.89)
  • IPv6 :
    64비트를 16비트 단위로 점을 찍어 표기하여 나타내는 주소이다. (ex - 2001:db8::ff00:42:8329)

추세는 IPv6로 가고 있지만 
아직까지 많이 쓰이는 것은 IPv4 이다.



클래스 기반 할당 방식 
IP 주소 체계는 과거를 거쳐 발전해오고 있으며 처음에는 A,B,C,D,E 다섯 개의 클래스로 구분하는 
클래스 기반 할당 방식을 사용했다.

 

앞에 있는 부분을 네트워크 주소, 그 뒤에 있는 부분을 컴퓨터에 부여하는 주소인 호스트 주소로 놓아서 사용한다.

클래스 A,B,C 는 일대일 통신으로 사용되고
클래스 D는 멀티캐스트 통신
클래스 E는 앞으로 사용할 예비용으로 쓰는 방식이다.

127.255.255.255 는 클래스 A가 사용할 수 있는 IP 주소 범위를 십진수로 표현한 것 (0.0.0.0 ~ 17.255.255.255)

하지만 이 방식은 네트워크 개별 주소와 브로드캐스트용 주소는 남겨두어야 하니 사용할 수 없는 제약이 있고,
따라서 컴퓨터에 부여할 수 있는 호스트 주소만을 사용할 수 있어 버리는 주소가 많은 단점이 있다

이를 해소하기 위해 DHCP 와 IPv6, NAT이 나왔다.


DHCP (Dynamic Host Configuration Protocol)
DHCP는 IP 주소 및 기타 통신 매개변수를 자동으로 할당하기 위한 네트워크 관리 프로토콜이다.
이 기술을 통해 네트워크 장치의 IP 주소를 수동으로 설정할 필요 없이 인터넷에 접속할 때마다
자동으로 IP 주소를 할당할 수 있다.

NAT (Network Address Translation) 

NAT은 패킷이 라우팅 장치를 통해 전송되는 동안 패킷을 IP 주소 정보를 수정하여
IP 주소를 다른 주소로 매핑하는 방법이다.

IPv4 주소 체계만으로는 많은 주소들을 모두 감당하지 못하는 단점이 있는데,

이를 해결하기 위해 NAT으로 공인 IP와 사설 IP로 나눠서 많은 주소를 처리한다.

앞의 그림처럼 사설 IP를 사용하는 직원들은 192.168.0.xxx 를 기반으로 각각 다른 IP를 가지고 있다.
이를 사설 IP 라고 한다.

 

그리고 NAT 장치를 통해 하나의 공인 IP인 121.165.151.200 으로 외부 인터넷에 요청할 수 있다.

이를 통해 하나의 공인 IP 인 121.165.151.200 를 기반으로
각각 다른 IP를 가지는 것처럼 인터넷을 사용할 수 있다.

우리들이 보통 사용하는 인터넷 공유기에는 NAT이 탑재되어 있다.

 

NAT를 이용한 보안

NAT을 이용하면 내부 네트워크에서 사용하는 IP와 외부에 드러나는 IP 주소를 다르게 유지할 수 있기에
내부 네트워크에 대해 어느정도 보안이 가능하다.

 

NAT의 단점
NAT은 여러 명이 동시에 인터넷에 접속하게 되므로 실제로 접속하는 호스트 숫자에 따라
접속 속도가 느려질 수 있다.


IP 주소를 이용한 위치 정보 

IP 주소는 인터넷에서 사용하는 네트워크 주소이기 때문에 이를 통해 동 또는 구까지 위치 추적이 가능하다.

네트워크 기기는 계층별로 처리 범위를 나눌 수 있습니다.
상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만
하위 계층을 처리하는 기기는 상위 계층을 처리할 수 없습니다.

 

  • 애플리케이션 계층 : L7 스위치
  • 인터넷 계층 : 라우터, L3 스위치
  • 데이터 링크 계층 : L2 스위치, 브리지
  • 물리 계층 : NIC, 리피터, AP
  • 스위치란?
    여러 장비를 연결하고 데이터 통신을 중재하며 목적지가 연결된 포트로만 전기 신호를 보내
    전송하는 통신 네트워크 장비이다.

 

L7 스위치 (애플리케이션 계층을 처리하는 기기)  

L7 스위치는 로드밸런서라고도 하며, 서버의 부하를 분산하는 기기이다.
클라이언트로부터 오는 요청들을 뒤쪽의 여러 서버로 나누는 역할을 하며
시스템이 처리할 수 있는 트래픽 증가를 목표로 한다.

또한 로드밸런서는 L7 스위치뿐만 아니라 L4 스위치도 있다.

L4 스위치는 전송 계층을 처리하는 기기로 스트리밍 관련 서비스에서는 사용할 수 없으며
메시지를 기반으로 인식하지 못하고 IP와 포트를 기반으로 트래픽을 분산한다.

반면 L7 로드밸런서는 IP, 포트 외에도 URL, HTTP 헤더, 쿠키 등을 기반으로 트래픽을 분산한다.

또한, 바이러스, 불필요한 외부 데이터 등을 걸러내는 필터링 기능과 응용 프로그램 수준의 트래픽 모니터링
그리고 만약 장애가 발생한 서버가 있다면 정기적으로 체크하여 트래픽 분산에서 제외하는 헬스 체크(health check) 기능이 있다.

 

출저 : 정보보인기사 <예문사>

 

헬스 체크(health check) 

L4 스위치 또는 L7 스위치 모두 헬스 체크를 통해 정상적인 서버 또는 비정상적인 서버를 판별하는데,
헬스 체크는 전송 주기와 재전송 횟수 등을 설정한 이후 반복적으로 서버에 요청을 보내는 것을 말한다.

 

물론 이때, 서버에 부하가 되지 않을 만큼 요청 횟수가 적절해야 하며,
TCP, HTTP 등 다양한 방법으로 요청을 보내며 요청이 정상적으로 이루어졌다면 정상적인 서버로 판별한다.
예를 들어 TCP 요청을 보냈는데 3-way-handshake가 정상적으로 일어나지 않았다면 정상이 아닌 것이다.

서버의 상태를 주기적으로 점검하는 방법으로는 Link, ARP, ICMP, TCP, Script 방식이 있으며,
일정 시간 간격으로 서비스에 대하여 Open과 Close를 반복적으로 진행하여 서비스 제공 가능 유무를 점검한다.

ARP 헬스체크

ARP(Address Resolution Protocol) HealthCheck는
ARP(주소 결정 프로토콜)를 이용하여 서버의 상태를 검사하는 2계층 헬스체크 기능이며
ARP 테이블과 ARP 테이블 갱신을 통하여 점검한다.

 

ICMP 헬스체크 

ICMP(Internet Control Message Protocol) HealthCheck는
ICMP(인터넷 제어 메시지 프로토콜)를 이용하여 서버의 상태를 검사하는 3계층 헬스체크 기능으로,
ICMP의 특성을 이용하여 서버의 IP 주소 활성화를 확인하여 점검한다.

ICMP Echo Request 메시지를 전송한 후 ICMP Echo Reply 메시지 수신 여부에 따라서
서비스 서버의 서비스 가능 유무를 판단한다.

 

TCP 헬스체크

TCP(Transmission Control Protocol) 헬스체크는 전송 제어 프로토콜에서 제공하는 서비스 포트를 이용하여
서버의 상태를 점검하는 4계층 헬스체크 기능이며, 이미 지정된 포트를 사용하는 FTP, HTTP, Telnet 등과
개발자가 가용할 수 있는 영역에 있는 포트 번호를 이용하여 서비스 제공 가능 유무를 검사한다.
기본적으로 TCP의 3-way-handshake를 사용하며, 이후 서버의 소켓 낭비를 막기위해 RST 패킷을 보내 세션을 정리하는
4계층 헬스체크이다.

 

Script 헬스체크
스크립트 헬스체크는 Script를 이용하여 Application Demon을 점검하는 7계층 헬스체크 기능이며,

스크립트가 작성된 순서에 의하여 메시지를 전송하고 그에 따른 응답 메시지 유무에 따라서 서버의 서비스 가능 유뮤를 판단한다. 

 

https://jesc1249.tistory.com/6

 

[L4/L7 스위치] 8. 헬스 체크(Health Check)

지난 포스팅에서 4회에 걸쳐 L4/L7 스위치의 다양한 NAT방식(DANT, FNAT, DSR, L3 DSR)에 대해 알아보았습니다. 이번 포스팅에선 L4/L7 스위치가 서버의 상태를 점검하기 위해 사용하는 다양한 헬스체크에

jesc1249.tistory.com

 

 

로드밸런서를 이용한 서버 이중화 
로드밸런서는 대표적인 기능으로 서버 이중화를 들 수 있다.
서비스를 안정적으로 운용하기 위해서는 2대 이상의 서버가 필수적이기 때문이다.

로드 밸런서는 2대 이상의 서버를 기반으로 가상 IP를 제공하고 이를 기반으로 안정적인 서비스를 제공한다.

 

https://coconuts.tistory.com/265
https://eunhyee.tistory.com/229#--%25--Load%25--Balancing%25--%EC%25--%25-C%EA%25B-%25A-%EB%25A-%AC%EC%25A-%25--

 

[네트워크] 스위치(Switch) - L2, L3, L4 스위치 - L7 스위치

안녕하세요 it를 공부하시거나 일을 하시는 분들은 네트워크를 빼놓을 수 없는데요 스위치의 종류에는 계층별로 Layer2 스위치 줄여서 L2, L3, L4 ,L7 스위치라고 부릅니다 어느정도 규모가 있는 곳

coconuts.tistory.com

 

L4/L7 Load Balancing

1. Load Balancing L4/L7 스위치가 Load Balancing 목적으로 지원하며 동일한 목적을 하는 서버에 부하를 일정하게 분산하기 위하여 사용합니다. L4는 Transport 계층까지 확인할 수 있으며 L7는 Application 계층

eunhyee.tistory.com


라우터 (인터넷 계층을 처리하는 기기) 

라우터는 여러 개의 네트워크를 연결, 분할, 구분시켜주는 역할을 하며

"다른 네트워크에 존재하는 장치끼리 서로 데이터를 주고받을 때

패킷 소모를 최소화하고 경로를 최적화하여 최소 경로로 패킷을 포워딩" 

하는 라우팅을 하는 장비이다.

 

L3 스위치 (인터넷 계층을 처리하는 기기)

L3 스위치란 L2 스위치의 기능과 라우팅 기능을 갖춘 장비를 말한다.
L3 스위치를 라우터라고 해도 무방하다.
라우터는 소프트웨어 기반의 라우팅과 하드웨어 기반의 라우팅을 하는 것으로 나눠지고
하드웨어 기반의 라우팅을 담당하는 장비를 L3 스위치라고한다.

구분 L2 스위치 L3 스위치
참조 테이블 MAC 주소 테이블 라우팅 테이블
참조 PDU 이더넷 프레임 IP 패킷
참조 주소 MAC 주소 IP 주소

 


L2 스위치 (데이터 링크 계층을 처리하는 기기)

데이터 링크 계층을 처리하는 기기로는 L2 스위치와 브리지가 있다.

L2 스위치는 장치들의 MAC 주소를 MAC 주소 테이블을 통해 관리하며,
연결된 장치로부터 패킷이 왔을 때 패킷 전송을 담당한다.

IP 주소를 이해하지 못해 IP 주소를 기반으로 라우팅을 불가능하며 단순한 패킷의 MAC 주소를 읽어 스위칭하는 역할을 한다.

만약 목적지가 MAC 주소 테이블에 없다면 전체 포트에 전달하고 MAC 주소 테이블을 일정 시간 뒤 삭제하는 기능도 있다.

 

브리지 (데이터 링크 계층을 처리하는 기기) 

브리지는 두 개의 근거리 통신망(LAN)을 상호 접속할 수 있도록 하는 통신망 연결 장치로,
포트와 포트 사이의 다리 역할을 하며 장치에서 받아온 MAC 주소를 MAC 주소 테이블로 관리한다.

 


물리 계층을 처리하는 기기

  • NIC 
    LAN 카드라고 하는 네트워크 인터페이스 카드는 2대 이상의 컴퓨터 네트워크를 구성하는 데 사용하며,
    네트워크와 빠른 속도로 데이터를 송수신할 수 있도록 컴퓨터 내에 설치하는 확장 카드이다.

  • 리피터 
    리피터는 들어오는 약해진 신호 정도를 증폭하여 다른 쪽으로 전달하는 장치를 말한다.
    이를 통해 패킷을 더 멀리 보낼 수 있다. 하지만 광케이블이 도입되며 현재는 잘 쓰이지 않는다.

  • AP(Access Point)
    AP는 패킷을 복사하는 기기이다.
    AP에 LAN을 연결한 후 다른 장치에서 무선 LAN 기술을 사용하여 무선 네트워크 연결을 할 수 있다.

 

 

'CS Study :' 카테고리의 다른 글

네트워크 : HTTP  (0) 2023.02.10
네트워크 : IP 주소  (0) 2023.02.10
네트워크 : TCP/IP 4계층 모델  (0) 2023.02.02
네트워크 : 네트워크의 기초  (0) 2023.01.31
디자인 패턴 : MVC 패턴, MVP 패턴, MVVM 패턴  (1) 2023.01.27

인터넷 프로토콜 스위트(Internet protocol suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는

프로토콜의 집합이며, 이를 TCP/IP 4계층 모델로 설명하거나 OSI 7계층 모델로 설명하기도 한다.

 

그림처럼 TCP/IP 계층과 달리 OSI 계층은

애플리케이션 계층을 세 개로 쪼개고,

링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 표현하며,
인터넷 계층을 네트워크 계층으로 부른다는 점이 다르다.

 

이 계층들은 특정 계층이 변경되었을 때 다른 계층이 영향을 받지 않도록 설계되었다.

예를 들어 전송 계층에서 TCP를 UDP로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치해야 하지는 않는다.


애플리케이션 계층

애플리케이션 계층은 FTP, HTTP, SSH, SMTP, DNS 등 응용 프로그램이 사용되는 프로토콜 계층이다.

웹 서비스, 이메일 등의 서비스를 실질적으로 사람들에게 제공하는 계층이다.

 

  • FTP (File Transfer protocol, 20번 포트)
    장치와 장치 간의 파일을 전송하는데 사용되는 표준 프로토콜이다.
    쉽게 말해 원격지의 서버 혹은 FTP서버가 운영되는 PC에 파일을 업로드 할 수 있는 공간이다.
    인터넷을 통한 파일 송수신 만을 위해 고안된 서비스이기 때문에 아주 단순하며 사용법도 간단하다.
    또한, WWW 방식보다 파일을 빠른 속도로 주고 받을 수 있다.

    단점이라고 한다면, 기본적으로 명령어 기반의 통신 서비스이기 때문에
    별도의 FTP 프로그램을 다운받아야 한다. 즉, 프로그램을 사용하지 않으면 사용이 어려워진다. (대표적으로 파일질라)

    FTP는 파일 전송/삭제/이동을 쉽게 하기 위하여 만들어진 프로그램이기에
    계정과 비밀번호를 만들어 보안을 높힌다.

fileZilla

 

  • SSH (Secure Shell, 22번 포트)
    보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜이다.
    네트워크 상의 다른 컴퓨터(AWS EC2)에 로그인하거나 원격 시스템에서 명령을 실행하고
    다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 의미한다.

    클라이언트와 서버는 강력한 암호화 방법을 통해 연결되어 있기 때문에 데이터를 중간에서 가로채도
    해석할 수 없는 엄호화 된 문자만 노출된다.

    비슷한 프로토콜로 위의 FTP 등이 있지만, 데이터를 암호화하는 과정이 없기에
    누군가 통신을 가로챈다면 데이터가 그대로 노출되는 문제점이 있었다.


  • HTTP (HyperText Transfer Protocol, 80번 포트)
    World Wide Web을 위한 데이터 통신의 기초이자 웹 사이트를 이용하는데 쓰는 프로토콜이다.
    HTTP는 크게 Request와 Response를 위한 메시지로 구분되어 있다.

  • SMTP (Simple Mail Transfer Protocol, 25번 포트)
    간단히 전자 메일 전송을 위한 인터넷 표준 통신 프로토콜이다. 간이 전자 우편 전송 프로토콜이다.

  • DNS (Domain Name System)
    간단히 이야기하면 사람이 읽을 수 있는 도메인 이름(www.naver.com)을 IP주소로 변환해주는 시스템이다.

    www.naver.com에 DNS 쿼리가 오면
    [Root DNS] -> [.com DNS] -> [.naver DNS] -> [.www DNS] 과정을 거쳐 완벽한 주소를 찾아 IP 주소를 매핑한다.

    1. "www.naver.com" IP 주소를 찾아달라고 해결사 서버에게 요청
    2. 해결사 서버는 최상위 기관에서 관리하는 네임 서버에게 요청 -> ".com 도메인 있나요?" 
    3. ".com은 한국 도메인이니 .com 네임 서버로 가세요" 라고 네임 서버가 안내해줌
    4. ".com" 네임 서버로 가서 "naver.com" 이 있는지 문의 
    5. "가비아에 등록 되어 있네요" 가비아로 가라고 안내
    6. 가비아 네임 서버에 "www.naver.com"이 있는지 문의
    7. 가비아 서버에서 매핑된 IP주소를 안내해준다.

전송 계층 

전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며
연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공할 수 있으며
애플리케이션과 인터넷 계층사이의 데이터가 전달될 때 중계 역할을 한다.

대표적으로 TCP 와 UDP가 있다.

 

  • TCP (Transport Control Protocol)
    패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 수신 여부를 확인한다.
    '가상회선 패킷 교환 방식'을 사용한다.
    대표적으로 HTTP, FTP, SSH, SMTP 등이 TCP 방식에서 가장 많이 활용된다.

    서버와 클라이언트 사이에서
    1. 세션 접속
    (SYN, SYN+ACK, ACK의 3-Way-HandShake로 처리된다.)

    2. 데이터 송수신
    (세션이 연결되어 있는동안 데이터 송수신이 가능하며 Server에서 Client로 보내는 데이터를 PUSH라고 한다.)
    (전송되는 데이터는 서버에서 반드시 반대쪽(Client)에게 ACK 응답을 전송해야 한다.)

    3. 세선 해제
    (세션 해제는 FIN/ACK, 반대편의 FIN/ACK 방식의 4-Way-HandShake 방식으로 처리된다.)
    (해당 과정이 마무리 되어야만 Server에서 Client 세션자원이 해제되어, 이후 Client에 대한 세션 새접속이 가능하다.)

    순으로 진행된다.

    Server보단 Client에서 문제가 발생해 정상적으로 해제가 이루어지지 않는 경우가 있어
    Server 항상 더미데이터를 Client에 보내 응답이 없다면 세션 해제를 하게 구현해야 한다.



  • UDP (User Datagram Protocol)
    순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는
    '데이터그램 패킷 교환 방식'을 사용한다.
    제약된 전송량을 가진 TCP 보다 대용량 전송이 가능해 스트리밍, 인터넷 전화 미디어처리에 활용된다.
    UDP는 네트워크 노드정보 교환이나 미디어처리에 활용된다.
    대표적으로 DNS, SNMP, SIP(Session Initiation Protocol), RTSP 등에 활용된다.

    UDP의 데이터 전송방식은 크게 2가지로 나뉜다.

    1. 특정 아이피를 지정하여 데이터를 전송하는 유니캐스팅
    2. 특정 그룹인 다수를 향해 데이터를 전송하는 브로드캐스팅

    UDP는 Server에서 Client의 세션 접속을 대기하는 방식과는 달리
    송신/수신측 모두를 읽어들이는 Recevier를 만들어야 한다.
    SIP 프로토콜을 사용하여 미디어처리나 통화, 화상회의을 만든다.

 


가상회선 패킷 교환 방식 (TCP)

가상회선 패킷 교환 방식은 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고
패킷들은 전송된 '순서대로' 도착하는 방식을 말한다.

가상회선 패킷 교환 방식

 

데이터그램 패킷 교환 방식 (UDP)

패킷이 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷은
서로다른 경로로 전송 될 수 있으며 '순서가 다를 수' 있는 방식이다.

데이터그램 패킷 교환 방식

 


TCP 연결 성립 과정

TCP는 신뢰성을 확보할 때 '3-Way-HandShake' 라는 작업을 진행한다.

SYN : 연결 요청 플래그
ACK : 응답 플래그
ISN : Initial Sequence Numbers, 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스이다. (장치마다 다를 수 있다.)

 

  1. SYN 단계 :
    클라이언트는 서버에 클라이언트의 ISN을 담아 SYN(연결 요청)을 보낸다.
  2. SYN + ACK 단계 :
    서버는 클라이언트의 SYN(연결 요청)을 수신하고 서버의 ISN (즉, 서버 장치의 ISN)을 보내며,
    이때 승인번호로 클라이언트의 SYN로부터 받은 클라이언트의 ISN에 +1 한 값을 같이 보낸다.
    즉, 서버도 클라이언트에게 데이터 전송에 대한 허가를 받기 위해 연결을 확립해달라고 ACK 뿐 아니라
    SYN도 같이 보내는 것이다.
  3. ACK 단계 :
    클라이언트는 서버의 ISN + 1한 값을 승인번호로 담아 ACK를 서버에 보낸다. (연결 확립!)

 

 

TCP 연결 해제 과정

TCP가 연결을 해제할 때는 4-Way-HandShake 과정이 발생한다.

 

  1. 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다.
    그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
  2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보낸다.
    그리고 CLOSE_WAIT 상태에 들어간다. 
    클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
  3. 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
  4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSE 상태가 된다.
    이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 모든 자원의 연결이 해제된다.

 

이 과정 중 눈여겨봐야 할 것은 TIME_WAIT 이다.

왜 바로 연결을 닫지 않고, 일정 시간 뒤에 연결을 닫을까?
첫 번째로 지연 패킷이 발생할 경우를 대비하기 위함이다. (무결성 문제를 막기위해)

두 번째로 두 장치의 연결이 닫혔는지 확인하기 위함이다.
만약 LAST_ACK 상태에서 연결이 막혔다면 다시 새로운 연결을 하려고 할 때 서버는 계속 LAST_ACK 상태이기에
접속 오류가 발생한다.

 

 


인터넷 계층

인터넷 계층은 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층이다.
IP, ARP, ICMP 등이 있으며 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달한다.
상대방이 제대로 받았는지에 대해 보장하지 않는다.


링크 계층
링크 계층은 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 '규칙'을 정하는 계층이다.
참고로 네트워크 접근 계층이라고도 한다.

 

이를 물리 계층데이터 링크 계층으로 나누기도 한다.

 

  • 유선 LAN (IEEE802.3)

    전이중화 통신
    전이중화 통신은 양쪽 장치가 동시에 송수신할 수 있는 방식을 말한다.
    이는 송신로와 수신로로 나눠서 데이터를 주고받으며 현대의 고속 이더넷은 이 방식을 기반으로 통신한다.

    CSMA/CD (유선)
    CSMA/CD는 '반이중화 통신' 이다.
    이 방식은 데이터를 '보낸 이후' 충돌이 발생한다면 일정 시간 이후 재전송하는 방식을 말한다.
    이는 송신로와 수신로를 각각 둔 것이 아니고 한 경로를 기반으로 데이터를 보내기 때문에
    데이터를 보낼 때 충돌에 대해 대비해야 했기 때문이다.


  • 유선 LAN을 이루는 케이블

    트위스트 페어 케이블
    트위스트 페어 케이블은 하나의 케이블처럼 보이지만 실제로는 여덟 개의 구리선을 두 개씩 꼬아서 묶은 케이블을 지칭한다.
    케이블은 구리선을 실드 처리하지 않고 덮은 UTP 와 실드 처리하고 덮은 STP로 나눠진다.
    우리가 많이 보는 것은 UTP 케이블로 흔히 LAN 케이블이다.

    광섬유 케이블
    광섬유 케이블은 광섬유로 만든 케이블이다.
    레이저를 이용해 통신하기 때문에 구리선과 비교할 수 없을 만큼의 장거리 및 고속 통신이 가능하다.

  • 무선 LAN(IEEE802.11)

    반이중화 통신 

    반이중화 통신은 양쪽 장치는 서로 통신할 수 있지만, 동시에는 통신할 수 없으며 한 번에 한 방향만 통신할 수 있는 방식을 말한다.

    CSMA/CA (무선)
    반이중화 통신 중 하나로 장치에서 데이터를 보내기 전에 캐리어 감지 등으로 사전에 가능한 한 충돌을 방지하는 방식을 사용한다.

    1. 데이터를 송신하기 전에 무선 매체를 살핀다.
    2. 캐리어 감지 : 회선이 비어 있는지를 판단한다.
    3. IFS (Inter FrameSpace) : 랜덤 값을 기반으로 정해진 시간만큼 기다리며, 만약 무선 매체가 사용 중이면 점차 간격을 늘려간다.
    4. 이후에 데이터를 송신한다.


  • 무선 LAN을 이루는 주파수
    무선 LAN은 무선 신호를 전달 방식을 이용하여 2대 이상의 장치를 연결하는 기술이다.

    와이파이
    전자기기들이 무선 LAN 신호에 연결할 수 있게 하는 기술로, 사용하려면 무선 접속 장치(Access Point, AP)가 있어야 한다.
    흔히 공유기라고 하며 이를 통해 유선 LAN 신호를 무선 LAN 신호로 바꿔주어 신호가 닿는 범위 내에서 무선 인터넷이 사용 가능하다.

    BSS, ESS 도 있다.


  • 이더넷 프레임 
    참고로 데이터 링크 계층은 이더넷 프레임을 통해 전달받은 데이터의 에러를 검출하고 캡슐화하며 다음과 같은 구조를 가진다.

  • Preamble : 이더넷 프레임이 시작임을 알린다.
  • SFD (Start Frame Delimiter) : 다음 바이트부터 MAC 주소 필드가 시작됨을 알린다.
  • DMAC, SMAC : 6bytes 로 수신, 송신 MAC 주소를 말한다.
  • EtherType : 데이터 계층 위의 계층인 IP 프로토콜을 정의한다. IPv4, IPv6
  • Payload : 전달받은 데이터
  • CRC : 에러 확인 비트


계층 간 데이터 송수신 과정 

 

애플리케이션 계층에서 전송 계층으로 보내는 요청 값들이 캡슐화 과정을 거쳐 전달되고,
다시 링크 계층을 통해 해당 서버와 통신을 하고,
해당 서버의 링크 계층으로부터 애플리케이션까지 비캡슐화 과정을 거쳐 데이터가 전송된다.

 

애플리케이션 계층의 데이터가 전송 계층으로 전달되면서 '세그먼트' 또는 '데이터그램'화 되며 TCP(L4)헤더가 붙는다.
이후 인터넷 계층으로 내려가 IP(L3) 헤더가 붙으며 '패킷'화가 되고,
링크 계층으로 내려가 프레임 헤더와 프레임 트레일러가 붙어 '프레임'화가 된다.

이후 사용자에게 반대 진행되는 비캡슐화를 통해 애플리케이션의 PDU인 메시지로 전달된다.


PDU : 네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위를 PDU (Protocol Data Unit)이라고 한다.
계층마다 부르는 명칭이 다르다.

 


https://www.youtube.com/watch?v=gPsSLwaFhYo 

 

+ Recent posts