Skip to the content.

- 학습 목표 달성 확인 목록

- [] 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 계층 참조