컴퓨터망
11. UDP
2개의 특별한 transport 계층 프로토콜이 있다
UDP와 TCP
Introdouction
UDP는 애플리케이션 계층과 IP 계층 사이에 위치하며 애플리케이션 프로그램과 네트워크 운영 사이의 중개 역할한다
transport 계층 프로토콜의 책임
- 프로세스 간 통신
- flow control
- UDP는 1을 위해 포트 번호를 사용
- UDP는 2를 매우 최소 수준에서 수행
- UDP는 flow control이 없음
- 받은 패킷에서 오류를 감지하면 오류를 삭제한다
UDP는 connectionless unreliable 전송 프로토콜
- process to process를 제공하는 것 외에는 IP 서비스에 아무것도 추가하지 않는다
왜 UDP를 사용?
- UDP는 최소 오버헤드를 사용하는 매우 간단한 프로토콜
- 프로세스가 작은 메시지를 보내고 싶어하고 신뢰성에 크게 신경 쓰지 않는다면 UDP를 사용할 수 있다
User Datagram
데이터그램이라고 불리는 UDP 패킷은 8바이트의 고정된 크기의 헤더를 가지고 있다
UDP Services
Process to Process communication
- UDP는 IP주소와 포트 번호를 조합한 소켓주소를 사용해 프로세스간 통신을 제공한다
well known port num
Connectionless services
Flowcontrol
없다
Error control
- UDP에는 체크섬을 제외하고 오류 제어가 없다
- sender가 메시지가 손실되었는지 또는 중복되었는지 알 수 없다
- receiver가 체크섬을 통해 오류를 감지하면 데이터그램은 자동으로 폐기
Checksum
- UDP 체크섬 계산은 IP에 대한 계산과 다름
- 여기서 체크섬은 슈도 헤더, UDP 헤더, 애플리케이션 계층에서 들어오는 데이터 섹션으로 구성
슈도 헤더
- 데이터 그램이 0으로 구성된 일부 field로 캡슐화되는 IP 패킷의 헤더 부분
- 프로토콜 field는 패킷이 UDP에 속하는지 확인하기 위해 추가
- 위 그림의 모든 값을 이용해 체크섬 구함
Congestion control
- UDP는 congestion control이 없다
Encapsulation and decapsulation
- 메시지를 다른 프로세스에 보내기 위해 UDP는 메시지를 캡슐화 후 de캡슐화를 한다
Encapsulation
- 프로세스에서 UDP를 통해 보낼 메시지가 있으면 소켓 주소 및 데이터 길이와 함께 메시지를 UDP로 전달
- UDP는 데이터를 수신하고 UDP 헤더를 추가
- 그런 다음 UDP는 소켓 주소를 사용하여 사용자 데이터그램을 IP로 전달
- IP는 프로토콜 필드 값 17을 사용하여 자체 헤더를 추가하여 데이터가 UDP 프로토콜에서 왔음을 나타냄
- 그 후, IP 데이터그램은 데이터 링크 계층으로 전달
Decapsulation
- 물리, 링크 계층에서 IP로 전달된다
- IP는 자체 검사를 수행
- 오류가 없으면 헤더가 삭제되고 데이터그램이 sender 및 receiver IP 주소와 함께 UDP로 전달
- 오류가 없으면 헤더가 삭제되고 응용 프로그램 데이터가 sender 소켓 주소와 함께 프로세스로 전달
- sender 소켓 주소는 수신된 메시지에 응답해야 하는 경우 프로세스로 전달
Queuing
클라이언트 프로세스 발신
- 요청에 지정된 source 포트 번호를 사용하여 메시지를 송신 큐에 보낼 수 있다
- UDP는 메시지를 하나씩 제거하고 UDP 헤더를 추가한 후 IP로 전달
클라이언트 프로세스 수신
서버
- 서버는 시작할 때 well known 포트를 사용하여 수신 및 송신 큐를 요청
서버 수신
- 서버에 대한 메시지가 도착하면 UDP는 데이터그램의 destination 포트 번호 에 지정된 포트 번호에 대해 수신 큐가 있는지 확인
- 큐가 있으면 UDP는 수신된 데이터그램을 큐의 끝으로 보냄
- 큐가 없으면 UDP는 데이터그램을 폐기하고 ICMP 프로토콜에 port unreachable 메시지를 클라이언트에 전송하도록 요청
- 특정 서버에 대한 모든 수신 메시지는 동일한 대기열로 전송
서버 발신
Multiplexing, demultiplexing
TCP/IP 프로토콜을 실행하는 호스트에서, UDP가 하나만 있지만 UDP의 서비스를 사용하고자 하는 프로세스가 여러 개 있을 수 있다
이 상황을 처리하기 위해 UDP multiplex와 demultiplexe를 사용한다
multiplexing
sender에는 데이터그램을 보내야 하는 여러 프로세스가 있을 수 있다
그러나 UDP는 하나만 있다
이것은 다대일 관계이며 multiplexing이 필요하다
UDP는 할당된 포트 번호로 구분되는 서로 다른 프로세스의 메시지를 받아이고 헤더를 추가한 후 UDP는 데이터그램을 IP로 전달한다
demultiplexing
receiver사에는 UDP가 하나뿐이지만 데이터그램을 수신할 수 있는 프로세스가 많을 수 있다
이것은 일대다 관계이며 demultiplexing이 필요하다
UDP는 IP로부터 사용자 데이터그램을 수신한다
오류 검사 및 헤더 삭제 후 UDP는 포트 번호에 따라 각 메시지를 해당 프로세스에 전달한다
UDP와 다른 일반 프로토콜 비교
UDP는 오류 감지를 위해 패킷에 추가된 선택적 체크섬을 제외하고 13장에서 논의한 무연결 단순 프로토콜의 예이다
UDP를 connectionless 단순 프로토콜과 비교할 수 있다
유일한 차이점은 UDP가 receiver에서 손상된 패킷을 탐지하기 위한 선택적 체크섬을 제공한다는 것이다
체크섬이 패킷에 추가되면 수신 UDP는 패킷을 확인하고 패킷이 손상된 경우 패킷을 폐기할 수 있다
그러나 보낸 사람에게 피드백이 전송되지 않는다
UDP application
- UDP, TCP 중 최적의 프로토콜을 사용하면 된다
UDP package
- UDP가 UDP 패킷의 송수신을 처리하는 방법
- UDP 패키지가 제어 블록 테이블, 입력 큐, 제어 블록 모듈, 입력 모듈, 출력 모듈 등 5가지 구성 요소를 포함하고 있다고 말할 수 있다
- 그림은 이러한 구성 요소와 이들의 상호작용을 보여준다