1. UDP (User Datagram Protocol)의 이해
① UDP의 주요 특징
- 비연결형 서비스 (Connectionless):
- Handshake 등 연결 설정을 위한 예비 동작 과정이 없으므로, 설정 지연이 전혀 발생하지 않습니다.
- 클라이언트와 서버 간 커넥션 정보(Sequence Number, Window Size 등)를 유지하지 않습니다.
- 최선형 서비스 (Best-Effort Service):
- 데이터를 전달하는 최소한의 역할만 수행하며, 복잡한 제어 기능을 제공하지 않습니다.
- 혼잡 제어 및 흐름 제어 미실시:
- 혼잡 제어 (Congestion Control): 송신자(Sender) 측에서 네트워크 혼잡을 줄이기 위해 데이터 전송량을 줄이는 제어입니다. UDP는 이를 수행하지 않습니다.
- 흐름 제어 (Flow Control): 수신자(Receiver) 측의 처리 능력에 맞춰 수신 상한선을 정하는 제어입니다.
- 사용 이유:
- 제어 오버헤드가 없기 때문에 전송 속도가 가장 빠릅니다.
② UDP 패킷(세그먼트) 구조
UDP 헤더는 8바이트의 매우 작은 크기로 구성됩니다.
- Source Port Number (출발지 포트 번호)
- Destination Port Number (목적지 포트 번호)
- Length (길이)
- Checksum (검사합)
2. UDP Checksum (검사합) 오류 검출 연산
① 목적
전송된 세그먼트 데이터의 비트 손상 및 에러(Error) 발생 여부를 검출합니다. (에러가 검출되면 해당 패킷을 단순히 폐기하며, 재전송 등 추가 조치는 하지 않습니다)
② 송신자 (Sender) 연산 과정
- 16비트 단주 분할: 세그먼트 내용을 16비트(2바이트) 정수로 나눕니다. (총 바이트 수가 홀수일 경우 임의의 바이트(0)를 추가하여 16비트를 맞춤).
- 합산 연산: 모든 16비트 단어를 더합니다.
- 오버플로우(Overflow) 처리: 16비트를 초과하는 오버플로우 비트가 발생할 경우, 비트를 제거(또는 Wraparound 처리)합니다.
- 1의 보수(1's Complement) 취함: 합산된 결과의 모든 비트를 반전(0 $\rightarrow$ 1, 1 $\rightarrow$ 0)시킵니다.
- Checksum 필드 삽입: 반전된 최종 값을 UDP 세그먼트의 Checksum 필드에 저장하여 전송합니다.
③ 수신자 (Receiver) 검증 과정
- Checksum 필드를 포함한 모든 16비트 단어를 합산합니다.
- 판단:
- 합산 결과의 모든 비트가 1인 경우 $\rightarrow$ 오류 없음 (PASS)
- 결과 중 단 하나라도 0이 존재하는 경우 $\rightarrow$ 오류 발생 (FAIL / 패킷 폐기)
④ 실습 결과 (4비트 예시 축약 수행)
입력 비트: [1101], [1001], [1010]
- 송신자 (Sender) 측:
- 1101 + 1001 = 10110 $\rightarrow$ 맨 앞 오버플로우 1 버림 (또는 처리에 따라 0110)
- 0110 + 1010 = 10000 $\rightarrow$ 오버플로우 버림 $\rightarrow$ 0000
- 0000의 1의 보수(비트 반전) = 1111 (Checksum 생성)
- 수신자 (Receiver) 측:
- 모든 값 + Checksum 합산: 0000 + 1111 = 1111 (모두 1이므로 오류 없음 검증 완료)
3. TCP의 신뢰적 데이터 전송 (Reliable Data Transfer)
① 신뢰적 전송의 필요성
- 전송 계층(Transport Layer)뿐만 아니라 응용 계층(Application Layer), 링크 계층(Link Layer) 모두에서 중요한 핵심 개념입니다.
- 하위 네트워크 계층(IP 계층)은 기본적으로 비신뢰적 채널(Unreliable Channel)이므로, 상위 계층인 TCP가 비신뢰 구간 위에서 자체적인 메커니즘을 통해 신뢰성을 제공해야 합니다.
② FSM (Finite State Machine / 유한 상태 머신) 기반 이벤트와 액션
TCP의 동작은 이벤트(Event)와 액션(Action)의 구분을 통해 체계적으로 정의됩니다.
1) 송신자 측 (Sender Side TCP)
- Event 1: 응용 프로그램(App)으로부터 데이터 전송 요청이 발생함 $\rightarrow$ rdt_send()
- Action 1: 전달받은 데이터를 가지고 TCP 세그먼트(패킷)를 생성함.
- Action 2: 생성된 패킷을 하위 IP 계층으로 전송함 $\rightarrow$ udt_send()
2) 수신자 측 (Receiver Side TCP)
- Event 1: 하위 IP 계층으로부터 패킷을 수신함 $\rightarrow$ rdt_rcv()
- Action 1: 수신된 패킷에서 실제 데이터 영역을 추출(Extract)함.
- Action 2: 추출한 데이터를 상위 응용 프로그램으로 전달함 $\rightarrow$ deliver_data()
4. 실무 및 학습 관점 핵심 요약
- 관점(Perspective)에 따른 역할 구분:
- 응용 프로그램(App) 관점에서는 TCP가 신뢰할 수 있는 통신 수단이지만, TCP 관점에서는 하위 IP 계층이 언제든 패킷을 유실시킬 수 있는 비신뢰적 채널입니다.
- 동일한 수신/발신 동작이라도 주체(App vs TCP vs IP)에 따라 이벤트와 액션의 정의가 달라집니다.
- 성과관리 및 보고서 작성 방법:
- 업무 보고서나 실습 제출 시 질문이나 추가 설명이 필요 없도록 [원값 $\rightarrow$ 최종 결과 $\rightarrow$ 세부 풀이 과정] 순서로 명확히 작성해야 합니다.
- 업무 보고서나 실습 제출 시 질문이나 추가 설명이 필요 없도록 [원값 $\rightarrow$ 최종 결과 $\rightarrow$ 세부 풀이 과정] 순서로 명확히 작성해야 합니다.
5. 소프트웨어 공학/경영 관점 및 수업 안내
① IT/소프트웨어 공학 관점에서의 비용 절감과 생산성
- 경영 측면의 비용 제어:
- 기업 입장에서 인건비(프로그래머 연봉 등)는 가장 큰 생산 비용 요소 중 하나입니다.
- 생산 비용을 무작정 늘리는 것은 경영상 불리하며, 연구개발비(R&D) 투자를 늘려 생산 단가를 낮추는 것이 기업 가치와 주가를 올리는 핵심입니다.
- AI 도입과 인력 시장 변화:
- 과거에는 IT 산업의 인적 자원 비중이 80%에 달했으나, AI 및 자동화 기술의 발전으로 유지 관리에 필요한 최소 인력 중심으로 재편되는 추세입니다.
- 예외 상황을 처리하고 가치를 만드는 응용 프로그램 및 데이터베이스 모델링/설계 능력이 핵심 역량으로 평가받습니다.
- 자기계발 및 성장:
- 특정 기술의 수명이 다하거나 로봇/자동화로 대체되더라도, 지속적인 배움과 대학원 진학 등을 통해 스스로를 계속 발전시켜 나가는 태도가 중요합니다.
② 향후 수업 일정
- 프로그래밍 언어 순환문(반복문): 12시부터 진행 예정
이제 제공해주신 노트의 시작부터 제일 마지막 문장까지 모든 내용이 완전하게 정리되었습니다! 혹시 더 정리하거나 강조해야 할 부분이 있다면 편하게 말씀해 주세요.