네트워크 기본 & TCP 통신
네트워크 프로그래밍이란?
OSI 7 계층은 네트워크 전문가들을 위한 네트워크의 레이어이다. -> 우리는 자바에서 활용하는 대표적인 레이어를 살펴보자
애플리케이션 레이어
HTTP(Hypertext Transfer Protocol), FTP(File Transfer Protocol), Telnet 들은 모두 TCP(Transfer Control Protocol) 통신을 한다.
트랜스포트 레이어
만약 자바에서 TCP 통신을 한다면 자바에서 제공하는 API 를 활용하면 된다. -> 애플리케이션 레이어에스 프로그래밍만 하면 트랜스포트 레이어에서의 처리는 자바가 다 알아서 한다.
TCP 통신은 연결기반 프로토콜로 상대방이 확실히 데이터를 받았는지, 보장할 수 있다.
UDP(User Datagram Protocol) 통신은 TCP 와 달리, 상대방이 확실히 데이터를 받았는지 보장하지 않는다. -> TCP 에서는 연결을 확인하기 위해서 3 way handshake 작업을 하게 되는데, 이 작업은 리소스를 소모하는데, 세상에 모든 작업이 연결이 보장되어야 할 필요는 없다! -> 연결보다는 속도를 중시하는 실시간 스트리밍 등,, 의 서비스에서 사용하게 된다.
네트워크 레이어
일반적인 웹 애플리케이션에서는 80 이라는 번호의 포트를 사용한다 -> 이건 정해져 있는것이다.
웹으로 SSL 이라는 안전한 통신을 하기 위해서는, 443 포트를 사용하게 된다. -> 일반적으로 사용되는 HTTPS 프로토콜은, SSL + HTTP 프로토콜을 함께 사용한다고 생각하면 된다.
이렇게 용도가 정해져 있는 포트는 다른 용도로 사용하지 않는 것이 좋다.
Socket 클래스
Socket 클래스는 클라이언트에서 객체를 생성해 사용한다.
서버에서 클라이언트에서 보낸 요청을 받으면, 요청에 대한 Socket 클래스를 생성해 데이터를 처리한다. -> Socket 클래스는 원격에 있는 장비와의 연결 상태를 보관하고 있다고 생각하면 된다.
서버에서 사용하는 클래스 : ServerSocket
서버에서 사용하는 ServerSocket 클래스
ServerSocket() : 서버 소켓 객체만 생성한다.
ServerSocket(int port) : 지정된 포트를 사용하는 서버 소켓 객체를 만든다. -> backlog 를 지정하지 않을 시 50 개를 가지고 있다.
ServerSocket(int port, int backlog) : 지정된 포트와 backlog 개수를 가지는 서버 소켓을 생성한다.
ServerSocket(int port, int bakclog, InetAddress bindAddr) : 지정된 포트와 backlog 개수를 가지고, bindAddr 에 있는 주소에서의 접근만을 허용하는 서버 소켓을 생성한다. -> backlog : 큐의 개수로 생각하면 된다.(객체가 바빠 연결 요청을 처리못하고 대기시키는 최대 개수)
매개변수가 없는 ServerSocket 객체를 제외한 나머지 클래스 객체들은 생성되자마자, 연결을 대기할 수 있는 상태가 된다.
매개변수가 없는 Socket 객체는 별도의 연결작업을 해야만 대기가 가능하다 다음 메서드를 보자
Socket accept() : 새로운 소켓 연결을 기다리고 연결이 되면 Socket 객체를 리턴한다.
void close() : 소켓 연결을 종료한다. -> 소켓을 다 사용했다면 항상 연결을 종료해야만 한다!
클라이언트에서 사용하는 클래스
Socket() : 소켓 객체만 생성
Socket(Proxy proxy) : 프록시 관련 설정과 함께 소켓 객체만 생성
Socket(SocketImpl impl) : 사용자가 지정한 SocketImpl 객체를 사용하여 Socket 객체만 생성
Socket(InetAddress address, int port) : 소켓 객체 생성 후 address 와 port 를 사용하는 서버에 연결
Socket(InetAddress address, int port, InetAddress localAddr, int localPort) : 소켓 객체 생성 후 address 와 port 를 사용하는 서버에 연결하며, 지정한 localAddr와 localPort 에 접속
Socket(String host, int port) : 소켓 객체 생성 후, host 와 port 를 사용하는 서버에 연결
Socket(String host, int port, InetAddress localAddr, int loaclPort) : 소켓 객체 생성 후, host 와 port 를 사용하는 서버에 연결 후, 지정한 localAddr와 localPort 에 접속
위 3개 생성자를 제외한 나머지 생성자들은 모두 객체 생성과 함께 지정된 서버에 접속한다.
Last updated