반응형
네트워크 프로토콜 심화 (TCP)
Day 1: TCP 연결 설정과 해제
강의 내용:
- TCP 프로토콜의 기본 개념
- TCP의 역할과 특징
- 신뢰성 있는 데이터 전송 보장
- TCP 연결 설정 (3-Way Handshake)
- SYN, SYN-ACK, ACK 패킷
- 연결 설정 과정의 상세 설명
- TCP 연결 해제 (4-Way Handshake)
- FIN, ACK 패킷
- 연결 해제 과정의 상세 설명
실습:
- TCP 연결 설정과 해제 과정 실습
# TCP 서버
import socket
def start_tcp_server():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(5)
print("TCP 서버가 포트 12345에서 대기 중입니다.")
while True:
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()
if __name__ == "__main__":
start_tcp_server()
# TCP 클라이언트
import socket
def start_tcp_client():
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()
if __name__ == "__main__":
start_tcp_client()
Day 2: TCP 흐름 제어
강의 내용:
- 흐름 제어의 필요성
- 송신자와 수신자의 속도 차이 해결
- 데이터 손실 방지
- TCP의 흐름 제어 기법
- 윈도우 크기와 슬라이딩 윈도우
- 윈도우 크기 조정 알고리즘
- 실시간 흐름 제어
- 윈도우 크기 조절을 통한 데이터 전송 속도 제어
- 실시간 흐름 제어 시뮬레이션
실습:
- TCP 흐름 제어 실습
# TCP 서버 흐름 제어 구현
import socket
def start_tcp_server():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(5)
print("TCP 서버가 포트 12345에서 대기 중입니다.")
while True:
client_socket, addr = server_socket.accept()
print(f"{addr}와 연결되었습니다.")
while True:
data = client_socket.recv(1024)
if not data:
break
print(f"받은 데이터: {data.decode()}")
client_socket.sendall(data)
client_socket.close()
if __name__ == "__main__":
start_tcp_server()
# TCP 클라이언트 흐름 제어 구현
import socket
import time
def start_tcp_client():
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
for i in range(10):
client_socket.sendall(f"Message {i}".encode())
time.sleep(1)
client_socket.close()
if __name__ == "__main__":
start_tcp_client()
Day 3: TCP 혼잡 제어
강의 내용:
- 혼잡 제어의 필요성
- 네트워크 혼잡 방지
- 효율적인 네트워크 자원 사용
- TCP 혼잡 제어 알고리즘
- Slow Start
- Congestion Avoidance
- Fast Retransmit
- Fast Recovery
- 혼잡 제어 시뮬레이션
- 혼잡 제어 알고리즘 시뮬레이션
- 네트워크 혼잡 상황에서의 데이터 전송
실습:
- TCP 혼잡 제어 실습
### 실습: 혼잡 제어 알고리즘 시뮬레이션
1. Slow Start와 Congestion Avoidance 알고리즘을 시뮬레이션 코드로 구현
2. 혼잡 상황에서의 패킷 전송 시나리오 작성
3. 각 알고리즘의 동작을 시각적으로 확인 및 분석
Day 4: TCP 및 UDP 비교
강의 내용:
- TCP와 UDP의 차이점
- 연결형 프로토콜 (TCP) vs 비연결형 프로토콜 (UDP)
- 신뢰성 보장 (TCP) vs 신속성 보장 (UDP)
- 사용 사례 비교
- TCP의 사용 사례 (웹 브라우징, 이메일 등)
- UDP의 사용 사례 (실시간 스트리밍, 온라인 게임 등)
- 성능 비교
- 데이터 전송 속도 비교
- 신뢰성 및 데이터 손실 비교
실습:
- TCP 및 UDP 성능 비교 실습
# UDP 서버
import socket
def start_udp_server():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('localhost', 12346))
print("UDP 서버가 포트 12346에서 대기 중입니다.")
while True:
data, addr = server_socket.recvfrom(1024)
print(f"{addr}로부터 받은 데이터: {data.decode()}")
server_socket.sendto(data, addr)
if __name__ == "__main__":
start_udp_server()
# UDP 클라이언트
import socket
def start_udp_client():
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = b"Hello, UDP Server!"
client_socket.sendto(message, ('localhost', 12346))
data, addr = client_socket.recvfrom(1024)
print(f"서버로부터 받은 데이터: {data.decode()}")
client_socket.close()
if __name__ == "__main__":
start_udp_client()
Day 5: 멀티캐스트와 브로드캐스트
강의 내용:
- 멀티캐스트의 개념
- 멀티캐스트의 정의와 필요성
- 멀티캐스트 주소와 그룹
- 브로드캐스트의 개념
- 브로드캐스트의 정의와 필요성
- 브로드캐스트 주소와 사용 사례
- Python에서의 멀티캐스트 및 브로드캐스트 구현
- 멀티캐스트 소켓 설정
- 브로드캐스트 소켓 설정
실습:
- 멀티캐스트 및 브로드캐스트 실습
# 멀티캐스트 서버
import socket
import struct
def start_multicast_server():
multicast_group = '224.3.29.71'
server_address = ('', 12345)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(server_address)
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
print("멀티캐스트 대기 중...")
data, address = sock.recvfrom(1024)
print(f"{address}로부터 받은 데이터: {data.decode()}")
if __name__ == "__main__":
start_multicast_server()
# 멀티캐스트 클라이언트
import socket
def start_multicast_client():
multicast_group = '224.3.29.71'
server_address = ('localhost', 12345)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = b"Hello, Multicast Server!"
sock.sendto(message, server_address)
print("멀티캐스트 메시지 전송 완료")
if __name__ == "__main__":
start_multicast_client()
Day 6: 프로젝트 준비
강의 내용:
- 프로젝트 주제 선정 및 요구사항 분석
- 네트워크 프로토콜 프로젝트 주제 논의
- 팀 구성 및 역할 분담
- 프로젝트 계획 수립
- 프로젝트 목표 및 요구사항 정의
- 프로젝트 타임라인 설정
- 프로젝트 도구 및 환경 설정
실습:
- 프로젝트 계획서 작성 및 공유
### 실습: 프로젝트 계획서 작성
1. 프로젝트 목표 정의
2. 기능 명세서 작성
3. 개발 일정 및 마일스톤 설정
4. 역할 분담 및 작업 계획 수립
5. GitHub 저장소 생성 및 초기화
이 강의는 TCP 프로토콜의 심화 내용을 다루며, 실습을 통해 이론을 실제로 적용해보고 네트워크 프로토콜의 동작 원리와 성능 최적화 기법을 이해하는 것을 목표로 합니다. 각 주제별로 실습 예제를 통해 개념을 명확히 이해하고 실제 코드를 작성해보는 기회를 제공합니다.
반응형
'-----ETC2----- > 네트워크 프로그래밍' 카테고리의 다른 글
[네트워크 프로그래밍] Week 5: 비동기 I/O 및 멀티스레드 프로그래밍 (0) | 2024.06.04 |
---|---|
[네트워크 프로그래밍] Week 4: 네트워크 프로토콜 심화 (UDP 및 멀티캐스트) (0) | 2024.06.04 |
[네트워크 프로그래밍] Week 2: 소켓 프로그래밍 기초 및 고급 소켓 옵션 (0) | 2024.06.04 |
[네트워크 프로그래밍] Week 1: 네트워크 기본 개념과 TCP/IP 모델 (0) | 2024.06.03 |
[네트워크 프로그래밍] 고급 네트워크 프로그래밍 교육과정 (20주) (1) | 2024.06.03 |