2023. 9. 10. 20:25ㆍ네트워크
IP주소
기기들을 구분하는 주소, 고유번호
Port
컴퓨터 안에 있는 서버들을 구분하는 값
Well Known Port | 0~1023 | 국제 인터넷 주소 관리 기구에서 미리 예약해둔 포트 |
Registered Port | 1024~49151 | 개인 또는 회사에서 사용하는 포트 |
Dynamic 또는 Private Port | 49152~65535 | 운영체제가 부여하는 동적 포트 또는 개인적인 목적으로 사용할 수 있는 포트 |
도메인 네임 서버(Domain Name Server : DNS)
도메인 주소로 접속했을 때, 도메인 주소를 IP 주소로 바꾸고 해당 IP 주소로 접속하는 과정을 일컫음.
* DNS 구성 요소
1. 도메인 네임 스페이스(Domain Name Space)
2. 네임 서버(Name Server) = 권한 있는 DNS 서버
3. 리졸버(Resolver) = 권한 없는 DNS 서버
도메인 네임 스페이스라는 규칙으로 도메인 이름을 계층적으로 저장,분산한다.
네임 서버가 해당 도메인 이름의 IP주소를 찾는다.
리졸버가 DNS 클라이언트 요청을 네임 서버로 전달하고 찾은 정보를 클라이언트에게 제공하는 기능 수행
* nslookup 도메인 주소 - 위 명령으로 도메인에 해당하는 ip주소를 알아낼 수 있다
Client & Server socket 프로그래밍
클라이언트 | 방향 | 서버 |
ServerSocket 클라이언트 요청을 받기 위한 준비를 한다. |
||
Socket 서버에 접속 요청한다. |
-> | accept 클라이언트의 요청을 받아들인다. |
BufferWriter 서버에 메시지를 보낸다. |
-> | BufferReader 클라이언트가 보낸 데이터를 출력한다. |
BufferReader 서버가 보낸 메시지를 출력한다. |
<- | BufferWriter 클라이언트 메시지를 보낸다. |
socket.close() 종료한다. |
socket.close() 종료한다. |
- 서버는 클라이언트 요청을 기다리다가 서버에 접속을 하면 socket을 반환한다.
package com.example.net;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class WebServer {
public static void main(String[] args) throws Exception {
//9090 port에서 클라이언트를 기다린다.
// 클라이언트가 접속하는 순간, 클라이언트와 통신할 수 있는 socket을 반환한다.
// 브라우저에서 http://127.0.0.1:9090/ 입력한다.
ServerSocket ss = new ServerSocket(9090);
System.out.println("클라이언트 접속을 기다립니다.");
// Socket은 브라우저(client)와 통신할 수 있는 객체
// 클라이언트의 접속 요청을 받아들여 연결됨.
Socket socket = ss.accept();
//Client와 읽고 쓸 수 있는 InputStream, OutputStream이 반환된다.
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//요청정보 읽기 시작
String firstLine = br.readLine();
List<String> headers = new ArrayList<>();
String line = null;
//빈줄을 만나면 while문을 끝낸다.
while ((line = br.readLine()).equals("")){
headers.add(line);
}
//요청정보 읽기 끝
System.out.println(firstLine);
for (int i =0; i<headers.size(); i++){
System.out.println(headers.get(i));
}
//서버에게 응답보내기
pw.println("HTTP/1.1 200 OK");
pw.println("name : kim");
pw.println("email : yaya");
pw.println();
pw.println("<html>");
pw.println("<h1>Hello!</h1>");
pw.println("</html>");
pw.close();
//종료
ss.close();
System.out.println("서버가 종료됩니다.");
}
}
** socket과 socket간에는 IO객체를 이용하여 통신할 수 있다.
TCP/IP 프로토콜
인터넷 환경에서 정보 전송을 위해 쓰이는 프로토콜
IP : 패킷 통신 방식의 인터넷 프로토콜(Ineternet layer)
+
TCP : 전송 조절 프로토콜(Transport layer)
=> IP 주소 체계를 따르고, 목적지를 찾아가는 과정에서
TCP의 특성을 활용해 송신자와 수신자의 논리적 연결을 생성하고 신뢰성을 유지할 수 있도록 하겠다는 의미
(송신자가 수신자에게 IP 주소를 사용하여 데이터를 전달하고 그 데이터가 제대로 갔는지, 받았는지, 속도는 괜찮은지에 대한 이야기)
* TCP의 작동 (3-way handshake)
1) 송신자가 수신자에게 'SYN'을 날려 통신 가능 여부를 확인한다. (Port는 열려있어야함.)
2) 수신자가 송신자로부터 'SYN'을 받고, 'SYN/ACK'을 송신자에게 날려 통신할 준비가 되었음을 알린다.
3) 송신자가 수신자의 'SYN/ACK'를 받고 'ACK'를 날려 전송 시작을 알린다.
* TCP의 특징
1) 흐름 제어
한번에 받고/ 보낼 수 있는 데이터의 양을 정하고 데이터를 어디까지 받았는지 계속해서 확인한다.
2)혼잡 제어
데이터가 지나가는 네트워크망의 혼잡도를 파악하여
Slow Start를 통해 연결 초기에는 송출량을 낮게 잡고 점차 늘리며 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있다.
HTTP 프로토콜
* HTTP 특징
장점
=> 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있다
단점
* HTTP 요청 메서드
- GET : 기존 자원 요청
- POST : 새로운 자원 생성
- PUT : 기존 자원에 대한 변경
- DELETE : 기존 자원에 대한 삭제
- HEAD : 서버 헤더 정보만 요청
- OPTIONS : 웹 서버가 지원하는 메소드 종류 요청
'네트워크' 카테고리의 다른 글
12. 프로세스와 스레드 (0) | 2023.09.10 |
---|