[지식창고]/네트워크

[컴퓨터 네트워크] 3.3 connectionless transport : UDP

개발새발주발 2023. 4. 10. 19:13
728x90

현재 우리는 Trasnport layer에 대해 알아보고 있다. 

3장에서 주구장창 말하겠지만 Transpor tlayer은 ent-to-end 에서 데이터 전송의 신뢰성을 제공한다는 것이다. 소켓을 통하여 신뢰성을 보장하는 계층이다. UDP, TCP 프로토콜을 주로 사용하여 UDP, TCP에 대한 설명을 자세히 해보려한다. 

 

이번 포스팅에서는 연결비지향성 UDP에 대해 배워볼 것이다. 여러번 반복해서 나온 내용이니 빨리 짚고 넘어가보겠다. 

 

UDP : User Datagram Protocol [RFC 768]

no frills, bare bones Internet transport protocol : 아무런 장식없고 필수적인 것만을 갖춘 프로토콜  

best effort 서비스 :

** 네트워크에서 데이터를 전송할 때 최선을 다하지만 데이터의 신뢰성은 보장하지 않는 서비스

- lost 패킷이 유실될 수 있음 

- delivered out-of-order to app  순서대로 패킷이 전송되지 않을 수 있음 

 

connectionless : 연결비지향성

- handshaking 과정이 없음 

- 각각의 UDP segment는 독립적으로 다루어짐 

 

UDP used by : 

- 주로 스트리밍 멀티미디어 앱 (속도에는 민감하지만 정확성에는 크게 영향을 미치지 않는 경우 - ex. 실시간) 

- DNS

- SNMP(Simple Network Management Protocol) , RIP(Routing Information Protocol)

 

reliable transfer over UDP 데이터 전송의 신뢰성을 보장하기 위해서! :

- add reliablility at application layer 

→ UDP가 reliability를 주지 않는다 즉, application이 reliability를 제공해주어야한다. 

- application-specific error recovery 

→ 애플리케이션마다 데이터의 유실, 중복, 순서 바뀜 등의 오류에 대한 처리 방법이 다르기 때문에 각 애플리케이션마다 오류 복구 기능을 구현해야한다. 

 

 


Segment header 

UDP의 segment header를 살표보자. 

1. 송신 포트 번호(Source Port Number) : UDP 데이터그램을 보내는 컴퓨터의 포트 번호

2. 수신 포트 번호(Destination Port Number) : UDP 데이터그램을 받는 컴퓨터의 포트 번호 

3. 데이터그램 길이(Length) : UDP 데이터그램의 전체 길이(헤더와 데이터) 

4. 체크섬 (Checksum) : 오류 검출을 위한 필드. 

 

UDP의 장점 : 

- no connection establishment : (딜레이가 추가될 수 있는) 연결설정 없음

- simple : no connection state at sender, receiver : 연결이 없기 때문에 간단함

- small header size : header의 크기가 작음 

- no congestion control : 혼잡제어가 없음, 즉 원하는 만큼 빠르게 데이터를 전송할 수 있음 

 

 

앞서 보았던 UDP구조 중 약간 생소한 것이 있다. 바로 checksum ! 


UDP checksum

Goal : 세그먼트 전송 과정에서 'error'가 있는지 확인 = 깨진 bit가 있는지 확인한다 ! 

 

sender : 

  • UDP에서 데이터를 처리할 때 16비트 단위로 데이터를 나누어서 처리한다. 즉, 데이터그램의 내용과 헤더를 모두 16비트 정수의 연속으로 처리한다. 
  • checksum : UDP에서 체크섬을 계산하는 방법 - 데이터그램의 내용과 헤더의 합을 구한 후, 1의 보수 합을 구하는 방식으로 계산 
    체크섬 - 데이터의 무결성을 검사하는 데 사용 
  • UDP데이터그램의 송신자가 체크섬 값을 계산한 후, 계산된 체크섬 값을 UDP 체크섬 필드에 저장한다. 송신다가 계산한 체크섬 값과 자신이 계산한 체크섬 값을 비교하여 데이터의 무결성 확인 

receiver : 

  • UDP 수신자가 데이터그램을 받은 후, 데이터 그램의 체크섬을 계산 → 수신자는 데이터 그램의 내용과 헤더를 모두 16 비트 정수의 연속으로 처리하여 체크섬을 계산 
  • 계산된 체크섬 값과 데이터그램의 체크섬 필드 값이 같은지 확인
    • NO - error detected : 오류가 감지되었음
    • YES - no error detected : 오류가 감지되지 않음 (데이터의 무결성 보장 but 데이터의 정확성을 보장하진 않음) 

 

Internet Checksum 예제 

Note : 더하는 두 숫자의 자릿수가 같을 경우, 자릿수 별로 더한 결과에 대해 각각의 자릿수에서 carry가 발생할 수 있음을 의미한다. 

만약 더한 두 숫자의 가장 높은 자릿수에서 carry가 발생한다면, 이 캐리 값을 최종 결과에 추가해주어야한다. 이것은 1의 보수 checksum을 계산할 때 특히 중요한데, 이 때 carry값을 고려하지 않으면 checksum값이 일치하지 않는 경우가 발생할 수 있다. 따라서, 체크섬 계산을 할 때는 모든 carry 값을 고려하여 정확한 체크섬 값을 계산해야한다. 

 

 

UDP Checksum 

UDP Checksum 은 UDP 프로토콜에서 오류 검출을 위해 사용되는 기능이다. 데이터그램의 내용과 헤더를 모두 16 비트 정수의 연속으로 처리하여 체크섬 값을 계산한다! 계산된 체크섬 값은 송신자가 UDP데이터그램의 체크섬 필드에 삽입한다. 

 

수신자는 데이터그램을 받은 후, 데이터그램의 체크섬을 계산하여 수신된 체크섬 값과 비교한다. 만약 계산된 체크섬 값과 수신된 체크섬 값이 다르다면 오류가 발생한 것으로 간주하고 데이터그램을 폐기한다. 

 

UDP checksum은 단순한 오류 검출 기능이므로, 데이터의 정확성을 보장하는 것은 아니다 ! 따라서 UDP를 사용하는 경우에는 데이터의 정확성을 추가적으로 보장하기 위해 다른 메커니즘을 사용해야한다 ~ ! 


UDP에서는 이러한 checksum을 사용하여 데이터가 잘 갔는지, 안 갔는지 확인한다 ! 

UDP는 비교적 간단하다. 우리는 앞으로 TCP와 TCP에서 데이터가 잘 갔는지 안갔는지 확인하는 방법에 대해 배울 것인데 다소 어렵고 복잡한 과정이 포함되어있다. 열심히 배우자 ~ 


[출처 및 참고]

 

한국항공대학교 「컴퓨터 네트워크」 강의 자료