UDP
는 User Datagram Protocol의 약자로, 인터넷 상에서 데이터를 주고받는 방식 중 하나입니다.
UDP
는 TCP와 달리 연결 지향적이지 않고, 신뢰성이 보장되지 않습니다.
즉, UDP
는 데이터를 보내기 전에 수신자와 연결을 맺거나, 데이터가 정확하고 순서대로 도착했는지 확인하지 않습니다. 그렇기 때문에 TCP보다 속도가 빠르고 오버헤드가 적습니다.
UDP의 장점
은 실시간성이 높은 서비스에 적합하다는 것입니다.
예를 들어, 음성 통화나 비디오 스트리밍과 같은 서비스에서는 데이터가 조금 손실되더라도 전체적인 품질에 큰 영향을 미치지 않습니다.
반면에 TCP
는 데이터가 손실되면 재전송을 요청하고, 순서를 맞추기 위해 버퍼링을 하기 때문에 지연이 발생할 수 있습니다.
UDP의 단점
은 신뢰성이 낮다는 것입니다.
UDP는 데이터를 보낸 후에 수신 여부를 확인하지 않기 때문에, 데이터가 유실되거나 손상되거나 순서가 바뀔 수 있습니다. 또한 UDP는 흐름 제어나 혼잡 제어와 같은 기능을 제공하지 않기 때문에, 네트워크 상황에 따라 데이터 전송 속도를 조절할 수 없습니다.
따라서 UDP는 정확하고 안전한 데이터 전송이 필요한 서비스에는 적합하지 않습니다.
TCP와 마찬가지로 UDP
또한 데이터를 전송할 때 패킷(packet)
이라는 단위로 나누어 보내는데, 이때 패킷에는 헤더(header)와 데이터(data)
라는 두 부분으로 구성됩니다.
헤더
에는 패킷의 출발지와 목적지, 길이, 순서 등의 정보가 들어있고, 데이터
에는 실제로 전송하고자 하는 내용이 들어있습니다.
하지만 UDP
는 TCP와 달리 패킷의 도착 여부나 순서를 확인하지 않기 때문에, 패킷이 손실되거나 순서가 바뀌거나 중복되거나 손상되는 등의 오류가 발생할 수 있습니다.
이러한 오류를 검출하기 위해 UDP는 헤더에 체크섬(checksum)
이라는 값을 추가합니다.
체크섬
은 패킷의 헤더와 데이터를 모두 더한 후 1의 보수를 취한 값으로, 수신 측에서도 같은 방식으로 체크섬을 계산하여 비교합니다. 만약 체크섬이 일치하지 않으면 패킷에 오류가 발생했다고 판단하고 해당 패킷을 버립니다.
체크섬
은 UDP의 오류 검출 기능을 제공하는 유일한 방법입니다.
하지만 체크섬은 간단한 덧셈과 반전 연산으로 이루어져 있기 때문에, 패킷의 일부분이 바뀌어도 체크섬이 같게 나올 수 있는 경우가 있습니다.
예를 들어, 패킷의 데이터가 0100 0001과 0010 0001로 구성되어 있고, 체크섬이 1101 1110일 때, 만약 데이터가 0100 0011과 0010 0000으로 바뀌면 체크섬은 여전히 1101 1110이 됩니다.
데이터:
0100 0001
,0010 0001
체크섬:1101 1110
변환된 데이터:0100 0011
,0010 0000
체크섬:1101 1110
=> 데이터가 변환 되기 전, 후의 체크섬 결과가 같다
=> 오류 검출이 되지 않았다.
따라서 체크섬
은 오류 검출의 확실성을 보장하지 못하며, 보다 정확한 오류 검출을 위해서는 응용 계층에서 추가적인 방법을 사용해야 합니다.
UDP의 체크섬
은 간단하고 빠르게 오류 검출을 할 수 있는 장점이 있지만, 위의 경우와 같이 완벽하지 않다는 단점도 있습니다.