비연결형 트랜스포트 : UDP

Stormi·2022년 7월 30일
1

네트워크

목록 보기
33/37

UDP는 다중화 역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 하지 않는다. 사실 애플리케이션 개발자가 TCP 대신에 UDP를 선택한다면 애플리케이션은 거의 IP와 통신하는 것과 같다. UDP는 애플리케이션 프로세스로 부터 메시지를 가져와서 다중화 및 역다중화 서비스에 대한 출발지 포트 번호 필드와 목적지 포트 번호 필드를 첨부하고 다른 두 필드들을 추가한 후에 최종 세그먼트를 네트워크 계층으로 넘겨준다. 네트워크 계층은 트랜스포트 계층 세그먼트를 IP데이터그램으로 캡슐화하고 세그먼트를 수신 호스트에게 최선형 전달 서비스로 전달한다. 만약 세그먼트가 수신 호스트에 도착한다면, UDP는 세그먼트의 데이터를 해당하는 애플리케이션 프로세스로 전달하기 위해서 목적지 포트번호를 사용한다. UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 사이에서 핸드셰이크를 사용하지 않는다. 이런 이유로 UDP를 비연결형이라고 한다. DNS는 일반적으로 UDP를 사용하는 애플리케이션 계층 프로토콜의 예이다. 호스트에서 DNS 애플리케이션 질의를 생성할때 DNS 질의 메시지를 작성하고 udp에게 메시지를 넘겨준다. 목적지 종단 시스템 상에서 동작하는 udp 개체와 호스트 측 udp는 어떠한 핸드셰이킹도 수행하지 않고 메시지에 헤더 필드를 추가한 후에 최종 세그먼트를 네트워크 계층에 넘겨준다.

질의 호스트에서의 dns애플리케션은 질의에대한 응답을 기다리고 만약 질의 호스트가 응답을 수신하지 못한다면 질의를 다른 네임 서버로 송신하거나 요청한 애플리케이션 응답을 수신할 수 없다는 것을 통보한다

그러면 왜 UDP를 사용할까?

  1. 무슨 데이터를 언제 보낼지에 대해 애플리케이션 레벨에서 더 정교한 제어 : UDP하에서 애플리케이션 프로세스가 데이터를 UDP에게 전달하자마자 UDP는 데이터를 UDP 세그먼트로 만들고, 즉시 그 세그먼트를 네트워크 계층으로 전달한다. tcp는 혼잡제어를 하기 때문에 트랜스포트 계층 tcp송신자를 조절한다. 또한 tcp는 신뢰적인 전달이 얼마나 오래 걸리는지에 관계없이 목적지가 세그먼트의 수신 여부를 확인 응답할 때까지 데이터의 세그먼트 재전송을 계속한다. 실시간 애플리케이션은 종종 최소 전송률을 요구하고 지나치게 지연되는 세그먼트 전송을 원하지 않으며, 조금의 데이터 손실은 허용할 수도 있으므로, tcp서비스 모델은 이들 애플리케이션의 요구와 맞지 않는다. 이들 애플리케이션은 udp를 사용할 수 있고, 애플리케이션의 한부분으로서 udp의 기본 세그먼트 전달외에 필요한 어떤 추가 기능을 구현 할 수 있다.

  2. 연결 설정이 없다 : tcp는 Three way handshake를 사용한다 . 데이터를 전송하기 전에!!
    반면 udp는형식적인 예비동작없이 전송한다. 그러므로 udp연결을 설정하기 위한 지연이 없다. dns는 tcp에서 동작한다면 매우 느릴것이다 따라서 udp를 사용한다.

  3. 연결상태가 없다. tcp 종단 시스템에서 연결상태를 유지한다. 이 연결상태는 수신 버퍼 및 송신 버퍼, 혼잡제어 파라미터, 순서번호와 확인 응답 번호 파라미터를 포함한다. 상태 정보는 tcp의 신뢰적인 데이터 전송 서비스를 구현하고 혼잡 제어를 제공하기 위해서 필요ㅇ하다.

