- 학습 목표 달성 확인 목록
- [] Hub, Gateway, Router, DNS 서버의 역할을 이해하는가?
Hub:컴퓨터들을 LAN에 접속시키는 네트워크 장치를 말한다
Gateway:컴퓨터 네트워크에서 서로 다른 통신망,
프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 컴퓨터나 소프트웨어를 두루 일컫는 용어이다.
즉 다른 네트워크로 들어가는 입구 역할을 하는 네트워크 포인트이다.
쉽게 예를 들자면 해외여행을 들 수 있는데 해외로 나가기 위해서 꼭 통과해야하는 공항이 게이트웨이와 같은개념이다
Router:패킷의 위치를 추출하여 그 위치에 대한 최적의 경로를 지정하며 이 경로를 따라 데이터 패킷을 다음 장치로 정향시키는 장치이다
간단히 말하자면 서로 다른 네트워크 간에 중계역할을 해준다.
DNS:쉽게 말하자면 인터넷의 전화번호부라고 생각하면된다
호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다
- [] 일반 허브와 스위치 허브의 차이점을 이해하는가?

허브는 연결된 모든 디바이스에 데이터 프레임을 전송한다
하나의 디바이스가 프레임을 전송하면 모든 장비와 충돌할 수 있으므로 허브에 접속된 모든 장비들은 하나의 충돌 영역에 있다.

’
허브와는 달리 정해진 목적지에만 데이터를 전송할수 있다
프레임 충돌이 감소하여 네트워크 성능이 향상되고 보안성이 좋아진다.
- [] LAN, WAN, Internet, Intranet 용어를 설명할 수 있는가?
LAN:근거리 통신망,로컬 영역 네트워크,구내 정보 통신망은 네트워크 매체를 이용하여
집,사무실,학교 등의 건물과 같은 가까운 지역을 한데 묶은 컴퓨터 네트워크이다.
WAN:광역 통신망은 드넓은 지리적 거리/장소를 넘나드는 통신 네트워크 또는 컴퓨터 네트워크이다
Internet:컴퓨터로 연결하여 TCP/IP라는 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다.
Intranet:기업의 내부나 계열사 간이나 해외 지사와 본사 사이의 내부적 정보 교환과 정보 공유를 위해,
인터넷을 이용하여 구축한 컴퓨터 통신망을 말한다
- [] IP 주소와 포트 번호가 무엇인지 아는가?
IP:TCP/IP 프로토콜을 사용하여 통신을 할 때 송신자와 수신자를 구별하기 위한 고유의 주소를 말한다
그리고 인터넷에 연결된 모든 통신망과 그 통신망에 연결된 컴퓨터에 부여되는 고유의 식별 주소를 의미한다
PORT:IP주로는 컴퓨터를 찾을 때 필요한 주소를 나타내며 포트는 컴퓨터안에서 프로그램을 찾을 때 나타내는 것이다.
- [] IP 주소를 xxx.xxx.xxx.xxx 형식으로 표기하는 이유를 아는가?

컴퓨터는 0과 1 두수 밖에 인식을 할수 있다.그래서 32자리를 8자리씩 쪼개어 보기쉽게 헥사값으로 변경한것이다.
- [] IPv4, 사설 IP 주소, IPv6의 관계를 설명할 수 있는가?

IPv4가 먼저있었는데 장비가 증가함에 따라 주소가 부족현상이 일어나 더 많은 주소를 수용할 수 있는 IPv6으로 진화하였다.

사설IP는 일반 가정이나 회사 내 등에 할당된 네트워크의 IP 주소이며 로컬IP,가상IP라고도 한다
사설 IP주소만드로는 인터넷에 직접 연결할 수 없다.라우터를 통해 1개의 공인IP만 할당하고
라우터에 연결된 개인 PC는 사설IP를 각각 할당받아 인터넷에 접속할 수 있게 된다.
- [] ServerSocket의 용도와 대기열을 이해하는가?(참조)
ServerSocket ss = new ServerSocket(8888);
/*
네트워크 연결을 기다리는 역할을 수행할 객체를 준비한다
현재 실행 중인 프로그램과 포트 번호가 중복되서는 안된다
여기서 포트번호는 한 컴퓨터에서 네트워크 연결을 기다리는 프로그램의 식별번호이다
*/
-서버와 클라이언트의 동작방법

//서버 입장
// 큐(queue)에 대기중인 클라이언트 중 첫 번째 클라이언트를 꺼내서 연결을 승인한다.
// => 클라이언트가 서버에 연결을 요청하면, 서버는 대기열에 추가한다.
// => 서버소켓에서 연결을 승인하면 클라이언트와 통신할 수 있는 소켓을 리턴한다.
// => 대기열에 기다리고 있는 클라이언트가 없으면 접속할 때까지 기다린다.
Socket socket = ss.accept();
System.out.println("대기 중인 클라이언트 중 한 개의 클라이언트에 대해 연결 승인!");
- [] ServerSocket의 대기열을 제어할 수 있는가?
Scanner keyboard = new Scanner(System.in);
ServerSocket ss = new ServerSocket(8888, 2);//2개의 대기열을 만든다 디폴트값으로 50개를 만든다
System.out.println("서버 소켓 생성 완료!");
System.out.println("클라이언트 연결을 기다리는 중...");
while (true) {
System.out.print("> ");
String input = keyboard.nextLine(); // 사용자가 엔터를 칠 때까지 리턴하지 않는다.
if (input.equalsIgnoreCase("q"))
break;
// 대기열에서 꺼내는 순간 대기열은 한 칸 빈다.
// 즉 다른 클라이언트 연결을 수용할 수 있다.
Socket socket = ss.accept();
System.out.println("대기 중인 클라이언트 중 한 개의 클라이언트에 대해 연결 승인!");
}
ss.close();
System.out.println("서버 종료!");
keyboard.close();
- [] ServerSocket의 accept() 용법을 아는가?
ServerSocket ss = new ServerSocket(8888, 2);
Socket socket = ss.accept();
System.out.println("대기 중인 클라이언트 중 한 개의 클라이언트에 대해 연결 승인!");
//accept()를 호출하는 순간 즉시 대기열에서 맨 앞의 클라이언트 정보를 꺼내 연결한다.
- [] Socket을 이용하여 데이터를 입출력 할 수 있는가?
//바이트 스트림기준
Socket socket = new Socket("localhost", 8888);
//출력스트림 객체 준비
OutputStream out = socket.getOutputStream();
//입력스트림 객체 준비
InputStream in = socket.getInputStream()
...
//out.flush
// byte stream 을 사용할 때는 바로 출력한다.
// 따라서 flush()를 호출하지 않아도 된다.
//문자 스트림기준
Socket socket = new Socket("localhost", 8888);
//출력스트림 객체 준비
PrintStream out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()));
//입력스트림 객체 준비
Scanner in = new Scanner(new BufferedInputStream(socket.getInputStream())))
...
out.flush
// character stream 클래스의 경우
// 출력 데이터를 내부 버퍼에 보관하고 있다가
// 버퍼가 꽉차거나 flush()를 호출할 때 출력을 수행한다.
// 따라서 위 출력 문자열은 서버에 보내지 않는다.
// - BufferedWriter를 붙이지 않아도 이렇게 동작하기 때문에 주의하라!
*File I/O 계층 참조

