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. 정리


Revision #1
Created 22 July 2024 05:00:54 by Yeonwoo Kim
Updated 22 July 2024 05:10:36 by Yeonwoo Kim