본문 바로가기
-----ETC2-----/네트워크 프로그래밍

[네트워크 프로그래밍] Week 1: 네트워크 기본 개념과 TCP/IP 모델

by cogito21_python 2024. 6. 3.
반응형

 

네트워크 기본 개념과 TCP/IP 모델

 

Day 1: 네트워크 기본 개념

 

강의 내용:

  1. 네트워크 정의 및 구조
    • 네트워크의 정의
    • 네트워크 구성 요소 (호스트, 라우터, 스위치, 허브)
    • 네트워크 종류 (LAN, WAN, MAN, PAN)
  2. 네트워크 토폴로지
    • 버스형, 스타형, 링형, 메시형 토폴로지
    • 각 토폴로지의 장단점
    • 실제 네트워크 구성 사례
  3. 데이터 전송 방식
    • 유니캐스트, 멀티캐스트, 브로드캐스트
    • 각 방식의 사용 사례와 장단점

실습:

  • 네트워크 구성 요소와 토폴로지 이해
### 실습: 네트워크 구성 요소와 토폴로지
1. 버스형, 스타형, 링형, 메시형 토폴로지의 구조를 그림으로 표현
2. 각 토폴로지의 장단점을 표로 정리
3. 실제 네트워크 구성 사례 조사 및 발표

 

Day 2: TCP/IP 모델 개요

강의 내용:

  1. TCP/IP 모델의 개요
    • TCP/IP 모델의 역사
    • TCP/IP 모델의 계층 구조 (네트워크 인터페이스, 인터넷, 전송, 응용)
  2. 네트워크 인터페이스 계층
    • 데이터 링크 계층과 물리 계층의 역할
    • Ethernet, Wi-Fi와 같은 네트워크 기술
  3. 인터넷 계층
    • IP 프로토콜의 역할
    • IPv4와 IPv6의 차이점
    • 주요 프로토콜: ARP, ICMP

실습:

  • TCP/IP 모델 각 계층의 역할 조사 및 발표
### 실습: TCP/IP 모델 각 계층의 역할
1. 네트워크 인터페이스 계층의 역할과 주요 프로토콜 조사
2. 인터넷 계층의 주요 프로토콜 (IP, ARP, ICMP) 사용 사례 조사
3. 각 계층의 역할을 표로 정리하여 발표

 

Day 3: 전송 계층

강의 내용:

  1. 전송 계층의 역할
    • 데이터의 신뢰성 있는 전송 보장
    • 포트 번호를 이용한 통신
  2. TCP 프로토콜
    • 연결 설정 및 해제 (3-way handshake, 4-way handshake)
    • 흐름 제어와 혼잡 제어 (윈도우 크기, 슬라이딩 윈도우, 혼잡 제어 알고리즘)
  3. UDP 프로토콜
    • 비연결형 프로토콜의 특징
    • UDP의 장점과 단점
    • 사용 사례 (실시간 스트리밍, DNS 등)

실습:

  • TCP 연결 설정 및 해제 과정 실습
# TCP 서버
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(5)
print("서버가 포트 12345에서 대기 중입니다.")

client_socket, addr = server_socket.accept()
print(f"{addr}와 연결되었습니다.")
data = client_socket.recv(1024)
print(f"받은 데이터: {data.decode()}")
client_socket.sendall(data)
client_socket.close()
server_socket.close()
# TCP 클라이언트
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
client_socket.sendall(b"Hello, Server!")
data = client_socket.recv(1024)
print(f"서버로부터 받은 데이터: {data.decode()}")
client_socket.close()

 

Day 4: 응용 계층

강의 내용:

  1. 응용 계층의 역할
    • 응용 계층의 주요 프로토콜 (HTTP, FTP, SMTP, DNS)
    • 각 프로토콜의 특징과 사용 사례
  2. HTTP/HTTPS
    • HTTP의 구조와 동작 원리
    • HTTPS를 통한 보안 강화 (SSL/TLS)
  3. DNS
    • DNS의 역할과 동작 원리
    • 도메인 네임 시스템의 구성 요소 (도메인, 존, 레코드)

실습:

  • HTTP 요청 및 응답 실습
# 간단한 HTTP 서버
from http.server import SimpleHTTPRequestHandler, HTTPServer

class MyHandler(SimpleHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(b"Hello, HTTP!")

server = HTTPServer(('localhost', 8080), MyHandler)
print("HTTP 서버가 포트 8080에서 대기 중입니다.")
server.serve_forever()
# HTTP 클라이언트
import requests

response = requests.get('http://localhost:8080')
print(f"응답 코드: {response.status_code}")
print(f"응답 본문: {response.text}")

 

Day 5: 네트워크 프로그래밍 기초 복습

강의 내용:

  1. 네트워크 프로그래밍의 기본 원리
    • 소켓 프로그래밍의 개념과 중요성
    • 소켓의 종류 (스트림 소켓, 데이터그램 소켓)
  2. Python에서의 소켓 프로그래밍
    • Python 소켓 라이브러리 개요
    • 소켓 생성, 바인딩, 청취, 연결, 데이터 전송 및 수신
  3. 고급 소켓 옵션
    • 소켓 옵션 설정 (SO_REUSEADDR, SO_LINGER)
    • 비차단 모드와 타임아웃 설정

실습:

  • TCP 및 UDP 소켓 프로그래밍 실습
# UDP 서버
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('localhost', 12345))
print("UDP 서버가 포트 12345에서 대기 중입니다.")

while True:
    data, addr = server_socket.recvfrom(1024)
    print(f"{addr}로부터 받은 데이터: {data.decode()}")
    server_socket.sendto(data, addr)

 

# UDP 클라이언트
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = b"Hello, UDP Server!"
client_socket.sendto(message, ('localhost', 12345))
data, addr = client_socket.recvfrom(1024)
print(f"서버로부터 받은 데이터: {data.decode()}")
client_socket.close()

 

Day 6: 프로젝트 준비

강의 내용:

  1. 프로젝트 주제 선정 및 요구사항 분석
    • 네트워크 프로그래밍 프로젝트 주제 논의
    • 팀 구성 및 역할 분담
  2. 프로젝트 계획 수립
    • 프로젝트 목표 및 요구사항 정의
    • 프로젝트 타임라인 설정
    • 프로젝트 도구 및 환경 설정

실습:

  • 프로젝트 계획서 작성 및 공유
### 실습: 프로젝트 계획서 작성
1. 프로젝트 목표 정의
2. 기능 명세서 작성
3. 개발 일정 및 마일스톤 설정
4. 역할 분담 및 작업 계획 수립
5. GitHub 저장소 생성 및 초기화

 

이 강의는 네트워크 기본 개념과 TCP/IP 모델, 소켓 프로그래밍의 기초를 다루며, 실습을 통해 이론을 실제로 적용해보고 네트워크 프로그래밍의 기초를 탄탄히 하는 것을 목표로 합니다. 각 주제별로 실습 예제를 통해 개념을 명확히 이해하고 실제 코드를 작성해보는 기회를 제공합니다.

반응형