728x90

컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층이다. 운영체제 중 항상 필요한 부분은 전원이 켜짐과 동시에 메모리에 올려 놓고, 그렇지 않은 부분은 필요할 때 메모리로 올려 사용한다.

목차

  1. 운영체제 (Operating System, OS) 란 ?
  2. 운영체제의 목적
  3. 운영체제의 분류
  4. 운영체제의 예

 


운영체제 (Operating System, OS) 란 ?

컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층이다. 운영체제 중 항상 필요한 부분은 전원이 켜짐과 동시에 메모리에 올려 놓고, 그렇지 않은 부분은 필요할 때 메모리로 올려 사용한다. 

 

협의의 운영체제 (= 커널)

➳ 운영체제의 핵심 부분으로 메모리에 상주하는 부분이다.

 

광의의 운영체제 

➳ 커널뿐 아니라 각종 주변 시스템 유틸리티(ex) 파일 복사 프로그램) 등을 포함한 개념이다.

➳ 필요할 때만 메모리에 올라가는 별도의 프로그램이다.

 

 


운영체제의 목적

 

🔅 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다.

➳ 운영체제는 동시 사용자 및 프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상을 제공한다.

➳ 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행한다.

    • 따라서 사용자 및 프로그램은 쉽게 프로그램 실행이 가능하다. 

    • ex) 사용자는 파일이 디스크에 어떻게 저장되는지 몰라도 쉽게 파일을 저장한다.

 

🔅 컴퓨터 시스템의 자원을 효율적으로 관리한다.

➳ 자원이란 CPU, 메모리, 하드디스크 등 하드웨어 자원뿐 아니라 소프트웨어 자원까지 통칭해서 부른다.

➳ 프로세서, 기억장치, 입출력 장치 등을 효율적으로 관리한다.

    • 사용자 간의 형평성 있는 자원 분배를 지향한다.

    • 주어진 자원으로 최대한의 성능을 내도록 한다.

➳ 프로세스, 파일, 메시지 등을 관리한다.

➳ 사용자와 운영체제 자신을 보호한다.

 

여러 사용자의 프로그램이 하나의 컴퓨터에서 실행될 때, 

A사용자가 B사용자의 프로그램이 올라가 있는 메모리 영역을 침범하거나 특정 파일에 접근하는 일이 생기면 안 된다.

 

 

 


운영체제의 분류

운영체제의 분류는 크게 아래 세 가지로 나누어 볼 수 있다.

노란색으로 표시한 것은 요즘 대부분의 운영체제가 채택한 것이다.

 

1. 동시 작업 가능 여부

 

1) 단일 작업 (single tasking)

➳ 한 번에 하나의 작업만 처리한다.

➳ 한 명령의 수행이 끝나기 전에 다른 명령을 수행할 수 없다.

ex) MS-DOS

 

2) 다중 작업 (multi tasking)

➳ 동시에 두 개 이상의 작업만 처리한다.

➳ 한 명령의 수행이 끝나기 전에 다른 명령을 수행할 수 있다.

➳ 현대적인 운영체제이다.

ex) UNIX, MS Windows

 

 

2. 사용자의 수

 

1) 단일 사용자 (single user)

➳  한 번에 한 명의 사용자만이 사용할 수 있다.

ex) MS-DOS, MS Windows

 

2) 다중 사용자 (multi user)

➳  여러 사용자가 동시에 접속해 사용할 수 있다.

ex) UNIX, NT server

 

 

3. 처리 방식

 

1) 일괄 처리 (batch processing)

➳ 작업 요청의 일정량을 모아서 한꺼번에 처리한다.

➳ 작업이 완전 종료될 때까지 기다려야 한다.

ex) 초기 Punch Card 처리 시스템

 

2) 시분할 (time sharing)

➳ 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용한다. 

➳ 일괄 처리 시스템에 비해 짧은 응답 시간을 가진다.

➳ Interactrive한 방식이다.

➳ 사용자의 요청에 대한 결과를 곧바로 얻을 수 있는 대화형 시스템으로, 사람이 느끼기에 빠르면서 동시에 효율적인 것이 목표이다.

ex) UNIX

 

 

3) 실시간 (realtime OS)

➳ 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야하는 실시간시스템을 위한 OS이다.

ex) 원자로/공장 제어, 미사일 제어, 반도체 장비, 로보트 제어

 

