Network

DNS

레코드

A

AAAA

CNAME

네임 서버

클라이얻으가 내 도메인에 오기까지

https://aws.amazon.com/route53/what-is-dns/#:~:text=The%20Internet's%20DNS%20system%20works,These%20requests%20are%20called%20queries.

# mac에서 resolver 구성 확인 가능

scutil --dns
resolver #1
  search domain[0] : openvpn
  nameserver[0] : 210.220.1.1
  nameserver[1] : 219.250.1.1
  nameserver[2] : 8.8.8.8
  flags    : Request A records
  reach    : 0x00000002 (Reachable)

(...)

레퍼런스

HTTPS

http 데이터 주고 받는 과정

https 데이터 주고 받는 과정

HTTP/HTTPS and TCP 프로토콜 데이터 전송 및 응답

요약

  1. HTTP 는 TCP 상위 프로토콜로 stateless해서 한번 3-way handshake 하고, 요청하고 응답받으면 통신이 종료되는것이다
  2. HTTP 없이 TCP 프로토콜로만 연결한다는 것은 단순히 바이트 스트림을 주고받을 수 있는 상태를 말하는 것이다. 이때 바이트 스트림을 주고받을 수 있는 매개체로 소켓을 사용한다.

1. 개요

인터넷 통신에서 데이터 전송 및 응답을 담당하는 주요 프로토콜로는 HTTP/HTTPS와 TCP가 있습니다. 이 문서에서는 두 프로토콜의 차이점, 동작 방식, 그리고 자바를 이용한 간단한 예제를 설명합니다.

2. HTTP/HTTPS

2.1 정의

2.2 특징

2.3 동작 과정

  1. 3-way handshake: TCP를 통해 연결 설정.
    • TCP 패킷 주고 받음.
  2. 요청 전송: 클라이언트가 서버로 HTTP 요청 전송.
  3. 응답 수신: 서버가 요청을 처리하고 HTTP 응답 반환.
  4. 연결 종료: 응답 후 연결 종료.

3. TCP

3.1 정의

3.2 특징

3.3 동작 과정

  1. 소켓 생성: 클라이언트와 서버가 각각 소켓을 생성합니
  2. 연결 수립: 클라이언트가 서버에 연결 요청, 서버는 이를 수락
  3. 데이터 전송: 바이트 스트림 형태로 데이터를 주고 받음
  4. 연결 종료: 데이터 전송이 완료되면 소켓을 닫아 연결을 종료

4. 자바 예제

4.1 서버 코드 (Server.java)

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        int port = 12345;

        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("Server is listening on port " + port);

            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("New client connected");

                new ServerThread(socket).start();
            }

        } catch (IOException ex) {
            System.out.println("Server exception: " + ex.getMessage());
            ex.printStackTrace();
        }
    }
}

class ServerThread extends Thread {
    private Socket socket;

    public ServerThread(Socket socket) {
        this.socket = socket;
    }

    public void run() {
        try (InputStream input = socket.getInputStream();
             BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {

            String message;

            while ((message = reader.readLine()) != null) {
                System.out.println("Received: " + message);
            }

        } catch (IOException ex) {
            System.out.println("Server thread exception: " + ex.getMessage());
            ex.printStackTrace();
        }
    }
}

4.2 클라이언트 코드 (Client.java)

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        String hostname = "localhost";
        int port = 12345;

        try (Socket socket = new Socket(hostname, port)) {

            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);

            writer.println("Hello, Server");

        } catch (UnknownHostException ex) {
            System.out.println("Server not found: " + ex.getMessage());
        } catch (IOException ex) {
            System.out.println("I/O error: " + ex.getMessage());
        }
    }
}

5. 정리