본문 바로가기

전체 글131

Chapter 4 네트워크 계층 (The Data Plane) 4.1 Overview of Network layer - datagram transport layer에서는 segment였던 것이 network layer에서는 datagram이라고 부른다. 그래서 보내는 쪽이 segment를 datagram으로 encaptulation하고, 받는 쪽에서 segment로 바꾸어줘서 transport layer로 전달한다. Network layer의 두가지 기능 1. Forwarding (포워딩): 패킷이 라우터의 input에 도달하면 라우터는 패킷을 적절한 output으로 이동시켜야 한다. (포워딩은 data plane에 구현된 가장 보편적이고 중요한 기능) 2. Routing (라우팅): 송신자가 수신자에게 패킷을 전송할 때 네트워크 계층은 패킷 경로를 결정 해야 한다.. 2023. 6. 3.
Chapter 3 전송계층 (Transport Layer) 3.1 transport-layer services 네트워크 계층이 호스트들 간의 논리적 통신이라면 전송계층은 프로세스 간의 논리적 통신이다. 3.2 multiplexing and demultiplexing Multiplexing (다중화) 다중화는 여러개의 데이터 스트림을 하나의 물리적인 통신 매체로 전송하기 위해 사용되는 기술이다. 이를 통해 대역폭을 효과적으로 활용할 수 있다. 다중화 기술에는 앞서 설명했던 시분할 다중화(TDM), 주파수 분할 다중화(FDM) 등이 있다. Demultiplexing (역다중화) 반면, 역다중화는 다중화된 데이터를 각각의 연결로 분리하여 처리 하는 기술이다. 역다중화를 통해 수신 측에서는 하나의 물리적인 통신 매체로부터 여러 개의 데이터 스트림을 받을 수 있고 각각의.. 2023. 4. 18.
[C++] STL 스택(stack) 사용법 스택이란? 스택(Stack)은 대표적인 LIFO(Last In First Out) 구조이다. 따라서 제일 마지막에 넣은 데이터가 처음으로 빠져나오는 것을 볼 수 있다. 스택의 기본함수에는 push, pop, empty, top, swap 등이 있다. Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 쓰임 4. 그래프의 깊이 우선 탐색(DFS)에서 사용 5. 재귀적(Recursion) 함수를 호출 할 때 사용 스택 헤더 파일 stack STL을 사용하기 위해서는#include 헤더파일을 포함해야 .. 2023. 4. 13.
[CS/C++] STL 덱(Deque) 사용법 덱(Deque)이란? STL 컨테이너 라이브러리 중 하나인 Deque(Double Ended Queue) 덱은 큐(Queue)와 비슷하지만 큐와 다르게 삽입과 삭제가 앞, 뒤 양쪽으로 모두 가능하다. 덱의 삽입과 삭제는 양쪽 끝(앞, 뒤)에서 이루어진다. 크기가 가변적이다. 인덱스가 존재하기 때문에 임의의 원소에 접근이 가능하다. Deque 사용법 Deque 선언 #include // deque가 들어있는 헤더파일 deque dp; // int형 덱 선언 deque dp; // char형 덱 선언 Deque의 기타 메서드 dq.begin() : dq의 첫 번째 원소를 가리키는 iterator dq.end() : dq의 마지막 원소를 가리키는 iterator dq.front() : dq의 첫 번째 원소 d.. 2023. 4. 12.
[CS/C++] STL 큐(Queue) 사용법 Queue란? Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조이다. 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 형태를 가진다. FIFO 형태는 뜻 그대로 먼저 들어온 데이터가 가장 먼저 나가는 구조를 말한다. Queue는 C++ 표준 라이브러리(Standard Template Library)에 있는 정의 되어 있어 필요할 때마다 만들어 사용하지 않고 include 하여 사용하면 된다. Enqueue : 큐 맨 뒤에 데이터 추가 Dequeue : 큐 맨 앞쪽의 데이터 삭제 Queue의 특징 1. 먼저 들어간 자료가 먼저 나오.. 2023. 4. 11.
Chapter 2 어플리케이션 계층 (Application Layer) 2.1 네트워크 응용 프로그램의 원리 ( principles of network applications) Three-tier architecture (3 계층 아키텍처) PAD Client 쪽 Presentation: 사용자 인터페이스와 관련된 부분 Server 쪽 Application: 데이터를 가공하고 비즈니스 로직을 처리하는 역할 Data: 데이터베이스나 파일등의 저장소에 접근하여 데이터를 CRUD 역할 (create, read, update, delete) Client-server architecture client와 server 간에 데이터를 주고받는 형태이다. client는 데이터를 요청해서 받는 쪽이고, server는 데이터를 보내는 쪽이다. Server - client가 언제 데이터를 요청.. 2023. 4. 10.
BOJ(2609).cpp 유클리드 호제법 유클리드 알고리즘(Euclidean algorithm)은 2개의 자연수의 최대공약수(Greatest Common Divisor) 를 구하는 알고리즘이다. 비교대상의 두 개의 자연수 a와 b에서 a를 b로 나눈 나머지를 r이라고 했을때 GCD(a, b) = GCD(b, r)과 같고 "r이 0이면 그때 b가 최대공약수이다."(단 a>b) 라는 원리를 활용한 알고리즘입니다. ex) GCD(24,18) -> GCD(18,6) -> GCD(6,0) : 최대공약수 = 6 재귀 함수 활용 int GCD(int a, int b) { if (a > b) { if (b == 0) { return a; } else { return GCD(b, a % b); } } } 반복문 활용 int GCD(int a, int b) { .. 2023. 4. 5.
Chapter 1 컴퓨터 네트워크와 인터넷 1.1 인터넷이란 무엇인가? (what is Internet?) Host ( 인터넷의 최종적인 외곽에 달려있는 컴퓨터) = end system (인터넷을 통해 데이터를 송수신 및 서비스 등 역할) = node ( 네트워크 안에 있는 장비) 통신 링크 ( 유선과 무선 형태로 데이터를 전송) 대역폭 ( 전송할 수 있는 데이터의 크기, 속도 등 기준이 되는 것) 패킷 교환 (동일한 데이터를 잘라서 전달) 라우터 ( 고성능 컴퓨터로 패킷의 경로를 결정) 프로토콜: 통신을 하기 위해서 개체 간의 서로가 약속한 규약의 집합체 1.2 네트워크의 가장자리 (network edge) 종단 시스템, 접속 네트워크, 링크 접속 네트워크 접속망이라고 생각하면 된다. end system과 다른 end system을 사이의 경로.. 2023. 4. 4.
BOJ(1009).cpp 모듈러 연산(나머지 연산) 문제를 풀다 정수형 버퍼 오버플로우(Buffer Overflow)가 발생하여 해결방법을 찾는도중 모듈러 연산(나머지 연산)이 눈에 들어왔다. 모듈러 연산은 간단하게 a mod b = ? a를 b로 나눈 나머지를 구하는 것이다. #include #include using namespace std; int main() { int T; cin >> T; for (int i = 0; i > a >> b; for (int i = 1; i 2023. 3. 28.
[C++] cin, getline 함수 # cin 에 포함되어 있다. 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다. 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들인다. 개행 문자를 입력 버퍼에 남겨둔다. // 정수 int n; cin >> n; // 문자열 string str; cin >> str; 위와 같이 사용이 가능하다. 이때 hello 같은 문자열이라면 문제 없이 입력을 받지만 Hello World!와 같이 띄어쓰기가 포함된 문장이라면 Hello 까지 밖에 입력이 되지 않을 것이다. cin의 >> 연산자에서는 공백문자에서 입력을 끊기 때문인데, 이러한 문제를 해결하기 위해서 getline()이라는 함수를 사용한다. # getline() getline()함수는 두 가지가 존재하는데 각가 다른 라이브러리에 존재한다. .. 2023. 2. 20.