12. UDP
UDP(User Datagram Protocol)
데이터를 전송하는 전송 계층 프로토콜
빠른 전송 가능, 신뢰성 보장 X
데이터가 도착했는지 확인 방법, 보낸 순서대로 도착 X (TCP의 경우에도 순서대로 도착X, 재정렬을 할 뿐)
JAVA에서 UDP구현은 (1)DatagramPacket, (2)DatagramSocket 두개로 나뉨
(1) DatagramPacket
바이트로 된 데이터를 Datagram이라고 불리는 UDP 패킷에 채워넣고 수신받은 데이터그램을 꺼냄
(2) DatagramSocket
UDP 데이터그램을 수신할 뿐 아니라 전송도 함.
전송하기 위해 DatagramPacket에 담아 DatagramSocket을 사용해 패킷을 전송.
패킷에 데이터가 다 있어서 소켓은 간단,(대기 or 전송할 로컬 포트만 알고 있으면 됨)
TCP 소켓은 네트워크 연결을 스트림처럼 다룸. 소켓에서 가져온 입출력 스트림을 사용
UDP는 스트림이 아닌 항상 개별 데이터그램 패킷으로 작업해야함.
단일 데이터그램에 채워 넣는 모든 패킷은 단일 패킷으로 전송(전송 or 유실, 패킷간 연관X)
(ex)두 패킷 간 우선 순위에 대한 근거X (스트림의 경우에는 Queue가 필요하지만 datagram은 그냥 패킷으로 보내기만 함)
UDP 클라이언트
UDP 에서는 패킷 전송 실패 사실을 알기가 어려움 → udp에서는 timeout이 중요
(TCP에선 IOException 발생)
UDP 서버
먼저 수신, 임의의 포트에 바인드하지 않는다는 것을 제외하면 UDP 클라이언트와 같은 패턴
TCP 서버와 달리 멀티스레드 구조로 만들 필요가 없음 (많은 일을 수행하지 않음)
또한 패킷이 손실되었다고 에러를 던지지 않기 때문에 상대방이 응답을 보낼 때까지 기다리기 위해 블록될 수 없음
Last updated