일반적으로 특정 애플리케이션에 할당된 서버는 애플리케이션이 udp에서 동작할 때 좀 더 많은 클라이언트를 수용할 수 있다

  1. 작은 패킷 헤더 오버헤드 : tcp가 세그먼트마다 20바이트의 헤더 오버헤드를 갖는 반면에 udp는 단지 8바이트의 오버헤드를 가진다. udp는 네트워크 관리 데이터를 전달하는데 사용된다. 네트워크 관리 애플리케이션은 네트워크가 혼잡한 상태에 있을 떄 자주 동작해야하므로 이러한 경우에는 udp가 tcp보다 더 좋다. 인터넷 전화, 실시간 비디오 회의, 저장된 오디오와 비디오의 스트리밍같은 멀티미디어 애플리케이션에 종종 사용된다. 이러한 애플리케이션에서 적은 양의 패킷손실은 허용할 수 있다. 인터넷 전화와 화상회의같은 실시간 애플리케이션은 tcp 혼잡 제어가 나쁜 영향을 끼진다. 멀티 미디어 애플리케이션 개발자는 그들의 애플리케이션을 tcp 대신에 udp에서 동작하도록 구현한다. 패킷 손실률이 낮고, 보안적인 이유로 udp트래픽을 막는 일부 조직에서 tcp는 점점 더 스트리밍 매체 전송에 매력적인 프로토콜이 도고 있다. 하지만 udp 혼잡제어의 결어는 udp송신자와 수신자간의 높은 손실률을 초래할 수 있고, tcp 세션을 줄이기도한다.

UDP세그먼트 구조

애플리케이션 데이터는 udp데이터그램의 데이터 필드에 위치시킨다. dns에 대한 데이터 필드에는 질의 메시지나 응답 메시지를 포함한다. 스트리밍 오디오 애플리케이션에서는 오디오 샘플이 데이터 필드를 채운다 포트번호는 목적지 호스트가 목적지 종단 시스템에서 동작하는 역다중화기능을 수행하는 프로세스에게 애플리케이션 데이터를 넘기게해준다. 체크섬은 세그먼트에 오류가 발생했는지를 검사하기 위해 수신호스트에 의해서 사용된다 사실 체크섬은 udp 세그먼트이외에 ip 헤더의 일부 필드도 계산한다. 그러나 전체 그림을 보기위해서 무시하자.

UDP 체크섬

udp체크섬은 오류 검출을 제공한다. 체크섬은 세그먼트가 출발지로부터 목적지로 이동했을 때 udp세그먼트 안의 비트에 대한 변경사항이 있는 지 검사하는 것이다. 송신측에서 udp는 세그먼트 안에 있는 모든 16비트 워드 단위로 더하고 이에 대하여 다시 1의 보수를 수행하며, 덧생과정에서 발생하는 오버플로는 윤회식 자리올림을 한다. 이 결과 값이 udp세그먼트의 체크섬 필드에 삽입된다. 마지막 합은 오버플로가 있고 이를 윤회식 자리올림을 하였음에 유의하라 수신자에서는 체크섬을 포함한 4개의 모든 16비트 워드들이 더한다. 만약 패킷에 어떤한 오류도 있지않다면, 수신자에서의 합은 1111111111111111이 될것이다. 만약 비트중에서 하나라도 0이 있다면 패킷에 오류가 있음을 알 수 있다. 왜 체크섬을 사용하나? 출발지와 목적지 사이의 모든 링크가 오류검사를 제공한다는 보장이 없다. 세그먼트가 라우터의 메모리에 저장될 떄 비트오류가 들어오는 것이 가능하기때문이다. 주어진 링크간의 신뢰성과 메모리의 오류 검사가 보장 되지않기때문에 종단간의 데이터 전송 서비스가 오류 검사를 제공한다면 udp는 종단간의 트랜스포트 계층에서 오류검사를 제공해야만 한다. 트랜스포트 계층은 안전장치로써 오류검사를 제공한다. udp는 오류 검사를 제공하지만 오류를 회복하기 위한 어떤 일도 하지 않는다. 일부 udp 구현에서는 손상된 세그먼트를 그냥 버리고, 다른 구현에서는 경고와 함께 손상된 애플리케이션에게 넘겨준다.

0개의 댓글