Lectures/CN/2015

From MCLab
Jump to: navigation, search

Contents

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

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

화 7, 8교시 (5213), 목 7, 8교시 (5213)
실습은 과실습실(5301호)에서 하는 경우도 있음
Textbook
Jame F. Kurose, Keith W. Ross, Computer Networking - A Top-Down Approach Featuring the Internet, 6th Ed., Addison Wesley Longman, 2012. 2.
번역판: 최종원, 강현국, 신용태 옮김, 컴퓨터네트워킹 - 하향식 접근, 6판, Pearson Education Korea, 2012. 11.
보조 web site [1]
References
Ying-Dar Lin, Ren-Hung Hwang, and Fred Baker, Computer Networks - An Open Source Approach, McGraw-Hill, 2012.
Evaluation
시험 4회(80%), 실습 보고서/Homeworks/Assignments(20%)
결석 -1%/회, 지각 -0.5%/회
과제물의 제출
PDF로 변환하여 자정(24:00) 이전에 E-class에 제출한다. 단, 조를 구성해서 수행하는 경우 대표 한 사람만 제출한다.
Teaching Assistant
최기봉, phone : 010-9260-4193 chnaru@naver.com, 공과대학 425호

준비사항

PC/Notebook

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

Python Programming

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

Python Programming on-line books and tutorials

공지사항

  • 9/3 실습, 301호 실험실

시험-1 (1장, 2장) 10/13

  • 1등 박배선, 2등 노시형, 3등 신지예
  • 점수분포 (100점 만점)

Python Exam 10/13

  • 1등 노시형, 공동 2등 오현경, 호동현
  • 점수분포 (50점 만점)

시험-2 (3장) 11/17

  • 장소: 301호
  • 1등 손효빈, 공동 2등 노시형, 최진우
  • 점수분포 (100점 만점)

재시험 (1, 2, 3장) 11/24

  • 11/24(화) 17:30-18:00 301호 (수업도 301호에서 진행)
  • 평가 기준
    • 최종결과 = (원시험*2 + 재시험)/3
  • 재시험-1 점수분포 (100점 만점)
    • 1등 신형록, 공동 2등 노시형, 최보민
  • 재시험-2 점수분포 (100점 만점)
    • 1등 박배선, 2등 손효빈, 3등 전승현

시험-3 (4, 5, 6장) 12/17

  • 12/17(목) 301호
  • 평가 결과

강의노트

실습

Lab-1. 갖춰야 할 Tool들 설치 (9/3)

각자 301호 실험실과 집/기숙사 등 과제를 수행할 PC에 적어도 다음의 소프트웨어를 설치하고 활용할 수 있도록 준비한다. 단, 실습 떄에 노트북을 이용할 학생은 여기에만 설치해도 좋다.

  1. WireShark Protocol Analylzer
    • WireShark download [3]:
    • WireShark 사용법 [4]
  2. Google Chrome - https://www.google.com/chrome/browser/desktop/index.html
  3. Cygwin 설치 - Linux feeling on Windows
    • POSIX API 기능을 Windows의 DLL로 구현
    • Ubuntu 등 Linux VM을 쓰면 더 좋음. (Linux에 친숙해지기 위해)
  4. Python 2.7 on Windows과 IDLE 설치
    • Download page로 가서 자신의 PC와 맞는 Windows x86[-64] MSI Installer를 download하여 설치한다. (Windows help file도 download한다.) IDLE이라는 Python IDE도 설치된다.
Report
301호 실험실 PC 또는 자신의 노트북에 WireShark, Chrome, Cygwin, Python 2.7을 모두 설치하고, 설치 완료했음을 보이는 screen shot을 떠서 하나의 실습 report 파일(PDF 포맷)에 포함시켜어 e-class에 제출하라.

Lab-2. WWW and HTTP (9/17)

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를 들여다 보자.

Form과 POST method

  1. Chrome browser에서 다음 link로 넘어가자. http://np.hufs.ac.kr/cgi-bin/account.py
  2. form tag 사이에 있는 html source와 browser 창을 비교해 보고 form을 어떻게 정의하고 있는지 알아보자.
  3. 학번 란에 시험적으로 123456을 입력하고 'Confirm' 박스를 눌러보자.
  4. 이 박스를 눌러 다음 과정을 확인해 보자.
    1. HTTP POST method로 form이 server로 전달되고,
    2. Web server는 account.py 라는 web application을 실행시키고 form에 있는 파라미터들을 전달한다. 이 프로그램은 실행 결과로서 html contents를 생성된하고 web server에 return한다. (서버 뒤에서 실행됨으로 확인할 수는 없음)
    3. Web server는 이때 생성된 html 페이지를 response message에 넣어 응답한다.

