티스토리 뷰

java

네트워킹(Networking)

ssffwert 2022. 5. 8. 00:12

### 16.1 네트워킹(Networking)
네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다.
자바에서 제공하는 java.net패키지를 사용하면 이러한 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성 할 수 있으며,
간단한 네트워크 어플리케이션은 단 몇 줄의 자바코드 만으로도 작성이 가능하다.


### 16.1.1 클라이언트/서버(client/server)
서버는 서비스를 제공하는 컴퓨터이고, 클라이언트는 서비스를 사용하는 컴퓨터가 된다.
웹서버에 접속하여 정보를 얻기 위해서는 웹브라우저(클라이언트 프로그램)가 있어야 히고,
FTP서버에 접속해서 파일을 전송받기 위해서는 알 FTP와 같은 FTP클라이언트 프로그램이 필요하다.

네트워크를 구성할 때 전용서버를 두는 것을 '서버기반 모델(server-based model)'이라 하고,
별도의 전용서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 'P2P모델(peer-to-peer)'이라 한다.


서버 기반 모델과 P2P 모델간의 비교
1. 서버기반 모델(server-based model)
- 안정적인 서비스의 제공이 가능하다.
- 공유 데이터의 관리와 보안이 용이하다.
- 서버구축비용과 관리비용이 든다.

2. P2P 모델(peer-to-peer model)
- 서버구축 및 운용비용을 절감할 수 있다.
- 자원의 활용을 극대화 할 수 있다.
- 자원의 관리가 어렵다.
- 보안이 취약하다.



### 16.1.2 IP주소(IP address)
IP주소는 컴퓨터(호스트, host)를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다.
IP주소는 4 byte의 정수로 구성되어 있으며, 4개의 정수가 마침표를 구분자로 표현된다.
IP주소는 다시 네트워크주소와 호스트주소로 나눌 수 있는데, 네트워크를 어떻게 구성하였는지에 따라 달라진다.
서로 다른 두 호스트의 IP주소의 네트워크주소가 같다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미한다.
(IP주소와 서브넷 마스크를 '&'연산하면 네트워크 주소를 얻어낼 수 있다.)



### 16.1.3 InetAddress
자바에서는 IP주소를 다루기 위한 클래스로 InetAddress를 제공한다.
하나의 도메인명에 여러 IP주소가 맵핑될 수 있고 그 반대의 경우도 가능하다.



### 16.1.4 URL(Uniform Resource Locator)
URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것이다.
``프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조``의 형태로 이루어져 있다.

ex) http://www.codechobo.com:80/sample/hello.html?referer=codechobo#index1
1. 프로토콜: 자원에 접근하기 위해 서버와 통신하는데 사용되는 통신규약(http)
2. 호스트명: 자원을 제공하는 서버의 이름(www.codechobo.com)
3. 포트번호: 통신에 사용되는 서버의 포트번호(80)
4. 경로명: 접근하려는 자원이 저장된 서버상의 위치(/sample/)
5. 파일명: 접근하려는 자원의 이름(hello.html)
6. 쿼리(query): URL에서 '?'이후의 부분(referer=codechobo)
7. 참조(anchor): URL에서 '#'이후의 부분(index1)

자바에서는 URL을 다루기 위한 클래스로 URL 클래스를 제공한다.



### 16.1.5 URLConnection
URLConnection은 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스로 추상클래스이다.



### 16.2 소켓 프로그래밍
소켓이(socket)이란 프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다.
자바에서는 java.net패키지를 통해 소켓 프로그래밍을 지원하는데, 소켓통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다.



### 16.2.1 TCP와 UDP
TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜로 프로토콜의 집합이다.
TCP와 UDP 모두 TCP/IP 프로토콜(TCP/IP protocol suites)에 포함되어 있으며, OSI 7계층의 전송계층(transport layer)에 해당하는 프로토콜이다.

 


TCP와 UDP의 비교(전화 VS 소포)

1. TCP
연결방식: 연결기반(연결 후 통신, 1:1 통신방식)


특징:
-데이터의 경계를 구분안함
-신뢰성 있는 데이터 전송(데이터 전송순서 보장, 데이터의 수신여부 확인, 패킷을 관리할 필요가 없음)
-UDP보다 전송속도가 느림


관련클래스: Socket, ServerSocket

 



2. UDP
연결방식: 비연결기반(연결없이 통신, 1:1 or 1:N or N:N 통신방식)


특징:
-데이터의 경계를 구분함
-신뢰성 없는 데이터 전송(데이터 전송순서 미보장, 데이터의 수신여부 미확인, 패킷을 관리해주아야 함)
-TCP보다 전송속도가 빠름


관련클래스: DatagramSocket, DatagramPacket, MulticastSocket



### 16.2.3 UDP 프로그래밍
UDP는 연결지향적인 프로토콜이 아니기 때문에, UDP 통신에서 사용하는 소켓은 DatagramSocket이며 데이터를 DatagramPacket에 담아서 전송한다.
DatagramPacket은 헤더와 데이터로 구성되어 있다.
헤더에는 DatagramPacket을 수신할 호스트의 정보(호스트의 주소와 포트)가 저장되어 있다.
그래서 DatagramPacket을 전송하면 DatagramPacket에 지정된 주소(호스트의 주소)의 DatagramSocket에 도착한다.

클라이언트가 DatagramPacket을 생성해서 DatagramSocket으로 서버에 전송하면,
서버는 전송받은 DatagramPacket의 getAddress(), getPort()를 호출해서 클라이언트의 정보를 얻어
서버시간을 DatagramPacket()에 담아서 전송한다.

 

 

참고: [Java의 정석 3rd Edition(남궁 성 지음)]

'java' 카테고리의 다른 글

자바 vector, pair, 정렬  (0) 2022.05.14
컬렉션 프레임웍 Collections Framework  (0) 2022.05.09
예외처리(exception handling)  (0) 2022.05.01
싱글톤패턴  (0) 2022.04.26
메모리는 어떻게 할당하는가  (0) 2022.01.02
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday