자바 네트워크 프로그래밍 기초 지식
참조 : http://java.sun.com/docs/books/tutorial/networking/overview/networking.html
인터넷으로 연결되어 있는 컴퓨터끼리 의사소통을 하기 위해서 TCP(Transmission Control Protocol) 또는 UDP(User Datagram
Protocol)를 사용합니다.
프로그램 작성은 Application 계층에서 하기 때문에 TCP와 UDP에 대해 자세히 알아둘 필요는 없지만, 그래도 TCP를 사용할 때 사용하는 API와 UDP를 사용할 때 사용하는 API도 다르고, 살짝 차이점 정도 알아 둬서 나쁜 것은 없습니다.
TCP
신뢰성있는 의사소통을 필요로 할 때 사용하는 방법으로, 의사소통을 하려는 두 지점(Peer) 사이에 커넥션을 만들고, 해당 커넥션을 사용하는 방법입니다. 따라서 커넥션 기반 프로토콜이라도고 합니다. TCP는 전화 통화에 비유할 수 있는데요. 전화를 걸면 상대방과 전화선을 타고 연결이 되고 그 연결된 전화선을 통해서 음성 데이터를 주고 받습니다. 물론 말한 순서대로 상대방에게 들리는 것과 같이, TCP를 사용하는 전송에서의 데이터는 보내는 순서에 따라 목적지에 도착하게 됩니다. 주로 HTTP, FTP 등 대부분의 서비스 들이 TCP를 사용합니다.
UDP
TCP를 사용하는 서비스와 달리 데이터를 전송할 때 굳이 지속적으로 연결되어 있을 필요가 없으며, 신뢰성이 필요하지 않은 경우에 UDP를 사요할 수 있습니다. UDP는 데이터그램이라는, 데이터를 독립적으로 쪼갠 패킷을 사용합니다. 데이터그램을 목적지로 보내는 것을 편지를 보내느 것으로 비유하고 있습니다. 다수의 편지를 보내지만, 어떤 순서대로 도착할지 알 수도 없으며 관심도 없는 편지와 유사합니다.
포트 이해하기
여러 데이터를 목적지로 보냈는데 대체 어떤 애플리케이션을 위한 데이터인지 어떻게 알 수 있을까요? 그것을 구분할 수 있는 것이 바로 포트입니다. 하나의 포트는 하나의 애플리케이션을 위한 데이터를 받아들이는 출입구로 생각하면됩니다. TCP를 사용할 때는, 특정 포트를 소켓에 설정해 두고 해당 애플리케이션에서 원하는 데이터를 받아들이도록 합니다.UDP를 사용할 떄는 데이터그램 패킷에 포트 번호를 포함하고 있습니다. 그리고 UDP가 해당 패킷을 적당한 포트로 라우팅합니다.
포트 번호는 0번부터 65,535까지 사용할 수 있으며 그 중에서 0부터 1023 까지는 HTTP, FTP, SMTP와 같은 시스템 서비스를 위한 예약된 포트로 지정되어 있기 때문에 사용을 자제하시기 바랍니다.
Networking Classes in the JDK
TCP를 사용할 때 : URL, URLConnection, Socket, ServerSocket
UDP를 사용할 때 : DatagramPacket, DatagramSocket, MulticastSocket