UDP(User Datagram Protocol)는 데이터를 데이터그램 단위로 처리하는 비연결형, 신뢰성이 없는 전송 프로토콜
특징
TCP vs UDP
TCP | UDP |
---|---|
연결지향형 프로토콜 | 비연결지향형 프로토콜 |
가상 회선 방식 | 데이터그램 방식 |
수신여부 확인 O | 수신여부 확인 X |
1:1 통신 | 1:1, 1:N, N:N통신 |
전송순서 보장 O | 전송순서 보장 X |
신뢰성 높음(데이터 재전송O) | 신뢰성 낮음(데이터 재전송X) |
전송속도 느림 | 전송속도 빠름 |
Segment | Datagram |
HTTP, SMTP, FTP | DNS, 스트리밍 서비스 |
//사진 출처: https://heegyukim.medium.com/computer-network-7-udp-86d45323d5c7
UDP 체크섬은 네트워크를 통해서 전송된 데이터의 값이 변경되었는지(무결성)를 검사하는 값으로, 수신된 데이터에 오류여부를 확인한다.
RDT(Reliable Data Transfer protocol): 하위 계층에서 상위 계층에 데이터를 전송할 때 전송된 데이터가 손상, 손실되지 않게 보장하는 프로토콜
신뢰적 데이터 전송을 위해서는 다양한 방법이 사용될 수 있습니다. 대표적인 방법으로는 Stop-and-wait, Sliding Window, Go Back N, Selective Repeat 등의 프로토콜이 있습니다. 이러한 프로토콜은 일련번호, ACK, NACK, 윈도우 등의 기능을 이용하여 데이터의 손실이나 손상을 감지하고, 해당 데이터 블록을 재전송하거나, 누락된 데이터 블록을 요청하는 방식으로 동작합니다.
Stop-and-Wait Protocol: 데이터 전송에서 사용되는 방법 중 하나로, 송신 측에서 하나의 패킷을 전송하고, 수신 확인 응답(ACK)를 받은 후에 다음 패킷을 전송하는 방식
송신자는 전송할 데이터를 일정한 크기의 데이터 블록으로 나눠서 일련번호와 함께 보내고,수신자는 해당 데이터 블록을 받은 후에는 일련번호와 함께 ACK를 송신자에게 보내어 해당 데이터 블록을 수신했다는 것을 알립니다.
송신자는 ACK를 받은 후에야 다음 데이터 블록을 보내게 됩니다.
만약 ACK를 받지 못하거나 ACK가 손상된 경우에는 해당 데이터 블록을 다시 전송해야 합니다. 이때, 송신자는 해당 데이터 블록을 재전송하고, 수신자는 다시 해당 데이터 블록을 받아서 재조립합니다.
Pipelined Protocol: 데이터 전송을 여러 단계로 나누어 전송하고 처리하는 방식
송신자는 일정한 개수의 데이터 블록을 묶어서 보내는데, 이를 윈도우(window)라고 한다. 윈도우의 크기는 수신자의 버퍼 크기에 따라 조절되며, 수신자는 윈도우 안에서 최대한 많은 데이터 블록을 받아서 재조립합니다.
만약 수신자가 윈도우 안에서 데이터 블록을 받지 못하거나 손상된 데이터를 받은 경우, 해당 데이터 블록은 재전송해야하는 데이터 블록만 재전송하며, 그 외의 데이터 블록은 계속해서 전송됩니다.
// 버퍼링: 입출력 장치(저속)와 CPU(고속)의 속도차를 RAM을 활용하여 완충하는 것
Sliding Window: 송신 측이 전송한 패킷의 수신 여부에 따라 윈도우의 크기를 조절하여 데이터 전송을 조절하는 방식
송신자는 일정한 개수의 데이터 블록을 묶어서 윈도우(window)라는 블록으로 보내는데, 윈도우의 크기는 수신자의 버퍼 크기에 따라 조절됩니다. 윈도우 안에서는 최대한 많은 데이터 블록을 보낼 수 있습니다.
수신자는 윈도우 안에서 수신한 데이터 블록을 일련번호를 기반으로 재조립합니다. 그리고, 윈도우 안의 일련번호를 기준으로 다음에 받아야할 데이터 블록의 일련번호를 추적합니다. 수신자는 윈도우 안에서 받아야할 데이터 블록을 모두 받은 후에는 윈도우를 이동시켜서 다음 데이터 블록들을 받을 수 있도록 합니다.
송신자는 ACK를 수신하지 못한 데이터 블록이 있다면, 해당 블록부터 다시 전송을 시작합니다. 이때, 윈도우의 크기는 변하지 않습니다. ACK를 수신한 데이터 블록은 윈도우에서 제거되고, 다음 데이터 블록을 전송하기 위해 윈도우를 이동시킵니다.
GBN: 데이터 전송에서 오류 처리와 재전송을 위해 사용되는 방법 중 하나로, 송신 측에서 여러 패킷을 전송하고, 수신 측에서 순서대로 수신하며, 오류가 발생한 패킷부터 다시 전송을 요청하는 방식 (ACK 없이 보내는 방식)
송신자는 데이터 블록을 보낼 때 일련번호와 함께 보내며, 수신자는 일련번호를 이용하여 받아야 할 데이터 블록을 추적합니다. 수신자는 데이터 블록을 받으면 확인 응답(ACK)을 보내고, 송신자는 해당 ACK를 받으면 다음 데이터 블록을 보냅니다.
만약 수신자가 일련번호가 누락된 데이터 블록을 받거나 손상된 데이터 블록을 받은 경우, 수신자는 해당 데이터 블록부터 다시 받기를 요청합니다.이때, 송신자는 요청된 데이터 블록부터 다시 전송을 시작하며, 이전에 보낸 데이터 블록들은 모두 재전송됩니다. 이를 Go Back N이라고 합니다.
SR: 데이터 전송에서 오류 처리와 재전송을 위해 사용되는 방법 중 하나로, 수신 측에서 오류가 발생한 패킷만 다시 요청하고, 정상적으로 수신된 패킷은 바로 처리하는 방식(패킷을 모두 버리지 않고 keep해두는 방식)
송신자는 데이터 블록을 보낼 때 일련번호와 함께 보내며, 수신자는 일련번호를 이용하여 받아야 할 데이터 블록을 추적합니다. 수신자는 데이터 블록을 받으면 해당 블록의 일련번호를 확인 응답(ACK)로 송신자에게 보내고, 수신자는 일련번호를 기준으로 버퍼에 저장합니다.
만약 수신자가 일련번호가 누락된 데이터 블록을 받거나 손상된 데이터 블록을 받은 경우, 수신자는 해당 데이터 블록만 재전송을 요청합니다. 이때, 송신자는 요청된 데이터 블록만 다시 전송하며, 이전에 보낸 데이터 블록들은 전송하지 않습니다.
어려웠던 점, 반성하고 싶은 점 / 개선할 방법
어려웠던 점
개선할 방법