Lectures/CN/2018

From MCLab
Jump to: navigation, search

Contents

컴퓨터네트워크및실습 Class Overview

인터넷을 중심으로 컴퓨터를 네트워킹하고 유용한 정보통신서비스를 제공하여 주는 기본 구조와 인터네트워킹 기술, 프로토콜을 학습하고 내재한 기본 원리를 시스템 관점에서 분석함으로써 네트워크의 실체와 응용 능력을 배양함과 아울러 공학적 측면에서 설계할 수 있는 이론과 분석 능력을 키운다.

화 7 8 목 1 2 (5213)
실습은 과실습실(5301호)에서 하는 경우도 있음
Textbook
Jame F. Kurose, Keith W. Ross, Computer Networking - A Top-Down Approach Featuring the Internet, 7th Ed., Addison Wesley Longman, 2017.
번역판: 최종원, 강현국, 신용태 옮김, 컴퓨터네트워킹 - 하향식 접근, 7판, Pearson Education Korea, 2017.
보조 web site [1]
References
Ying-Dar Lin, Ren-Hung Hwang, and Fred Baker, Computer Networks - An Open Source Approach, McGraw-Hill, 2012.
Evaluation
시험 3회 예정(75%), 실습 보고서/Homeworks/Assignments(25%)
결석 -0.2%p/회, 지각 -0.1%p/회
과제물의 제출
PDF로 변환하여 자정(24:00) 이전에 E-class에 제출한다. 단, 조를 구성해서 수행하는 경우 대표 한 사람만 제출한다.
Teaching Assistant
황재동, mailto:jdhwang@hufs.ac.kr, 010-2974-0661. 304-1호실
김경률, mailto:kyoung831@naver.com, 010-9147-2430, 401호

준비사항

PC/Notebook

301호 학과 실험실의 PC 중 하나를 선택하여 학기 끝날 때 까지 이용하도록 함(다만, 노트북이 있는 학생은 실습시간에 지참하길 권장함). 학과 PC를 booting할 때 SBC server로 booting하지 말고, local에서 부팅하고 설치해야 여러분 개인이 사용할 소프트웨어가 설치된다.

Python Programming

각자 Python language를 습득하여 프로그래밍 숙제할 수 있도록 준비한다.

공지사항

과제물의 제출 요령과 기한

Lab Report
매 실습시간 마다 실습한 결과를 당일 자정까지 제출한다. (당일 자정까지 지연 제출하면 10% 감점)
Homeworks
복습 - 연습문제 풀기 등
Programming Assignments
지정된 마감일 자정까지 제출한다. (지연제출 가능. 지연 제출시 1일 10% 감점)
Cheating은 허용되지 않는다. 
토론은 가능하지만, 다른 학생의 결과를 본 후 수행하거나, 복제하거나, 복제 후 일부 편집하는 일은 이유 여하를 막론하고 용인되지 않는다. 학생들은 제출한 과제물에 대해 조교가 질문하면 답변에 응해야 하고, 충분히 설명할 수 있어야 한다. 한 번의 잘못으로 과목을 이수하지 못하는 불행을 초래하지 않기 바란다.
과제물 제출처
e-class의 과제란에 제출하되 결과물은 첨부파일로 upload한다.
첨부파일명은 <과제물 번호>-<학번> 으로 하고 확장자는 '.pdf' 또는 '.zip' (파일이 여러개일 때)
예) AS-1-201402222.pdf

강의노트

실습

Lab-1 수강에 필요한 Software 설치 - DIY

