프로토콜 레이어 네트워크는 호스트, 라우터, 많은 링크들, 애플리케이션 등의 많은 부분들로 이루어져 있어 복잡하다. 그렇기 때문에, 이들끼리의 원활한 통신을 위해서면 "규칙"이 필요하다. 그래서 이들 간의 규칙을 프로토콜이라 하고 이 프로토콜은 아주 복잡하게 구성된다. 그래서 복잡하게 구동하는 것을 관리하기 쉽게 만든 것을 프로토콜 계층(Protocol Layer)이라고 한다. 각 프로토콜 계층에 이후 자세하게 알아볼 예정이기 때문에 간단하게만 알아보자. 1. Application Layer 응용 계층이라고도 하며 우리가 접하는 많은 응용 프로그램이 이곳에 속한다. 도메인 네임서버(DNS)가 이 계층에 속하고, 이 계층은 여러 종단 시스템에 분산되어 있어서 한 종단 시스템의 애플리케이션이 다른 종단 시스..
패킷 지연과 손실이 발생하는 과정 라우터 버퍼 안에 존재하는 패킷 큐에서 패킷은 자기 차례를 기다린다. 그러나, 라우터에 들어오는 패킷의 속도보다 나가는 패킷의 속도가 느린 경우에, 용량을 초과하면서 패킷 손실이 발생한다. 이때 패킷 지연은 조금 복잡한데, 4가지 지연 시간이 있다. 패킷이 전송될 때 발생되는 총 지연인 Nodal delay = Processing delay + Queueing delay + Transmission delay + Propagation delay 이다. 각각의 지연에 대해서 알아보자. 1. Processing Delay Nodal processing 과정은 라우터 내에서 패킷이 전달하는데, 이 때 발생하는 지연을 말한다. 이 과정에서 에러를 확인하고 패킷이 어디로 나가야 하..
1. 문제 https://www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 2. 문제 접근 문제를 이해하다보니 BFS로 풀면 되겠다고 답이 나왔다. 그래서, BFS 코드를 구현했더니 틀렸다. 문제를 제대로 안봤으니까. 결론적으로 1부터 5까지 각 숫자에 도달할 때까지 거리를 구하면 80%는 해결이다. 예시의 그래프는 아래와 같이 표현할 수 있다. 1부터 예시를 들면, 1은 2까지 [1-3-2]로 2단계, 3까지 ..
1. 문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 2. 문제 접근 입력 받은 N 값을 어떻게 하면 최대한 적은 봉지로 나눌 수 있는지 생각해야 한다. 초기에는 N값을 받고 5로 나누고, 5로 나눈 나머지 값을 다시 3으로 나눈 나머지가 0이면, (5로 나눈 몫 + 3으로 나눈 몫) 으로 결과값을 내려고 했다. 그러나, 이런 방식은 오래 걸리고 복잡하다. 그래서 결론적으로 시도했던 방법은, Dynamic Programming을 이용했다. DP[] ..
Network Core 네트워크 엣지에 대해 알아봤으므로 네트워크 코어 영역에 대해 알아볼 것이다. 네트워크 코어 영역에 네트워크를 통해서 어떻게 데이터가 교환되는지에 대한 근본적인 질문을 던질 수 있다. 이를 설명할 수 있는 것이 바로 회선 교환(Circuit Switching)과 패킷 교환(Packet Switching)이다. Packet Switching 종단 시스템들은 서로 메세지를 교환한다. 이때, 패킷 교환은 한 컴퓨터에서 다른 컴퓨터로 데이터를 전송할 때 여러 개의 라우터를 거치고 거쳐 전송되는데, 이 때 데이터를 패킷 단위로 쪼개어 전송하는 방식이다. 이는 한 링크에서 링크로 보낼 때 일단 모든 패킷을 저장하고 버퍼에 저장되어 있는 패킷들을 하나씩 꺼내어 보내는 Store-and-Forwa..
1. 인터넷이란? 인터넷에 대해 구체적으로 정의하기는 어렵지만, 네트워크 관점에서는 네트워크들의 네트워크, 즉 ISP들이 이루고 있는 네트워크들이 더 큰 네트워크를 이루고 있는 것이라 할 수 있다. 주요 구성요소는 4가지가 존재한다. - 호스트(Host) = 종단 시스템(end system), 인터넷의 가장 자리에서 동작하는 네트워크 앱, 우리가 주로 사용하는 앱을 말한다. - 패킷 스위치(Packet Switches) = 호스트와 다른 호스트들과 통신을 가능하게 하는 라우터를 말한다. - 통신 링크(Communication links) = 유선(Fiber, Copper)과 무선(Radio, Satellite)이며 라우터와 라우터를 연결하는 것이다. - 네트워크 = 장치, 라우터, 링크의 모임이다. 2...
주제 세부 내용 Virtualization CPU 가상화 메모리 가상화 Concurrency Thread Lock Condition Variable Semaphore Deadlock Persistence Limited Direct Execution CPU를 가상화해야 하는 이유를 이전 글에서 알 수 있었다. 여러 개의 프로그램을 작동시키기 위해서 CPU 가상화가 필요했는데, 이는 Time Sharing 기법으로 실행할 수 있다. 그러나, 이러한 방법에 문제점이 있다. 첫 번째로 Performance이다. 시스템에서 가상화를 수행할 때 추가적인 오버헤드 없이 가상화를 실행하는 방법을 생각해야 한다. 두 번재는 Control이다. CPU에 대한 제어를 유지하면서 프로세스를 효율적으로 실행시키는 방법을 생각해..
시작하기 전에 앞서, 이 책에서는 3가지를 다루고 있으며 요약하면 아래와 같다. 주제 세부 내용 Virtualization CPU 가상화 메모리 가상화 Concurrency Thread Lock Condition Variable Semaphore Deadlock Persistence 프로세스(Process) 프로세스(process)란 간단하게 말해 현재 실행 중인 프로그램이다. 그렇다면, 프로그램(program)은 디스크에 저장되어 실행가능한 형태로 존재하는 것을 말한다. 컴퓨터는 이러한 프로그램을 메모리에 load하고 CPU에서 처리한다. Multi Processes OS는 여러 개의 프로그램을 동시에 실행할 수 있도록 CPU를 가상화하는 방법을 사용한다. 실제로 물리적인 CPU는 하나지만, 마치 여러..
2중 for문을 사용해서 sum을 점점 늘려가면서 n과 같은지 확인한다. 처음에는 vector에 1~n까지의 번호를 받아서 인덱스 1부터 n까지 검색해서 더하기를 했는데 굳이 vector을 사용하지 않고도 쉽게 낼 수 있는 코드로 수정했다. #include #include using namespace std; int solution(int n) { int answer = 1; for (int i=1;i
이번 문제는 DFS로 쉽게 풀 수 있는 문제이다. visited[][] 배열에 방문 여부를 기록하고, 탐색하면서 방문하지 않은 다른 네트워크를 탐색한다. DFS를 실행한 횟수가 네트워크의 수가 되므로, DFS 실행할 때마다 answer 값을 증가시켜준다. #include #include using namespace std; int visited[201]={0,}; void dfs(int x, int n, vector computers); int solution(int n, vector computers) { int answer = 0; for (int i = 0;i