OSI 7계층을 나눈 이유는?

흐름을 한눈에 알아보기 쉽고 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있기 때문임.

OSI Model 전송 단위

Physical(물리 계층) 비트(Bits)
Data link(데이터 링크 계층) 프레임(Frames)
Network(네트워크 계층) 패킷(Packets)
Transport(전송 계층) 세그먼트(Segment)
Session(세션 계층) 데이터(Data)
Presentation(표현 계층) 데이터(Data)
Application(응용 계층) 데이터(Data)

전송 시 7계층에서 1계층으로 각각의 층마다 인식할 수 있어야 하는 헤더를 붙임(캡슐화)

수신 시 1계층에서 7계층으로 헤더를 떼어냄(디캡슐화)

출발지에서 데이터를 전송할 때 헤더가 추가되는데 2계층에서만 오류제어를 위해 꼬리부분에 추가됨.

물리 계층(Physical Layer)

  • 전기적, 기계적, 기능적인 특성을 이용하여 데이터를 전송하는 계층임.
  • 단지 데이터를 전달만 할뿐, 전송하려는 데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 신경 X.
  • 데이터 전송 단위 : 비트(Bit)
  • 대표적인 장치 : 통신 케이브, 허브, 리피터 등

데이터 링크 계층(Data link Layer)

  • 물리적인 연결을 통해 인접한 두 장치 간의 신뢰성 있는 정보 전송을 담당(Point-to-Point)
  • 물리계층을 통해 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보의 전달을 수행할 수 있도록 도와주는 역할을함 → 통신에서의 오류도 찾아주고 재전송하는 기능도 가지고 있음.
  • Mac주소를 통해 통신함.
  • 데이터 전송 단위 : 프레임(Frame)
  • 대표적인 장치 : 스위치, 브릿지
  • Mac 주소란?예 : 12:34:56:78:90:AB
  • : 무선 LAN 카드 또는 무선 LAN 기능 내장 기기에 개별적으로 부여되는 16진수 12자리의 단말 식별 번호

네트워크 계층(Network Layer)

  • 주요 기능은 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능(라우팅)
  • 이 계층은 경로를 선택하고 주소를 정하고 경로에 따라 패킷을 전달해줌.
  • 여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하는 계층으로, 다양한 길이의 데이터를 네트워크를 통해 전달하며 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적,절차적 수단을 제공함.
  • 라우팅, 흐름 제어, 세그멘테이션, 오류 제어 등을 수행함.
  • 데이터 전송 단위 : 패킷(Packet)
  • 대표적인 장치 : 라우터
  • ⇒ 여러 개의 노드를 거쳐 경로를 찾기 위한 주소는 IP임.

전송 계층(Transport Layer)

  • 계층 구조의 네트워크 구성요소와 프로토콜 내에서 송신자와 수진자를 연결하는 통신 서비스를 제공함.
  • 양쪽의 end to end 간의 데이터 전송을 담당하는 역할을 하는 계층임.
  • 대표적인 프로토콜 : TCP & UDP
  • 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해줌.
  • 헤더에 송신지와 수신지의 포트 번호를 포함하여 데이터를 특정 단위로 쪼개어 전달함.

세션 계층(Session Layer)
표현 계층(Presentation Layer)
응용 계층(Application Layer)

'CS(Computer science) > 네트워크' 카테고리의 다른 글

사설 ip, 공인 ip, localhost 구분하기  (0) 2023.08.08


컴퓨터는 H/W, Kernel, User 로 크게 3가지로 구분지어 볼 수 있습니다.

