⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.
UDP는 앞서 많이 살펴보았다. 간단히 요약하자면 '흐름 제어, 혼잡 제어 등을 수행하지 않고 속도에 치중하여 데이터그램 단위로 패킷을 전송하는 비연결형 프로토콜' 이라고 할 수 있다.
packet loss나 오류에 대해 해결을 하지 않고 데이터만 전송하기 때문에 no frills
, bare-bones
, 또는 best-effort
프로토콜이라고도 한다.
송신자와 수신자 사이에 연결 수립 및 handshaking 과정이 없이도 패킷을 주고받을 수 있기 때문에 connectionless
하다.
패킷이 소실될 수 있다는 단점이 있으나 연결을 수립하지 않기 때문에 RTT를 줄일 수 있고 그에 따라 성능이 향상된다는 장점이 있다.
UDP는 패킷이 어느 정도는 손실되어도 괜찮거나 속도가 중요한 멀티미디어 스트리밍 어플리케이션, 또는 DNS 통신 등에서 사용된다.
만약 UDP 통신에서 신뢰성 있는 연결이 필요하다면 응용 계층에서 신뢰성을 보장해 주거나 혼잡 제어를 할 수 있는 방법이 있어야 한다.
UDP 프로토콜에서 송신자는 '응용 계층의 메시지를 전달받아서 UDP 형식에 맞게 segment 헤더를 추가하여 UDP segment를 만들고, 이를 IP 프로토콜 (network layer)에 전달한다.
수신자는 IP로부터 받은 segment에 checksum
을 이용한 간단한 오류 검증 작업을 거치고, 이후 segment header를 제거하는 과정을 거치며 응용 계층에 전달할 meesage를 만들고, 이를 응용 계층에 demultiplexing한다.
UDP에서 주고받는 segment의 구조는 다음과 같다. 여기서 payload
부분은 응용 계층으로부터 전달받은, 또는 응용 계층으로 전달할 메시지 부분이므로 그 위의 header 부분만 주의깊게 살펴보면 될 것 같다.
먼저 Source Port #
, Destination Port #
는 그 이름에서도 알 수 있듯 보내는 프로세스와 받는 프로세스의 포트 번호가 기록되어 있다. 따라서 이 segment가 누구로부터 전송되어 누구에게 전해져야 하는지 알 수 있다.
그리고 length
는 말 그대로 전체 UDP segment의 길이를 나타내며 checksum
은 에러를 검증하기 위한 숫자가 들어있다.
송신자는 checksum 필드에 이 segment의 오류 여부를 검증할 수 있는 숫자를 기록하여 채워 넣는다.
checksum은 segment content를 1의 보수
방법을 사용하여 덧셈 과정을 거쳐 만든다.
checksum
값이 된다.수신자는 받은 segment로 checksum을 자체적으로 계산하고, 전달받은 헤더에 있는 checksum을 대조하여 오류를 검증한다.
만약 계산한 checksum과 checksum 필드에 있는 숫자가 다르다면 에러가 검출되었다는 것이다.
그러나, checksum 계산결과가 동일하다고 해서 에러가 없다는 것은 아니다.
더하는 숫자 중 마지막 두 비트가 10
인 부분이 01
로, 01
인 부분이 10
으로 변조된 경우와 같이, 데이터가 변조된다고 해도 덧셈 결과가 같을 수 있다. 따라서 이 경우 checksum
으로는 오류 검증이 불가능하다.
다음은 TCP segment의 구조, 신뢰성 보장 및 흐름, 혼잡 제어 등 TCP 프로토콜의 세부사항에 대해서 알아본다...!