일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 자바스크립트
- 그래프 탐색
- html5
- HTTP
- 백준 9527번
- Prisma
- pm2
- PROJECT
- ERD
- Github
- router
- 트라이
- 이분 탐색
- 그리디
- trie
- vector insert
- MySQL
- branch
- string
- Keys
- DP
- MongoDB
- JavaScript
- ccw 알고리즘
- localstorage
- map
- Next
- 게임 서버 아키텍처
- Express.js
- insomnia
Archives
- Today
- Total
dh_0e
[Transport Layer] UDP (User Datagram Protocol) 본문
Network Programming/Transport Layer
[Transport Layer] UDP (User Datagram Protocol)
dh_0e 2025. 6. 3. 00:27User Datagram Format
- UDP 패킷의 헤더 구조는 총 8바이트로 고정이며 4개의 필드로 구성됨
- Source Port Number(16bit): 송신 측 포트 번호, 범위 0~65,535
- Destination Port Number(16bit): 수신 측 포트 번호, 범위 0~65,535
- Length(16bit): 헤더(항상 8바이트) + 데이터의 전체 길이, 단위: 바이트
- Checksum(16bit): 오류 검출용 필드 (선택적 사용 가능)
Process-to-Process Communication
- UDP도 TCP처럼 포트 번호를 이용해서 응용 프로그램 단위로 통신을 연결해줌
- 여러 프로세스가 UDP를 사용할 수 있도록 UDP는 여러 포트 번호를 지원
- 같은 컴퓨터 내부에서 UDP 통신을 하면 루프백 인터페이스(127.0.0.1)와 포트 번호(ex:8000)를 사용
- 패킷이 TCP인지 UDP인지는 IP 헤더의 Protocol 필드 확인 (6이면 TCP, 17이면 UDP)
Connectionless Services
- UDP는 연결 설정 없이 패킷을 무작위로 전송함
- 개별 패킷은 완전히 독립적이며 출발지와 목적지가 같더라도 다른 패킷과 아무 관계 없음
- UDP는 시퀀스 번호 부여 안 함
- 수신 애플리케이션이 직접 순서를 재조립해야 함
- 각 메시지는 반드시 하나의 UDP 데이터그램에 담길 수 있을 만큼 작아야 함
- Flow Control, Error Control 없음
- 수신자가 데이터 감당할 수 있는지 여부 관심 없음 그냥 계속 보냄
- 수신 실패나 손실 여부 그런거 모름 중복, 손실 등은 애플리케이션이 직접 처리해야 함
- 예외: Checksum을 통한 간단한 오류 검출만 가능
Checksum
- Optional 하기 때문에 0으로 설정하면 목적지에서 확인하고 계산 생략
- 진짜 결과가 0이면? 0이 아닌 값(모두 1 → 0xFFFF)로 바꿔서 전달
- UDP의 checksum은 총 3가지 부분을 더해서 계산
- Pseudoheader (가짜 헤더): IP 헤더의 일부 필드를 복사해서 만든 가짜 헤더
- 출발지 IP 주소
- 목적지 IP 주소
- 예약 필드 (0으로 채움)
- 프로토콜 번호 (UDP는 17)
- UDP total length
- UDP header
- Application Data (실제 데이터)
- Pseudoheader (가짜 헤더): IP 헤더의 일부 필드를 복사해서 만든 가짜 헤더
- checksum 연산은 NIC(Network Interface Card)에서 해줌
Encapsulation / Decapsulation
- Encapsulation: app 계층에서 내려온 데이터를 UDP 헤더를 붙여 UDP 패킷으로 만드는 과정
- Decapsulation: 수신 측에서 UDP 패킷을 받아서 UDP 헤더를 제거하고 데이터를 상위 계층으로 전달하는 과정
Queuing (큐잉)
- 수신 측에서 포트로 도달한 데이터를 임시 저장하는 버퍼(큐) 처리 방식
- 적절한 대기열이 없거나 버퍼 오버플로우가 발생했을 때 ICMP 프로토콜을 사용하여 포트에 도달할 수 없다는 메시지를 보냄
- UDP는 오류 제어 기능이 없으므로 ICMP에 메시지를 담아 보냄
UDP Applications
- 영상 스트리밍, 음성 통화, 게임 등 수신된 메시지의 구간 간 지연이 발생하면 안 되는 실시간 애플리케이션에 사용
- 조금 손실되더라도 빠르게 처리되는 게 중요 (패킷 하나 손실됐다고 재전송 X)
- 하나의 송신자가 여러 수신자에게 동시에 데이터를 전송하는 Multicasting에 유용
- TCP는 멀티캐스트 지원 안 함
- UDP는 가볍고 제어가 없기 때문에 멀티캐스트에 적합
- RIP(Routing Information Protocol)에서 라우팅 정보를 주기적으로 보내는 데에 UDP 사용
- 빠르고 간단한 통신이 필요할 때 적합
- 네트워크가 자체적으로 오류 허용하도록 설계됨
'Network Programming > Transport Layer' 카테고리의 다른 글
[Transport Layer] TCP (Transmission Control Protocol) Part III. (0) | 2025.06.04 |
---|---|
[Transport Layer] TCP (Transmission Control Protocol) Part II. (0) | 2025.06.03 |
[Transport Layer] TCP (Transmission Control Protocol) Part I. (1) | 2025.06.03 |
[Transport Layer] Introduction (0) | 2025.06.02 |