1. 네트웍(network - 일을 위한 그물망)
-> 두 개 이상의 디바이스가 연결되어 통신을 할 수 있는 환경.
-> 케이블이나 전화선, 무선 링크등으로 연결되어 동일한 프로토콜을 사용해서 통신할 수 있는 디바이스들의 집합.
(ex: 두 대 이상의 PC사이의 Data통신, 인터넷,)
2. 패킷
-> 데이터의 전송 단위. (다양한 크기[기본:128byte], 재사용이 가능, 해더/데이터/테일러)
3. 라우터와 라우터 스위치
-> 라우터는 패킷이 목적지로 가는 길(방향,경로) 안내자.
라우터 스위치는 라우터에 포함된 장치로 패킷의 방향타 역할.
4. 게이트웨이 / 파이어월
-> 게이트웨이(문)은 내부네트웍과 외부네트웍과 연결된 관문.
-> 파이어월(방화벽)은 내부자원을 보호하고, 불필요한 외부 자원의 유입을 막는 보안 장치.(하드웨어, 소프트웨어)
5. 프록시
(1) 네트웍상에서 Node(연결지점) 간의 통신 중계자.
(2) 역할
1) 캐쉬
-> 네트웍(인터넷, ..)에서 자주 접속하는 URL의 자원을 미리 저장해 놓고, 다음에 또 동일한 URL자원을 요청
할 시 프록시 서버에 저장된 자원을 대신 불러오는 역할. (속도를 빨르게 하는 장점)
ex : 인기 커뮤니티 site의 main 이미지.. )
2) 보안
-> 특정한 client 의 요청을 분별해서 해당 요청에 대한 응답을 하지 않는 보안 기능
6. Address 과 Port 그리고, Socket
(1) Address: 네크웍상의 어느 고유한 위치(IP-Internet Protocol)
(2) Port: Address에서 특정한 정보를 들여보내고 내보내는 통로(채널). (우리 PC에서 0~65535 번까지의 포트
가 존재)
(3) Socket: 두 대의 Device 상에서 IP와 PORT를 재료로 해서 만들어지는 가상 통신 경로. (ex: 전화기-동기통신
or 편지-비동기통신)
7. 프로토콜
-> 네트웍 통신을 할 때에 데이터를 구분하기 위한 통신규약. ex: http, ftp, smtp, telnet, .....)
8. OSI7 Layer
두 대 이상의 Device 사이에 통신단계를 7단계로 나누어 놓은 것.
(물리적 구분 X, 논리적 구분 O) 즉, 데이터를 주고 받는 논리적 경로 단계.
|
A device |
B device |
7 계층 |
어플리케이션 |
어플리케이션 |
6 계층 |
프리젠테이션 |
프리젠테이션 |
5 계층 |
세션 |
세션 |
4 계층 |
트랜스 포트3 |
트랜스 포트3 |
3 계층 |
네트워크 |
네트워크 |
2 계층 |
데이터 링크 |
데이터 링크 |
1 계층 |
물리 (랜카드) |
물리 (랜카드) |
---------- 인터넷 ---------- |
cf1) 통신: 네트웍상의 디바이스끼리의 데이터 교류. (Give & Take)
cf2) OSI7 Layer 에서 JAVA프로그램과 관련 있는 계층은 애플리케이션 계층.
cf3) IT 용어 site 참고 (terms.co.kr)
9. 클라이언트/서버
서버(Server): 서비스를 제공하는 컴퓨터
클라이언트(Client): 서비스를 사용하는 컴퓨터
10. IP주소
정의 : 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호.
11. 소켓(Socket)
소켓을 이용한 통신 프로그래밍을 뜻한다.
소켓 -> 프로세스 간의 통신에 사용되는 양쪽 끝단을 의미한다.
java.net 패키지를 통해 소켓프로그래밍을 지원한다. TCP와 UDP를 이용한 소켓프로그래밍이 대표적이다.
* 단방향 채팅 예제
import java.net.*;
import java.io.*;
class BClient
{
Socket s;
int port = 20000; //1~66535
String serverIp = "61.81.98.63";
InputStream is;
OutputStream os;
DataInputStream dis;
DataOutputStream dos;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BClient(){
try{
s = new Socket(serverIp, port);
pln("서버와 접속 성공");
is = s.getInputStream();
os = s.getOutputStream();
dis = new DataInputStream(is);
dos = new DataOutputStream(os);
talk();
}catch(UnknownHostException ne){
}catch(IOException ie){
pln("접속하려는 ip("+serverIp+")와 port("+port
+")를 가진 서버를 네트웍에서 찾지못함");
}
}
void talk() {
try {
while(true) {
String line = br.readLine();
dos.writeUTF(line);
dos.flush();
}
} catch(IOException ie){
}
}
void pln(String str){
System.out.println(str);
}
public static void main(String[] args) {
new BClient();
}
}
import java.net.*;
import java.io.*;
class BServer {
ServerSocket ss;
Socket s;
int port = 20; //1~66535
String clientIp;
InputStream is;
OutputStream os;
DataInputStream dis;
DataOutputStream dos;
BServer(){
try{
ss = new ServerSocket(port);
pln("서버가 "+port+"번 포트에서 대기중...");
s = ss.accept();
clientIp = s.getInetAddress().getHostAddress();
pln("클라이언트(" + clientIp+") 접속 성공");
is = s.getInputStream();
os = s.getOutputStream();
dis = new DataInputStream(is);
dos = new DataOutputStream(os);
listen();
}catch(IOException ie){
}
}
void listen() {
try {
while(true) {
String msg = dis.readUTF();
pln("Client >> " + msg);
}
}catch(IOException ie){
}
}
void pln(String str){
System.out.println(str);
}
public static void main(String[] args) {
new BServer();
}
}
* 단방향 파일전송 예제
import java.net.*;
import java.io.*;
class BClient
{
Socket s;
int port = 20000; //1~66535
String serverIp = "61.81.98.63";
InputStream is;
OutputStream os;
DataInputStream dis;
DataOutputStream dos;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BClient(){
try{
s = new Socket(serverIp, port);
pln("서버와 접속 성공");
is = s.getInputStream();
os = s.getOutputStream();
dis = new DataInputStream(is);
dos = new DataOutputStream(os);
talk();
}catch(UnknownHostException ne){
}catch(IOException ie){
pln("접속하려는 ip("+serverIp+")와 port("+port
+")를 가진 서버를 네트웍에서 찾지못함");
}
}
void talk() {
try {
while(true) {
String line = br.readLine();
dos.writeUTF(line);
dos.flush();
}
} catch(IOException ie){
}
}
void pln(String str){
System.out.println(str);
}
public static void main(String[] args) {
new BClient();
}
}
import java.net.*;
import java.io.*;
class BServer {
ServerSocket ss;
Socket s;
int port = 20; //1~66535
String clientIp;
InputStream is;
OutputStream os;
DataInputStream dis;
DataOutputStream dos;
BServer(){
try{
ss = new ServerSocket(port);
pln("서버가 "+port+"번 포트에서 대기중...");
s = ss.accept();
clientIp = s.getInetAddress().getHostAddress();
pln("클라이언트(" + clientIp+") 접속 성공");
is = s.getInputStream();
os = s.getOutputStream();
dis = new DataInputStream(is);
dos = new DataOutputStream(os);
listen();
}catch(IOException ie){
}
}
void listen() {
try {
while(true) {
String msg = dis.readUTF();
pln("Client >> " + msg);
}
}catch(IOException ie){
}
}
void pln(String str){
System.out.println(str);
}
public static void main(String[] args) {
new BServer();
}
}
* TCP, UDP 정의
- TCP/IP 프로토콜에 포함된 프로토콜, OSI 7계층에 전송계층에 해당한다.
- TCP : 전화에 비유, 데이터를 전송하기 전에 먼저 상대편과 연결을 한 후에 데이터를 전송하고 전송되었는지 확인한다.실패했다면 재전송한다.
- UDP : 편지에 비유, 연결하지 않고 데이터를 전송하고, 전송되었는지 확인하지 않는다. 데이터를 보낸 순서대로 수신한다는 보장이 없다.
* TCP, UDP
|
TCP |
UDP |
연결방식 |
연결기반 (connection-oriented), 연결 후 통신, 1:1 통신 방식 |
비연결기반 (connectionless-oriented), 연결 없이 통신(소포), 1:1, 1:n, n:n 통신방식 |
특징 |
- 데이터의 경계를 구분안함(byte-Stream), 신뢰성 있는 데이터 전송 - 데이터의 전송순서가 보장됨, 수신여부를 확인함 (손실되면 재전송) - 패킷을 관리할 필요가 없음, UDP보다 전송속도가 느림 |
- 데이터의 경계를 구분함(datagram), 신뢰성이 없는 데이터 전송 - 데이터의 전송순서가 바뀔 수 있음, 수신여부를 확인 안함 (데이터가 손실되어도 알 수 없음) - 패킷을 관리해줘야 함, TCP보다 전송속도가 빠름 |
관련클래스 |
Socket, ServerSocket |
DatagramSocket, DatagramPacket, MulticastSocket |
'개발 > JAVA' 카테고리의 다른 글
24. JAVA JDBC (Java Database Connectivity) - 2 (0) | 2020.06.08 |
---|---|
23. JAVA JDBC (Java Database Connectivity) - 1 (0) | 2020.06.08 |
21. JAVA IO (Input / Output) / 파일 입출력 스트림 / 파일 (File) 클래스 (0) | 2020.06.08 |
20. JAVA 쓰레드 (Thread) (0) | 2020.06.08 |
19. JAVA 예외(Exception) / try~catch~finally (0) | 2020.06.08 |