날아라쩡글이의 블로그입니다.
네트워크 본문
반응형
- 여러 대의 컴퓨터가 통신회선을 연결되어 있는 것을 의미한다.
- Server - > 서비스를 제공하는 프로그램
- Client -> 서비스를 제공받는 프로그램
- 일반적인 컴퓨터는 클라이언트 역활을 진행한다.
- 하나의 Server에 다수의 Client가 연결된다.
- 1:M 구조로
- 이것을 클라이언트/서버구조라고 한다.
용어
- host
- 네트워크에 연결되어 있고, 다른 호스트와 통신할 수 있는 컴퓨터를 의미한다.
- Ip주소를 갖고 있기 때문에 Ip주소로 식별한다.
- 인터넷에서 식별하기 위해 부여된 고유한 주소로 확인한다.
- 클라이언트/ 서버프로그램 전부 host프로그램이다.
- cmd창에서 ipconfig을 검색하면 ip주소를 확인 할 수 있다.
- ip address
- 네트워크에서 호스트를 식별하기 위해서 부여되는 고유한 주소를 의미한다.
- Ipv4, Ipv6 주소 체계가 있다.
- MAC address
- 컴퓨터를 설치하면 얻게되는 주소로써 물리적 주소를 의미한다.
- LAN카드, 고유번호, 무선 VLAN카드
Port번호
-
실행 중인 서버프로그램의 논리적인 연결지점을 의미한다.
- 논리적인 연결지점이라고 하는 점은 물리적이지는 않다는 의미이다.
- 컴퓨터의 고유식별 Ip주소 : 포트번호 는 서버프로그램을 식별할 수 있는 값을 의미한다.
- 대표전화번호에서 해당 서비스 내선번호로 연락하는 방법이 ip주소에서 port주소를 연결하는 것과 동일하다.
- 내선번호가 한개있는 것처럼 다른 프로그램의 사용번호는 다른 port프로그램에서 사용할 수 없다.
- 모든 특정 프로그램에서 각번호가 있는 것은 port번호이며, 선택해서 사용하면 된다.
- 모든 서버프로그램은 특정 포트번호를 가지고 실행된다.
- 포트번호를 이용해서 서비스를 제공하는 서버프로그램을 선택할 수 있게 된다.
- 포트갯수는 0~65535까지 총 65536개가 있다.
- 포트번호의 범위
- 0~1023 : 국제인터넷주소관리 기구에서 특정서버용으로 미리 예약한 포트이다.
- 1024~49151 :특정 벤더(회사)사가 등록해서 사용할 수 있는 포트이다.
- 49152~65535 : 개인적인 목적으로 사용할 수 있는 포트번호이다
- 대표적인 포트번호
- 웹서버의 포트번호 = 80번
- FTP의 포트번호 = 21번
- tenlet의 포트번호 = 23번
- SSH 의 포트번호 =22번
- https의 포트번호 = 443
- 서버접속시 주소표기법
- 프로토콜 :// 주소 : 포트번호
- 웹=http://www.naver.com: 80
- ftp = ftp ://192.168.10.65:21
- 원래 인터넷을 접속할 때는 ip주소 : 웹서버기본포트번호를 입력해야 입력할 수 있다.
- 웹 서버의 기본포트번호로 입력하기 때문에 생략이 가능하다. 원래는 웹사이트처럼 : 80으로 port번호를 입력해주어야한다.
프로토콜(protocol)
- 네트워크에 연결된 host간의 데이터 교환을 위해서 미리 약속된 통신기반이다.
- 어떤 형태로 데이터를 주고 받을지 , 약속된 통신규약이며, 약속된 통신기반이라고 한다.
- 물리적 혹은 논리적인 통신을 처리하기 위한 규칙세트이다.
Ip(Internet Protocol)
- Ip주소 체계를 규정하는 프로토콜이다.
- 총 2가지의 형태를 가지고 있다. Ipv4 , Ipv6
- Ipv4
- 32Bit로 구성된다.
- 총 2^32개만큼의 주소를 가진다.
- 현재의 경우 이 주소를 전부 사용했다.
- 클래스
- 클래스 A 주소 : xxx.???.???.??? - 1.???.???.??? ~ 126.???.???.???
- 거의 미국이 가지고 있다.
- 클래스 B 주소 : xxx.xxx.???.??? - 128.xxx.???.??? ~ 191.xxx.???.???
- 클래스 C 주소 : xxx.xxx.xxx.??? - 192.xxx.xxx.??? ~ 223.xxx.xxx.???
- 클래스 전부 서로서로 연결이 되어 있다고 생각하면 된다.
- C클래스의 경우 daum과 naver가 있다.
- 클래스 A 주소 : xxx.???.???.??? - 1.???.???.??? ~ 126.???.???.???
- 구분
- 공인 ip주소
- 다른 컴퓨터와 통신할 때 사용하는 ip주소이다.
- ip주소를 요청 후 ip주소를 얻게 된다.
- 사설 ip주소
- 가상, 사설망내에서 사용할 수 있는 ip주소를 의미한다.
- 그냥 사설 네트워크 망을 얻어서 사용한다.
- 사용크기에 따라서 분류가 가능하다.
- 컴퓨터 실습실 등 실내에서만 통해서 사용가능한 주소이다.
- 외부인터넷의 경우 공유기를 사용한다.
- 특수목적 Ip주소
- 루프백(Loopback) ip로 자기자신을 나타내는 ip주소를 의미한다.
- 127.0.0.1
- this와 같은 의미이다.
- 객체 자기자신을 가르키는 것이다.
- 서브넷마스크
- 서브넷 마스크는 Ip주소를 내부ip주소인지 외부 ip주소인지 구분할 때 사용하는 것이다.
- ip주소와 서브넷마스크 주소를 논리 곱연산을 수행해서 같은 주소가 나오면 내부 ip 다른 주소가 나오면 외부ip로 판단하는 것이다.
- 서브넷 마스크의 사용방법
- 1번 서버
- 192.168.1.0~192.168.1.255
- 네트워크 ip 192.168.1.0
- 브로드 캐스트 ip 192.168.1.255
- 네트워크 ip와 브로드캐스트 ip는 대역이 특수 대역으로 부가가 된 부분이기 때문에
- 192.168.1.1~192.168.1.254 여기에만 부여가 가능하다.
- 즉, 254개만 부여가 가능하다.
- 2번 서버
- 192.168.2.0~192.168.2.255
- 네트워크 ip 192.168.2.0
- 브로드캐스트 ip 192.168.2.255
- 네트워크 ip오아 브로드 캐스트 ip는 대역이 특수 대역으로 부가가된 부분이기 때문에
- 192.168.2.1~192.168.1.254여기에만 부여가 가능하다.
- 즉,254개만 부여가 가능하다.
- 1번서버를 나눠보자
- 1번서버
- 1100 0000. 1010 1000.0000 0001.0000 0000
- 여기에서 서브넷 마스크 255.255.255.0을 AND연산해준다.
- 1111 1111.1111 1111.1111 1111. 0000 0000
- 1111 1111.1111 1111.1111 1111. 0000 0000으로 결과 값이 나온다.
- 그런데 1번서버에서 254개에서 128개로 나눠서 통신이 되지 않게 나누고 싶은 것이다.
- 딱 반으로 나눠서 통신이 되지 않게
- 1100 0000. 1010 1000.0000 0001.0000 0000를
- 1100 0000. 1010 1000.0000 0001.1000 0000으로 변경해준다. 128로
- 그러면
- 1111 1111.1111 1111.1111 1111.0000 0000 서브넷마스크와 논리곱은 255.255.255.0
- 1111 1111.1111 1111.1111 1111.1000 0000 서브넷마스크와 논리곱은 255.255.255.128이라는 결과 값으로 2개의 서버가 나온 것을 알 수 있다.
- 네트워크 ip가 2개 나오고, 브로드캐스트 ip도 2개가 된다.
- 네트워크 ip 192.168.1.0 ,192.168.1.128
- 브로드캐스트 ip 192.168.1.127 / 192.168.1.255
- 서버가 2개로 나뉘게 된것이다.
- 이렇게 내부 ip주소와 외부ip주소인지를 구분할 때 사용을 한다.
- 그리고 서로의 ip주소를 확인하여 외부의 ip주소로 판단하는 기능을 갖고 있다.
- ip주소를 더 작은 단위로 나눌 수 있다.
- 4부분으로 더 작게 만들 수 있다.
- 네트워크 크기를 더 작게 제어가 가능하고, 같은 네트워크망을 표시할 수 있다.
- 255,192,128로 서브넷마스크로 네트워크로 크게 혹은 작게 만들 수 있다.
- 네트워크를 더 작게 만들어 줄 수 있는 AND연산으로 1이 나와야 같은 네트워크로 생각하고, 데이터 교환이 가능하다.
- 1의 갯수가 낮아지면 크게 만들어주고, 1의 갯수가 많으면 적게 만들어진다.
- 더 작은 단위로 나눠지게 되면 브로드 캐스트의 메세지가 전달이 낮아지기 때문에 라우터의 브로드캐스팅의 부담을 줄일 수 있다.
- 1번서버
- 공인 ip주소
Ipv6
- Ipv4은 10진수로 작성이 되어있고
- Ipv6은 16진수로 작성이 되어있다.
- 현재는 Ipv4에서 Ipv6으로 넘어가는 과도기이다.
- 128bit로 구성된다.
- ip주소의 고갈문제, 인터넷의 확장성, 데이터 보안의 강화를 위하여 정의가 되었다.
- ip주소의 갯수는 2^128개이다.
- Ipv4의 4배의 수이다.
- 주소표기법은 16비트씩 16진수로 표시한다.
- 2001:0d5f:451d:0010:38da:6b43:191c:1d1d
DNS(Domain Name Server) : 도메인 네임 서버
- ip주소에 대한 domain name에 대해 제공해주는 것을 의미한다.
- 이름을 설정하지 않으면 인터넷이 되지 않는다.
- 웹사이트의 도메인 이름과 ip주소를 서로 변환해주는 역활을 수행하는 서버다.
- 도메인의 이름에 해당하는 ip주소정보를 조회할 수 있다.
- www.daum.net으로 ip주소를 외우지는 못하지만, 기억하기 쉬운 링크와 도메인 주소를 외우게 된다.
- 한국서버에서 없는사이트인 경우 한국DNS에서 외국 DNS를 찾아서 연결을 해준다.
- 168.126.63.1, 168.126.63.2 한국통신 DNS서버
게이트웨이 (Gateway), 라우터(Router)
- 서로 다른 네트워크로 이동하기 위한 통로다
- 내부네트워크가 아닌 외부네트워크 통신을 하는 경우 반드시 게이트웨이를 거쳐야한다.
- 같은 ip시 브로드캐스트로 ip를 전송한다.
- 다른 ip주소시 서브넷마스크를 AND연산후 다른 주소인지를 확인한다.
- 192.168.2.30 으로 데이터를 전달하고 싶다.
- 게이트웨이로 연결되어서 바깥으로 나간다.
- 메세지 보내고 싶은곳이 같은 서버가 아닌 것을 확인하면 게이트웨이로 가서
- 라우터에서 전달 후 특정 ip에게 전달된다.
- 우리가 현재사용하고 있는 인터넷의 경우 집에있는 모뎀이
- 게이트 웨이이다.
- 중간에 엄청난 망을 통하고 거쳐서 도착하게 된다.
TCP/IP
- 메세지를 전달하게 될 경우 메세지는 엄청난 조각(패킷)단위로 쪼개져서 전달하게 된다.
- 받는 입장에는 라우터로 전송된 것을 받고, 도착을 하게 되면 순서대로 재조립을 진행한다.
- IP의 경우 호스트 식별 주소체계이며, TCP는 데이터를 재조립하는 것을 의미한다.
- TCP
- 데이터를 전송시 패킷 단위를 재조립할 줄 알아야한다.
- 데이터가 오고 손실이 있었는지에 대한 확인규칙, 순서에 대한 규약, 규칙이 필요하다.
- 데이터가 미국에서 한국으로 오는 도중 번개, 손실, 데이터가 깨졌을 경우 오류를 검출하는 것이 필요하다
- TCP
- TCP
- 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 표준을 정의하는 프로토콜
- IP
- 호스트를 식별하기 위한 ip주소체계를 정의하는 프로토콜
- TCP+IP
- 오류검출방식, 패킷 순서 재조립하는 정보들의 규약을 합쳐서 인터넷을 안전하게 만드는 인터넷 기반의 프로토콜이라고 한다.
- 응응용계층은 특정클라이언트 특정서버를 사용하는 프로토콜로
- http, https, telnet ,SMTP등의 프로토콜리 존재한다.
- TCP는 잘보냈는지 몇번째로 전송되었는지 택배회사가 체크하는 것이고,
- IP는 받는 사람, 주는 사람의 주소를 작성한 것
- 그리고 그 택배의 물건이 무엇인지는 http, https, telnet, SMTP에서 데이터를 정하는 것이라고 할 수 있다.
- 반드시 중계부분이 있어야지 전달 할 수 있다.
SOCKET으로 메세지를 전달하는 방법
- 서버에 소켓을 생성하기
- 클라이언트 연결 요청 대기 accept()로 대기한다.
- 제한된 host의 3000번 port를 사용중인 서버소켓에 연결 요청을 한다. ->block 메소드인 accept()가 실행되면서 socket이 만들어 진다.
- 소켓끼리 연결한다. OutputStream, InputStream
- 읽고, 쓰는 브릿지 객체와 2차Stream객체를 생성하고, 연결한다.
- 입력되있는 사진의 모습이 연결된 형태이다.
- 클라이언트에서는 서버메세지를 보낸다. 그리고 block하는 nextLint()메소드로 대기한다.
- 서버메소드에서는 nextLine()으로 block중이였고, 메세지를 수신하고, 업무로직, 응답데이터를 송신하는 객체와 메소드를 입력한다.
- 클라이언트에서는 메세지를 수신하고, 출력후 close()메소드로 종료한다.
Input메소드는 block메소드라고 한다.
- accept() 에서 멈춰있다.
- 클라이언트와 연결이 될 때까지
- read.nextLine()에서 멈춰있다.
- 메세지를 읽을 때까지 실행된다
- 클라이언트 메세지를 보낸후 readLine()대기 후 메세지를 기다린다.
- 클라이언트에게 메세지 수신한다.
- 네트워크 자바는 socket으로 수신한다.
- 모든데이터는 입력을 했으면 출력이 있고, 출력이 있다면 입력이 존재한다.
그러나 모든 서버는 한가지만의 클라이언트의 입력을 받고 대기만 할 수는 없는 법이다. 연결수락, 연결 송신, 여러개의 객체를 만들어서 다수의 작업이 동시에 실행되도록 만들어야한다.
그것이 멀티쓰레드이다.
java.io ->socket사용통신은 메소드들이 실행흐름을 멈추게 한다. blocking으로 필수적으로 메소드를 사용하게 한다.
java.nio라는 것을 자바 7부터 만들어서 socket대신 channel을 사용하게 한다. 그리고, 네티라는 API를 이용하여, I/O와 쓰레드를 구현하게 한다. 아주 적은 수의 메서드로 동작하도록 구현되어있다.
이 부분은 네트워크에서 다시 다루도록 한다.
반응형
Comments