➳ 실시간 시스템의 개념 확장

    • Hard realtime system (경성 실시간 시스템)

    • Soft realtime system (연성 실시간 시스템) - ex) 유튜브와 같은 멀티미디어 스트리밍 시스템

 

 

💡 몇 가지 용어를 알아보자 !

- Multitasking
- Multiprogramming
- Time Sharing
- Multiprocess

➳ 위의 용어들은 컴퓨터에서 여러 작업을 동시에 수행하는 것을 뜻한다.
    • Multiprogramming은 여러 프로그램이 메모리에 올라가 있음을 강조한다.
    • Time Sharing은 CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조한다.

아래에는 비슷해보이지만 전혀 의미가 다른 주의해야할 단어가 하나 있다.

✔ Multiprocessor : 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어 있음을 의미한다.

 

 


운영체제의 예

🔅 DOS (Disk Operating System)

➳ MS사에서 1981년 IBM-PC를 위해 개발

➳ 단일 사용자용 운영체제, 메모리 관리 능력의 한계 (주 기억장치 : 640KB)

 

🔅 MS Windows

➳ MS사의 다중 작업용 GUI 기반 운영 체제

➳ Plug and Play, 네트워크 환경 강화

➳ DOS용 응용 프로그램과 호환성 제공

➳ 불안정성

➳ 풍부한 자원 소프트웨어

 

🔅 유닉스 (UNIX)

➳ 코드의 대부분을 C언어로 작성

➳ 높은 이식성

➳ 최소한의 커널 구조

➳ 복잡한 시스템에 맞게 확장 용이

➳ 소스 코드 공개

➳ 프로그램 개발에 용이

➳ 다양한 버전

    • System V, FreeBSD, SunOS, Solaris

    • Linux

 

 


Reference

KOCW 운영체제 강의 (이화여자대학교, 반효경 교수님)

 

728x90
728x90

덱은 double-ended queue를 줄여서 표현한 것으로, 양방향으로 넣고 뺄 수 있다는 사실에 초점이 맞추어져 지어진 이름이다. 스택과 큐의 특성을 모두 갖는, 둘을 조합한 형태의 선형 자료구조로 이해되고 있다.

목차

덱 (Deque) 이란?

 


덱 (Deque) 이란 ?

양쪽에서 삽입과 삭제가 가능한 자료구조이며 스택과 큐의 연산을 모두 지원한다. 덱은 double-ended queue를 줄여서 표현한 것으로, 양방향으로 넣고 뺄 수 있다는 사실에 초점이 맞추어져 지어진 이름이다. 스택과 큐의 특성을 모두 갖는, 둘을 조합한 형태의 선형 자료구조로 이해되고 있다.

  • appendleft : 왼쪽에서(앞에서) 데이터를 삽입
  • append : 오른쪽에서(뒤에서) 데이터를 삽입
  • popleft : 왼쪽에서 데이터를 꺼내기 (삭제)
  • pop : 오른쪽에서 데이터를 꺼내기 (삭제)

 

 

덱의 분류

  • Scroll : 입력 제한 덱 (Input restricted deque) - 입력은 한쪽에서만 발생, 출력은 양쪽에서 발생
  • Shelf : 출력 제한 덱 (Output restricted deque) - 입력은 양쪽에서 발생, 출력은 한쪽에서만 발생

 

 

덱의 사용

덱은 자주 쓰이지 않는다.

주로 앞, 뒤 모두에서 삽입, 삭제가 이루어질 때 사용한다.

데이터가 가변적일 때 사용한다.

  • 보통 스케줄링에 사용
  • 우선순위 조절 시 사용

 

 

Java class ‘Deque’

// Deque 선언, ArrayDeque 사용
Deque<E> deque = new ArrayDeque<>();

// First : 왼쪽, Last : 오른쪽

// 값 추가 (push) 
deque.offerFirst(추가할 값); //정상적으로 삽입 시 true, 용량 제한 시 false
deque.offerLast(추가할 값); 

deque.addFirst(추가할 값); // 용량 제한 시 예외(Exception) 발생 //push()와 동일
deque.addLast(추가할 값); //add()와 동일

// 값 꺼내기 (pop)
deque.pollFirst(); // 덱이 비어있으면 null // poll()과 동일
deque.pollLast();

deque.removeFirst(); // 덱이 비어있으면 예외 발생 // remove(), pop()과 동일 
deque.removeLast();