과제를 수행할 때 사용할 PC(노트북, 집/기숙사 PC, 또는 학과 실험실 PC)에 아래 소프트웨어를 설치한다.

  1. Google Chrome browser 설치 - https://www.google.com/chrome/browser/desktop/index.html
  2. WireShark 설치 - http://www.wireshark.org/download.html
    • 주의: Winpcap도 반드시 설치해야 함. (설치 중에 box를 check할 것)
  3. Python 3 설치 (Anaconda도 무방하다. 단, Python 3 기반일 것)
    • python 3 interpreter가 install 되어 있는지, 어떤 version이 설치되어 있는지 먼저 확인하자. Version이 3.5 이상이면 새로 설치할 필요없다. 이하라면, uninstall 한다. ( 제어판 >> 프로그램 제거 >> Python x.y.z 선택하여 지운다.) 명령창에서
      python --version
    • Python Download page로 가서 자신의 PC와 맞는 Windows x86[-64] MSI Installer를 download하여 설치한다. (idle이라는 기본 Python IDE도 함께 설치된다.)
      Add Python 3.x to PATH를 마킹해서 명령창에서 python interpreter를 불러쓸 수 있게 하자.
      다른 사람과 같이 사용하는 PC라면, 자기 계정에서만 쓸 수 있게 Install laucher for all users (recommended) 마킹을 없애자.
    • 설치 확인하기 위해 명령창에서
      python
      >> quit()
  4. PyCharm IDE 설치
Report
설치 완료했음을 보이는 screen shot을 떠서 하나의 실습 report 파일(PDF 포맷)에 포함시켜 e-class에 제출하라.

Lab-2 WWW and HTTP

Sample Web Page http://mclab.hufs.ac.kr/test/index.html

Chrome Browser

  1. '개발자 도구' 창을 열고 url을 입력해 보자.
  2. 이 창에서 Network 탭을 들여다 보자. Base html 파일은 무엇이고 하나의 page를 rendering하기 위해서는 추가로 얼마나 많은 object들을 가져와야 하는가?
  3. Base html 파일을 선택하고 'Source'를 탭하여 html source를 들여다 보자.

wget

  1. PowerShell을 실행시켜 아래의 명령을 입력하자.
    wget -d http://mclab.hufs.ac.kr/test/index.html
  2. request message와 response message를 살펴 보자.
  3. header들은 어떻게 정의 되었나? Persistent connection 인가?
  4. 가져온 object 파일의 길이를 길이를 확인해 response message에서 알아 보자.

WireShark Labs

Homeworks

HW-1 Python Exercises (9/16)

w3cresource Python Exercises에 list된 것 중 다음 연습문제에 대하여 먼저 Python Tutorial의 해당 page를 공부한 후, 연습문제를 풀라.

  1. Python Data Types - String [ 50 Exercises with Solution ]
  2. Python Data Types - List [ 71 Exercises with Solution ]
  3. Python Data Types - Tuple [ 24 Exercises with Solution ]
  4. Python Data Types - Dictionary [ 38 Exercises with Solution ]
  5. Python Data Types - Sets [ 15 Exercises with Solution ]
  6. Python Conditional statements and loops [ 44 Exercises with Solution]
  7. Python functions [ 20 Exercises with Solution ]
  8. Python Date Time [ 52 Exercises with Solution ]
  9. Python Math [ 82 Exercises with Solution ]
  10. Python File Input Output [ 17 Exercises with Solution ]
  11. Python Class [ 12 Exercises with Solution ]

여러분의 부담을 줄이기 위해 문제 중에서 1/5만 풀면 된다. 문제 번호를 n이라 할 때, 아래 expression이 True가 되는 문제만 풀면된다. (%는 정수 나누기에서 나머지를 뜻함)

n % 5 == 학번 % 5
참고
Go to editor를 클릭해서 코드를 입력하세요. 다만, 이 사이트는 Python 3 인터프리터를 사용하니 유의바람. Solution도 볼 수 있지만 스스로 풀어보고 solution과 대조해 보세요. 스스로 프로그램을 짜고나서 남이 짠 프로그램을 읽어 보면 프로그래밍 실력이 늘어요.
제출요령
주어진 문제마다 coding해서 답이 맞는지 검토하고
문제, 코드, 실행결과를 MS word나 한글을 이용하여 복사하여 붙이고 편집한 다음
한개의 pdf 파일로 변환한여 e-class 과제란에 첨부파일로 제출한다.

