네트워킹 (Networking)

최준호·2021년 12월 19일
0

java

목록 보기
23/25

네트워킹

네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네으워크를 구성하는 것을 말한다. 네트워킹의 개념은 컴퓨터들을 서로 연결하여 데이터를 손쉽게 주고받거나 주변기기를 함께 공유하고자 하는 노력에서 시작되었다.

클라이언트, 서버 (Client, Server)

서버는 서비스를 제공하는 컴퓨터, 클라이언트는 서비스를 사용하는 컴퓨터로 이해하면 된다.

네트워크를 구성할 때 전용서버를 두는 것을 서버기반모델(server-based-model)이라고 하고 전용서버 없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P(peer-to-peer)이라고 한다.

server based model

  • 안정적인 서비스 제공
  • 공유 데이터의 관리와 보안이 용이
  • 서버구축 비용이 들고 제한적임
    P2P
  • 서버 구축 비용을 절감할 수 있고 제한적이지 않음
  • 자원 활용을 극대화할 수 있음
  • 자원 관리가 어려움
  • 보안이 취약

IP 주소

IP주소는 컴퓨터를 구별하는데 사용되는 고유한 값

InetAddress

java에서 ip주소를 다루기 위한 클래스
byte[] getAddress() ip 주소를 byte 배열로 반환
static InetAddress getAllByName(String host) 도메인명에 지정된 모든 호스트의 ip주소를 배열에 담아 반환
static InetAddress getByAddress(byte[] addr) byte배열을 통해 ip 주소를 얻는다.
static InetAddress getByName(String host) 도메인명을 통해 ip 주소를 얻는다.
String getCanonicalHostName() fully qualified domain name을 반환한다.(정규화된 도메인)
String getHostAddress() 호스트 IP주소 반환
String getHostName 호스트 이름 반환
static InetAddress getLocalHost() 지역 호스트의 ip주소를 반환
boolean isMulticastAddress() ip주소가 멀티캐스트 주소인지 알려준다.
boolean isLoopbackAddress() ip주소가 loopback 주소(=127.0.0.1)인지 알려준다.

URL(Uniform Resource Locator)

URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현한 형태이다.

url 참고 글 (http에 대한 설명)

java에서는 url을 다루기 위한 클래스로 URL 클래스를 제공하며 메서드를 정의해놨다.
URL(String spec) 지정 문자열 정보의 URL 객체 생성
URL(String protocol, String host, String file) 지정된 값으로 구성된 URL 객체 생성
URL(String protocol, String host, int port, String file) 지정된 값으루 구성된 URL 객체 생성
String getAuthority 호스트명과 포트를 문자열로 반환
Object getContent() URL Content 객체를 반환
Object getcontent(Class[] classes) URL Content 객체를 반환
int getDefaultPort() URL 기본 포트를 반환
String getFile() 파일명을 반환
String getHost() 호스트명을 반환
String getPath() 경로명을 반환
int getPort() 포트 반환
String getProtocol() 프로토콜 반환
String getQuery() 쿼리 반환(?)
String getRef() 참조를 반환(#)
String getUserInfo() 사용자 정보를 반환
URLConnection openConnection() URL과 연결된 URLConnection을 얻는다.
URLConnection openConnection(Proxy proxy) URL과 연결된 URLConnection을 얻는다.
InputStream openStream() URL과 연결된 URLConnection의 InputStream을 반환
boolean sameFile(URL other) 두 URL이 같은지 반환
void set(String protocol, String host, int port, String file, String ref) URL 객체의 속성을 지정된 값으로 설정
void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) URL 객체의 속성을 지정된 값으로 설정
String toExternalForm() URL을 문자열로 변환하여 반환
URL toURL() URL을 URI로 변환하여 반환

URLConnection

URLConnection은 어플리케이션과 URL간의 통신연결을 나타내는 클래스이 최상위 클래스로 추상 클래스이다. URLConnection을 상복받아 구현한 클래소를 HttpURLConnection과 JarURLConnection이 있다.

임의로 선택한 메서드만 작성

void addRequestProperty(String key, String value) key, value 값을 RequestProperty에 추가한다. 기존에 같은 키가 있어도 값을 덮어쓰지 않는다.
void connect() 통신 연결
int getConnectTimeout() 연결종료 시간을 반환
String getCotentEncoding() content 인코딩 반환
String getDefaultReqeustProperty(String key) 지정된 키의 디폴트값 반환
long getExpiration() 자원(URL) 만료일자를 반환
String getHeaderField(int n) 헤더의 n번째 필드를 읽어온다
String getHeaderField(int n) 헤더에서 지정된 이름의 필드를 읽어온다.
InputStream getInputStream() URLConnection에서 InputStream을 반환
OutputStream getOutputStream() URLConnection에서 OutputStream을 반환

URLConnection Api 문서

Socket 소켓 프로그래밍

소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍을 뜻한다. Socket이란 프로스세간의 통신에 사용되는 양쪽 끝단을 의미한다.

TCP와 UDP

TCP와 UDP 모두 TCP/IP 프로토콜에 포함되어 있으며 OSI 7계층의 전송계층(transport layer)에 해당하는 프로토콜이다.

TCP

  • 연결 방식
    • 연결 후 통신
    • 1:1 통신
  • 특징
    - 데이터의 경계를 구분 안함(byte-stream)
    • 신뢰성 있는 데이터 전송
      • 전송순서 보장
      • 수신여부 확인
      • 데이터가 손실되면 재전송
    • UDP보다 느림
  • Socket, ServerSocket

UDP

  • 연결 방식
    - 비연결
    - 연결없이 통신
    • 1:1, 1:n, n:n 통신
  • 특징
    • 데이터의 경계를 구분함(datagram)
    • 신뢰성 없는 데이터 전송
      • 데이터의 전송순서가 바뀔 수 있음
      • 데이터의 수신 여부 확인 암함
    • TCP보다 전송 속도가 빠름
  • DatagramSocket, DatagramPacket, MulticastSocket

TCP를 이용한 통신은 전화, UDP를 이용한 통신은 소포에 비유된다.

TCP는 데이터를 전송하기 전에 연결을 확인한 후에 데이터를 전송하며 잘 전송되었는지 확인하고 전송에 실패하면 재전송하기 때문에 신뢰 있는 데이터 전송에 적합하다.

UDP는 상대편과 연결하지 않고 데이터를 전송하며, 데이터를 전송하지만 데이터가 바르게 수신되었는지 확인하지 않기 때문에 데이터가 전송되었는지 확인할 길이 없다. 또한 데이터를 보낸 순서가 순서대로 수신한다는 보장이 없다.

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글