// 맨 앞과 맨 뒤의 값 출력
deque.peekFirst(); // 덱이 비어있으면 null //peek()와 동일
deque.peekLast();

deque.getFirst(); // 덱이 비어있으면 예외 발생
deque.getLast();

// 크기 구하기
deque.size();

// 비어있는지 확인 후 boolean 타입으로 반환
deque.isEmpty();

// 검색 후 삭제
deque.removeFirstOccurrence(제거할 값); // 왼쪽(앞)에서부터 탐색
deque.remove(제거할 값); // first와 동일
deque.removeLastOccurrence(제거할 값); // 오른쪽(뒤)에서부터 탐색

// 값이 있는지 확인
deque.contain(확인할 값);

// 순회 (Iterator)
deque.iterator(); // iterator로 변환
deque.descendingIterator(); // 역순 iterator 변환

 

 

장단점

장점 

  • 크기가 가변적이다.
  • 데이터 삽입, 삭제가 빠르다.
  • 원하는 데이터에 바로 접근이 가능하다.

단점

  • 구현이 어렵다.
  • 중간 데이터의 삽입, 삭제가 어렵다.

 

 

시간 복잡도 (Time complexity)

  • Insertion O(1)
  • Deletion O(1)
  • Search O(1)
728x90

'CS > Data Structure' 카테고리의 다른 글

트리 (Tree)  (0) 2022.12.15
큐 (Queue)  (0) 2022.07.25
스택 (Stack)  (0) 2022.07.23
728x90

큐는 스택과 함께 가장 많이 볼 수 있는 선형 자료구조이다. 스택과 반대로 선입선출이다. 즉, FIFO(First in First Out) 혹은 LILO(Last In Last Out)구조이다. Queue는 사전적으로 ‘줄을 서서 기다리다’라는 의미를 가진다. 매표소에서 먼저 줄을 선 사람이 먼저 표를 사는 것과 같은 논리이다. 큐의 데이터는 맨 뒤로만 들어와서 맨 앞으로만 나갈 수 있다.

목차

큐 (Queue) 란 ?

 

 


큐 (Queue) 란?

큐는 스택과 함께 가장 많이 볼 수 있는 선형 자료구조이다. 스택과 반대로 선입선출이다. 즉, FIFO(First in First Out) 혹은 LILO(Last In Last Out)구조이다. Queue는 사전적으로 ‘줄을 서서 기다리다’라는 의미를 가진다. 매표소에서 먼저 줄을 선 사람이 먼저 표를 사는 것과 같은 논리이다. 큐의 데이터는 맨 뒤로만 들어와서 맨 앞으로만 나갈 수 있다.

 

Enqueue와 Dequeue

  • Enqueue : 큐 맨 뒤에 데이터 추가
  • Dequeue : 큐 맨 앞의 데이터 삭제
  • peek : front에 위치한 데이터 조회
  • front : 큐 맨 앞의 위치(인덱스)
  • rear : 큐 맨 뒤의 위치(인덱스)

 

큐의 사용

데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 사용한다.

보통 컴퓨터 버퍼에서 주로 사용한다.

동시다발적으로 입력이 들어오면 대기열을 만들어 순차적으로 처리하는 것이다.

다음은 큐를 사용하는 사례이다.

  • 프린트 출력 처리
  • 프로세스 관리
  • CPU 스케줄링, 디스크 스케줄링
  • 그래프의 넓이 우선 탐색 (BFS)에서 사용
  • 서로 다른 스레드 혹은 프로세스 사이에서 자료를 주고 받을 때 자료를 일시적으로 저장 (비동기 전송) (ex) IO 버퍼)

 

Overflow와 Underflow

  • Queue Overflow : 가득 찬 큐에 데이터를 추가하려고 할 때
  • Queue Underflow : 빈 큐에서 데이터를 꺼내려고(삭제) 할 때

 

Java class ‘Queue’

// Queue 선언, Linkedlist 사용
Queue<E> queue = new LinkedList<>();

// 값 추가
queue.add(추가할 값); // 삽입 성공 시 true, 여유 공간이 없어 삽입 실패 시 IllegalStateException 발생
queue.offer(추가할 값);

// 값 꺼내기 (삭제)
queue.poll(); // 맨 앞의 값 반환 후 제거, 큐가 비어있으면 null 반환
queue.remove(); // 맨 앞의 값 제거
queue.clear(); // 초기화

// 맨 앞의 값 출력
queue.peek();