HW-2 1장 연습문제 풀기 (9/19)

문제 R4, R18, P6, P25, P26, P31에 답하라.

eclass에 pdf 형식으로 제출.


Assignments

AS-1 Wireshark Lab: Getting started (10/8)

Wireshark Introduction 읽으면서 Wireshark을 download 받아 설치하고 다음을 수행하라. (하나의 pdf 파일로 제출)

  • Taking Wireshark for a Test Run에 기술된 step에 따라 이용해보고 step 9의 결과 화면을 캡쳐하라.
  • What to hand in에 있는 질문에 대해 답하라.

참고

  • WireShark download [2]:
  • WireShark 사용법 [3]

AS-2 HTTP Client: Persistent, Non-Persistent, and Pipelining (10/17)

주어진 mylib module을 사용해서 다음 3가지 HTTP client를 구현하라.

  1. Non-persistent HTTP client - np_http.py
  2. Persistent HTTP client - p_http.py
  3. Persistent HTTP client with pipeling - pipe_http.py

제공되는 code

httpcli.zip: mylib.py, example.py - updated in 10/11/2018 12:00

http://mclab.hufs.ac.kr/test/index.html page를 test page로 해서 이 page를 완성하기 위해 필요한 모든 object들을 가져오는 데 걸리는 시간을 측정하라. Client들이 설치된 장소는 교내인 경우, 그리고 학교 밖의 장소 두 가지 경우에 대해 측정해보고, 결과를 분석하라.

제출물:

  • Source code (zip으로 압축)
  • 보고서 (output과 비교분석서 포함)

AS-3 GBN 프로토콜 설계 (11/14)

2인 1팀 팀 프로젝트

교재에 나와 있는 FSM은 영원히 돌아가는 명세다. 세션을 종료시키는 과정을 추가하라.

