UDP
- UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다.
- 다중화, 역다중화 기능
- 간단한 오류 검사 기능
이외에는 IP에 아무것도 추가하지 않는다.
동작 순서
- 애플리케이션 프로세스로부터 메시지를 가져와서 다중화, 역다중화에 필요한 출발지 포트번호 필드와 목적지 포트번호 필드를 첨부한다.
- 출발지 호스트의 IP주소 필드와 목적지 호스트의 IP주소 필드를 추가한 후에, 최종 트랜스포트 계층 세그먼트를 네트워크 계층으로 넘겨준다.
- 네트워크 계층은 트랜스포트 계층 세그먼트를 IP 데이터그램으로 캡슐화하고, 세그먼트를 수신 호스트에게 전달한다.
- 세그먼트가 수신 호스트에 도착하면, UDP는 세그먼트를 해당하는 애플리케이션 프로세스로 전달하기 위해 목적지 포트번호를 사용한다.
UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 간에 handshake를 하지 않는다. → 비연결형
UDP의 장점
- 무슨 데이터를 언제 보낼지에 대해 애플리케이션 레벨에서 더 정교한 제어가 가능하다.
- UDP는 애플리케이션 프로세스가 데이터를 UDP에 전달하자마자 데이터를 UDP 세그먼트로 만들고, 그 세그먼트를 즉시 네트워크 계층으로 전달한다.
- 실시간 애플리케이션에서는 UDP를 사용하고, 필요한 어떤 추가 기능을 구현할 수 있다.
- 연결 설정이 없다.
- UDP는 TCP의 3way handshake와 같은 사전준비 없이 전송한다. 따라서 연결을 설정하기 위한 어떤 지연도 없다.
- UDP는 연결 상태를 유지하지 않으며, 연결 사애에 대한 어떤 파라미터도 기록하지 않는다.
- 따라서 일반적으로 특정 애플리케이션 전용 서버는 프로그램이 UDP에서 동작할 때 좀 더 많은 활성 클라이언트를 수용할 수 있다.
- 작은 패킷 오버헤드: TCP는 세그먼트마다 20byte의 헤더 오버헤드를 갖지만, UDP는 단지 8byte의 오버헤드를 갖는다.
UPD의 단점
- UDP는 혼잡 제어를 하지 않는다.
- 혼잡 제어는 네트워크가 꼭 필요한 작업을 할 수 없게 되는 폭주 상태에 빠지는 것을 막기 위해 반드시 필요하다.
- 만약 모두가 혼잡 제어를 사용하지 않고 높은 비트의 비디오 스트리밍을 한다면 라우터에 많은 패킷의 오버플로가 발생하고, 제어되지 않은 UDP 송신자에 의해 발생한 높은 손실율은 그 손실율을 감소시키기 위해 TCP 송신자들이 속도를 줄이도록 하면서 TCP에 혼잡이 발생할 것이다.
UDP 세그먼트 구조
- 애플리케이션 데이터
- UDP 데이터그램의 데이터 필드에 위치한다.
- 포트 번호
- 목적지 호스트가 목적지 종단 시스템에서 동작하는 정확한 프로세스에게 애플리케이션 데이터를 넘기게 해준다.
- 체크섬
- 세그먼트에 오류가 발생했는지 검사하기 위해 수신 호스트가 사용한다.
- 길이 필드
- 헤더를 포함하는 UDP 세그먼트의 길이를 바이트 단위로 나타낸다.
UDP 체크섬
- 세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사하여 오류 검출을 하기 위한 것이다.
- 송신측에서 세그먼트 안에 있는 모든 16비트 워드의 합산에 대해 다시 1의 보수를 수행하며, 합산 과정에서 발생하는 오버플로는 윤회식 자리올림을 한다.
- 이 결과 값이 UDP 세그먼트의 체크섬 필드에 삽입된다.
- 수신측에서는 체크섬을 포함한 모든 16비트 워드들이 더해진다.
- 만약 패킷에 어떤 오류도 없다면 수신자에서의 합은 111..(16개)가 되며, 비트 중에 0이 하나라도 있다면 패킷에 오류가 발생했다는 것이다.
- 출발지와 목적지 사이의 모든 링크가 오류 검사를 제공한다는 보장이 없기 때문에 UDP는 체크섬을 제공한다.
- UDP는 오류 검사를 제공하지만, 오류를 회복하기 위한 어떤 일도 하지않는다.
- 종단 간의 데이터 전송 서비스가 오류 검사를 제공해야 한다면, UDP는 종단 기반으로 트랜스포트 계층에서 오류 검사를 제공해야만 한다. → 종단과 종단의 원칙의 한 예시이다.
'CS > 네트워크' 카테고리의 다른 글
TCP (1) | 2023.11.28 |
---|---|
파이프라이닝된 신뢰적인 데이터 전송 프로토콜 (0) | 2023.11.16 |
신뢰적인 데이터 전송 원리 (0) | 2023.11.11 |
다중화와 역다중화 (0) | 2023.11.11 |
트랜스포트 계층 (0) | 2023.11.08 |