210 likes | 524 Views
Chapter 5 UDP Socket. 소켓 프로그래밍. UDP Socket. UDP 개념 UDP 프로세스 흐름 UDP Echo 프로그램 Socket 클래스를 이용한 UDP 브로드캐스팅 멀티캐스팅. UDP 개념. User Datagram Protocol (RFC 768) 비 연결형 프로토콜 신뢰성 보다는 시간이 우선 헤더 포멧 송신 측 포트번호는 선택사항 제공하는 유일한 신뢰성은 checksum 비교적 간단한 헤더를 가지기 때문에 전송되는 바이트를 줄일 수 있음
E N D
Chapter 5UDP Socket 소켓 프로그래밍
UDP Socket • UDP 개념 • UDP 프로세스 흐름 • UDP Echo 프로그램 • Socket 클래스를 이용한 UDP • 브로드캐스팅 • 멀티캐스팅
UDP 개념 • User Datagram Protocol (RFC 768) • 비 연결형 프로토콜 • 신뢰성 보다는 시간이 우선 • 헤더 포멧 • 송신 측 포트번호는 선택사항 • 제공하는 유일한 신뢰성은 checksum • 비교적 간단한 헤더를 가지기 때문에 전송되는 바이트를 줄일 수 있음 • 데이터가 목적지까지 빨리 이동할 수 있게 됨
UDP 개념 • TCP 와의 차이점
UDP 프로세스흐름 • 서버 • 소켓 생성 • 포트 바인딩 • 포트 바인딩 후 접속 요청에 대한 리스닝 과정 없이 즉시 데이터 전송 가능 • 데이터 송수신은 TCP와 차이가 있음 • 클라이언트 • 서버에 접속할 필요가 없음 • 소켓 생성 후 즉시 데이터 전송 가능 • 서버와는 달리 포트 바인딩을 하지 않음 • .NET 프레임워크에서는 UDP 소켓을 이용하여 통신을 하기 위해 UdpClient클래스만을 가짐 • 즉, UdpClient 클래스만을 이용하여 UDP 프로그램 구현 가능
UDP 프로세스 흐름 • UDP 서버 프로세스 흐름
UDP 프로세스 흐름 • UDP 클라이언트 프로세스 흐름
UDP 서버 UDP 서버 UDP 클라이언트 #1 UDP 서버/클라이언트 동작 원리 (1/2) • UDP 서버/클라이언트 동작 원리
UDP 서버/클라이언트 동작 원리 (2/2) • UDP 서버/클라이언트 동작 원리 (cont’d) UDP 서버 UDP 서버 . . . 통신 통신 UDP 클라이언트 #1 UDP 클라이언트 #2 . . . UDP 클라이언트 #n UDP 클라이언트 #1
UDP Echo 프로그램 • 예제 프로그램 : EchoServerUDP.cs, EchoClientUDP.cs • UdpClient클래스 생성자 • 포트 바인딩이 없는 생성자 public UdpClient() public UdpClient(AddressFamily) • 포트 바인딩을 가지지 않는 생성자는 멀티캐스팅에는 적절하지 않음 • 첫 번째 생성자는IPv4 주소지정 스키마를 포함한 객체 생성 • IPv4 외의 주소지정 스키마가 요구될 때에는 두 번째 생성자 사용
UDP Echo 프로그램 • 포트 바인딩이 있는 생성자 public UdpClient(int) public UdpClient(int, AddressFamily) public UdpClient(IPEndPoint) public UdpClient(string, int) • 첫 번째 생성자는IPv4 주소지정 스키마를 가짐 • 마지막 생성자는IP주소 문자열과 포트번호를 인자로 가짐 • IP 주소는 디폴트 원격 호스트의 주소를 명시하는 것으로 접속 성립을 위해 존재하는 것이 아님
UDP Echo 프로그램 • 디폴트 원격 호스트 • TCP의 접속 성립과는 다른 개념으로, 단지 데이터를 보내고자 하는 기본 호스트의 주소를 지정 • UDP를 이용하여 특정 호스트에 계속 메시지를 보내고자 하는 경우, 이 디폴트 원격 호스트를 명시함으로써 따로 주소를 지정하지 않아도 디폴트 원격 호스트에 메시지를 보낼 수 있음 • 디폴트 원격 호스트는 생성자로 객체 생성 시에 설정이 가능하며, Connect()메서드를 이용하여 설정 또는 변경이 가능함
UDP Echo 프로그램 • Connect()메서드 • 디폴트 원격 호스트의 설정 및 변경 • 오버로드된 세 개의 메서드를 가짐 public void Connect(IPEndPoint) public void Connect(IPAddress, int) public void Connect(string, int) • 각 메서드의 인자는 디폴트 원격 호스트를 명시 • 주소는 IPEndPoint,IPAddress또는 IP 주소 문자열과 포트번호를 이용하여 지정 가능
UDP Echo 프로그램 • 데이터 송신 public int Send(byte[], int) public int Send(byte[], int, IPEndPoint) public int Send(byte[], int, string, int) • byte[], int: 보낼 데이터와 데이터의 길이 • 첫 번째 메서드는생성자 또는 Connect()메서드에 의해 설정된 디폴트 원격 호스트로 데이터를 송신 • 나머지 두 개의 메서드는 원격 호스트의 주소를 지정하여 데이터를 송신
UDP Echo 프로그램 • 데이터 수신 public byte[] Receive(ref IPEndPoint) • 데이터를 수신하게 되면 byte[]형태로 수신한 데이터를 반환 • 인자인 IPEndPoint에는 송신자의 주소가 채워짐 • 만약 수신 측에서 Connect()메서드를 이용하여 디폴트 원격 호스트를 명시한 경우 디폴트 원격 호스트로부터 보내지는 것이 아닌 모든 데이터는 폐기
Socket 클래스를 이용한 UDP • 예제 프로그램 : EchoServerUDPSocket.cs, EchoClientUDPSocket.cs • UdpClient가 아닌 Socket클래스의 SendTo()메서드와ReceiveFrom()메서드를 활용하여 UDP Echo 프로그램을 만들 수 있음 • 데이터 송신 public intSendTo(byte[], EndPoint) public intSendTo(byte[], SocketFlags, EndPoint) public intSendTo(byte[], int, SocketFlags, EndPoint) public intSendTo(byte[], int, int, SocketFlags, EndPoint) • byte[], int , int - 보낼 데이터의 바이트 배열과 시작위치(offset), 데이터의 크기 • SocketFlags - 소켓의 동작을 지정 • EndPoint - 원격 호스트 • 데이터 수신 public intReceiveFrom(byte[], ref EndPoint) public intReceiveFrom(byte[], SocketFlags, ref EndPoint) public intReceiveFrom(byte[], int, SocketFlags, ref EndPoint) public intReceiveFrom(byte[], int, int, SocketFlags,ref EndPoint)
유니캐스팅 브로드캐스팅 멀티캐스팅 브로드캐스팅/멀티캐스팅 • 통신의 종류
브로드캐스팅 • 예제 프로그램 : BroadcastSender.cs, BroadcastReceiver.cs • 다수의 클라이언트에게 메시지를 전달 • TCP에서는 가능하지 않음 • 특수 주소인 255.255.255.255 또는 IPAddress.Broadcast는 브로드캐스트 주소를 나타냄 • IPv6에는 브로드캐스트 주소가 존재하지 않음 • 송신자와 같은 서브 넷에 있는 수신자에게만 브로드캐스트 메시지가 전달됨
멀티캐스팅 • 예제 프로그램 : MulticastSender.cs, MulticastReceiver.cs • UDP에서만 가능 • 서브 넷의 모든 호스트에게 메시지를 전달하는 브로드캐스트와는 달리 멀티캐스트 그룹에 가입된 호스트에게만 메시지를 전달 • 메시지를 받기 위해서는 멀티캐스트 그룹에 가입해야 함 • 멀티캐스트 그룹으로 메시지를 보내기 위해 멀티캐스트 그룹에 가입할 필요는 없음 • 멀티캐스트 IPv4 주소는 224.0.0.0 ~ 239.255.255.255 • IPv6의 멀티캐스트 주소는 RFC 2375를 통해서 확인 가능
28 비트 1 1 1 0 멀티캐스트 그룹 ID 멀티캐스팅 • 멀티캐스트 주소 • 특징 • 그룹 가입과 탈퇴가 자유롭고, 그룹 구성원 모두가 평등 • 멀티캐스트 데이터를 받으려면 그룹에 가입해야 함 • 멀티캐스트 데이터를 보내기 위해 그룹에 가입할 필요는 없음
멀티캐스팅 • 멀티캐스트 가입/탈퇴를 위한 메서드 • 멀티캐스트 그룹 가입 public void JoinMulticastGroup(IPAddress) public void JoinMulticastGroup(int, IPAddress) public void JoinMulticastGroup(IPAddress, int) public void JoinMulticastGroup(IPAddress, IPAddress) • 멀티캐스트 그룹에 가입하기 전에 포트 바인딩을 해야 함 • int,IPAddress– interface index, 멀티캐스트 그룹 IP 주소 • Interface index는 같은 링크에 있는 하드웨어를 식별하기 위해 사용 • IPAddress, int– 멀티캐스트 그룹 IP 주소, TTL • TTL(Time to Live)은 멀티캐스팅된 데이터그램에 허용되는 라우터홉수를 의미, 데이터그램이 지정된 수를 넘어 라우터를 경유한 경우에 폐기됨 • IPAddress , IPAddress– 멀티캐스트 그룹 IP 주소, 로컬 IP 주소 • 멀티캐스트 그룹 탈퇴 public void DropMulticastGroup(IPAddress) public void DropMulticastGroup(IPAddress, int) • Int– interface index