Network

ํ˜œ์ฟฐยท2023๋…„ 8์›” 1์ผ
0

๐Ÿ“Œ ๊ฐœ๋…

๋„คํŠธ์›Œํฌ๋ž€? ๋‹ค๋ฅธ ์žฅ์น˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ปดํ“จํ„ฐ๋“ค๊ณผ ์ฃผ๋ณ€ ์žฅ์น˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ๋„คํŠธ์›Œํฌ์˜ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์žฅ์น˜๋“ค์„ "๋…ธ๋“œ"๋ผ๊ณ  ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋…ธ๋“œ์—๊ฒŒ ํ•˜๋‚˜ ์ด์ƒ์˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋…ธ๋“œ๋ฅผ "ํ˜ธ์ŠคํŠธ"๋ผ๊ณ  ํ•œ๋‹ค.

์‚ฌ์ง„ ์ถœ์ฒ˜ : https://shlee0882.tistory.com/110
์ธํ„ฐ๋„ท ๊ธฐ๋ฐ˜์˜ ํ‘œ์ค€ ๋ชจ๋ธ์€ ์ฃผ๋กœ TCP/IP ๊ณ„์ธต ๋ชจ๋ธ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๋ฐ”์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ TCP/IP ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“ ํฌํŠธ์™€ ํ”„๋กœํ† ์ฝœ

  • ํฌํŠธ
    ๋…ผ๋ฆฌ์ ์ธ ์ ‘์†์žฅ์†Œ๋กœ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ฃผ๋ณ€์žฅ์น˜์™€ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ "๋ฌผ๋ฆฌ์ ์ธ ํฌํŠธ"์™€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ ‘์† ์žฅ์†Œ์ธ "๋…ผ๋ฆฌ์ ์ธ ํฌํŠธ"๊ฐ€ ์žˆ๋‹ค.
    ํฌํŠธ๋ฒˆํ˜ธ๋Š” ์ธํ„ฐ๋„ท๋ฒˆํ˜ธ ํ• ๋‹น ํ—ˆ๊ฐ€ ์œ„์›ํšŒ(IANA)์— ์˜ํ•ด ์˜ˆ์•ฝ๋œ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋Ÿฐ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ '์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ๋“ค'์ด๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ์•ฝ๋œ ํฌํŠธ๋ฒˆํ˜ธ์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” 80(HTTP), 21(FTP) ๋“ฑ์ด ์žˆ๋‹ค.
    ํฌํŠธ ๋ฒˆํ˜ธ๋Š” 0~65535๊นŒ์ง€ ์ด๋ฉฐ, 0~1023๊นŒ์ง€๋Š” ์‹œ์Šคํ…œ์— ์˜ํ•ด ์˜ˆ์•ฝ๋œ ํฌํŠธ๋ฒˆํ˜ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.
  • ํ”„๋กœํ† ์ฝœ
    ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹  ๊ทœ์•ฝ์ด๋‹ค.
    ํ†ต์‹ ๊ทœ์•ฝ์ด๋ž€ ์ƒํ˜ธ ๊ฐ„์˜ ์ ‘์†์ด๋‚˜ ์ ˆ๋‹จ๋ฐฉ์‹, ํ†ต์‹ ๋ฐฉ์‹, ์ฃผ๊ณ ๋ฐ›์„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹, ์˜ค๋ฅ˜ ๊ฒ€์ถœ ๋ฐฉ์‹, ์ฝ”๋“œ๋ณ€ํ™˜๋ฐฉ์‹, ์ „์†ก์†๋„ ๋“ฑ์— ๋Œ€ํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์ธํ„ฐ๋„ท ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์—๋Š” TCP์™€ UDP๊ฐ€ ์žˆ๋‹ค.

๐Ÿ“Ž TCP์™€ UDP

