본문으로 바로가기

네트워크

category Java/java 2020. 8. 14. 12:24

네트워크 

 : 다른 장치로 데이터를 이동시킬 수 있는 컴퓨터들과 주변 장치들의 집합 

 : 네트워크에 연결된 모든 장치들을 노드라고 한다.

 : 다른 노드에게 하나 이상의 서비스를 해주는 노드를 호스트라 부른다.

 : 하나의 컴퓨터에서 다른 컴퓨터로 데이터를 이동시킬 때 복잡한 계층을 통해 전송되는데,

   이런 복잡한 레이어의 대표적인 모델이 OSI 계층 모델이다.

 : OSI 계층 모델은 모두 7계층으로 이루어졌다.

 : 데이터 통신을 이해하는데 OSI 계층 모델은 상당한 역할을 하지만,

   인터넷 기반의 표준 모델로 사용하는 TCP/IP 계층 모델을 주로 사용하고 있다.

 

인터넷 주소(IP)

 : 모든 호스트는 인터넷주소(Host 또는 IP 주소)라 불리는 유일한 32비트 숫자로 구성된 주소체계를

   이용하여 서로를 구분한다.

 

포트

 : 컴퓨터의 주변자치를 접속하기 위한 물리적 포트

 : 프로그램에서 사용되는 접속 장소인 논리적 포트

 : 포트번호는 인터넷 번호 할당 허가 위원회(IANA)에 의해 예약된 포트번호를 가진다.

 : 포트번호는 0~65535까지이며, 0~1023 시스템에 의해 예약된 포트번호이다.

 : 80(HTTP) 21(FTP) 22(SSH) 23(TELNET) 

 

프로토콜

 : 프로토콜은 클라이언트와 서버간의 통신 규약이다.

 : 통신규약이란 상호 간의 접속이나 절단방식, 통신방식, 주고받을 데이터 형식, 오류검출방식, 코드변환방식,

   전송속도 등에 대하여 정의하는 것을 말한다.

 

TCP와 UDP

: TCP/IP 계층 모델은 4계층의 구조를 가지고 있다.

: 애플리케이션, 전송, 네트워크, 데이터 링크 계층이 있다.

 

TCP

 : Treansmission Control Protocol

 : 신뢰할 수 있는 프로토콜

 : 데이터를 상대측까지 제대로 전달되었는지 확인 메시지를 주로 받음으로써 데이터의 송수신 상태를 점검한다.

UDP

 : User Datagram Protocol

 : 신뢰할 수 없는 프로토콜

 : 데이터를 보내기만하고 확인 메시지를 주고 받지 않기 때문에 제대로 전달했는지 확인하지 않는다.

 

InetAddress 클래스

 : InetAddress 클래스는 IP주소를 표현한 클래스이다.

 : 자바에서는 모든 IP주소를 InetAddress 클래스를 사용한다.

 

InetAddress 클래스의 생성자

 : InetAddress 클래스의 생성자는 하나만 존재하지만, 특이하게 기본 생성자의 접근 제한자가 default이기 때문에

   new 연산자 객체를 생성할 수 없다.

 : 따라서 InetAddress 클래스는 객체를 생성해 줄 수 있는 5개의 static 메서드를 제공하고 있다.

 

URL 클래스

 : Uniform Resource Locator

 : 인터넷에서 접근 가능한 자원의 주소를 표현할 수 있는 형식을 말한다.

 

URL 클래스의 생성자

 : URL클래스는 URL을 추상화하여 만든 클래스이다.

 : URL 클래스는 final 클래스로 되어 있기 때문에 상속하여 사용할 수 없다.

 : 모든 생성자는 MalformedURLException 예외를 발생한다.

 

URLConnection 클래스

 : 원격 자원에 접근하는 데 필요한 정보를 가지고 있다.

 : 필요한 정보란 원격 서버의 헤더 정보, 해당 자원의 길이와 타입 정보, 언어 등을 얻어  올 수 있다.

 : URL클래스는 원격 서버 자원의 결과만을 가져오지만,

   URLConnection 클래스는 원격 서버 자원의 결과와 원격 서버의 헤더 정보를 가져올 수 있다.

 

URLConnection 클래스의 생성자

 : URLConnection 클래스는 추상 클래스이기 때문에 단독적으로 객체를 생성할 수 없다.

 : URL 클래스의 객체를 생성해서 URL클래스의 openConnection() 메서드를 이용해서 객체를 생성해야 한다.

URL url = new URL("http://java.sun.com");
URLConnection urlCon = url.openConnection();
urlCon.connect();

 

소켓

 : 자바 프로그램은 소켓(Socket)이라는 개념을 통해서 네트워크 통신을 한다.

 : 소켓은 네트워크 부분의 끝 부분을 나타내며, 실제 데이터가 어떻게 전송되는지 상관하지 않고

   읽기/쓰기 인터페이스를 제공한다.

 : 네트워크 계층과 전송 계층이 캡슐화 되어 있기 떄문에 두 개의 계층을 신경 쓰지 않고 프로그램을 만들 수 있다.

 : 소켓은 캘리포니아 대학교에서 빌 조이(Bill Joy)에 의해 개발되었다.

 : 자바는 이식성과 크로스 플랫폼 네트워크 프로그램을 위해서 소켓을 핵심 라이브러리 만들었다.

 : TCP/IP 계층의 TCP를 지원하기위해서 Socket, ServerSocket 클래스를 제공하고 있다.

   클라이언트는 Socket 객체를 생성하여 TCP 서버와 연결을 시도한다.

   서버는 SocketServer객체를 생성하여 TCP 연결을 청취하여 클라이언트와 서버가 연결된다.

 : ServerSocket은 클라이언트가 접속했을 때 소켓을 만들어준다. (Thread기반으로 만든다)

 