// 모든 값 출력 (Iterator 클래스 사용)
Iterater iter = queue.iterator();
while (iter.hasNext()) {
	System.out.println(iter.next());
}

// 크기 구하기
queue.size();

// 비어있는지 확인 후 boolean 타입으로 반환
queue.isEmpty();

 

큐 구현 방법

스택과 마찬가지로 배열 혹은 연결리스트를 이용하여 구현할 수 있다.

 

큐 종류

1. 선형 큐 (Linear Queue)

기본적인 큐의 형태로써 막대 모양으로 된 큐이다.

 

선형 큐는 문제점이 있다.

선형 큐에서 삽입(Enqueue), 삭제(Dequeue)를 계속 반복하다 보면 Rear가 맨 마지막 인덱스 ‘5’를 가리키고, 앞에는 비어 있을 수 있지만 이를 꽉 찼다고 인식한다. 이는 데이터 삭제 시 한 칸 앞으로 이동하지 않기 때문이다.

  • 선형 큐 문제점
    • 배열 구현 시 크기가 제한되어 있다.
    • 빈 공간을 사용하려면 모든 자료를 꺼내거나 자료를 한 칸씩 옮겨야 한다. (지연시간 발생)
    • Enqueue, Dequeue 작업이 계속적으로 일어나면 큐가 비어있어도 데이터 추가가 불가능하다. (Overflow 발생)

 

2. 원형 큐 (Circular Queue)

선형 큐의 문제점을 보완한 것이다. 원형 큐는 1차원 배열 형태의 큐를 원형으로 구성하여 배열의 처음과 끝을 연결한다. 환형 큐라고도 한다. 데이터 추가 시 Rear가 한 칸 움직이고, 데이터 삭제 시 Front가 한 칸 움직인다.

 

시간 복잡도 (Time complexity)

  • Insertion O(1)
  • Deletion O(1)
  • Search O(n)
728x90

'CS > Data Structure' 카테고리의 다른 글

트리 (Tree)  (0) 2022.12.15
덱 (Deque)  (0) 2022.07.28
스택 (Stack)  (0) 2022.07.23
728x90

물건을 쌓아 올리듯이 데이터를 쌓는 자료구조로, 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 자료구조(Linear Data Structur)이다. ‘Pushdown list’라 부르기도 한다.

목차

스택 (Stack) 이란?

 

 


스택 (Stack) 이란 ?

물건을 쌓아 올리듯이 데이터를 쌓는 자료구조로,

한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 자료구조(Linear Data Structur)이다.

‘Pushdown list’라 부르기도 한다.

 

자료를 넣는 것을 Push 라고 하고, 꺼내는 것을 Pop 이라고 한다.

꺼내지는 자료는 가장 최근에 Push한 자료부터 나오게 된다.

평소에 사용하는 ‘뒤로가기’를 생각하면 이해가 쉽다.

뒤로가기를 누르면 가장 최근에 방문한 사이트를 보여주는 것 말이다.

제일 마지막에 넣은 값이 먼저 나오는 것을 LIFO(Last in First out) 혹은 FILO(First in Last out)구조라고 한다.

 

Push

데이터를 스택에 넣는다.

step 1 : 스택이 가득 찼는지 확인

step 2 : 스택이 가득 차면 오류 발생하고 종료

step 3 : 스택이 가득 차지 않으면 Top 증가

step 4 : Top이 가리키는 스택 위치에 데이터 추가

 

Pop

데이터를 스택에서 꺼내온다. 즉, 제거한다.

step 1 : 스택이 비어 있는지 확인

step 2 : 스택이 비어 있으면 오류 발생하고 종료

step 3 : 스택이 비어 있지 않으면 Top이 가리키는 데이터 제거

step 4 : Top 값 감소

step 5 : 성공을 반환

 

스택의 사용

스택은 직전의 데이터를 빠르게 가져올 수 있고, 균형성 검사도 가능하다.

다음은 스택을 사용하는 사례이다.

  • 자바 Stack 메모리
  • 재귀 알고리즘
  • Backtracking
  • 웹 브라우저 방문 기록, 뒤로 가기
  • 실행 취소 (undo)
  • 역순 문자열 만들기
  • 그래프의 깊이 우선 탐색 (DFS)

 

Overflow와 Underflow

Stack Overflow : 스택이 완전히 꽉 찼을 때

Stack Underflow : 스택이 완전히 비어 있을 때

 

Java class ‘ Stack ’