wget

  1. Cygwin 창을 열고 아래의 명령을 입력하자.
    wget -d http://mclab.hufs.ac.kr/test/index.html
  2. request message와 response message를 살펴 보자.
  3. header들은 어떻게 정의 되었나? Persistent connection 인가?
  4. 가져온 object 파일의 길이를 길이를 확인해 response message에서 알아 보자.
  5. Download된 'index.html' 파일의 byte count를 'wc' 명령으로 알아 보자. 같은가?
    wc index.html

Parsing URLs

Python urlparse module [5]

Lab-3. TCP 패킷 분석 (11/17)

WireShark을 이용한 TCP 절차와 패킷 분석

Homeworks

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

1장 복습문제 R4, R6, R21, 연습문제 P6, P7, P25-28에 답하라. PDF로 e-class에 제출할 것.

Assignments

AS-1 Python Basic Exercises (9/13까지)

w3resource에서 제공하는 Python Exercises, Practice, Solution이 있다. http://www.w3resource.com/python-exercises

여기에 가서 Python Basic의 35개의 exercise 중 홀수 번 문제를 풀고, 문제와 함께 코드와 실행결과를 하나의 pdf 파일로 만들어 e-class에 제출하라. (Solution도 볼 수 있지만 스스로 풀어보고 solution과 대조해 보세요. 그래야 프로그래밍 실력이 늘어요.)

Go to editor를 클릭해서 코드를 입력하세요. 다만, 이 사이트는 Python 3 인터프리터를 사용하니 유의바람.

Python 2와 3 차이
  • print는 Python 2에서는 statement이지만 Python 3에서는 function이다.
    • print "Hello, world!!" ==> print("Hello, world!!")
  • 기타 약간의 차이가 있으나 지금 단계에는 무시해도 좋음

주말을 Python과 함께!!

AS-2 Python Data Types, Conditional Statements, and Loops (9/20까지)

AS-1과 같은 사이트에 가서 다음에서 제시한 문제들을 풀라.

  • Python Data Types의 31 중 홀수 번 문제
  • Python Conditional statements and loops 의 9개 문제 전부
  • Python functions의 14개 문제 중 홀수 번 문제

AS-3 Python Functions, Date Time, and Classes (9/27까지)

AS-1과 같은 사이트에 가서 홀수 번 문제들을 풀라.

AS-4 Web object 가져오기 (9/30까지)

wget 명령과 같이 URL을 주면 해당되는 object를 web server에서 가져와서 local file system에 저장하는 Python program 'wget.py'을 작성하라. 입력한 URL의 path에서 마지막 부분이 저장할 파일명이 된다. urlparse 모듈의 urlparse function을 이용해도 좋다. 프로그램이 작성되면 test home page http://mclab.hufs.ac.kr/test/index.html 의 base html 파일을 가져오고, 이 속에 정의된 이미지 파일의 URL을 눈으로 확인한 후 이들을 반복입력하여 모두 가져와야 한다.

URL 입력은 다음과 같이 받아 들이고, 만일 URL이 '.' 문자이면, 종료한다.

url = raw_input('Enter URL: ')
Working source
wget.zip (zip 파일을 푸세요)
참조
wget -d <url>
request message의 header 구성을 참조하여 같은 형식으로 web server에게 보내면 된다. (Non-persistent HTTP connection 사용)
제출물
  1. Python source file
  2. Local system으로 가져온 index.html 파일을 클릭하여 browser를 띄우고 창을 캡쳐한다.

AS-5 Simple Web Server (10/5까지)

GET method만 지원하는 간단한 web server webserv.py를 만들자. 단순화를 위해 Non-persistent connection만 지원하기로 한다. 즉, web client는 wget.py와 같이 Connection: close header로 request한다고 가정한다.

  1. web page 만들기
    여러분의 PC에는 AS-4에서 다운로드 받은 html 및 이미지 object가 있을 것이다. 이들을 www/test 폴더 아래에 옮겨 놓자. 단, www는 여러분이 만든 web server의 root directory다.
  2. web server를 launch한다.
  3. web browser에서 http://127.0.0.1/test/index.html 을 입력한다. (127.0.0.1은 자기 자신을 가리키는 IP 주소이다.)
  4. AS-4에서와 같이 wget.py를 실행해 보자. 단, URL은 위와 같이 변경해야 한다.
  5. AS-4에서 만든 wget.py로 test 해보자.

여기서 web server의 파일로 삼아서 wget.py

AS-6 Build a Web Site (11/2까지)

http://www.w3schools.com 에 가서 HTML, CSS, Java script를 읽고,

http://www.w3schools.com/website/default.asp 의 Web Building Tutorial을 읽으며 Web Home에서 Web DaaS까지 따라해 보고 여러분이 작성한 최종 결과물을 제출하라. 단, web server를 먼저 설치하고 진행할 것.

