반응형
*네트워크(24일,26일)
-
java.net package에서 관련클래스 제공
-
정의 : 다른컴퓨터와 정보를 주고 받기 위해 생성하고 연결하여 사용하는 객체들.
-
=>Socket(TCP),SercerSocket(TCP),DatagramPacket(UDP-검증안하고),DatagramSocket(UDP-검증안하고)
-
InetAddress : 접속자의 정보얻을때 (ip), URLEncoder,URLDecoder(URL팀버너스리) : 문자열변환
-
ex)비대면 : id,password / 생체정보
-
연결만 수행한다. 데이터를 주고 받는건 Stream을 가지고 처리.(네트웍에 Stream을 푹)
-
입력의 근원과 JVM 출력의 목적지~~다시한번 봄(네트워크가 Stream을 가지고 사용하기 때문에 알고있어야 한다.)
-
네트워크의 socket으로 데이터를 주고 받게되는데,,,
-
Socket.getInputStream() Socket.getOutputStream() =>모니터로도,파일로도, 다른컴퓨터로도 보낼수 있다! 우린3번째 해볼예정
-
컴퓨터끼리 데이터를 주고받기위해 이미 구축해 놓은 연결 라우터?허브?LIC카드?UTP(언실드트위스트페어?)렌선 으로 연결
-
렌카드는 MAC주소라는것을 갖고 유일한 값을 갖는다. ip주소도 가짐(네트워크상에서 컴퓨터를 식별할수 있는 주소)
-
네트워크 : 컴퓨터끼리 정보를 주고 받기 위한 통신망 (2기종 : 팩스,컴-컴: ISDN이라는 종합통신망이 있는데)
-
그 통신망의 크기로 통신망의 분류 : LAN(perfect network: 짧아서 방해하는 요소가 없어 실패할 게 없다)-MAN-WAN)
-
허브는 여러개의 (네트워크에 참여하는)컴퓨터를 모으는 일을 한다.
-
라우터에서 웹사이트를 허브를 통해 물어본다.
-
cat1~7까지 선의 굵기 (마우스,키보드 선의 굵기 정도의 차이)
*개념(OSI 7Layer Reference Model)
=>물데네전세표응(물됬네 전세표 응) |
(사용자는 응용계층밖에 보이지 않는다.) |
*실제 TCP/IP Model(4계층)
|
응용계층 |
사용자가 Application |
응용계층(상위 삼계층-자바도 이아래로는 내려가지 못한다.) |
표현계층 |
컴퓨터가 알아볼수 있도록 변환
-암호화(스니핑방지) | |
섹션계층 |
상대방 컴퓨터에 가상연결 | |
전송계층 |
실제연결(프로토콜사용(TCP,UDP)) |
전송계층 |
네트워크 계층 |
길찾기(어떻게 찾아갈건지) |
인터넷 계층 |
데이터링크계층 |
맥주소를 사용하고
물리계층으로 어떻게 데이터를 연결(매핑)할건지 설정 |
링크계층 |
물리계층 |
렌선(RJ45)을 사용하여 실제 연결
(상대방에게는 물리부터 타고 올라간다.) | |
|
네트워크는 중간자공격이 언제든지 발생할수 있다. 물리계층에서 나가서 다른 컴퓨터의 물리계층으로 연결될때. |
|
식별하기 위한 호단위 ? =>서비스 리퀘스트(위에있는층에서 아래있는층우로 데이터를 내려줄때) | |
안녕 |
값은 페이로드 |
이름(어떤컴퓨터의 맥주소같은) 데이터(안녕) |
넣어준값과 이름틀까지 전체을 감싸 넣어주는 것을 캡슐화 |
이름[이름 데이터(안녕)] |
pdu는 전체를 의미하고 그대로내려준다. |
이름[이름[이름 데이터(안녕)]] |
|
.. |
|
... |
받은사람은 받은 pdu를 조학하여 위로 올려주며 하나씩 까준다. |
-
패킷은 절대로 한줄로 날라가지 않는다. 쪼개놓고 번호를 달아 분산시켜 도착해서 합쳐서 빠진것을 알려준다.
-
그pdu를 조합하여 까서 위로 올려주면 언캡슐레이션
-
통신선로 확립 : 3way-handShaking?
-
우리가 쓰는 환경은 이더넷 환경
-
자바로 연결할때에는 상위 삼계층을 이용.
*TCP (Transmission Control Protocol)
-
전화(속도가 느리다)
-
신뢰성 통신(오류 검출 가능-오류검출하기 위한 패킷 존재)-반드시 데이터 전송(미전송 패킷 다시 보낸다.)
-
패킷의 크기가 고정되어 있다.(일정=>1packet=>8bit)
-
ex)금융,결제 될때까지 되야함.=>중요한 데이터를 보낼때(결제,은행,,,)
-
Socket, SercerSocket
오류검출의 유무로 속도의 차이
*UDP (User Datagram Protocol)
-
우편(속도가 빠르다)
-
비 신뢰성 통신(오류 검출 불가능-검출 위한 패킷없음!)-반드시는 데이터 전송이 되지 않아여(미전송 패킷 다시 보내지 않는다.)
-
packet의 크기를 변경할 수 있다.(최대512byte) 데이터를 쭈우우우우우우욱 연결해서..
-
중요하지 않은 정보를 전달할 때.(화상채팅,게임) + M2M(r기계끼리 정보를 주고 받을때)
-
DatagramPacket, DatagramSocket
*컴퓨터 환경의 발전사
-
1980~ 중앙집중식
-
서버 : 데이터,화면,업무로직
-
단말기 들이 값들을 가지고 갔다 줬다(과금=RADIUS)... : 서버가 제공하는 데이터를 접속하여 사용만.
-
C/S (네트워크) : 프로그램 배포(하나하나)
-
서버 : 데이터, 업무로직
-
클 : 화면, 간단한 업무로직
-
web 환경(1995~ : 접근성
-
웹 서버 : 데이터,업무로직,화면
-
웹 클라이언트 : 웹브라우저 필요) 화면을 받아 브라우저에서 그림(다르게 그려서 웹표준이라는게 나옴)
-
RIA(Rich Internet Application) 환경 : 접속자의 자원을 더 많이 사용하는 (기존의 웹과 다르게 ) =>ex)AJAX
-
웹 서버 : 데이터, 업무로직
-
웹 클라이언트 : 화면그림, 업무로직
-
(2+3?)=>요즘 게임환경
-CIS Programming ( Client Server Programming )
-
<클라이언트는 서비스를 누리는일 서버는 클라이언트가 들어오길 기다리는일
Server : 정보제공 |
Client :정보를 제공 받는 |
|
임의의 포트(랜덤)가 열린다.
그리고 서버로 접속 시도 |
1.ServerSocket 생성
동일 port알림 : port 선점(1~65535)//먼저쓰는놈이 임자
1024번 이하의 port는 이미 열려있는 port가 많다
ServerSocket ss= new ServerSocket(포트번호);
서버에 자바가상머신이 있을거고 서버가 문을 열어준다.
OS고 그 사이에 방화벽이 있다.
3.접속자의 소켓을 받는다.
Socket client =ss.accept();//인삿말같은 존재blocking
(서버에서 어셉으로 받은 소켓은 클라이언트에서 보낸 것과 같다.=>주소는 하나이므로)=>소켓은 연결만!
블로킹 메소드라 클라이언트가 들어왔을때만 흘러가고 아니면 대기(이벤트가 터져서 아래로 아래로)
TCP/IP로 연결
데이터보내기>>>Url인코더(변환만)=>쪼개지지는 않는다.
데이터를 쪼개기 위해서 getOutputStream(8bit)출력 스트림.
DataOutputStream : 자바가상 머신밖으로 보내주는일
:자바의 데이터형을 스트림으로 내보낼 때 사용하는 Stream
기본형도 문자열도 내보낼 수 있다.
3.문자열을 내보내기(쓰기?)
DataOutputStream dos =new DataOutputStream(client.getOutputStream());
//
4.문자열을 쓴다.(JVM안)
dos.writeUTF("문자열");//입력된 문자열이 패킷으로 분할되어 스트림에 기록된다.(조각조각 써진다.)
dos.flush();//소켓에 써진다. |
2.Socket생성(입력된 ipaddress와 port를 가지고 서버연결 시도
Socket socket=new Socket(ip,port); //생성자는 오버로딩
조각조각난 스트림 합쳐..
4.보내온 문자열을 읽기 위한 Stream 사용.
DataInputStream dis=new DataInputStream(socket.getInputStream());
//getInputStream()=JVM까지 넣어준다.
5.읽기(JVM안)
String s=dis.readUTF();//Encording된 한글을 원래대로 조립하여 보여준다.(표현계층) |
*Network
-
컴퓨터 상호간 데이터를 주고 받기 위한 통신망(협의-컴퓨터끼리/ 광의-뭐든? 인터넷전화든 팩스든 모든 통신 포함??)
-
프토로콜(통신 규약)
-
TCP/UDP
-
Java.net Package에서 제공하는 Socket class사용
-
TCP : ServerSocket, Socket
-
UDP : DatagramSocket, DatagramPacket
-
OSI 7Layer Reference Model 에 의해 통신하게 되는데,
-
응용 : 응용 프로그램 (값 =body=payload)
-
표현 : 컴퓨터에 어떻게 표현할 것인가 변환.
-
세션 : 가상연결 (호단위(호 : 컴퓨터 네트워크 하나하나를 말함/집의 호?) 연결)
-
전송 : 실제연결( TCP / UDP )
-
네트워크 : 길찾기(IP)
-
데이터 링크 : MAC주소 사용, Media에 어떻게 링크 할지(미디어 : 연결매체 (ex/랜선, 이더넷))
-
물리 : NIC, 데이터를 보내는 일(보내거나 받는)
-
CAT1~5(선의 두께! -두께가 다르다)
-
응용 전송(표현 세션 전송) 인터넷 계층 링크 계층을 TCP Model이라고 하고 <월요일날 알려준거랑 다름
-
<Server쪽 JVM의 포트를 열고 라우터를 거쳐 Client쪽 JVM의 열린포트로 연결되는걸 간단하게 통로하나로 표현.>
-
1.Port 열기
-
ServerSocket s=new ServerSocket(port);//port는 0~65535 1024번 이하의 port는 이미 사용중인 포트가 많다(선점) 그 이후로 열도록 하자=>Well Known port 이미다 알고있는 포트?1024번 이하의 포트
-
2.Sorket 생성 //서버주소, port =>comB에서 (클라이언트)에서 발생
-
Socket s= new Socket("127.63.89.xx",3000/*port*/);=>외부컴퓨터 / 내컴퓨터로 연결시도.
-
3.접속자 소켓을 받는다.
-
Socket client=s.accept();//호단위 연결?
-
//멈추어있다가 이벤트가있을때 넘어간다=>블로킹메소드
-
4.데이터를 보내기 위한 Stream을 얻는다.
-
DataOutputStream dos=new DataOuputStream(client.getOutputStream());
-
5.스트림에 데이터를 기록(문자열=>Encording=>packet단위 쪼개는 일)
-
dos.writeUTF("문자열");
-
6.분출
-
dos.flush();
-
7.서버에서 보내오는 데이터를 받기 위한 Stream 연결 =>comB에서 (클라이언트)에서 발생
-
DataInputStream dis=new DataInputStream(s.getInputStream());
-
8.읽어들인 Encording된 데이터를 원래데로 Decording 하는 일 =>comB에서 (클라이언트)에서 발생
-
String s=dis.readUTF();
Session Layer (3-way handshaking:호 확립) | ||
client |
|
Server |
close |
|
close |
open |
SYN
===========> |
Open |
|
2.SYN+ACK
<=========== |
|
|
3.ACK
===========> |
ESTABLE SHED? |
<<<<<관리자권한으로 CMD를 열어 프로토콜의 연 사람?알수 있다.
->netstat -ab
<<<<<한번 열면 이렇게 열려있는지 알수있다 (대기 상태)=>연결이 되면 끊어진다.
TCP 0.0.0.0:3000 LISTENING
[javaw.exe]
이렇게 나오기 때문에 열린번호인지 상태가 무슨상태인지 어디서 열린건지 알수 있다.
*채팅창 처럼 만들예정-잘만들면 안되고 잘못만들면 된닷
<<1:1 실시간 채팅창을 만들거고, 실시간인만큼 readUTF로 계속 읽어들여야 한다 (무한루프)
<<Thread의 사용전이므로 돌아가지 않는것이 정상!(요즘엔 너무 좋아져서 돌아가기도...)
<<Thread의 사용전이므로 돌아가지 않는것이 정상!(요즘엔 너무 좋아져서 돌아가기도...)
*Thread(27일)
-
동시에 일을 처리해야 할 때 사용. (동시에 여러 method를 호출)
-
(좋은걸까? => 잘쓸때에만~!=>어렵...)
-
작은 process(CPU가 한번에 처리하는 일(사용자가 실행하는 프로그램/OS가 운영하기 위해 실행하는 프로그램)의 단위)
-
멀티테스킹(한번에 여러개의 프로그램을 실행할수 있는것.(게임도 인터넷도 다 띄울때) 눈에 안보이더라도 여러개의 프로그램이 실행되고 있는게 멀티스레드.
-
java는 Multi Thread(멀티스레드) 지원.
-
Thread가 사용된 코드는 종료시간을 측정할 수 없다.
-
Thread는 Runnable interface 또는 Thread class로 thread를 사용할 수 있다.(권장하지는 않지만 꼭 필요하다.)
-
자바는 선점형 Thread (작업관리자가 필요 없다.-이것도 하나의 차지..=>가볍)
-
yield 먼저//넘겨주다?
-
계속 선점하고 있으면 뒤에 기다리고 있는 쓰레드들이 deadlock
-
그 선점하고 있는걸 강제로 뜯어내는걸 Interrupted//중단된 (도스창에서의 컨트롤+c 윈도우에서는 컨트롤+알트+델리트 컴퓨터는 전원!!)
-
(살아있다고 보고 죽였다 kill =>더이상 작업할수 없어 종료되었다고 봄.)
-
===>간단하게 구현되고 사용된다.
-
//시분할 CPU 스케일링?(ex-Window) 시간을 잘러?. 작업관리자의 역할이 매우 중요(실행된 cpu에 점유하는시간?-아무리 빠른 cpu를 쓰더라도 동작하지 않을수 있다.?그만큼중요.
(28일은 미니 project 발표)-21일 밤~27일 밤 동안 준비
login후-log파일을 불러들여-분석하여 횟수를 count하고-원하는경우에 report로 파일생성
class diagram과 주요부분Flowchart ppt로 발표.
반응형