[Network 스터디 3회차] UDP, 신뢰적 데이터 전송의 원리 정리

노치현·2023년 4월 21일
0

[CS] 네트워크

목록 보기
3/7
post-thumbnail

UDP

UDP

UDP(User Datagram Protocol)는 데이터를 데이터그램 단위로 처리하는 비연결형, 신뢰성이 없는 전송 프로토콜

특징

  • UDP는 흐름제어, 오류제어 또는 손상된 세그먼트의 수신에 대한 재전송을 하지 않아서, 세그먼트의 순서가 바뀐다거나, 전송 중 내용이 손실될 수 있다.
  • TCP보다 간단하고 빠르다.(작은 header size, 흐름제어 X)
  • 네트워크 부하가 적지만, 신뢰성 있는 데이터의 전송을 보장하지 못하기에, 스트리밍 서비스같이 연속성이 중요한 서비스에 사용된다.

TCP vs UDP

TCPUDP
연결지향형 프로토콜비연결지향형 프로토콜
가상 회선 방식데이터그램 방식
수신여부 확인 O수신여부 확인 X
1:1 통신1:1, 1:N, N:N통신
전송순서 보장 O전송순서 보장 X
신뢰성 높음(데이터 재전송O)신뢰성 낮음(데이터 재전송X)
전송속도 느림전송속도 빠름
SegmentDatagram
HTTP, SMTP, FTPDNS, 스트리밍 서비스

심화

UDP 체크섬(checksum)


 //사진 출처: https://heegyukim.medium.com/computer-network-7-udp-86d45323d5c7

UDP 체크섬은 네트워크를 통해서 전송된 데이터의 값이 변경되었는지(무결성)를 검사하는 값으로, 수신된 데이터에 오류여부를 확인한다.

  • UDP 헤더는 송신 및 수신 포트번호, 데이터 길이, 체크섬 값으로 구성된다.
  • 체크섬 계산법: 가상 헤더(송신 및 수신 IP 주소, 프로토콜 ID, UDP 길이), UDP 헤더, 데이터들을 16비트 단위로 쪼개 전부 더하고, 1의 보수를 취한다. 만약, 비트 중에서 하나라도 0이 잇다면 패킷에 오류가 있음을 의미
  • 보안기능을 제공하는 것은 아니므로, 보안적인 조치가 필요하다.

신뢰적 데이터 전송

RDT(Reliable Data Transfer protocol): 하위 계층에서 상위 계층에 데이터를 전송할 때 전송된 데이터가 손상, 손실되지 않게 보장하는 프로토콜

신뢰적 데이터 전송을 위해서는 다양한 방법이 사용될 수 있습니다. 대표적인 방법으로는 Stop-and-wait, Sliding Window, Go Back N, Selective Repeat 등의 프로토콜이 있습니다. 이러한 프로토콜은 일련번호, ACK, NACK, 윈도우 등의 기능을 이용하여 데이터의 손실이나 손상을 감지하고, 해당 데이터 블록을 재전송하거나, 누락된 데이터 블록을 요청하는 방식으로 동작합니다.

  • UDP와 TCP가 구분되는 가장 큰 차이

전송 후 대기 프로토콜

Stop-and-Wait Protocol: 데이터 전송에서 사용되는 방법 중 하나로, 송신 측에서 하나의 패킷을 전송하고, 수신 확인 응답(ACK)를 받은 후에 다음 패킷을 전송하는 방식

송신자는 전송할 데이터를 일정한 크기의 데이터 블록으로 나눠서 일련번호와 함께 보내고,수신자는 해당 데이터 블록을 받은 후에는 일련번호와 함께 ACK를 송신자에게 보내어 해당 데이터 블록을 수신했다는 것을 알립니다.
송신자는 ACK를 받은 후에야 다음 데이터 블록을 보내게 됩니다.
만약 ACK를 받지 못하거나 ACK가 손상된 경우에는 해당 데이터 블록을 다시 전송해야 합니다. 이때, 송신자는 해당 데이터 블록을 재전송하고, 수신자는 다시 해당 데이터 블록을 받아서 재조립합니다.

  • 특징: 패킷 단위 전송(하나의 패킷만 전송), 슬라이딩 윈도우 방식
  • 장점: 간단한 구현, 오류 검출 및 복구가 용이
  • 단점: 대역폭 이용 효율성 저하, 처리속도 저하(한 개의 프레임만 전송 가능해서 성능이 좋지 못하고, 응답신호가 유실되거나 지연시 타임아웃으로 재전송하게 되면, 중복된 프레임 발생 가능성 O)

파이프라인 프로토콜

Pipelined Protocol: 데이터 전송을 여러 단계로 나누어 전송하고 처리하는 방식

송신자는 일정한 개수의 데이터 블록을 묶어서 보내는데, 이를 윈도우(window)라고 한다. 윈도우의 크기는 수신자의 버퍼 크기에 따라 조절되며, 수신자는 윈도우 안에서 최대한 많은 데이터 블록을 받아서 재조립합니다.
만약 수신자가 윈도우 안에서 데이터 블록을 받지 못하거나 손상된 데이터를 받은 경우, 해당 데이터 블록은 재전송해야하는 데이터 블록만 재전송하며, 그 외의 데이터 블록은 계속해서 전송됩니다.

  • 특징: 대량의 데이터를 효율적으로 전송하고 처리하기 위해 개발된 프로토콜
  • 장점: 대역폭 이용 효율성이 높음(여러 개의 패킷이 동시에 전송될 수 있음), 프로토콜 병목현상 최소화(각 단계에서 발생한 병목현상은 다른 단계에 영향을 끼치지 X)
  • 단점: 오류 처리의 어려움(각 단계에서 발생한 오류 처리가 어려움), 구현의 어려움(여러 단계이기에, 구현이 복잡), 응답 시간의 지연(전체적인 처리 시간이 늘어나 응답 시간이 더디게 될 수 O)