운영체제는 소프트웨어로서 App이 잘 동작하도록 Support하며 H/W를 제어및 관리를 합니다.

  • 인터럽트 (Interrept) : 쉽게 말해, 집에서 일을 하고 있는데 초인종을 눌러 일을 중단하게 됨.
    • 내부 인터럽트와 외부 인터럽트로 나눌 수 있음.
  • 즉, CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요한 경우 CPU에 알려 처리할 수 있도록 하는 것.
  • 인터럽트 동작 순서
  • 1. 인터럽트 요청 2. 프로그램 실행 중단 : 현재 실행중이던 Micro option까지 수행함 3. 현재의 프로그램 상태 보존 : PCB, PC 등 4. 인터럽트 처리 루틴 실행 : 인터럽트를 요청한 장치를 식별함 5. 인터럽트 서비스 루틴 실행 : 인터럽트 원인을 파악하고 실질적인 작업을 수행함. 처리기 레지스터 상태 보존, 서비스 루틴 수행 중 우선순위 높은 것, 인터럽트 발생 재귀적으로 1~5과정 수행 6. 상태 복구 : 인터럽트 발생 시 저장해둔 PC를 다시 복구함 7. 중단된 프로그램 실행 재개 : PC의 값을 이용하여 이전에 수행 중이던 프로그램을 재개함.
  • DMA(Direct Memory Access)Hello.. 라는 Data 가 prinft()라는 함수 내에서 Write()를 함. 이때의 정보가 RAM으로 Hello가 전달됨여러 단계를 거치는 과정이 복잡하다보니 성능이 떨어짐(비효율적임).DMA Controller를 이용하면 하드디스크와 메모리를 직접 연결하여 CPU는 제어신호만 주고받을 뿐 데이터 전송에서 제외시킬 수 있다. 따라서 입출력 시 CPU는 제어를 위해 데이터 전송 시작과 완료에만 할당되어 CPU 자원의 낭비를 줄 일 수 있게됨.
  • 위의 방식의 단점을 개선한 것이 DMA방식입니다. 이름 그래도 입출력장치가 메모리에 직접 접근한다는 뜻임.
  • 이때 인터럽트가 발생됨. 이것을 주변기기로 옮기면서 또 인터럽트가 발생할수 있음. hello를 띄우는데
  • 예를 들어, “Hello World!”라는 Data를 화면에 띄우려고 한다.

'CS(Computer science) > 운영체제' 카테고리의 다른 글

CPU 스케줄링 (1)  (0) 2024.03.05
  • 스케줄링(Scheduling)의 단계
    • 고수준 스케줄링
    • 가게가 장사가 잘된다고 손님을 계속 받는 것이 아닌 것처럼 시스템 내의 전체 작업 수를 조절하는 것을 말함. 여기서 작업이란 운영체제에서 다루는 일의 가장 큰 단위로 1개 또는 여러개의 프로세스로 이뤄짐.
    • 중간 수준 스케줄링⇒ 즉, 고수준 스케줄링은 스케줄링 대상에 참여하는 job을 조절하는 것이라면 중간 수준 스케줄링은 이미 들어온 프로세스들에 대하여 전체적으로 조절하는 것임.
      1. 고수준과 저수준 스케줄링 사이에서 일어나는 일.
      2. suspend와 active 로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막음.
      3. 이는 프로세스의 상태 중 보류 상태(suspend state)에 해당하며 저수준 스케줄링이 원만하게 이루어지도록 완충하는 역할을 함.
    • 저수준 스케줄링준비 상태인 프로세스를 실행 상태로, 실행 상태를 대기 상태로, 대기 상태를 준비 상태로 보내는 것들이 있음.
    • 어떤 프로세스에 CUP를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정하는 일임.

정리

고수준 스케줄링에서 전체 시스템의 부하를 고려하여 작업을 시작할지 말지 결정함. 이 결정에 따라 전체 프로세스의 수가 결정되는 것임.

중간 수준 스케줄링은 시스템이 과부하가 걸려서 전체 프로세스 수를 조절해야할 때, 이미 활성화된 프로세스 중 일부를 보류 상태로 보낸다. 보류 사애가 된 프로세스는 처리 능력에 여유가 생기면 다시 활성화가 됨.

저수준 스케줄링에서 실제로 작업이 이루어집니다. CUP 스케줄러는 필요에 따라 준비 상태에 있는 프로세스를 실행 상태로 옮기고, 대기 상태로 보내기도 하며, 타임 아웃으로 준비 상태로 보내기도 한다. 보통 특별한 명시가 없다면 CPU 스케줄러는 저수준 CPU 스케줄러를 말함.

'CS(Computer science) > 운영체제' 카테고리의 다른 글

[운영체제] 인터럽트와 DMA  (0) 2024.03.05

HTTP와 HTTPS의 차이?

HTTPS는 SSL(Secure Socket Layer) 인증서를 사용하는 HTTP입니다.

SSL인증서는 일반 HTTP 요청 및 응답을 암호화합니다.

따라서 HTTPS는 HTTP보다 더 안전한 보안용 프로토콜입니다.

HTTP란?

HTTP(HyperText Transfer Protocol) 로 인터넷을 작동시키는 역할을 하며,

웹서버 및 브라우저 상호 간의 데이터 전송을 위한 응용 계층 프로토콜입니다.

