[Java] 2020.12.03. day_30 Network

2020. 12. 3. 17:05Web_Back-end/Java SE

컴퓨터 환경 변화

- 컴퓨터 환경 변화
1. 중앙집중식 서버 - 데이터, 화면 표시, 업무처리
단말기 - 서버로 요청보냄 ⇋ 응답받기, 서버가 제공하는 기능 사용 
2. C/S 서버 - 데이터, 업무처리
클라이언트 - 화면처리 ,, 고사양화
3. Wep Internet 환경 -
4. RIA -

◎ Network

  - Network
-




- 데이터를 주고 받기 위해 만들어진 통신망
컴퓨터에 의해 작동한다
C/S (Client Server) 프로그래밍  원격지에 존재하는 컴퓨터끼리 자원을 주고받는 프로그램을 작성하는 것
- Network위에서 동작
OSI 7Layer를 사용 (실제는 3단계모델인 TCP/IP Model을 사용한다)
Reference Model : 단계를 세분화하여 네트워크 계층을 이해하기 좋게 만든 모델
(물리계층, 데이터링크, 네트워크, 전송계층, 세션계층, 표현계층, 응용계층) 
HUB : Computer들이 연결하는곳 (더미허브, 스위치허브)
OSI 7Layer
자바에서 코딩가능한계층
응용계층
Application Layer
사용자가 사용하는 프로그램
표현계층
Presentation Layer
입력값이 어떻게 변화되어 컴퓨터에게 보여질지 (암호화)
세션계층
Session Layer
어떻게 연결할지 (호 단위) : 가상연결
전송계층
Transport Layer
실제연결 P2P
- 네트워크계층
Network Layer
길찾기
데이터링크계층
Datalink Layer
MAC, Data를 media에 어떻게 link 해줄 것인지
물리계층
Physical Layer
media로 연결 (유/무선) 

 


○ Protocol

- Protocol
Protocol (전송규약) 데이터를 전송하기 위해 미리 정의해둔 형식
자바에서는 TCPUDP를 사용할 수 있다
TCP
Transmission Control Protocol

Socket, ServerSocket
▸ 전화로 많이 비교
 속도가 느리다 (체크 - 오류검출)
 한번에 전송하는 크기가 일정하다 (1Packet : 8bit)
 과금이 편하다
UDP
User Datagram Protocol

DatagramSocket,
DatagramPacket
 우편으로 많이 비교
 속도가 빠르다 (체크X - 오류검출X)
 패킷의 크기를 개발자가 설정할 수 있다 (과금이 어렵다)
 데이터가 전달되지 않을 수 있다 (패킷이 꼬일 수 있다)
 화상채팅, 게임

 


◎ Java Network 프로그램

- Java Network 프로그램
- 컴퓨터끼리 연결하는 프로그램
cmd 명령프롬프트에서 관리자권한으로 열기
netstat -ab 
입력하면 지금 내 컴퓨터의 프로토콜주소와 상태를 볼 수 있다
java.net 패키지에 관련클래스가 제공
TCP / UDP 프로토콜을 사용하는 프로그램만 작성할 수 있다
(Protocol 자체의 개발은 자바에서 할 수 없다)
Socket 프로그램
(컴퓨터끼리 연결만 수행 : 데이터를 주고 받기 위해서는 IOStream을 사용)
port 데이터를 주고받기 위해 컴퓨터에서 여는 문
0~65535 사이의 포트를 연다
Server ▸ port를 열고 접속자 소켓이 들어오기를 대기한다
 접속자소켓이 들어오면 접속자 소켓을 저장하고 통신할 수 있는 상태로 만든다

1. ServerSocket ss = new ServerSocket( 3000 ); //3000:port
으로 3000번 포트가 열린다(LISTEN)

3. Socket client = ss.accept();
접속자 소켓이 들어오면 접속자 소켓을 받아들이는 일
Client  임의의 포트를 열고, 서버에 접속하는 일
 소켓을 생성 - 지정한 ip address의 컴퓨터에 지정한 port로 접속시도

2.Socket s = new Socket( 서버ip, 서버 port );
자신의 임의의 포트를 열고 정해진 ip컴퓨터의 포트로 접속시도
서버와 클라이언트를 연결하고 데이터를 주고받기 (Socket + Stream) 
서버소켓이 열린다 new ServerSocket(3000); //3000포트가 열린다
접속시도 new Socket(서버ip, port);
접속자소켓이 들어오면
접속자 소켓을 받아들이는 일
Socket client = s.accept();