이를 위해서는 GBNsend가 FIN((m) packet을 보내면, GBN recv는 ACK(m+1)으로 응답하고, GBNsend는 이 ACK를 수신한 후에 종료해야 한다.

한편, GBNrecv 입장에서는 FIN에 대한 ACK를 feedback하고 나서도 packet들이 들어 올 수 있으므로 처리해야 한다. 무한히 기다릴 수 없으므로 ACK(m+1)을 보낸 후 일정 시간이 경과하여 TIMEOUT event가 발생할 때 종료한다.

GBN sequence diagram을 참조하고 명시된 State, Event type, Packet type에 따라 설계 명세를 작성해야 한다.

제출물
  1. State Diagram
  2. 설계한 state diagram이 잘 설계되었음을 입증하는 가능한 모든 경우에 대한 Sequence Diagram. 예를 들어, corrupt, timeout, 또는 duplicate ACK등이 수신되었을 경우의 sequence. (Session termination 과정만 그릴 것.)
  • 주의: 손으로 그리지 말 것. Diagram 그리는 free software가 많이 나와 있으니 사용하기 바람. Power Point도 무방.
  • PDF로 변환해서 제출

AS-4 GBN 프로토콜 구현 (11/19)

2인 1팀 팀프로젝트

설계한 명세에 따라 GBN 프로토콜을 구현하라. 제공되는 source에서 여러분은 gbn.py 파일에서 'your code here'란에 삽입하면 된다. 실행과 debugging을 위해 hong directory 아래에 내가 만든 gbn.pyc (compiled Python file)도 제공되어 있으니 testing과 debugging에 이용하면 되겠다.

Starter code
AS_gbn1.zip - updated in 11/15/2018 15:20
gbn.py: GBN 프로토콜 모듈. GBNsend, GBNrecv class가 있다. 이 둘을 완성하는 것이 과제이다.
packet.py: gbn.py에서 import 하는 공통 모듈
sender.py, receiver.py: GBN를 이용하는 upper layer application이다. 이 둘을 각각 main으로 실행시키면 GBN thread가 생성되고 실행된다.
한 쪽은 PyCharm으로 실행하면서 code를 고치고, 다른 한 쪽은 그냥 IDLE editor로 실행시키는 편이 편리할 것이다. PyCharm이 code 개발하기 용이하니까.
  • [주의] Seq class의 __lt__ method가 잘못되었으니 다음과 같이 수정해서 작업하세요. 내 실수! Sorry!!!

   def __lt__(self, other):
       return (self.seq > other.seq and (self.seq - other.seq) > Seq.HALF) or \
              (self.seq < other.seq and (other.seq - self.seq) < Seq.HALF)

  • [앗 착오 실수] hong directory 모듈들을 이것으로 대체하세요. Media:hong.zip - 11/17 22:24
제출요령
다음 3개의 파일을 eclass에 업로드한다.
  1. Source code: zip으로 압축
  2. GBN protocol 동작의 완벽성
    • 같은 컴퓨터에서 sender.py와 receiver.py를 text 실행시키고 결과 화면을 PDF 파일로 저장하여 제출한다.
      • 단, text line은 16줄, level=logging.INFO level로
      • console 화면을 PDF로 변환하는 방법: PyCharm에서 sender와 receiver를 각각 실행시키면, 두 개의 run 화면이 뜬다. 이 화면에서 프린트 아이콘을 눌러 프린터를 'Adobe PDF' 등을 선택해서 프린트하면 된다.
  3. 실험: GBN protocol parameter optimization
    • 서로 다른 컴퓨터에서 sender.py와 receiver를 실행시키되 가장 성능을 좋게 하는 N과 TIMEOUT_INTV을 찾는다. gbn module의 global 변수를 변경시키면 된다.
      • 단, text line은 100줄, logging.basicConfig() statement를 comment out한다.
      • GBN protocol parameter를 변경하는 방법은 제공된 source code에 나와 있다.
    • 여러번 실행시켜 본 실험 결과(statistics)들을 열거하고 가장 좋은 성능이 보이는 parameter를 도출하라
    • 왜 그런지를 분석해서 설명해 보라.
    • PDF로 작성

AS-5 TCP-like GBN (11/26)

GBNrecv의 receive buffer를 1개가 아니라 GBNsend와 같이 N개로 확장해 보자. 즉, expected sequence가 아닌 packet도 저장해 두자는 뜻이다. 이때, ACK number는 receive buffer를 찾아 보고 base에서 부터 순서에 맞는 packet의 다음 sequence 번호(즉, 첫번째 hole의 sequence 번호 또는 순서에 맞춰 꽉 차있다면 그 다음 번호)로 ACK를 생성하면 된다. Data delivery도 hole 바로 전까지 반복해서 delivery 하면 되겠다. 이를 위해 sequence로 indexing할 수 있는 PacketBuffer class가 packet.py에 추가 되었으니 활용하기 바란다.

다만, receive buffer에 저장할 DATA packet은 base, base+1, ..., base+N 까지만 유효함을 명심하자.

AS-4에서 구현한 GBNsend는 새로 수정하는 GBNrecv와도 잘 동작하도록 설계되었으니 그대로 사용하면 된다.

제출물
  1. GBNsend와 GBNrecv 설계명세를 state machine diagram (AS-3의 설계 오류를 수정하고, GBNrecv는 새로 설계)
  2. Source code (zip)
  3. 성능시험과 분석: GBNrecv를 이전 version과 TCP-like version을 교체하여 성능시험을 수행한다.
    • 시험환경: 송신, 수신은 가능한 멀리 떨어진 곳에서 실행해야함
    • 파라미터:
      1. MEAN_DELAY=0.2(default)인 경우,
      2. MEAN_DELAY=0.0인 경우 (인공적 delay가 없는 경우)
      3. MEAN_DELAY=0.0, LOSSRATE=0.0, PER=0.0 인 경우 (인위적인 delay, loss, error를 일으키지 않는 경우)

위 총 6개의 경우에 대해 실행시켜 elapse time, packet 수 등을 비교 분석하라.

Starter code
Media:AS_gbn2.zip