// 버퍼링: 입출력 장치(저속)와 CPU(고속)의 속도차를 RAM을 활용하여 완충하는 것

심화

슬라이딩 윈도우

Sliding Window: 송신 측이 전송한 패킷의 수신 여부에 따라 윈도우의 크기를 조절하여 데이터 전송을 조절하는 방식

송신자는 일정한 개수의 데이터 블록을 묶어서 윈도우(window)라는 블록으로 보내는데, 윈도우의 크기는 수신자의 버퍼 크기에 따라 조절됩니다. 윈도우 안에서는 최대한 많은 데이터 블록을 보낼 수 있습니다.

수신자는 윈도우 안에서 수신한 데이터 블록을 일련번호를 기반으로 재조립합니다. 그리고, 윈도우 안의 일련번호를 기준으로 다음에 받아야할 데이터 블록의 일련번호를 추적합니다. 수신자는 윈도우 안에서 받아야할 데이터 블록을 모두 받은 후에는 윈도우를 이동시켜서 다음 데이터 블록들을 받을 수 있도록 합니다.

송신자는 ACK를 수신하지 못한 데이터 블록이 있다면, 해당 블록부터 다시 전송을 시작합니다. 이때, 윈도우의 크기는 변하지 않습니다. ACK를 수신한 데이터 블록은 윈도우에서 제거되고, 다음 데이터 블록을 전송하기 위해 윈도우를 이동시킵니다.

  • 장점: 대역폭 이용 효율성이 높음, 신뢰성(수신 측에서 패킷을 제대로 수신했는지 확인 후 다음 패킷을 요청)
  • 단점: 오버헤드(패킷의 수신여부를 확인하기 위한 추가적인 오버헤드가 필요), 응답 시간의 지연(수신 측에서 패킷을 제대로 수신했는지 확인하는 과정에서 지연 시간이 발생할 수 있음), 일련번호의 중복이나 오류가 발생할 경우 데이터의 손상이나 블록의 순서가 있음

Go Back N

GBN: 데이터 전송에서 오류 처리와 재전송을 위해 사용되는 방법 중 하나로, 송신 측에서 여러 패킷을 전송하고, 수신 측에서 순서대로 수신하며, 오류가 발생한 패킷부터 다시 전송을 요청하는 방식 (ACK 없이 보내는 방식)

송신자는 데이터 블록을 보낼 때 일련번호와 함께 보내며, 수신자는 일련번호를 이용하여 받아야 할 데이터 블록을 추적합니다. 수신자는 데이터 블록을 받으면 확인 응답(ACK)을 보내고, 송신자는 해당 ACK를 받으면 다음 데이터 블록을 보냅니다.
만약 수신자가 일련번호가 누락된 데이터 블록을 받거나 손상된 데이터 블록을 받은 경우, 수신자는 해당 데이터 블록부터 다시 받기를 요청합니다.이때, 송신자는 요청된 데이터 블록부터 다시 전송을 시작하며, 이전에 보낸 데이터 블록들은 모두 재전송됩니다. 이를 Go Back N이라고 합니다.

  • 특징: 연속적인 패킷 전송, 빠른 재전송(오류가 발생한 패킷부터 다시 전송을 요청), 슬라이딩 윈도우 방식(송신 측이 전송한 패킷이 수신 측에서 확인되기 전까지 윈도우 크기를 유지)
  • 장점: 신뢰성이 높음(오류가 발생한 패킷부터 다시 전송하기에, 신뢰성이 높음), 구현이 용이
  • 단점: 전체 처리 속도 감소(오류가 발생한 패킷부터 다시 전송 요청하기 때문), 대역폭 이용 효율성 저하

Selective Repeat

SR: 데이터 전송에서 오류 처리와 재전송을 위해 사용되는 방법 중 하나로, 수신 측에서 오류가 발생한 패킷만 다시 요청하고, 정상적으로 수신된 패킷은 바로 처리하는 방식(패킷을 모두 버리지 않고 keep해두는 방식)

송신자는 데이터 블록을 보낼 때 일련번호와 함께 보내며, 수신자는 일련번호를 이용하여 받아야 할 데이터 블록을 추적합니다. 수신자는 데이터 블록을 받으면 해당 블록의 일련번호를 확인 응답(ACK)로 송신자에게 보내고, 수신자는 일련번호를 기준으로 버퍼에 저장합니다.
만약 수신자가 일련번호가 누락된 데이터 블록을 받거나 손상된 데이터 블록을 받은 경우, 수신자는 해당 데이터 블록만 재전송을 요청합니다. 이때, 송신자는 요청된 데이터 블록만 다시 전송하며, 이전에 보낸 데이터 블록들은 전송하지 않습니다.

  • 특징: 개별적인 패킷 전송 / 빠른 재전송 / 슬라이딩 윈도우 방식
  • 장점: 대역폭 이용 효율성 증가 / 처리 속도 개선
  • 단점: 구현의 어려움, 오버헤드, 오류처리의 어려움

어려웠던 점, 반성하고 싶은 점 / 개선할 방법

어려웠던 점

  • 레퍼런스를 이것저것 찾아봤으나, 남에게 설명할 수 있을 정도로 이해되지 않았다.

개선할 방법

  • 원리를 이해하고, 한 번에 이해한다기보다 나중에도 다시 봄으로써 이해해야겠다.
profile
느리지만 굳세고 단단하게 성장하고픈 FE

0개의 댓글