[JAVA] 자바 네트워크 개념

 

네트워크

데이터를 다른장치로 이동시킬 수 있는 컴퓨터들과 주변 장치들의 집합이다.
네트워크의 연결된 모든 장치들을 노드라고 한다.
하나의 컴퓨터에서 다른 컴퓨터로 데이터를 이동시킬때 계층을 통해 전송되는데 대표적인 모델이 OSI 7계층 모델이다.

 

포트와 프로토콜

컴퓨터의 주변장치를 접속하기 위한 물리적인 포트와 프로그램에서 사용되는 접속 장소인 논리적인 포트가 있다.

논리적인 포트

포트번호는 0 ~ 65535까지고 0~1023까지는 시스템에 의해 예약된 포트번호이기때문에 사용하지 않는게 좋다.
예약된 포트번호의 대표적인 예로는 80(HTTP) 21(FTP) 22(SSH) 23(TELNET)이 있다.

 

프로토콜

프로토콜은 클라이언트와 서버간의 통신 규약이다.
통신규약이란 상호간의 접속이나 절단,통신방식 주고받을 데이터의 형식 전송속도 등에 대하여 정의하는 것을 말한다.
대표적인 인터넷 표준 프로토콜에는 TCP/UDP가 있다.

 

TCP와 UDP

TCP/IP계층 모델은 4계층의 구조를 가지고 있다.
JAVA는 7계층을 4계층으로 합쳤고 애플리케이션,전송,네트워크,데이터링크 계층이 있다.
이 중 전송계층에서 사용하는 프로토콜에는 TCP와 UDP가 있다.

UDP

신뢰할 수 없는 프로토콜로써 컴퓨터끼리의 상호작용시 데이터를 보내기만하고 확인메세지를 주고 받지
않기 때문에 제대로 전달 됐는지 확인하지 않는다.  (ex)편지))

TCP

신뢰할 수 있는 프로토콜로서, 컴퓨터끼리의 상호작용시 데이터를 상대측까지 제대로 전달되었는지 확인
메시지를 주고 받음으로써 데이터의 송수신 상태를 점건한다. (ex)전화))

FTP,SMTP,HTTP 애플리케이션
TCP/UDP 전송 계층
IP,APP 네트워크 계층

 

 

JAVA에서 IPClass

 

InetAddress Class(자바에서 제공하는 클래스 import java.net*;) 

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

InetAddress 클래스의 생성자

InetAddress 클래스의 생성자는 하나만 존재하지만, 특이하게 기본 생성자의 접근 제한자 default이기
때문에 new 연산자 객체를 생성할 수 없다.
따라서 InetAddress클래스는 객체를 생성해 줄 수 있는 5개의 static 메소드를 제공하고 있다.
제공되는 5개의 메소드는 모드 UnknownHostException 예외를 발생시키기 때문에 예외처리를 해야한다. (thorws나 try,catch)

 

URL Class


인터넷에서 접근 가능한 자원의 주소를 표현 할 수 있는 형식을 말한다.
URL Class는 원격 서버 자원의 결과만을 가져온다.

get방식 = url내에 정보가 보이는것
post방식 = url내에 정보가 보이지 않는것
(로그인창?)
URL 클래스는 final 클래스로 되어 있기 때문에 상속되어 사용할 수 없다. 

 

URL Connection Class

원격 서버의 헤더 정보, 해당 자원의 길이와 타입정보, 언어 등을 얻어 올 수 있다.
URL Class와 달리 원격서버의헤더 정보도 가져올 수 있다.

 

소켓

소켓은 클라이언트,서버의 네트워크 부분의 끝 부분에 있으며, 실제 데이터가 어떻게 전송하는 상관하지 않고  (TCP/UDP가 알아서 함) 읽기/쓰기 인터페이스를 제공한다.
 네트워크 계층과 전송계층이 캡슐화 되어 있기 때문에 두개의 계층을 신경쓰지않고 프로그램을 만들 수 있다.
 TCP/IP 계층의 TCP를 지원하기위해서 Socket,ServerSocker 클래스를 제공하고있다.
클라이언트는 Socket객체를 생성하여 TCP서버와 연결을 시도한다.
 서버는 SocketServer 객체를 생성해 TCP 연결을 청취해 클라이언트와 서버가 연결된다.

서버는 항상 서버소켓필요 서버소켓은 포트를 갖고 생성

 

소켓 클래스

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

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

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

호스트를 찾을 수 없거나 서버의 포트가 열려 있지 않은 경우 예외가 발생한다.(UnknownHostException)

네트워크의 실패 방화벽 때문에 서버에 접근 할 수 없을때 IOExcepion예외가 발생한다.(IOException)

 

소켓종료

소켓의 사용이 끝나고 연결을 끊기 위해선 소켓의 close()메소드를 호출해야한다.
소켓 종료는 일반적으로 finally 블록에서 처리하고 close()메소드는 IOException를 발생 하기 때문에 예외처리.
소켓은 시스템에 의해 자동으로 종료되는 경우가 있다. 이 경우 자동으로 닫히는것보다 close()를 호출해서
정확히 소켓종료를 해야한다.

 

TCP Server Socket

클라이언트의 TCP연결을 받기 위해서는 java.net.ServerSocket클래스의 객체를 생성 해야한다.
ServerSocket객체를 생성했다면 ServerSocket클래스의 accpet()메소드는 클라이언트의 TCP 요청이
있을때까지 블로킹 되는 메서드이다 .  (무한루프)
클라이언트의 tcp요청이 오면 accept()메소드는 클라이언트와 통신할 수 있는 tcp소켓을 반환한다.

 

유니캐스팅과 멀티캐스팅

유니캐스트(1:1) 
클라이언트와 서버간의 지속적으로 일대일로 통신하는 개념을 유니 캐스팅

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

멀티캐스트(1:다)
일대일 통신이아닌 여러개의 장치와 한번에 통신할수있다.

멀티캐스팅
서버의 정보를 모든 클라이언트가 공유할때 문제점이 있다.
멀티캐스팅 프로그램을 작성하기 위해서는 유니캐스트에서 생성된 스레드를 저장하기 위한 공간이<ArrayList> 필요하며 클라이언트에서는 자신이 보낸 메시지나 다른 클라이언트가 보낸 메시지를 받기 위한 스레드가 필요하다.

 

 

 

 

 

 

 

 

'언어 > 자바' 카테고리의 다른 글

[Java] charAt 문자열의 index 확인  (0) 2021.07.06
[JAVA] double을 int로 형변환 하는 방법을 알아보자.  (0) 2020.08.31
[JAVA] Thread  (0) 2020.08.13
2020-08-12 #추상클래스와 인터페이스  (0) 2020.08.12
2020-08-11 # List  (0) 2020.08.12

댓글

Designed by JB FACTORY