UDP는 어떤 일을하나요?
TCP에는 안정적인 통신을 보장하는 논리가 있지만 UDP는 하위 계층의 IP 및 사물을 사용하여 설정된 채널을 따라 순진하게 정보를 보냅니다.
UDP는 실제로 어떤 일을합니까? 이름이있는 이유에 대해 좀 혼란 스러워요.
답변
흥미로운 관점과 질문!
예, 대부분의 UDP 는 UDP 포트 의 개념을 정의하여 동일한 IP 주소를 사용하여 여러 애플리케이션이 공존 할 수있는 표준 수단을 제공 합니다.
UDP에 대한 흥미로운 부분은 네트워크 프로토콜이 아니라 운영 체제와 소켓 라이브러리에 의해 구현 된 API입니다. UDP 사양 자체의 일부는 아니지만 POSIX 소켓 API와 같은 추상화를 사용하여 UDP와 같은 프로토콜을 기반으로 소프트웨어를 쉽게 개발할 수있는 기능은 인터넷 프로토콜 스택의 성공의 핵심입니다.
UDP는 TCP와 같은 전송 프로토콜입니다. 즉, 애플리케이션이 IP를 사용하는 프로토콜을 제공합니다. TCP와 마찬가지로 UDP에는 응용 프로그램이 바인딩되는 주소 지정 (포트)이 있으므로 바인딩 된 응용 프로그램으로 향하는 데이터 그램이 UDP에 의해 올바른 응용 프로그램으로 전송됩니다. IPv4 용 UDP는 선택적 체크섬도 제공하지만 IPv6에는 체크섬이 필요합니다.
UDP는 메시지 기반 프로토콜이며 TCP는 스트림 기반 프로토콜입니다. UDP는 응용 프로그램 계층 프로토콜이 TCP의 모든 기능을 제공하지는 않지만 일부를 제공하는 데 유용 할 수 있으며 많은 응용 프로그램 또는 응용 프로그램 계층 프로토콜은 TCP의 안정성을 사용할 수 없거나 손상을 입 힙니다. 예를 들어 VoIP, 비디오 또는 심지어 게임과 같은 실시간 프로토콜은 더 이상 유용하지 않은 데이터 그램을 사용할 수 없으므로 TCP가 데이터를 다시 보내면 나쁜 결과가 발생합니다. VoIP를 사용할 때 다른 사람이 대답하면 "오, 지옥"이 아니라 "안녕하세요"라는 말을 듣고 싶어합니다.
멀티 캐스트와 같은 다른 것들은 단방향이지만 TCP는 두 응용 프로그램간에 양방향 연결을 설정해야하는 반면 멀티 캐스트 응용 프로그램은 많은 수신자에게 데이터를 보냅니다. TCP는 실제로 그렇게 할 수 없지만 멀티 캐스트와 함께 UDP를 사용하는 것은 쉽습니다.
UDP를 활용하는 더 높은 수준의 프로토콜이 실제로이를 사용하는 방법을 살펴 보시기 바랍니다. 고전적이고 잘 문서화 된 예는 DNS (최소한 대부분의 경우 TCP를 통해 DNS를 수행 할 수 있지만 실제로는 드물다), DHCP, NTP 및 PTP입니다.
이 모든 프로토콜에는 몇 가지 공통점이 있습니다.
- 그들은 동일한 시스템에서 다른 서비스와 공존 할 수 있는지에 관심이 있습니다.
- 그들은 메시지의 어느 정도 데이터 무결성에 관심이 있습니다.
- 그들은있는 메시지 지향하지 류를 지향.
- 주로 매우 짧고 자주 드물게 데이터를 교환합니다.
처음 두 지점은 TCP를 포함한 합리적인 전송 계층 프로토콜 (TIPC와 같은 특이한 것 포함)에 의해 사소하게 다루어집니다. 그러나 TCP는 메시지 지향 프로토콜에 대한 스트림 위에 자체 메시지 프레임 프로토콜을 롤링해야하기 때문에 다른 두 지점에 대해 끔찍 합니다. 중요한 연결 시작 및 유지 관리 오버 헤드는 짧은 간헐적 인 데이터 교환에 매우 비효율적임을 의미합니다. .
다시 말해서, UDP의 '특징'은 전혀 걱정할 가치가 없습니다. TCP가 이러한 유형의 애플리케이션에 대해 수행하는 방식에 방해가되지 않고 처음 두 지점에 대해 최소한의 기능 만 제공한다는 것입니다. 또한 사소한 점에서 TCP보다 약간의 이점이 있습니다.순전히 하드웨어 또는 1Kb 미만의 RAM과 코드 용 저장 공간이 적은 초소형 시스템에서 구현합니다 (이는 BOOTP, RARP, TFTP 및 기타 부트 스트랩 프로토콜이 원래 사용했던 이유의 일부입니다). 단점은 매우 신중한 관리없이 오래 지속되는 상태 저장 '연결'을 사용하는 경우 특정 유형의 공격에 대한 신뢰성과 취약성이지만이를 사용하고이를 처리하는 프로토콜이 자체적으로 처리합니다 (TFTP 참조). 속도를 희생하더라도 신뢰성 문제).
이제 훨씬 적은 오버 헤드로 TCP와 유사한 기능 세트 (또는 훨씬 더 포괄적 인 기능 세트)를 달성하고 여전히 메시지 지향 통신을 허용 할 수있는 옵션이 있습니다 (기본 예제에는 RUDP, DCCP 및 SCTP 포함). 여러 가지 이유로 잡 혔기 때문에 UDP는 그저 주변에 붙어 있습니다.
UDP가 "연결"을 설정할 필요가 없다는 중요한 점이 있습니다.
예를 들어, 클라이언트가 IP 주소가없고 기존 네트워크 환경에 대한 지식이없는 TCP 위에 DHCP를 구현하는 것은 불가능하지는 않지만 어렵고 복잡합니다. 따라서 클라이언트가 대상 주소를 모르고 소스 주소가 없기 때문에 "연결을 설정"하는 것은 의미가 없습니다. UDP는 브로드 캐스트가 기존 네트워크에 대한 DHCP 요청을 허용함으로써이를 쉽게 수행 할 수 있으며, 하나의 DHCP 서버가 제안으로 응답 할 것입니다.
마찬가지로, 대부분의 네트워크 브로드 캐스트 작업은 모든 단일 호스트가 수락하고 응답하는 "브로드 캐스트 대상"과 "연결"할 수 없기 때문에 TCP *에서는 거의 의미가 없습니다. 시퀀스 번호 및 체크섬과 같은 것은 합산되지 않습니다.
* 우리는 MPI_Bcast(). 그들은이 질문의 범위를 벗어났습니다.
나에게 UDP가하는 핵심은 소스 및 대상 포트 번호를 모두 제공하므로 여러 다른 응용 프로그램 프로토콜뿐만 아니라 동일한 응용 프로그램 프로토콜의 여러 인스턴스도 허용하는 것입니다.
원칙적으로 IP 위에 직접 애플리케이션 프로토콜을 빌드하고 이에 대한 프로토콜 번호를 얻을 수 있습니다. 각 호스트에 응용 프로그램 프로토콜의 인스턴스가 하나만 있으면 제대로 작동하지만 각 호스트에 동일한 응용 프로그램 프로토콜의 여러 인스턴스가 있으면 제대로 작동하지 않습니다.
별도의 소스 및 대상 포트 번호를 갖고 클라이언트가 임시 포트를 사용하는 동안 서버가 잘 알려진 포트를 사용하고 응답이 포트 번호를 스왑하는 규칙을 제거함으로써 UDP는 동일한 호스트에서 동일한 응용 프로그램 프로토콜의 여러 인스턴스를 지원합니다.
상위 계층 (App)에 다중화 / 역 다중화 서비스를 제공하므로 서로 다른 프로세스의 데이터를 처리 할 수 있습니다. 체크섬을 사용하면 오류 감지도 가능합니다.
UDP는 이러한 간단한 프로토콜이므로 연결을 설정하거나 신뢰할 수있는 데이터 전송없이 빠른 통신을 선호하는 상위 계층 프로토콜에 유용합니다.
그 외에도 DNS와 같은 일부 프로토콜은 목적을 위해 UDP를 사용합니다.
DHCP가 UDP에 100 % 의존하고 있으며 매우 널리 사용된다는 점에 유의하는 것이 중요하다고 생각합니다.
또한 DNS는 역사적으로 UDP를 사용했으며 UDP 패킷에 대한 응답이 너무 클 때만 TCP를 사용합니다.