본문 바로가기

전체 글86

Network layer :: 2. 라우터 내부에는 무엇이 있을까? 자, 앞부분에서 네트워크 레이어의 근본적인 역할은 바로 송신 호스트에서 수신 호스트로 패킷을 전달하는거야. 이 역할을 수행하기 위해 두가지 기능이 있는데, 그게 바로 포워딩과 라우팅이라고 했어. 자 라우터에 패킷이 도착 했어. 그러면 라우터는 패킷의 IP 헤더를 보고 어디로 내 보낼지 결정할거야. 그러면 헤더를 보고 어떻게 결정을 할까? IP 헤더에는 목적지 IP 주소에 해당하는 정보가 담겨 있어, 이 목적지 IP 주소와, 라우터가 가지고있는 forwarding table을 비교해서 Longest Prefix Match를 통해서 보내. 위의 표처럼 생긴게 포워딩 테이블이야. 그냥 가장 길게 매칭되는 곳으로 보내는거지 예를 들어 11001000 00010111 00010100 11000111이 목적지 IP.. 2020. 6. 11.
Network layer :: 1. 개요 정리 이번에는 네트워크 레이어의 개요를 살펴볼거야. 자 먼저, 네트워크 레이어의 근본적인 역할은 바로 송신 호스트에서 수신 호스트로 패킷을 전달하는거야. 이 역할을 수행하기 위해 두가지 기능이 있는데, 그게 바로 포워딩과 라우팅이야. 자. 포워딩(Forwading)은 그냥 단순하게, 인풋으로 들어온 패킷을 아웃풋으로 내보내는 역할을 해. 그러면 들어온건 그렇다 치고, 어떻게 적절한 아웃풋으로 내보낼까? 이게 중요하거든 그래서 필요한게 라우팅(Routing)이야. 라우팅은 목적지까지 가는데 어느 경로로 가는게 가장 좋은지 결정하는 역할을 해. 이걸 책에서는 포워딩은 하드웨어에서 이루어지고, 교차로를 지나는 과정이고 라우팅은 소프트웨어에서 이루어지고, 네비게이션 역할이다. 이런 식으로 말을하는데, 사실 잘 안와닿.. 2020. 6. 5.
Transport layor - 4. TCP Congestion control 자, 예전에 TCP가 하는 일 중에는 congestion control이 있다 그랬어 Congestion이 뭘까? 해석하면 혼잡이야 혼잡 제어 알고리즘이거든 TCP의 보내는 쪽은, 윈도우를 가지고 있어서, 윈도우가 허락하는 만큼 데이터를 연속으로 보낼 수 있다 그랬었는데, 그러면 "이 윈도우의 크기를 어떻게 결정할건가?"에 대한게 이번 주제의 핵심이야. 이걸 알아보기 위해서 옛날 버전의 TCP를 살펴볼거야. 자 보면 y축은 TCP 보내는쪽의 Congestion window size라고 되어있어, x축은 시간이야 그래프를 따라가다보면 점점점 window의 크기를 늘리다가 손실이 발생하는 순간 반으로 감소시켜서 보내 이런 매커니즘을 AIMD라고 불러, Additive Increase Multiplicativ.. 2020. 5. 9.
Transport layor - 3. TCP fast retransmit TCP는 앞에서 말했지만, 세그먼트를 보내고 나서 일정 시간이 지나도 ACK가 안오면 재전송을 한다고 했었어 그러면 한번 생각해보자. 그림을 보면 두번째 세그먼트가 도착을 못했어, 그런데 1,3,4,5는 도착했거든, 1번을 받으면 1번 세그먼트의 ACK인 100으로 피드백 해줄거야 어? 근데 왜 ACK 100일까? 92번 seq인데 그럼 92가 되어야 하는게아냐? 라고 생각 할 수 있는데, TCP는 앞에서 했던거랑 조금 다른게, ACK 100의 의미는 "나 99번까진 잘 받았는데, 100번을 기다리고있을게"라는 의미야. 아무튼, 2번이 도착못했는데 3,4,5번이 도착했어, 그러면 받는 쪽 입장에서는, "어? 아니 나 100번 기다리고있다니까? X3"을 반복하는거야. 그러면 타임 아웃이 되지 않았는데도, .. 2020. 5. 8.
Transport layor - 2.1 Pipelining, Go Back N, Selective Repeat Rdt 3.0에서는 세그먼트 하나 보내고, 그에 대한 응답으로 ACK를 받고, 만약에 ACk가 오지 않으면 타이머가 자동으로 오버되면서 재전송하고, 이런 매커니즘을 보였어 근데 이게 세그먼트가 한두개도 아닐텐데, 언제 보내고 받고하고 있어? 너무 비효울적이라는 생각 들지? 그래서 나온 개념이 Pipelining이야. 이건 뭐냐면, 그냥 ACK가 오지 않아도, 네트워크 상황이 허락하는 만큼 그냥 연달아서 보내고 그에 대한 ACK를 각각 받는거지 이 매커니즘에는 두 가지 방법이 있는데 그게 바로 Go Back N이랑, Selective Repeat 방법이야. 간단하게 차이점을 말하면, 보내는 쪽에서 재전송을 할 때, 묶음으로 보낼지 못받은것만 보낼지 하는거에 대한 차이야 둘 다 공통점은 윈도우가 허락하는 만.. 2020. 5. 7.
Transport layor - 1.3 개요 // 컴퓨터 네트워크 자 여기서부터는 잠깐 Reliable data를 어떻게 전송할지 한번 볼거야. Transport layor에서는 이걸 rdt protocol로 해결해 이게 막 rdt 1.0부터시작해서 2.0 2.1 2.2 ...3.0 하면서 버전 업 하면서 지금까지 왔대. 근데 깊게 들어가면 머리아프니까 맨 처음 시작인 1.0과 3.0만 살펴볼거야. 맨 처음은 당연히 RDT 1.0이야. 아 RDT는 Reliable Data Transfer의 약자야 1.0에서는 한가지 상황을 가정하고 가는데 바로 네트워크 환경에서 모든 것이 완벽하게 처리 된다고 가정해. 이게 무슨말이냐면, 보낸 데이터가 망가지지도 않고, 잃어버리지도 않는 경우야. 그러면 Transport layor에서는 할게 아~무것도 없어 그냥 보내고 받기만 하면 되.. 2020. 5. 6.
Transport layor - 1.2 개요 // 컴퓨터 네트워크 자, 나머지 개념들을 정리하기 전에, 먼저 Socket이라는 개념을 살펴보고 가자. 내가 1.1 개요에서 transport layor는 application의 메세지를 전송해준다 그랬잖아. 그러면 application에서 메세지를 전송해 달라고 요청을 해야겠지? 카카오톡 보낼 때 생각해 보자. 너네 카카오톡 전송할 때, 그냥 전송 버튼만 누르지, transport layor한테 전달하고 막 그런거 안하잖아? 왜 그러냐면 transport layor는 기본적으로 운영체제에서 구현이 되어있어. applcation과 운영체제(OS)는 분리가 되어있어. 이 분리되어 있는 둘 사이를 연결시켜주는게 바로 Socket이야. 쉽게 말하면 일종의 연결 통로야. 자, 또 설명해야 할 게 있는데, 여기서 멀티플렉서(MUX).. 2020. 5. 5.
Transport layor - 1.1 개요 // 컴퓨터 네트워크 Transport layor는 말 그대로 전송하기 위한 층이야. 아래 그림처럼. 자. 그렇다면 뭘 전송할까? Application layor에서 온 메세지를 전송하는거지. 그럼 어디서 어디로 전송 해? End system 에서 End system 사이를 전송을 하는거야. 여기서 하나 알아두고 가야할 점은, 이 층에서는 Logical Communication을 담당해. 무슨말이냐면, 논리적인거야, 실제로 이 메세지를 직접 전달하는건 아니지만, 논리적으로 잘 배달이 되었나 안되었나 검사하는거지. Application은 자기가 보내고 싶은 만큼 메세지를 보낼거야. 카카오톡으로 예를 들면, 할말 적고 이모티콘도 넣고, 파일도 보낼 수 있고, 동영상도 보낼 수 있는거지 그럼 이렇게 보내달라고 요청이 오면, Tra.. 2020. 5. 4.
[백준 알고리즘/python] 백준 2798번 블랙잭, 파이썬 백준 알고리즘 2798번 블랙잭,파이썬 이번 문제는 백준 알고리즘의 2798번 블랙잭을 파이썬으로 풀어보았다. 브루트포스에 있는 문제이다. 브루트포스는 자원이 충분하다고 가정하면 가장 무서운 알고리즘인데, 그 이유느 성공률이 100%를 자랑한다. 코드를 잘 보면 알겠지만, 그냥 경우의 수를 다 때려박는 노가다 알고리즘이다. 문제조건 #1. 첫째줄에는 카드의 개수 N과 넘지 않아야하는 수 M이 주어진다 #2. 둘째줄에는 카드의 번호가 주어진다 #3. 카드를 3장을 뽑아서 넘지 않으면서 가장 가까운 카드의 합을 출력한다. 문제 자체는 간단하다. 문제에 대한 내 생각이다 #생각1. 브루트포스는 노가다 알고리즘이니까, 카드가 3개있으니 for문을 3중으로 돌려서 다 경우의수를 다 때려 박는다. #생각2. 3장의.. 2020. 5. 1.
[백준 알고리즘/python] 백준 2775번 부녀회장이 될테야, 파이썬 백준 알고리즘 2775번 부녀회장이 될테야, 파이썬 이번 문제는 백준 알고리즘의 2775번 부녀회장이 될테야. 문제이다. 파이썬으로 풀어보았다. 문제를 대충 설명하면 아파트의 거주 조건이 A층의 B호에 살려면 A-1층에서 B호까지 있는 사람들 수의 합만큼 데려와 살아야한다. 또, 0층의 i호에는 i명의 사람이 살고 있다. 이게 이렇게 보면 뭔말인가.. 싶겠지만 대충 표로 정리하면 한 눈에 보인다. 4층 1 6 21 56 126 252 3층 1 5 15 35 70 126 2층 1 4 10 20 35 56 1층 1 3 6 10 15 21 0층 1 2 3 4 5 6 1호 2호 3호 4호 5호 6호 그러니까 예를 들어서, 빨갛게 표시 해 놓은 2층의 3호에 살려면 1층의 1호부터 3호까지있는 1 + 3 + 6 .. 2020. 4. 3.