Web server의 설치
APMSETUP을 활용하여 여러분의 PC 상에서 Apache2 web server, PHP, 그리고 MySQL DBMS를 install하자. HTML만으로 홈페이지를 만드는데는 Apache2 web server만 있으면 충분하다.
제출물
모든 source 파일들이 포함된 zip 파일
3가지 Browser 화면 (캡쳐하여 제출)

AS-7 Design and Implementation of rdt 3.0 Protocol

교재의 FSM diagram에 도시된 rdt 3.0 specification에 추가하여 sender와 receiver가 정상적으로 종료할 수 있도록 설계 및 구현되어야 한다. 다만, 구현의 복잡성을 줄이기 위해 upper layer는 file이라 가정해서 coding한다.

정상적으로 종료하기 위해서 rdt sender는 get_data() function으로 data를 가져올 때 EoF, 즉 data가 empty string이면 FIN이라는 control packet을 보내고, ACK를 받아야 종료되게 하자. rdt receiver는 FIN packet을 받으면 ACK packet을 연속하여 3개를 보내고 종료하도록 하자. 3개를 보내는 이유는 ACK도 손실될 수 있기 때문에 3개 중 하나라도 sender에게 도착할 가능성을 높이려는 의도다. 물론, 종료하기 전에 receiver는 성능 측정치들을 output해야 할 것이다.

제공된 source에 맞춰 아래 정의에 따라 설계 및 구현해야 한다.

  • sender FSM의 state 명칭: Wait for call, Wait for ACK, Closing
  • receiver FSM의 state 명칭: Wait
  • events: RDT_SEND, RDT_RCV, TIMEOUT
  • packet types: DATA, ACK, FIN
Python source files
source file rdt.zip: rdtlib.py rdt_sender.py rdt_receiver.py

AS-7-1 Design of rdt 3.0 (11/4까지)

SDL로 명세하여 pdf 파일로 제출하라. 제공된 source file을 참고하여 state와 event 이름과 정의된 function call 등으로 정확히 기술하자. 그러면, 구현하기 매우 쉬워질 것이다.

먼저 제공된 source들을 이해하면, 설계에 도움이 될 것이다.

AS-7-2 Implementation of rdt 3.0 (11/9까지)

설계한 것을 기본으로 주어진 source에서 FSM의 구현물인 rdt_sender.py, rdt_eceiver.py를 완성하라. 아래 제공된 rdt sender의 input file로 testing하자. input file과 receiver의 output file이 같은지 검증하라.

  • input file: input.txt
  • 실행이 종료된 후에 input.txt와 output.txt가 같은지 검사한 결과도 제출하세요. 'cmd' 창을 열고 다음과 같은 DOS 명령어를 실행하면 확인할 수 있습니다.
    fc input.txt output.txt

Assignment-8 Internetworking Principle

Internetworking 원리를 이해하기 위해, IP protocol의 동작과정을 알아보자.

  • UP: 도착한 datagram에 대해서는 자신에게 오는 것인지 확인하여 위로(UP) 보내고,
  • DOWN: 보낼(DOWN) datagram에 대해서는 어떻게 outgoing interface를 선택하여 forwarding시키려면, datagram이 frame에 encapsulation해야 하는지를 알아보자.
  • FORWARD: Router는 도착한 datagram이 자기 자신에게 오는 것이 아닐 때 버리지 않고 forwarding하는 기능만 추가된 것임을 이해하자.

AS-8-1 Understanding Internetworking (11/23까지)

1. 주어진 source를 읽고 router, host, subnet을 그려라. IP address와 MAC address도 그림에 표현하라.

2. 첨부한 액셀 파일에 주어진 incoming/outgoing datagram에 대해 공란을 채워 답하라. (router로 동작함을 가정)

참고
  • FORWARD, DOWN인 경우는 MAC_src, MAC_dest 모두 있어야 frame이 완성된다.
    • 다만, loop-back interface로 가는 경우는 framing할 필요 없으니 MAC_src, MAC_dest 난에 'LOOPBACK'으로 표기할 것.
  • UP인 경우는 MAC address을 적을 필요없다.

AS-8-2 Implementation of core of IP Protocol (11/30까지)

주어진 Python source file에서 addr(), lookup() function을 구현하여 완성하라. 출력된 결과를 보고 AS-8-1에 답한 내용이 맞는지 스스로 채점하라. 틀린 난은 적색 글자로 변경하고, 아래에 검정 폰트로 수정한 내용을 적어서 제출하라.

  • 제출물: 완성된 Python source file, 수정한 액셀 파일

Assignment-9 Dijkstra Algorithm

Python으로 구현한 Dijkstra's algorithm for shortest paths 참조

by David Eppstein, UC Irvine, 4 April 2002 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/117228

다음과 같이 주어진 그래프에서 1. 위 알고리즘을 실행시켜 노드 a, d, g 각각에서 shortest path tree를 그림위에 도시하라. 2. 주어진 노드에서 forwarding table을 만드는 Python module을 작성하라.