java.net 패키지 - accidentlywoo/java GitHub Wiki

java.net 패키지

  1. 네트워크의 개념과 중요 프로토콜, 그리고 네트워크 프로그램에 필요한 기본 API를 이해하고 설명할 수 있다.
  2. 네트워크 프로그램의 중요 프로토콜인 IP, TCP, UDP, HTTP 및 API(Socket, InetAddress)를 이해하고 네트워크 프로그램을 구현할 수 있다.

네트워크와 네트워킹

지역적으로 분산된 위치에서 컴퓨터 간에 데이터 통신을 하기 위한 디바이스 및 소프트웨어 집단을 의미함

디바이스란 무엇일까?

컴퓨터뿐만 아니라 프린터, 웹서버, 휴대폰, 노트북, PDA 등 다양한 형태로 존재함 디바이스들을 통해 언제 어디서든 네트워크를 이용할 수 있게 됨

특정 서비스를 제공해주는 다양한 디바이스들이 네트워크로 연결되고 있고 서비스 이용자가 네트워크를 통해 서비스를 검색하고 이용할 수 있음

네트워크 -> 통신 경로들에 의해 상호 연결된 일련의 지점(Point)들이나 노드(Node)들을 의미함

네트워킹 -> 네트워크에 연결된 디바이스들 간의 데이터 교환을 의미함

프로토콜(Protocol)

일종의 통신규약으로, 컴퓨터 간에 통신을 하기 위한 약속과 절차를 의미함 데이터 통신에서는 통신 장치 간의 데이터 교환에 필요한 모든 규약의 집합체

  • 물리적 측면 데이터 전송에 사용되는 전송 매체, 접속용 커넥터 및 전송 신호

  • 논리적 측면 데이터의 표현, 의미와 기능, 데이터 전송 절차

서로 다른 부호체계를 사용하는 장치 간의 원활한 통신을 위해서 부호의 일치는 필수적임 전송하는 데이터 형식, 신호의 코딩 방식, 신호의 전기적 특성, 데이터 흐름 제어 등은 약속을 철저하게 준수하지 않으면 근본적으로 통신이 이루어질 수 없음

패킷(Packet)

1024비트씩 묶묶 -> 패킷 묶음 속에 각종 에러 검사용 정보를 담아 보내기 때문에 어느 패킷에서 에러가 발생했는지 알 수 있음 전송 도중 에러가 발생하면 전체 데이터를 다시 전송하지 않고 해당 묶음만 다시 전송하기 때문에 속도가 빠름

Header - Body(Data:11001100101A0111010000110010)

Header : 송신자와 수신자의 주소 정보. 패킷이 손상되지 않았음을 보장하기 위한 checksum.네트워크로 전송할 때 필요한 기타 유용한 정보

Body : 바이트 그룹으로 묶인 전송할 데이터

많은 데이터를 하나의 패킷으로 묶어서 전송할 수 있으므로 효율적임

OSI 7계층

오늘날 네트워크 구조는 1970년대 말 IOS(International Organization for Standardization)에 의해서 만들어진 OSI 7계층(Open Systems Interconnection 7 Layer)을 기초로 함

  1. 계층 : 애플리케이션 계층(NFS, FTP, HTTP)
  2. 계층 : 프레젠테이션 계층(XDE, XML, ASCI, Java Serialization)
  3. 계층 : 세션 계층(Sun RPC, DCE RPC, IIOP, RMI)
  4. 계층 : 트랜스포트 계층(TCP, UDP)
  5. 계층 : 네트워크 계층(IP)
  6. 계층 : 데이터 링크 계층(Wire formats for messages)
  7. 계층 : 물리 계층(Wires, signaling)

