day 20 - Network, java.net, 소켓프로그래밍
Network
- 네트워크 Networt : 데이터를 전송할 수 있는 통신망, 전자장비들의 집합
- 노드 Node :네트워크에 연결된 장치들
- 호스트 Host : 노드에게 하나 이상의 서비스를 제공해주는 노드
- Protocol : 약속, 데이터 전송 규약
대표적인 표준 프로토콜의 예) ▸ 인터넷에서 사용하는 TCP/IP
✔ 네크워크 유형
- LAN Local Area Network
통신 프로토콜 : Ethernet FashEthernet GigaEthernet
통신 주소 : Mac-address - WAN Wide Area Network
내부 > 외부 통신 할때
통신 프로토콜 : IPv4
통신 주소 : IP address
💡 OSI7계층
모든 네트워크 통신에서 생기는 여러가지 충돌문제를 완화하기 위해 국제 표준기구(IOS)에서 표준화된 네트워크 구조를 제시한 기본 모델
7 | 응용층 | |
6 | 표현층 | |
5 | 세션층 | |
4 | 전송층 | |
3 | 네트워크층 | |
2 | 데이터링크층 | |
1 | 물리층 |
✔ IP Address (Internet Protocol Address)
통신을 하는 모든 기계는 네트워크상에서 유일하게 자신을 식별할 수 있는 "고유 주소"를 갖고 있다.
IP주소는 32비트의 이진수로 구성, 보통 8비트씩 4부분으로 나누어 십진수로 표현 (0~255)
http://www.naver.com
http:// IP : PORT / project name(contextRoot)
숫자로 된 주소는 기억하기 어려우므로 www.naver.com과 같은 문자열로 구성된 도메인 이름으로 바꿔 사용한다.
IPv4 : 4개의 숫자로 구성된 32비트의 ip 버전 4가 사용되고 있으나
IPv6 : 128비트 ip버전 6
✔ Port
- 데이터를 주고 받는 통로
- 여러개의 서비스를 해줄때 서로 충돌이 나지 않도록 포트를 구분해서 만들어 놓음
- 포트 번호는 개발자가 임의로 선택 사용할 수 있으나 기존 응용프로그램에서 사용하는 번호나 시스템 포트번호는 피하는 것이 좋음
잘 알려진 포트번호 : HTTP:80, FTP:21, Telnet:23 등
(0~1023 사이 번호를 가지며, 사용자 지정은 이 범위 피해서 선택하도록)
📌CMD
ip 주소 확인 : ipconfig -all
port 확인 : netstat -a
✔ 데이터 전송 방식
IP 프로토콜 위에서 동작
- TCP Transimission Control Protocol
▹연결형 서비스를 제공
▹신뢰성 높음 - UDP User Datagram Protocol
▹비연결형 서비스 제공
▹빠른 전송이지만 신뢰성 떨어짐
▹스트리밍 서비스
java.net
InetAddress Class
📑 java api 바로가기 ▸ InetAddress
자바에서 IP를 다루기 위한 클래스
URL Uniform Resource Location Class
자바에서 URL을 다루기 위한 클래스
프로토콜://호스트명(ip):포트번호/경로명/파일명? 쿼리스트링 #참조
https://post.naver.com/viewer/postView.nhn?volumeNo=31497840&memberNo=20215483&navigationType=push
:전체 URL
viewer/postView.nhn?volumeNo=31497840&memberNo=20215483&navigationType=push > URI
viewer : 최상위 폴더
컨텐츠 띄워주는 이름
소켓 프로그래밍
- 소켓을 이용한 통신 프로그램
- 소켓 : 통신을 하는 두 응용프로그램 간의 통신 링크의 각 끝난(endpoint)
- TCP/IP 프로토콜을 따르며, TCP/UDP방식이 있다.
✔ TCP 소켓
클라이언트(요청자)와 서버(제공자) 간의 1:1 통신
통신은 서버가 먼저 클라이언트의 접속을 기다리고, 클라이언트에서 서버에 접속하면, 그때부터 서로 데이터를 주고 받을 수 있음
☑구조
클라이언트 | 서버 |
[ServerSocket] (1) listener = new ServerSocket(서버port); | 대기탐 |
|
[Socket] clientSocket = new Socket(서버ip, 서버port) 접속시도 ---> |
(2) Socket socket = listener.accept(); | |
[Socket] | |
(4) clientSocket.getOutputStream() | socket.getInputStream(); |
소켓스트림을 이용하여 데이터 입출력 양방향 데이터 주고 받기 | |
| clientSocket.close(); |
| socket.close(); |