HTTPS란?

HTTPS(HyperText Transfer Protocol Secure)로 표준 HTTP와 동일한 방식으로

작동하나 서버와 주고받는 데이터가 암호화되기 때문에 웹사이트에 추가적인 보호를 제공합니다.

'CS(Computer science)' 카테고리의 다른 글

HTTP의 특성  (0) 2023.04.19

DB연동이나 회사 내부에서 ip때문에 고생하여 자세하게 알고자 정리하고자합니다.

IP란?

  • 인터넷 프로토콜(Internet Protocol)의 약자로, 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약을 의미함

  • IP는 OSI의 Layer 3(Network Layer)와 Internet Protocol Suite의 Layer 3(Internet Layer)에 위치하는 프로토콜

정리

  • 쉽게 말해, 택배를 보낼 때, 받는 사람과 보내는 사람의 주소를 적어서 보낸다. 이때의 받는 사람이 주소를 확인하여 본인에게 온 택배가 맞는지의 작업이라고 생각하시면 됩니다.

공인IP주소

  • 공인IP란 실제 다른 컴퓨터와 통신할 때 쓰는 IP주소이며 IPv4에서는 '1.0.0.0' ~ '223.255.255.255' 까지가 여기에 해당됨.

  • 쉽게 말해, 고유한(유일한) IP 주소 ( 검색창에 내 ip 주소를 검색하면 나오는 IP)

그럼 어디에 쓰일까요?

  • 공인IP를 알고 있다고 해서 통신이 가능한 것은 아닙니다. 공인IP 주소를 사용하는 경우에는 특정 포트를 열어주어 외부에서 접근이 가능하게 하여 사용한답니다.

사설IP주소

  • 사설IP란 와이파이, 학교 공용 컴퓨터 등을 보면 192.168.XXX.XXX 처럼 아이피가 거의 사설 아이피인것을 확인 할 수 있습니다. 그 외에도 공유기를 사용하는 가정용 컴퓨터에서도 심심치 않게 볼 수 있음.

그럼 어디에 쓰일까요?

  • 공인IP 처럼 사설IP를 통신할 외부 컴퓨터에 알려줘도 접근이 불가능합니다.
    예를 들어) 개똥이의 친구 A는 같은 건물의 회사에 다니고 친구 B는 다른 건물의 회사에 다닙니다. 친구 A는 개똥이에게 사설IP를 알려주면 같은 사설망을 사용하고 있어 접속을 할 수 있지만, 친구 B는 접속할 수 없습니다.
    일상 생활로 비유를 들면, 집에 공유기 하나에 3개의 랜선이 연결되어.. 3개의 컴퓨터가 있다면 같은 사설망에 있어 192.168.XXX.XXX라는 주소를 알려주면 접근이 가능합니다. 하지만 옆집에 사는 친구가 접근하려면 공인 IP를 알려줘야 사용이 가능합니다.

localhost

  • localhost란 컴퓨터 네트워크에서 사용하는 루프백 주소로, 자신의 컴퓨터를 의미한다. 즉, 컴퓨터의 네트워크 기능을 시험하기 위해 '가상으로 인터넷망에 연결되어 있는 것처럼 할당하는 인터넷 주소'

  • IP주소는 127.0.0.1

외부에서 접근이 가능할까요?

  • 나만이 유일하게 사용할 수 있다고 생각하면 됩니다.
  • 같은 집에 사는 사람도 접속할 수 없음.

localhost(로컬호스트) 참고
IP란? 참고

'CS(Computer science) > 네트워크' 카테고리의 다른 글

[Computer Science] OSI 7 Layer  (0) 2024.03.05

개발 도중 crypto라는 모듈을 사용해서 비밀번호를 암호화를 진행하였습니다. 그런데 그냥 모듈을 사용하는 것보다 어떤 방식으로 비밀번호가 암호화되는지 궁금하여 찾아본 결과, 관련된 Hash를 정리하고자 합니다.

해시(Hash)란?

다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값입니다. 이를 이용해 특정한 배열의 인덱스나 위치나 위치를 입력하고자 하는 데이터의 값을 이용해 저장하거나 찾을 수 있습니다. 기존에 사용했던 자료 구조들은 탐색이나 삽입에 선형시간이 걸리기도 했던 것에 비해, 해시를 이용하면 즉시 저장하거나 찾고자 하는 위치를 참조할 수 있으므로 더욱 빠른 속도로 처리할 수 있습니다.

