네트워킹 |
네트워킹이란?
네트워킹이란 두 대이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다.
1. 클라이언트/서버(client/server)
서버 - 서비스를 제공하는 컴퓨터
클라이언트 - 서비스를 사용하는 컴퓨터
서비스 - 서버가 클라이언트로부터 요청받은 작업을 처리하여 그 결과를 제공하는 것
ex) 파일서버, 메일서버, 어플리케이션서버
서버에 접속하는 클라이언트의 수에 따라 하나의 서버가 여러 가지 서비스를 제공하기도 하고 하나의 서비스를 여러대의 서버로 제공하기도 한다.
- 서버가 서비스를 제공하기 위해서는 양쪽 모두 프로그램이 있어야한다.
ex) 웹서버 - 웹브라우저, 알FTP - FTP클라이언트 - 일반 PC도 FTP서버프로그램이나 Tomcat과 같은 웹서버프로그램을 설치하면 서버역할도 수행할 수 있다.
- 클라이언트/서버 프로그램을 하나로 합쳐 클라이언트와 동시에 서버가 될 수 있다.
서버기반 모델(server-based model) | P2P 모델(peer-to-peer model) |
- 안정적인 서비스의 제공이 가능하다. - 공유 데이터의 관리와 보안이 용이하다. - 서버구축비용과 관리비용이 든다 |
- 서버구축 및 운영비용을 절감할 수 있다. - 자원의 활용을 극대화 할 수 있다. - 자원의 관리가 어렵다. - 보안이 취약하다. |
2. IP주소(IP address)
IP주소는 컴퓨터(호스트, host)를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다.
- IP주소는 4 byte(32 bit)의 정수로 구성되어 있다.
- 4개의 정수가 마침표를 구분자로 'a.b.c.d'와 같은 형식으로 표현한다.
- 여기서 a, b, c, d는 부호없는 1 byte값(0~255사이의 정수)이다.
- IP주소는 네트워크주소와 호스트주소로 나뉘며 네트워크 주소가 같으면 같은 호스트가 같은 네트워크에 포함된 것
ex) 987.654.32.100 - 네트워크주소(987.654.32), 호스트주소(100)
3. InetAddress
자바에서는 IP주소를 다루기 위한 클래스로 InetAddress를 제공한다.
- InetAddress의 메서드
메서드 | 설명 |
byte[] getAddress() | IP주소를 byte배열로 반환한다. |
static InetAddress[] getAllByName(String host) | 도메인명(host)에 지정된 모든 호스트의 IP주소를 배열에 담아 반환한다. |
static InetAddress getByAddress(byte[] addr) | byte배열을 통해 IP주소를 얻는다. |
static InetAddress getByName(String host) | 도메인명(host)을 통해 IP주소를 얻는다. |
String getCanonicalHostName() | FQDN(fully qualified domain name)을 반환한다. |
String getHostAddress() | 호스트의 IP주소를 반환한다. |
String getHostName() | 호스트의 이름을 반환한다. |
static InetAddress getLocalHost() | 지역호스트의 IP주소를 반환한다. |
boolean isMulticastAddress() | IP주소가 멀티캐스트 주소인지 알려준다. |
boolean isLoopbackAddress() | IP주소가 loopback 주소(127.0.0.1)인지 알려준다. |
4. URL(Uniform Resource Locator)
URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것이다.
'프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조'
http://www.java.com:80/sample/test.html?referer=javatest#index1
프로토콜 자원에 접근하기 위해 서버와 통신하는데 사용되는 통신규약(http)
호스트명 자원을 제공하는 서버의 이름(www.java.com)
포트번호 통신에 사용되는 서버의 포트번호(80) //80은 생략가능
경로명 접근하려는 자원이 저장된 서버상의 위치(/smaple/)
파일명 접근하려는 자원의 이름(test.html)
쿼리(query) URL에서 '?'이후의 부분(referer=javatest)
참조(anchor) URL에서 '#'이후의 부분(index1)
- URL의 메서드
https://docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
5. URLConnection
URLConnection은 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스로 추상클래스이다. URLConnection을 상속받아 구현한 클래스로는 HttpURLConnection과 JarURLConnection이 있으며 URL의 프로토콜이 http프로토콜이라면 openConnection()은 Http URLConnection을 반환한다.
- URLConnection 메서드
https://docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
소켓 프로그래밍 |
소켓(socket)이란?
프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다.
1. TCP와 UDP
TCP/IP 프로토콜은 이기정 시스템간의 통신을 위한 표준 프로토콜로 프로토콜의 집합이다. TCP와 UDP 모두 TCP/IP 프로토콜(TCP/IP protocol suites)에 포함되어 있으며. OSI 7계층의 전송계층에 해당하는 프로토콜이다.
항목 | TCP | UDP |
연결방식 | 연결기반(connection-oriented) - 연결 후 통신(전화기) - 1:1 통신방식 |
비연결기반(connectionless-oriented) - 연결없이 통신(소포) - 1:1, 1:n, n:n 통신방식 |
특징 | 데이터의 경계를 구분안함 (byte-stream) 신뢰성 있는 데이터 전송 - 데이터의 전송순서가 보장됨 - 데이터의 수신여부를 확인함 (데이터가 손실되면 재전송됨) - 패킷을 관리할 필요가 없음 UDP보다 전송속도가 느림 |
데이터의 경계를 구분함 (datagram) 신뢰성 없는 데이터 전송 - 데이터의 전송순서가 바뀔 수 있음 - 데이터의 수신여부를 확인안함 (데이터가 손실되어도 알 수 없음) - 패킷을 관리해주어야 함 TCP보다 전송속도가 빠름 |
관련 클래스 | Socket SeverSocket |
DatagramSocket DatagramPacket MulticastSocket |
2. TCP소켓 프로그래밍
TCP소켓 프로그래밍은 클라이언트와 서버간의 일대일 통신이다.
- 서버 프로그램과 클라이언트 프로그램간의 통신과정
- 서버 프로그램에서는 서버소켓을 사용해서 서버 컴퓨터의 특정 포트에거 클라이언트의 연결요청을 처리할 준비를 함.
- 클라이언트 프로그램은 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청함.
- 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트 소켓과 연결 되도록 함.
- 이제 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관꼐없이 일대일 통신을 함.
Socket
프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어진다.
ServerSocket
포트와 연결(bind)되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다. 한 포트에 하나의 ServerSocket만 연결할 수 있다.
(프로토콜이 다르면 같은 포트를 공유할 수 있다.)
3. UDP소켓 프로그래밍
- TCP소켓 프로그래밍에서는 Socket과 ServerSocket을 사용하지만, UDP소켓 프로그래밍에서는 DatagramSocket과 DatagramPacket을 사용한다.
- UDP는 연결지향적인 프로토콜이 아니기 때문에 ServerSocket이 필요하지 않다. UDP통신에서 사용하는 소켓은 DatagramSocket이며 데이터를 DatagramPacket에 담아서 전송한다.
- DatagramPacket은 헤더와 데이터로 구성되어 있으며, 헤더는 DatagramPacket을 수신할 호스트의 정보(호스트의 주소와 포트)가 저장되어 있다.
- 소포(packet)에 수신할 상대편의 주소를 적어서 보내는 것과 같다.
- DatagramPacket을 전송하면 DatagramPacket에 지정된 주소(호스트의 포트)의 DatagramSocket에 도착한다.
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA 이론] 입출력 I/O (0) | 2022.07.16 |
---|---|
[JAVA 이론] 람다와 스트림 (0) | 2022.06.22 |
[JAVA 이론] 쓰레드 (0) | 2022.03.16 |
[JAVA 이론] Generics, Enumeration, Annotation (0) | 2022.03.13 |
[JAVA 이론] Collections Framework (0) | 2022.02.27 |