Lectures/CN/2014

From MCLab
Jump to: navigation, search

Contents

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

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

화 7, 8교시 (5207), 목 1, 2교시 (5207)
환경 좋은 207 강의실로 변경함
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호

공지사항

  • 강의실 변경: 화 7, 8, 목 1,2 교시 5207호로 변경함 (중간고사 이후부터)
  • 9/16(화) 실습 - 강의실 301호
    • 301호 PC를 booting할 때 SBC server로 booting하지 말고, local에서 부팅하고 설치해야 합니다.
    • Notebook 있는 학생은 지참하고 오세요.
  • 10/7(화) 휴강 --> 10/28(화) 9, 10교시 보강

시험-1

  • 일시: 10/21(화)
  • 시험범위: 1장, 2장
  • 평가결과
    • 1등 곽기룬, 2등 김정현, 3등 서장일

시험-2

  • 일시: 11/18(화)
  • 시험범위: 3장
  • 평가결과 - 박성준, 박성희 성적이 바뀌었기에 수정해서 새로 올림
    • 1등 김정현, 공동 2등 곽기룬, 현호윤

시험-3

  • 일시: 12/16(화)
  • 시험범위: 4, 5, 6장
  • 1, 2차 시험은 100점 만점, 3차 시험은 150점 만점으로 환산하여 시험 성적이 합산될 것임.
  • 평가결과
    • 1등 엄정연, 2등 우명제, 3등 박성준

강의노트

실습

실습 준비사항

Install Xshell and WireShark
How to use Xshell and WireShark
Installing Python 2 on Windows
Download page로 가서 자신의 PC와 맞는 Windows x86[-64] MSI Installer를 download하여 설치한다. (Windows help file도 download한다.) IDLE이라는 Python IDE도 설치된다. ( 최신버전은 2.7.8이다.)
  • 301호 PC를 booting할 때 SBC server로 booting하지 말고, local에서 부팅하고 설치해야 합니다.
  • Notebook 있는 학생은 지참하고 오세요.

실습일 및 실습내용

9/16(화), 9/18(목) Introduction to Python Programming - 강의실 301호

Official Documentation

Python 2.7: https://docs.python.org/2.7/

On-line Books

실습자료

Homeworks

HW-1 1장 연습문제 풀기(9/29까지)

복습문제 R21, 연습문제 P6, P7, P25-28에 답하라.

PDF로 변환해서 e-class에 제출하세요.

Assignments

Ass-1. 패킷분석

  • 마감일: 9/10(수)
  • 제출방법: 보고서를 PDF문서로 변환해서 e-class에 제출

HTTP 프로토콜은 웹 서버와 브라우저간에 웹 문서를 URL(예, http://ice.hufs.ac.kr )로 요청하면 문서를 회신하기 위한 응용계층에 위치하는 통신 프로토콜이다. HTTP는 TCP 프로토콜을 위에서 수행되고, TCP는 IP 프로토콜 위에서 수행되며, IP 프로토콜은 보통 Ethernet 프로토콜을 이용하여 프레임을 전달하게 된다. 다시 말해서, HTTP 메시지는 TCP segment에 담기고, TCP segment는 IP datagem에 담기고, IP 패킷은 Ethernet 프레임에 담겨서 최종적으로 Ethernet 프레임으로 전달된다.

WireShark은 패킷을 캡춰하고 캡춰된 패킷을 필터링해서 속의 내용(즉, 헤더와 payload)을 들여다 봄으로서 분석하는 도구이다. WireShark을 설치하고, 사용법을 배운 다음 아래 문제에 대한 보고서를 제출하라.

문제

WireShark을 여러분의 PC에서 실행시킨 다음 웹브라우저에서 정보통신공학과 홈페이지(http://ice.hufs.ac.kr )를 방문해 보자. WireShark에서 패킷들을 캡쳐한 다음, 웹서버(ice.hufs.ac.kr)의 80번 포트와 통신하는 TCP segment만 필터링 해보자. 그러면, TCP connection을 설정하는 과정과 해지하는 과정, 그리고 HTTP 요청 메시지, 응답 메지지만 나타날 것이다.

  1. TCP connection 설정과 해지, HTTP 요청 메시지와 응답 메시지가 교환되는 과정을 그림으로 도시하라.
  2. HTTP 요청 메시지와 회신 메시지가 인터넷의 5계층에서 application(HTTP), transport(TCP), network(IP), data link(Ethernet/IEEE802.3) layer에서 메시지(또는 segment/datagram/frame)로 만들어졌는지를 캡쳐한 패킷을 분석하여 도시하라. Ethernet frame내에 IP datagram이 실려있고, 다시 IP datagram 내에 TCP segment가 담겨있고, TCP segment 내부에는 HTTP 요청 메시지나 응답 메시지가 담겨있다. 이를 하나의 그림으로 도시하면 된다.
  3. 그리고, 이를 분석해서 여러분 PC와 정보통신공학과 웹서버의 IP address와 port number를 알아내라. 또한, Ethernet frame을 보고 여러분의 PC의 MAC address와 인접한 노드의 MAC 주소를 알아내라.
(단, HTTP 서버는 TCP 프로토콜 위에서 port 번호 80번을 이용한다.)
참고자료 - WireShark Protocol Anaylzer
WireShark download [2]:
WireShark 사용법 [3]

Ass-2. Home Page 작성과 HTTP Protocol 분석 (9/15까지)

Apache2 web server를 설치하고, 자신의 홈페이지를 html로 직접 작성해 보자. (홈페이지 저작 도구를 사용하면 안된다. html 언어 자체를 익히는 목적이니까.) 그리고, WireShark으로 HTTP 메시지를 캡쳐해서 분석해 보자.

Web server의 설치
APMSETUP을 활용하여 여러분의 PC 상에서 Apache2 web server, PHP, 그리고 MySQL DBMS를 install하자. HTML만으로 홈페이지를 만드는데는 Apache2 web server만 있으면 충분하다.
HTML을 익혀 자신의 홈페이지를 작성
적어도 table과 external link 및 5개 이상의 image(사진)가 들어 있어야 한다.
참고: html로 홈페이지 작성하기
HTTP 메시지 분석
WireShark를 실행시켜 패킷을 캡쳐한다.
Web browser를 실행시키고, 홈페이지 URL을 입력하여 홈페이지를 display한다. Web server와 browser는 같은 머신에서 실행해도 무방하다.
Local machine의 IP address를 알아내려면 명령 창에서 ipconfig를 실행해 보자.
WireShark 패킷 캡쳐를 종료하고, 해당되는 HTTP 메시지와 TCP connection 설정 및 해지 segment만을 필터링해서 송신/수신한 HTTP 메시지들을 분석한다.
제출방법
위 내용을 하나의 PDF파일로 작성하여 e-class에 제출
HTML source 파일
  • Web browser에서 display된 창의 스크린 샷(캡쳐한 화면)
  • 필터한 패킷들이 열거된 WireShark 창의 스크린 샷
  • 송신한(요청한) HTTP 메시지와 이에 응답한(수신한) HTTP 메시지를 열거하고 이에 대한 분석

Ass-3 Web Page 내의 Image Object의 Path 추출하기 (9/22까지)

Web page의 URL을 주면 base page(html)을 가져와서 image tag에 기술된 image file들의 path list를 만드는 python 프로그램을 완성하라.

제줄요령
source file과 실행 결과를 보여주는 IDLE shell 창의 스크린샷을 e-class에 제출

Ass-4 Non-persistent HTTP client (10/6까지)

HTTP 프로토콜 표준을 따라 GET method 만을 지원하는 HTTP client를 구현하라. GET method를 지원하고, page와 이에 포함된 image object들도 download해야 한다.

Ass-3에 추가하여 relative URL로 기술된 image path는 absolute URL로 변환하고, 이 URL로 다시 image file들을 가져와야 한다. 제공되는 소스 파일들 중 HTTP client 모듈 http_cli.py을 완성하고 이 소스와 함께

  • 모듈을 실행시킨 결과화면과
  • test_http.py를 실행시킨 결과, 즉 unit test 결과 화면도 제출하라.

Assignment-5 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 -- last update in 10/30/2014 20:34

Assignment-5-1 Design of rdt 3.0 (11/3까지)

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

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

Assignment-5-2 Implementation of rdt 3.0 (11/10까지)

설계한 것을 기본으로 주어진 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-6 Internetworking Principle

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

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

Assignment-6-1 Understanding Internetworking (11/28까지)

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

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

Assignment-6-2 Implementation of core of IP Protocol (12/1까지)

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

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