TCP์™€ UDP๋Š” ์œ„์˜ OSI 7๊ณ„์ธต ๋ชจํ˜•์—์„œ ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ „์†ก๊ณ„์ธต์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

  • TCP
    TCP(Transimission Control Protocol)๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ์„œ, ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ๋Œ€์ธก๊นŒ์ง€ ์ œ๋Œ€๋กœ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ์˜ ์†ก์ˆ˜์‹  ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•œ๋‹ค.

  • UDP
    UDP(User Datagram Protocol)์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ํ”„๋กœํ† ์ฝœ๋กœ์„œ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ๋งŒ ํ•˜๊ณ  ํ™•์ธ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์ „๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

    TCP๋Š” ์ „ํ™”, UDP๋Š” ๋ฌธ์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“Ž TCP ์†Œ์ผ“

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ์†Œ์ผ“์ด๋ผ๋Š” ๊ฐœ๋…์„ ํ†ตํ•ด์„œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•œ๋‹ค. ์†Œ์ผ“์€ ๋„คํŠธ์›Œํฌ ๋ถ€๋ถ„์˜ ๋ ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋– ํ—ฅ ์ „์†ก๋˜๋Š”์ง€ ์ƒ๊ด€ํ•˜์ง€ ์•Š๊ณ , ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋„คํŠธ์›Œํฌ ๊ณ„์ธต๊ณผ ์ „์†ก๊ณ„์ธต์ด ์บก์Šํ™” ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘๊ฐœ์˜ ๊ณ„์ธต์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
์ž๋ฐ”๋Š” ์ด์‹์„ฑ๊ณผ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•ด์„œ ์†Œ์ผ“์„ ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. TCP/IP ๊ณ„์ธต์˜ TCP๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ Socket, ServerSocket ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” Socket ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ TCP ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•œ๋‹ค. ์„œ๋ฒ„๋Š” SocketServer ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ TCP ์—ฐ๊ฒฐ์„ ์ฒญ์ทจํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋œ๋‹ค.

๐Ÿ“ URL

URL์ด๋ž€? Uniform Resource Locator์˜ ์•ฝ์ž๋กœ ์ธํ„ฐ๋„ท์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ž์›์˜ ์ฃผ์†Œ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์„ ๋งํ•œ๋‹ค.

๐Ÿ“ ํด๋ผ์ด์–ธํŠธ์™€ ์›น์„œ๋ฒ„ ์—ฐ๊ฒฐ

// client
package java_pro3;

import java.io.PrintWriter;
import java.net.Socket;

public class NetworkTest2Client {

	public static void main(String[] args) {
		// client 
		try {
			Socket socket = new Socket("192.168.0.24", 7777);
			PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
			out.println("Hi I'm yjh + \n"); // ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก
			out.close();
			socket.close();
		} catch (Exception e) {
			System.out.println("client err : "+e);
		}

	}

}
// Server
package java_pro3;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class NetworkTest2Server {

	public static void main(String[] args) {
		// socket ํ†ต์‹  : ์ปดํ“จํ„ฐ ๊ฐ„ TCP/IP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ ํ†ต์‹ ์šฉ ํด๋ž˜์Šค
		ServerSocket ss = null;
		/*
		for (int i = 0; i <= 65535; i++) {
			try {
				ss = new ServerSocket(i);
				ss.close();
			} catch (Exception e) {
				System.out.println(i + "๋ฒˆ port ๋ฒˆํ˜ธ๋Š” ์‚ฌ์šฉ์ค‘");
			}
		}
		System.out.println("๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” port(0~65535) ํ™•์ธ ์ข…๋ฃŒ");
		*/
		
		// ๋‘ ๋Œ€์˜ ์ปดํ“จํ„ฐ ์ ‘์† ํ™•์ธ : client / server ๊ตฌ์กฐ
		Socket socket = null; // ์ปดํ“จํ„ฐ ๊ฐ„์˜ ์‹ค์งˆ์ ์ธ ํ†ต์‹ ์„ ์œ„ํ•œ ํด๋ž˜์Šค
		try {
			ss = new ServerSocket(7777); // ํฌํŠธ๋ฒˆํ˜ธ๋Š” 1024๋ฒˆ ์ดํ›„์˜ ๋น„์‚ฌ์šฉ์ค‘์ธ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉ
			System.out.println("์„œ๋ฒ„ ์„œ๋น„์Šค ์ค‘...");
			socket = ss.accept();
			System.out.println("์ ‘์†์‚ฌ ์ •๋ณด : "+socket.toString());
			
			BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
			String data = reader.readLine();
			System.out.println("์ˆ˜์‹ ์ž๋ฃŒ : "+data);
			
			reader.close();
			socket.close();
			ss.close();
		} catch (Exception e) {
			System.out.println("์„œ๋ฒ„ ์—๋Ÿฌ : " + e);
		}
		
		
	}

}
  • ์ถœ๋ ฅ

  • cmd (๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” port)

์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ๋™์˜์ƒ

https://www.youtube.com/watch?v=K9L9YZhEjC0

0๊ฐœ์˜ ๋Œ“๊ธ€