// Stack 선언
Stack<E> stack = new Stack<>();

// 값 추가
stack.push(추가할 값);

// 값 꺼내기 (삭제)
stack.pop();

// 전체 값 삭제 (초기화)
stack.clear(); 

// 가장 상단의 값 출력
stack.peek();

// 비어있는지 check (비어있으면 true)
stack.empty();

// 1이 있는지 check (있으면 true)
stack.contains(1);

 

스택 구현 방법

1. 배열 사용

  • 장점 : 구현하기 쉽다.
  • 단점 : 크기가 동적이 아니다. 런타임 시 필요에 따라 늘어나거나 줄어들지 않는다.

 

2. 연결 리스트 사용

  • 장점 : 크기가 동적이다. 필요에 따라 크기가 확장되거나 축소될 수 있다.
  • 단점 : 포인터를 위한 추가 메모리 공간이 필요하다.

 

시간 복잡도 (Time complexity)

  • Insertion O(1)
  • Deletion O(1)
  • Search O(n)

 

삽입(push), 삭제(pop)는 항상 Top에서만 일어나기 때문에 O(1) 시간이 걸린다.

하지만 특정 데이터를 찾을 때에는 특정 데이터를 찾을 때까지 수행하기 때문에 O(n)이다.

728x90

'CS > Data Structure' 카테고리의 다른 글

트리 (Tree)  (0) 2022.12.15
덱 (Deque)  (0) 2022.07.28
큐 (Queue)  (0) 2022.07.25
728x90

End point 간 신뢰성 있고, 효율적인 데이터 전송을 담당하는 계층이다. 프로토콜(TCP, UDP)로 구성되어 흐름 제어, 혼잡 제어, 오류 제어 등을 담당한다. 순차 번호 기반의 오류  제어 방식을 사용한다.

목차

  1. 전송계층
  2. TCP  
  3. UDP

 


전송계층 (Transport Layer)

End point 간 신뢰성 있고, 효율적인 데이터 전송을 담당하는 계층이다. 프로토콜(TCP, UDP)로 구성되어 흐름 제어, 혼잡 제어, 오류 제어 등을 담당한다. 순차 번호 기반의 오류  제어 방식을 사용한다.

 

전송계층이 없다면?

  • 데이터의 순차 전송이 원활 x
  • Flow (흐름 문제) : 송수신자 간의 데이터 처리 속도 차이
  • Congestion (혼잡 문제) : 네트워크의 데이터 처리 속도 

 


TCP (Transmission Control Protocol)

  • 클라이언트와 서버가 연결된 상태에서 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
  • 일반적이고 대중적인 방식
  • 신뢰성이 높고 속도가 느림
  • 연결 지향 : 상대가 데이터를 받았는지 확인하면서 통신하는 방식
  • 데이터 순차 전송을 보장
  • 패킷의 손실, 중복, 순서변경이 없음을 보장
  • 흐름 제어, 혼잡 제어, 오류 감지
    • Flow Control (흐름 제어): 송신 및 수신 속도를 일치시킴
    • Congestion Control (혼잡 제어): 네트워크 혼잡시 데이터 전송 속도를 강제로 줄임
    • Error Detection (오류 감지)

 

Segment : TCP 프로토콜의 PDU

* PDU : Protocol Data Unit 각 계층에서 헤더와 데이터를 합친 부분을 말한다. 계층마다 부르는 이름이 다르고, 3계층인 네트워크 계층 PDU는 패킷(Packet)이라고 부른다.

전송 계층에서는 세션 계층에서 전달된 데이터를 받아 실질적인 전송을 위해 일정 크기로 나눈다. 이렇게 나누어진 데이터에는 출발지 포트(보낸 이), 목적지 포트(받는 이), 순서 번호, 오류 검출 등이 헤더로 붙게 되는데 이것을 세그먼트라고 부른다. 세그먼트는 전송 계층의 TCP 프로토클이 응용 계층의 데이터 단위인 메시지를 받아 작은 조각으로 분할한 데이터 단위이다. 즉, TCP 프로토콜에 따라 분할된 데이터에 TCP 헤더가 붙어 캡슐화된 전송 계층의 패킷이 세그먼트이다. 이 세그먼트는 인터넷 계층으로 전송된다.

 

TCP 헤더

출처 : https://en.wikipedia.org/wiki/Transmission_Control_Protocol

SYN : TCP가 Connection을 연결할 때 쓰는 플래그 비트

