본문 바로가기

JAVA/Coding

[JAVA] TCP/IP란? 자바로 구현해보기

TCP/IP란?

- "Transmission Control Protocol/Internet Protocol"의 약자입니다.

- 컴퓨터 네트워크에서 데이터 통신을 위한 중요한 프로토콜(규약) 집합을 말합니다.

- TCP와 IP는 각각 데이터 전송과 패킷 라우팅에 관련된 기능을 제공합니다.

- TCP/IP는 전세계적으로 사용되는 인터넷과 같은 네트워크에서 기본 프로토콜로 사용되며, 데이터의 신뢰성과 효율성을 확보하기 위한 다양한 기능을 포함하고 있습니다.



1. IP (Internet Protocol)

-  IP는 인터넷을 통해 데이터 패킷을 전달하는 역할을 합니다.

- IP는 각 기기를 고유하게 식별할 수 있는 IP 주소를 할당하고, 이 주소를 사용하여 데이터 패킷을 전송하고 수신하는 역할을 합니다.

- IP는 데이터 패킷의 라우팅을 처리하여 목적지 기기까지 패킷이 도달할 수 있도록 합니다.

- 하지만 IP 자체는 패킷의 전송 순서나 신뢰성을 보장하지 않습니다.

 


2. TCP (Transmission Control Protocol)

  -  TCP는 데이터의 신뢰성을 보장하며, 전송 중에 발생할 수 있는 오류나 손실을 다룹니다.

- TCP는 데이터를 세그먼트라는 작은 블록으로 나누어 전송하고, 수신 측에서는 이 세그먼트를 재조립하여 원래의 데이터로 복원합니다.

- TCP는 패킷이 올바른 순서로 도착하도록 보장하며, 재전송과 흐름 제어를 통해 데이터 전송의 효율성을 높이고 혼잡을 피하는 메커니즘을 제공합니다.

 


프로토콜 종류

- HTTP (Hypertext Transfer Protocol): 웹 브라우징을 위한 프로토콜로, 웹 페이지를 요청하고 응답하는 데 사용됩니다.
- SMTP (Simple Mail Transfer Protocol): 이메일 전송을 위한 프로토콜로, 이메일 서버 간에 메일을 전송하는 데 사용됩니다.
- FTP (File Transfer Protocol): 파일 전송을 위한 프로토콜로, 파일을 업로드하고 다운로드하는 데 사용됩니다.
- DNS (Domain Name System): 도메인 이름을 IP 주소로 변환하거나, 반대로 IP 주소를 도메인 이름으로 변환하는 역할을 합니다.

 

JAVA예시

<Server.java>

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

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(12345); // 포트 번호 12345로 서버 소켓 생성
            System.out.println("서버 대기 중...");

            Socket clientSocket = serverSocket.accept(); // 클라이언트의 연결 요청 대기

            // 클라이언트로부터 데이터를 받아서 처리
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String receivedData = in.readLine();
            System.out.println("클라이언트로부터 받은 데이터: " + receivedData);

            // 클라이언트에 응답 데이터 전송
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            out.println("서버에서 보낸 응답 데이터: Hello, Client!");

            // 리소스 해제
            in.close();
            out.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

- java.net 패키지를 활용해 서버를 만들 수 있습니다.

 

 

<Client.java>

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

public class Client {
    public static void main(String[] args) {
        try {
            Socket clientSocket = new Socket("127.0.0.1", 12345); // 서버 IP와 포트로 클라이언트 소켓 생성

            // 서버로 데이터 전송
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            out.println("Hello, Server!");

            // 서버로부터 응답 데이터 받아서 처리
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String responseData = in.readLine();
            System.out.println("서버로부터 받은 응답 데이터: " + responseData);

            // 리소스 해제
            out.close();
            in.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

감사합니다!

 

반응형