UDP 소켓의 특성
UDP의 동작원리를 편지를 예로 들어서 설명해보겠습니다. 편지를 보내기 위해서는 일단 편지봉투에다가 보내는 사람과 받는 사람의 주소정보를 써 넣어야 합니다. 그리고 우표를 붙여서 우체통에 넣어주면 끝인데, 편지의 특성상 보내고 나서 상대방의 수신여부를 확인할 길은 없습니다. 물론 전송도중에 편지가 분실될 확률도 있습니다. 즉, 편지는 신뢰할 수 없는 전송방법입니다. 이와 마찬가지로 UDP 소켓은 신뢰할 수 없는 전송방법을 제공합니다.
여기서 TCP 소켓이 무조건 더 좋은가? 라고 생각할 수 있는데, 물론 TCP가 신뢰성 측면에서는 더 좋은 소켓입니다. 하지만 UDP는 TCP보다 훨씬 간결한 소켓입니다. ACK와 같은 응답 메시지를 보내는 일도 없고, SEQ와 같이 패킷에 번호를 부여하는 일도 없습니다. 때문에 상황에 따라서는 TCP보다 더 좋은 성능을 발휘합니다. 그리고 UDP도 TCP만큼은 아니지만 생각보다 데이터의 손실이 자주 발생하지는 않아서, 신뢰성보다 성능이 중요시되면 UDP가 더 좋은 선택이 될 수도 있습니다.
바로 앞 포스트에서 TCP는 신뢰성 없는 IP를 기반으로 신뢰성 있는 데이터 송수신을 위해 흐름 제어를 한다고 했는데, 이 흐름제어가 UDP에는 존재하지 않습니다. 이 흐름제어가 UDP와 TCP를 구분짓는 가장 큰 차이점입니다.
UDP의 내부 동작원리
위 그림에서 보이듯이 호스트 B를 떠난 UDP 패킷이 호스트 A에게 전달되도록 하는 것은 IP의 역할이지만, 이렇게 전달된 UDP 패킷을 호스트 A 내에 존재하는 UDP 소켓 중 하나에게 최종 전달하는 것은 IP의 역할이 아니고 UDP의 역할입니다. 즉, UDP의 역할 중 가장 중요한 것은 수신된 패킷을 PORT 정보를 참조해 최종 목적지인 UDP 소켓에 전달하는 것입니다.
'네트워크 프로그래밍 > C' 카테고리의 다른 글
[네트워크 프로그래밍/C] UDP의 데이터 송수신 특성과 UDP에서의 connect 함수호출 (0) | 2022.02.26 |
---|---|
[네트워크 프로그래밍/C] UDP 기반 서버, 클라이언트의 구현 (0) | 2022.02.25 |
[네트워크 프로그래밍/C] TCP의 이론적 내용 (0) | 2022.02.25 |
[네트워크 프로그래밍/C] TCP 기반 서버, 클라이언트 구현 (0) | 2022.02.22 |
[네트워크 프로그래밍/C] TCP와 UDP에 대한 이해 (0) | 2022.02.22 |