FIN : Connecion 연결 후 끊어낼 때 쓰는 플래그 비트

ACK : 데이터 전송을 받는 사람이 다시 전송할 때 제어하는 플래그 비트



 

TCP의 3 way-handshake (Connection 연결)

[STEP 1]

SYN 비트를 1로 설정해 패킷 송신

A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.

 

[STEP 2]  

SYN, ACK 비트를 1로 설정해 패킷 송신

B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.

 

[STEP 3]

ACK 비트를 1로 설정해 패킷 송신

A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다. 

 

 

 

TCP의 데이터 전송 방식

1. Client가 패킷 송신

2. Server에서 ACK 송신

3. ACK를 수신하지 못하면 재전송

 

 

TCP의 4 way-handshake (Connection close)

[STEP 1]

데이터를 전부 송신한 Client가 FIN 송신

클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.


[STEP 2] 

Server가 ACK 송신, Server에서 남은 패킷 송신 (일정 시간 대기)

서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다. 

 

[STEP 3]

Server가 FIN 송신

서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다. 

 

[STEP 4]

Client가 ACK 송신

클라이언트는 확인했다는 메시지를 보낸다.

 

만약 Server에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN패킷보다 늦게 도착하는 상황"이 발생한다면 어떻게 될까? 

 

Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것이다. 

이러한 현상에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT" 라고 한다.

 

 

 

TCP 상태도

 

TCP의 문제점

  • 매번 Connection을 연결해서 시간 손실 발생 (3 way-handshake)
  • 패킷을 조금만 손실해도 재전송

 


UDP (User Datagram Protocol)

  • TCP보다 신뢰성이 낮지만 전송 속도가 빠른 프로토콜
  • 신뢰성이나 정확성보다는 효율을 중시
  • 비연결 지향: 상대가 데이터를 받았는지 확인하지 않고 일방적으로 통신하는 방식
  • 데이터 순서를 보장 x
  • Error Detection (오류 감지)만 있음
  • 비교적 데이터의 신뢰성이 중요하지 않고 빠른 처리가 필요할 때 사용 (ex) 실시간 스트리밍)

 

User Datagram : UDP 프로토콜의 PDU 

UDP Header

출처 : https://en.wikipedia.org/wiki/User_Datagram_Protocol

TCP Header처럼 복잡하지가 않다. TCP처럼 전송을 위해 포트 번호가 있고, 에러 검출을 위한 Checksum이 있다.

 

 

 

UDP의 데이터 전송 방식

1. Client가 패킷 송신

Connection이 없기 때문에 확인도 안하고 그저  전송하기 위해 열어두기만 한다.

 

 

 

UDP의 문제점

  • 데이터의 신뢰성이 없다.
  • 의미있는 서버를 구축하기위해서는 일일이 패킷을 관리해주어야 한다.

<출처 및 참고자료>

 

Network | 전송 계층 (TCP, UDP)

OSI_Model종단 간(End-To-End) 통신을 다루는 계층으로 종단 간 신뢰성 있고 효율적인 데이터를 전송한다.상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다.프로토콜(TCP, UDP)

velog.io

 

[ 네트워크 쉽게 이해하기 22편 ] TCP 3 Way-Handshake & 4 Way-Handshake

우선  TCP의 3-way Handshaking 에 대하여 알아보겠습니다. * TCP 3-way Handshake 란? TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다. TCP 3 Way Handshake..

mindnet.tistory.com

 

쉽게 이해하는 네트워크 17. TCP 프로토콜의 기능 및 특징 - 패킷 분할과 연결형 통신

TCP 프로토콜의 기능, 특징 - 세그먼트, 연결형 통신 TCP 프로토콜의 기능과 특징 전송 계층의 대표적인 프로토콜인 TCP는 신뢰할 수 있고 정확한 데이터를 전달하기 위해 연결형 통신을 사용하는

better-together.tistory.com

 

TCP의 헤더에는 어떤 정보들이 담겨있는걸까?

저번에 HTTP/3는 왜 UDP를 선택한 것일까? 포스팅을 진행하며 TCP에 대해 간단한 언급을 했었지만, 해당 포스팅에서는 기존의 HTTP에서 사용하던 TCP에 어떤 문제가 있었는지에 집중해서 이야기했었

evan-moon.github.io

https://en.wikipedia.org/wiki/TransmissionControlProtocol

 

728x90

+ Recent posts