Socket 클래스

 TCP 소켓은 java.net.Socket 클래스를 의미한다

 

Socket 클래스 생성자

생성자 설명  
Socket( InetAddress address, int port )  InetAddress 객체와 port를 이용해여 Socket 객체를 생성한다.
Socket( String host, int port ) host와 port를 이용하여 Socket 객체를 생성한다.

 : Socket 생성자는 두 가지 예외처리를 발생한다.

 : 첫 번째는 호스트를 찾을 수 없거나, 서버의 포트가 열려있지 않은 경우 UnknownHostException 예외가 발생

 : 두 번째는 네트워크의 실패, 방화벽 때문에 서버에 접근 할 수 없을 떄 IOException 예외가 발생

 

 

소켓을 이용한 입출력 스트림 생성

 : TCP소켓은 두 개의 네트워크 사이에 바이트 스트림 통신을 제공한다

 : Socket 클래스는 바이트 읽기를 위한 메서드와 쓰기 위한 메서드를 제공한다.

 : 두 가지 메서드를 이용하여 클라이언트와 서버간에 통신을 할 수 있다.

java.io.InputStream getInputSteam() throws IOException;
java.io.OutputStream getOutputSteam() throws IOException;

 

소켓 종료

 : 소켓의 사용이 끝나면 연결을 끊기 위해서 소켓의 close() 메서드를 호출해야 한다.

 : 소켓 종료는 일반적으로 finally 블록에 처리하고, close() 메서드는 IOEception를 발생한다

 : 소켓은 시스템에 의해 자동으로 종료되는 경우가 있다

 : 프로그램이 종료되거나, 가비지 컬렉터에 의해 처리되는 경우에 소켓이 자동으로 종료된다

 : 소켓이 시스템에 의해 자동으로 닫히는 것은 바람직하지 않고,

   close() 메서드를 호출해서 정확히 소켓 종료를 해야한다.

 : 소켓이 닫히더라도 getInetAddress(), getPort() 메서드는 사용할 수 있지만, ( static method )

   getInputSteam(), getOutputStream() 메서드는 사용할 수 없다. ( instance method )

 

TCP Server Socket

 : ServerSocket 클래스가 TCP 서버 소켓을 의미한다.

 : 클라이언트가 TCP 연결을 받기 위해서는 java.net.ServerSocket 클래스의 객체를 생성해야 한다.

 : ServerSocket 클래스는 네트워크 통신을 수행하기 위해 자신을 바로 사용하는 것이 아니라

   클라이언트의 TCP 요청에 대한 Socket 객체를 생성하는 역할을 한다

 : ServerSocket 객체를 생성했다면  ServerSocket 클래스의 accept() 메서드는 클라이언트의 TCP 요청이 있을 때까지

   브로킹되는 메서드이다

 : 클라이언트의 TCP요청이 오면 accept() 메서드는 클라이언트와 통신할 수 있는 TCP 소켓을 반환한다

 : 그런 후에 다른 클라이언트의 요청을 기다리게 되므로 accept는 무한루프

 

ServerSocket클래스의 생성자

 : 서버 소켓 생성자는 TCP 포트번호를 매개변수로 받는다

 : 만약, 기존의 TCP 포트번호가 사용중이라면 IOException을 발생하게 된다

 

ServerSocket 연결받기

 : 클라이언트에 들어오는 요청이 없다면 요청이 올 때까지 accept() 메서드는 블록화 되거나 타임아웃이 되면 종료된다

 

유니 캐스팅

 : 클라이언트와 서버간의 지속적으로 일대 일로 통신하는 개념

 : 유니 캐스팅을 구현하기 위해서는 필수 조건이 서버측에 스레드를 생성해서 TCP 소켓을 유지해야 한다.

 : 문제점 - 실시간 프로그램에서 서버의 정보를 모든 클라이언트가 공유할 때 문제점이 있다. 

 

멀티 캐스팅

 : 일대 다의 통신

 : 한 명의 클라이언트가 서버의 정보를 변경했을 경우 모든 클라이언트에게 전송함으로써 서로가 변경된 정보를

   공유할 수 있는 애플리케이션을 만들 때 적합하다.

 : 멀티 캐스팅 프로그램을 작성하기 위해서는 유니캐스트에서 생성된 스레드를 저장하기 위한 공간이 필요하며,

   클라이언트에서는 자신이 보낸 메시지나 다른 클라이언트가 보낸 메시지를 받기 위한 스레드가 필요하다.

 

 

 

 

 

 

반응형

'Java > java' 카테고리의 다른 글

JavaScript - 회원가입폼  (0) 2020.08.24
자바스크립트 (JavaScript)  (0) 2020.08.20
스레드 (Thread)  (0) 2020.08.13
GUI 프로그래밍  (0) 2020.08.13
예외처리 (Exception)  (0) 2020.08.12