네트워크 장비끼리 서로 표준적인 연결을 할 수 있도록 틀을 제공하기 위함 --표준 설정--> 개방형 시스템 환경에서는 어떤 장비라도 상호 정보 처리가 가능하게 됨 네트워크의 프로토콜을 분리함으로써 프로토콜이 단순해짐 -> 관리가 쉬워지고 좀 더 유연한 구조가 됨

    1. 계층 : 물리 계층(Wires, signaling) 노드(Node)간 네트워크 통신을 하기 위한 가장 저수준의 계층 상위 계층인 데이터 링크 계층에서 형성된 데이터 패킷을 전기 신호나 광신호로 바꾸어 송수신하는 역할을 담당함 하드웨어나 드라이버 개발자들이 C언어 등으로 다룸
    1. 계층 : 데이터 링크 계층(Wire formats for messages) 네트워크 계층으로부터의 메시지를 비트로 변환해서, 물리 계층이 전송할 수 있게 함 메시지를 데이터 프레임의 포맷으로 만들고, 수신지와 발신지 하드웨어 주소를 포함하는 헤더를 추가함
    1. 계층 : 네트워크 계층(IP) 다른 장소에 위치한 두 시스템 간의 연결성과 경로 선택을 제공함 라우팅 프로토콜을 사용하여 서로 연결된 네트워크를 통한 최적의 경로를 선택하며, 선택된 경로를 따라 정보를 보냄
    1. 계층 : 트랜스포트 계층(TCP, UDP) 데이터 전송 서비스를 제공함 네트워크 내에서 신뢰성 있는 서비스를 제공하기 위해 가상 회로 구축, 유지와 종료, 전송 오류 검출과 복구 그리고 정보 흐름 제어의 절차를 제공함
    1. 계층 : 세션 계층(Sun RPC, DCE RPC, IIOP, RMI) 애플리케이션 간 세션을 구축하고 관리하며 종료시키는 역할을 함 프레젠테이션 계층 사이의 통신을 동기화시키며 데이터 교환을 관리함
    1. 계층 : 프레젠테이션 계층(XDE, XML, ASCI, Java Serialization) 한 시스템의 애플리케이션에서 보낸 정보를 다른 시스템의 애플리케이션 계층에서 읽을 수 있게 하는 곳임
    1. 계층 : 애플리케이션 계층(NFS, FTP, HTTP) 사용자와 컴퓨터가 통신하는 곳임 통신하고자 하는 상대를 식별하고 그 상대와 통신을 확보하는 역할을 함 통신을 위한 충분한 자원을 보유하고있는지의 여부를 판단함

(프로그램 관계 모델) 클라이언트 / 서버 모델

클라이언트 / 서버 모델은 현재 네트워크 컴퓨팅의 중심 개념임 서비스를 요청하는 Client 프로그램과 그 요청에 대해서 서비스를 제공하는 Server 프로그램 사이의 상호 통신하는 관계

네트워크 상의 서로 다른 컴퓨터에 분산되어 있는 프로그램들이 서로 효율적으로 통신할 수 있는 환경을 제공

클라이언트 / 서버 모델은 현재 네트워크 컴퓨팅의 중심 개념임

인터넷의 기본 프로그램인 TCP/IP도 클라이언트 / 서버 모델을 사용하여 구현됨

  • 웹 브라우저 웹 브라우저는 일종의 클라이언트 프로그램임 특정 웹서버에게 웹페이지 또는 파일 전송을 요청하고 서버의 응답 결과를 출력하는 일을 수행함

  • TCP/IP가 설치된 컴퓨터 TCP/IP가 설치된 컴퓨터에서는 인터넷 상의 다른 컴퓨터의 FTP(File Transfer Protocol)서버들에게 파일 전송을 요청할 수 있음

Peer to peer 모델

클라이언트 / 서버 모델과 대비되는 모델이며, 일반적으로 P2P라는 용어로 사용됨

  • 클라이언트 / 서버 서비스 제공자와 서비스 수요자가 명확하게 구분됨 서비스 제공자인 서버가 서비스 수요자인 클라이언트에게 일방적으로 서비스를 제공함 서버는 한 대인데, 수많은 클라이언트가 서버에 접속하여 서비스를 요청한다면 당연히 부하가 발생할 수 밖에 없음

  • P2P 하나의 사용자가 서버이자 클라이언트 역할을 수행함 네트워크에 연결되어 있는 모든 컴퓨터들이 서로 대등한 동료의 입장에서 데이터나 주변 장치 등을 공유할 수 있다는 것을 의미함 하나의 서버로 집중되는 요청으로 인해 발생하는 부하를 줄일 수 있음

인터넷

1960년대 후반에 미 국방성이 중심이 되어 패킷 통신망을 개발하게 된 ARPANET이 인터엣의 시초임

TCP/IP라는 프로토콜을 사용하는 수많은 컴퓨터들이 서로 연결된 전 세계에서 가장 큰 통신망임 OSI 7계층 중 3계층인 네트워크 프로토콜에 기반을 군 하나 이상의 네트워크 모임 각각의 네트워크는 인터넷 내의 다른 어떤 네트워크와도 통신할 수 있음 전 세계적인 TCP/IP네트워크먀, IP주소체계와 IP프로토콜을 사용함

IP(Internet Protocol)

3계층 IP는 네트워크 계층에 존재하는 프로토콜로서, 활용도가 높고 널리 사용됨 IP는 신뢰성이 없는 프로토콜로, 패킷이 상대방에게 안전하게 전송되는 것을 보장하지 않음 ->IP는 데이터를 효율적으로 전송하는 것에만 집중하기 때문임 -> 신뢰성은 4단계에서 호스트에 대한 주소 체계와 데이터 페킷에 대한 라우팅을 담당함 패킷을 수신하는 각 라우터는 패킷의 IP 주소를 근간으로 라우팅을 결정함

  • IP 주소 32비트 정보로 구성됨 Dot(.)를 구분자로 해서 8비트씩 네 부분으로 나뉘어짐 일부는 네트워크를 나타내고, 다른 부분은 호스트를 나타냄 현재 IP버전은 IPv4를 사용하고 있으나, IP주소 자체가 고갈되고 있는 실정임 IPv4보다 좀 더 큰 주소 공간이 있는 IPv6에 의해서 해결 방법을 찾고 있음

  • TCP 신뢰성 있는 프로토콜 전송할 데이터가 안전하게 전달되는 것을 보장함 전달되는 데이터는 발신자가 보내는 것과 같은 순서로 수신자에게 전달됨 흔히 전화통화와 비교함

  • UDP 신뢰성 없는 프로토콜 전송할 데이터가 잘 전달되었는지 확인하지 않고 데이터를 보내는 것만으로 자신의 임무를 다한 것으로 여김 흔히 UDP를 우편배달에 비유함

