사용자 데이터그램 프로토콜 UDP는 IP 데이터그램 서비스 위에 다중화 및 역다중화 기능과 오류 감지 기능 등의 기능만 추가합니다.
UDP의 주요 특징은 다음과 같습니다.
(1) UDP는 연결이 없습니다. 즉, 데이터를 보내기 전에 연결을 설정할 필요가 없습니다(물론 연결이 없습니다). 데이터 전송이 끝나면 해제), 데이터를 전송하기 전의 오버헤드와 지연을 제거합니다.
(2) UDP는 최선형 전달을 사용합니다. 즉, 안정적인 전달이 보장되지 않으므로 호스트는 복잡한 연결 상태 테이블을 유지할 필요가 없습니다(그 안에 많은 매개변수가 있습니다).
(3) UDP는 메시지 지향적입니다. 송신자의 UDP가 응용 프로그램으로 전달한 메시지는 헤더를 추가한 후 IP 계층으로 전달합니다. UDP는 애플리케이션 계층에서 전달된 패킷을 병합하거나 분할하지 않지만 이러한 패킷의 경계를 유지합니다. 이는 애플리케이션 계층이 메시지를 UDP에 전달하는 기간에 관계없이 UDP는 계속해서 메시지를 보냅니다. 즉, 그림 5-4에 표시된 것처럼 한 번에 하나의 메시지를 보냅니다. UDP 수신단에서는 IP 계층에서 전달된 UDP 사용자 데이터그램이 헤더를 제거한 후 그대로 상위 계층 응용 프로세스로 전달됩니다. 즉, UDP는 한 번에 하나의 완전한 메시지를 전달합니다. 따라서 애플리케이션은 적절한 크기의 메시지를 선택해야 합니다. 메시지가 너무 길면 UDP가 메시지를 IP 계층에 전달한 후 전송 중에 IP 계층이 조각화되어 IP 계층의 효율성이 저하될 수 있습니다. 반대로 메시지가 너무 짧으면 UDP가 메시지를 IP 계층에 전달한 후 IP 데이터그램 헤더의 상대적 길이가 너무 길어져 IP 계층의 효율성도 감소합니다.
(4) UDP에는 정체 제어 기능이 없으므로 네트워크 정체로 인해 원본 호스트의 전송 속도가 줄어들지 않습니다. 이는 일부 실시간 애플리케이션에 중요합니다. 많은 실시간 애플리케이션(예: P-전화, 실시간 화상 회의 등)은 소스 호스트가 일정한 속도로 데이터를 전송하도록 요구하고 네트워크 정체가 발생할 때 일부 데이터가 손실되도록 허용하지만 데이터 전송을 허용하지 않습니다. 지연이 너무 많아서. UDP는 이 요구 사항에 잘 맞습니다.
(5) UDP는 일대일, 일대다, 다대일 및 다대다 대화형 통신을 지원합니다.
(6) UDP는 TCP의 20바이트 헤더보다 짧은 8바이트에 불과한 작은 헤더 오버헤드입니다.
(7) 네트워크 환경이 열악한 경우 패킷 손실이 심각합니다.
일부 실시간 애플리케이션에서는 정체 제어 없이 UDP를 사용해야 하지만, 많은 소스 호스트가 고속 실시간 비디오 스트림을 네트워크에 동시에 전송하면 네트워크 정체가 발생할 수 있습니다. 이로 인해 모두가 정상적으로 받을 수 없게 되었습니다. 따라서 혼잡 제어 기능이 없는 UDP는 네트워크에 심각한 혼잡 문제를 일으킬 수 있습니다.
UDP를 사용하는 일부 실시간 애플리케이션도 있는데, 이는 데이터 손실을 줄이기 위해 신뢰할 수 없는 UDP 전송에 대한 적절한 개선이 필요합니다. 이 경우 애플리케이션 프로세스 자체는 애플리케이션의 실시간 성능에 영향을 주지 않고 오류 정정이나 손실된 메시지 재전송과 같은 신뢰성을 향상시키기 위한 몇 가지 조치를 추가할 수 있습니다.
사용자 데이터그램 UDP에는 데이터 필드와 헤더 필드라는 두 가지 필드가 있습니다. 헤더 필드는 매우 간단하며 8바이트(그림 5-5)로 4개의 필드로 구성되며 각 필드의 길이는 2바이트입니다. 각 필드의 의미는 다음과 같습니다.
(1) 소스 포트 소스 포트 번호입니다. 상대방의 답변이 필요할 때 사용하세요. 필요하지 않은 경우 모두 0을 사용하세요.
(2) 대상 포트 대상 포트 번호입니다. 엔드포인트에서 메시지를 전달할 때 사용해야 합니다.
(3) 길이: UDP 사용자 데이터그램의 길이는 최소값이 8입니다(헤더만).
(4) 전송 중 UDP 사용자 데이터그램에 오류가 있는지 확인하고 감지합니다. 실수가 있으면 폐기하십시오.
의사 헤더의 세 번째 필드는 모두 0입니다. 네 번째 필드는 P 헤더의 프로토콜 필드 값이고, UDP 프로토콜 필드의 값은 17입니다. UDP 사용자 데이터그램의 전송 계층은 IP 계층으로부터 UDP 데이터그램을 수신하면 헤더의 대상 포트를 기준으로 해당 포트를 통해 UDP 데이터그램을 전달한 후 최종 대상인 응용 프로세스로 전달합니다.
수신 UDP는 수신한 메시지의 대상 포트 번호가 잘못된 것을 발견하면(즉, 해당 포트 번호에 해당하는 응용 프로세스가 없는 경우) 해당 메시지를 폐기하고 인터넷 제어 메시지를 보냅니다. 프로토콜 ICMP는 발신자에게 "포트에 연결할 수 없음" 오류 메시지를 보냅니다.
"ICMP 응용 프로그램"의 추적 경로는 전송된 UDP 사용자 데이터그램에 대해 의도적으로 잘못된 UDP 포트를 사용하는 것입니다. 결과적으로 ICMP는 "포트에 연결할 수 없음" 오류 메시지를 반환하여 테스트 목적을 달성합니다.
UDP 간 통신에는 포트 번호가 필요하지만 UDP 통신은 연결이 없으므로 소켓을 사용할 필요가 없습니다(TCP 간 통신은 두 소켓 간에 연결이 설정되어야 함).
UDP 사용자 데이터그램 헤더의 체크섬 계산 방법은 다소 특별합니다. 체크섬을 계산할 때 UDP 사용자 데이터그램 앞에 12바이트 의사 헤더가 추가됩니다. 소위 "의사 헤더"는 이 의사 헤더가 UDP 사용자 데이터그램의 실제 헤더가 아니기 때문입니다. 체크섬을 계산할 때만 UDP 사용자 데이터그램 앞에 임시적으로 추가되어 임시 UDP 사용자 데이터그램을 얻습니다. 체크섬은 이 임시 UDP 사용자 데이터그램을 기반으로 계산됩니다. 의사 헤더는 전달되거나 전달되지 않으며 체크섬을 계산하는 데만 사용됩니다.
UDP의 체크섬을 계산하는 방법은 IP 데이터그램 헤더의 체크섬을 계산하는 방법과 유사합니다. 그러나 차이점은 다음과 같습니다. IP 데이터그램 체크섬은 IP 데이터그램의 헤더만 확인하지만 UDP 체크섬은 헤더와 데이터 부분을 모두 확인합니다. 발신자 측에서 첫 번째 단계는 체크섬 필드에 모두 0을 넣는 것입니다. 그런 다음 의사 헤더와 UDP 사용자 데이터그램이 많은 16비트 문자열로 연결되어 있다고 생각하십시오. UDP 사용자 데이터그램의 데이터 부분이 짝수 바이트가 아닌 경우 모두 0인 바이트를 채워야 합니다(그러나 이 바이트는 전송되지 않습니다). 그러면 이러한 16비트 단어의 합이 1의 보수로 계산됩니다. 이 합계의 1의 보수를 체크섬 필드에 쓴 후 UDP 사용자 데이터그램이 전송됩니다. 수신자에서는 수신된 UDP 사용자 데이터그램이 의사 헤더(모두 0으로 채워질 수 있음)와 함께 8자리 이진수로 변환된 다음 이 16비트 단어의 합이 이진 보수에 따라 계산됩니다. . 오류가 없으면 결과는 모두 1이 되어야 합니다. 그렇지 않으면 오류가 발생했음을 나타내며 수신자는 UDP 사용자 데이터그램을 폐기해야 합니다(응용 프로그램 계층으로 넘겨질 수도 있지만 오류가 발생했다는 경고와 함께). 체크섬은 UDP 사용자 데이터그램의 소스 포트 번호와 대상 포트 번호 및 UDP 사용자 데이터그램의 데이터 부분을 확인할 뿐만 아니라 IP 데이터그램의 소스 P 주소와 대상 주소도 확인합니다.
여기서는 사용자 데이터그램의 길이가 15바이트라고 가정하므로 모두 0으로 구성된 바이트가 추가됩니다. 이러한 단순 오류검출 방법은 강력한 오류검출 능력은 없지만 간단하고 빠르게 처리할 수 있다는 장점이 있다.