해시함수란?

해시 함수는 임의의 길이를 갖는 임의의 데이터에 대해 고정된 길이의 데이터로 매핑하는 함수를 말합니다. 이러한 해시 함수를 적용하여 나온 고정된 길이의 값을 해시값이라고 합니다. 보통 그리 복잡하지 않은 알고리즘으로 구현되기 때문에, 상대적으로 CPU, 메모리 같은 시스템 자원을 덜 소모하는 특성이 있습니다. 그리고 해시 함수는 결정록적으로 작동하기 때문에, 원래의 데이터가 같으면 해시값도 항상 동일하며, 이 출력값은 가능한 한 고른 범위에 균일하게 분포하는 특성이 있습니다. 특수 목적용으로 해시값을 생성하는 원본과 별도의 값을 받아서 같은 입력에 대해 다른 출력값을 가지게 하는 해시 함수도 존재한다.

* 밑줄 : A라는 사람이 'abc'를 입력하여 해시함수를 통해 매핑을 해서 나온 결과 값은 B라는 사람이 'abc'를 입력하여 해시함수를 통해 매핑해서 나온 결과 값과 같다. 

해시함수는 어떻게 활용될까요?

자료구조, 캐시, 중복 레코드 검색, 유사 레코드 검색, 에러검출 등 다양한 분야에서 유용하게 사용됩니다.
대표적인 해시 함수 : MD5, SHA

해시 테이블이란?

해시 테이블은 키와 값을 매핑해 둔 데이터 구조입니다. 해시함수를 이용하여 검색하고자 하는 값을 반환하면 그 값이 저장된 위치를 즉시 알아낼 수 있습니다. 데이터의 양이 아무리 많아지더라도 원리적으로 해시 변환과 검색에 걸리는 시간은 항상 동일합니다. 따라서 방대한 데이터에서 특정한 값을 검색할 때 해시 테이블을 사용하면 검색 시간을 획기적으로 단축할 수 있습니다.
*해시 맵(hash map)은 기존 해시 테이블의 기능을 개선한 신 버전의 해시 테이블입니다.

해싱

해싱이란 해시함수를 사용하여 주어진 값을 변환한 뒤, 해시 테이블에 저장하고 검색하는 기법을 말합니다. 해싱에 사용되는 자료구조는 배열(array)와 연결리스트(linked list)가 조합된 형태입니다. 짧은 해시 키를 사용하여 항목을 찾으면, 원래의 값을 이용하여 찾는 것보다 더 빠르기 때문에, 해싱은 데이터베이스 내의 항목들을 색인하고 검색하는 데 사용된다. 

해시는 어디서 활용이 되나요?

해시는 블록체인과 IPFS 등 다양한 분야에서 활용되고 있습니다. 보안 분야에서도 널리 사용되는데 이는 해시 함수가 원래의 문장을 복호화할 수 없게 뭉개버린다는 장점과 원문과 해시값 사이에 선형적 관계가 없다는 특성을 지니고 있기 때문입니다.

Node에서 사용되는 예제

const crypto = require('crypto');
const util = require('util');

const pbkdf2Promise = util.promisify(crypto.pbkdf2);
const randomBytesPromise = util.promisify(crypto.randomBytes);

module.exports = {
	
    /**
     * Create HashedPassword
     * @param {String} password 
     * @returns String, String
     */
    createHashedPassword: async (password, currnet_salt) => {
        const salt = currnet_salt;
        const key = await pbkdf2Promise(password, salt, Number(process.env.KEY_STRETCHING), 64, "sha512");
        const hashedPassword = key.toString("base64");
        return { hashedPassword, salt };
    },

    /**
    * verifyPassword
    * @param {String} password 
    * @param {String} userSalt 
    * @param {String} userPassword 
    * @returns boolean
    */
    verifyPassword: async (password, userSalt, userPassword) => {
        const key = await pbkdf2Promise(password, userSalt, Number(process.env.KEY_STRETCHING), 64, 'sha512');
        const hashedPassword = key.toString('base64');
        if (hashedPassword === userPassword) return true;
        return false;
    }
}

참고 자료 : http://wiki.hash.kr/index.php/%ED%95%B4%EC%8B%9C

'CS(Computer science) > 자료구조' 카테고리의 다른 글

Stack/Queue 이란?  (2) 2023.04.20

+ Recent posts