TCP(Transmission Control Protocol)

TCP는 연결지향 프로토콜로서, 데이터를 전송하거나 수신하기 전에 송신자와 수신자가 연결되어 있어야 함

송신자 : 데이터의 무결성을 보장하기 위해 checksum을 포함해서 전달함 수신자 : 발신자가 포함한 checksum을 사용해서 전달받은 데이터를 확인함. 누락된 데이터가 있다면 발신자에게 해당 데이터의 재전송을 요청함

소켓과 포트를 이용해서 동시에 여러 개의 접속을 지원할 수 있음

ex) 하나의 채팅 서버가 동시에 수천 명의 동시 사용자들의 연결을 유지하는 것은 TCP가 지원하는 다중 송수신 특징 때문에 가능함

IP - TCP - HTTP(80포트), SMTP(25포트), POP3(110포트), FTP(20or21포트)

TCP는 UDP에 비해 프로토콜이 더 복잡하고 속도가 느림 신뢰성 있는 데이터 전송이 가능하다는 장점 때문에 HTTP, FTP, TELNET등 대부분의 경우 TCP를 사용함

UDP(User Datagram Protocol)

우편을 보내면 그 우편이 수취인에게 반드시 도착한다고 보장할 수 없음 우편을 보낸 사람 입장에서 우편뭉이 잘 도착했는지 확인할 방법도 없음

UDP는 비연결지향 프로토콜로서, 상대방에게 우편을 보낸다고 알리지 않아도 상대방이 어디에 있는지를 가정하고 보냄

UDP는 음악이나 동영상의 스트리밍 서비스 같은 것에 적당한 프로토콜임

HTTP(Hypertext Transfer Protocol)

7계층 인터넷에서 하이퍼 텍스트 문서(텍스트, 그래픽, 사운드, 비디오, 기타 멀티미디어 파일 포함)를 교환하기 위해서 사용하는 통신규약들의 집합임 HTTP는 상태를 유지하지 않는(Stateless)특징을 가짐

클라이언트에서 서버로 접속해서 요청을 하면 서버에서는 클라이언트가 요청한 정보에 대해서 적절한 응답을 하고 젒속을 끊어버림

HTTP문서는 요청에 관한 여러 정보를 담고 있는 헤더와 데이터를 담고 있는 바디로 구성됨

HTTP프로토콜은 TCP 포트 80번을 사용함

소켓이란?

네트워크 프로그래밍에 있어서 사용자에게 네트워크에 접근할 수 있는 인터페이스를 제공해줌 소켓의 과정 소켓 생성 -> 소켓을 통한 송수신 -> 소켓 소멸의 세 가지 과정을 이해해야 함

소켓의 방법 TCP와 UDP를 이용한 두 가지 방법이 있음

소켓의 형식 세 가지 소켓 형식이 있음

  • SOCK_STREAM 바이트를 주고 받을 수 있는 스트림(Stream)통신을 구현할 수 있게 해주는 소켓 양방향 통신이 가능함 ->TCP

  • SOCK_DGRAM 데이터그램 통신용 소켓 SOCK_STREAM과 마찬가지로 양방향 통신이 가능함 -> UDP

  • SOCK_RAW 자바에서 지원하지 않ㅇ므

인터넷 주소와 포트

소켓을 사용하려면 인터넷 주소와 포트에 대해 알고 있어야 함

인터넷 주소(IP)를 이용하면 원하는 컴퓨터를 찾을 수 있음 하지만 컴퓨터를 찾았다고 해서 올바른 통신을 할 수 있는 것은 아님 ->컴퓨터 안에는 프로세스 여러개가 각자의 포트를 가지고 접속을 기다리고 있거나 이미 통신을 하고 있기 때문임

포트한 무엇일까?

하나의 컴퓨터에는 프로세스가 여러 개가 소켓으로 통신하는데, 이때 각각의 소켓을 구분하기 위해 포트를 사용함

포트는 정수 값으로 되어 있음 0부터 1023까지의 숫자는 유명 프로그램(FTP,WWW)등이 사용하도록 이미 정해진 포트임 일반 사용자는 1023 이후의 포트를 이용하면 됨