6-1 UDP
UDP 소켓은 TCP 소켓과 정반대의 소켓이라고 생각하면 된다. TCP가 안전하고 속도가 느린 프로토콜 스택인 반면 UDP는 불안전한 대신 속도가 빠른 프로토콜 스택이라 생각하면 된다. UDP가 불안전한 이유는 서버와 클라이언트가 연결되어있지 않기 때문이다. 그래서 TCP 서버 구현과정에서 거쳤던 listen함수와 accept함수의 호출이 없어도 되며 서버와 클라이언트 모두 하나의 소켓만 있으면 둘 이상의 호스트와의 통신을 가능하게 해준다. 대신 UDP 소켓은 연결상태가 유지되지 않기 때문에 데이터를 전송할 때마다 반드시 목적지의 주소정보를 별도로 추가해야한다. 쉽게 말해 편지를 쓸때 우편물에 주소정보를 써 넣는 것을 비유할 수 있다.
위와 같은 그림이 UDP 소켓의 연결 모습이다. 하나의 소켓으로 모든 호스트와 연결되고 있다는 것을 확인할 수 있다.
그러면 연결상태가 유지되지 않는 대신 주소정보를 기입해야 한다고 설명했는데 발신지와 수신지의 정보를 얻을 수 있는 함수에 대해 알아보자.
sendto 발신함수(to 매개변수에 목적지의 주소를 전달해야한다)
recvfrom 함수(from 매개변수에 발신지의 주소를 전달해야한다.)
uecho_server 코드
uecho_client 코드
위 코드는 각각 UDP 서버와 클라이언트의 소켓을 생성하는 코드이다. 그리고 다음 실행결과이다.
UDP의 경우 임의로 포트를 9099번으로 할당했는데 다음 챕터에서 할당하는 방법을 게시하겠다. 그림과 같이 server에는 아무런 응답이 없는데 이게 바로 서버와 클라이언트는 연결이 되어있지 않다는 의미이다.