9taetae9 2024. 10. 23. 16:14
728x90

1. ์†Œ์ผ“(Socket)

(computer networking: a top-down approach(8th)์—์„œ๋Š” ์†Œ์ผ“์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…ํ•œ๋‹ค. ์ด๋ฅผ ์ž์„ธํžˆ ๋ถ„์„ํ•ด๋ณด์ž.)

- a host-local application-created, OS-controlled interface(a "door") into which application process can both send and receive messages to/from another application process) 

 

host-local : ์†Œ์ผ“์€ ํŠน์ • ํ˜ธ์ŠคํŠธ(์ปดํ“จํ„ฐ)์— ์ข…์†๋˜๊ณ  ๋กœ์ปฌ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ

application-created : ์†Œ์ผ“์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์ƒ์„ฑ     ex) udp ์„œ๋ฒ„์ฝ”๋“œ new DatagramSocket(9876)๋กœ ์†Œ์ผ“ ์ƒ์„ฑ

OS-controlled : ์†Œ์ผ“์˜ ์‹ค์ œ ๊ด€๋ฆฌ๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. ์šด์˜์ฒด์ œ๊ฐ€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ๋ฒ„ํผ๊ด€๋ฆฌ, ํฌํŠธํ• ๋‹น ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

                           ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์†Œ์ผ“ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Interface("door") : ์†Œ์ผ“์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์œ„ํ•œ ์ง„์ž…์  ์—ญํ• ์„ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ํ†ต๋กœ๋ผ๋Š” ์˜๋ฏธ๋กœ "๋ฌธ"์— ๋น„์œ ํ•˜์˜€๋‹ค.

both send and receive : ์†Œ์ผ“์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ (send) ๋ฐ›์„ ์ˆ˜(receive) ์žˆ๋‹ค.

to/from another application process : ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์„ธ์Šค๋กœ์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ๋™์ผ ์ปดํ“จํ„ฐ ๋‚ด์—์„œ๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์™€๋„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. Socket ์ธํ„ฐํŽ˜์ด์Šค์˜ ์œ„์น˜

 

  • ์‘์šฉ ๊ณ„์ธต(Application Layer)๊ณผ ์ „์†ก ๊ณ„์ธต(Transport Layer) ์‚ฌ์ด์— ์œ„์น˜
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ „์†ก ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ(TCP/UDP)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค

์†Œ์ผ“ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์œ„์น˜

 

User Space์˜ ์†Œ์ผ“

  • ์†Œ์ผ“ API (์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค)
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†Œ์ผ“ ํ•จ์ˆ˜๋“ค
  • // ์‚ฌ์šฉ์ž ์˜์—ญ์—์„œ์˜ ์†Œ์ผ“ ์‚ฌ์šฉ ์˜ˆ
    DatagramSocket serverSocket = new DatagramSocket(9876);

์ปค๋„ ์˜์—ญ์˜ ์†Œ์ผ“

  • ์‹ค์ œ ์†Œ์ผ“์˜ ๊ตฌํ˜„์ฒด(๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ, ํ ๋“ฑ)
  • TCP/IP ํ”„๋กœํ† ์ฝœ ์Šคํƒ ๊ตฌํ˜„
  • ๋„คํŠธ์›Œํฌ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„
  • ๋ฐ์ดํ„ฐ ํŒจํ‚ท ์ฒ˜๋ฆฌ
  • ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•œ ์ƒํ˜ธ์ž‘์šฉ

  • ์‚ฌ์šฉ์ž ์˜์—ญ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์†Œ์ผ“ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด,
  • ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ปค๋„ ์˜์—ญ์˜ ์†Œ์ผ“ ๊ตฌํ˜„์ฒด์™€ ํ†ต์‹ 
  • ์ด๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

- ๋„คํŠธ์›Œํฌ ์ž…/์ถœ๋ ฅ์„ ์œ„ํ•œ ์š”์†Œ :

1. ํ”„๋กœํ† ์ฝœ (Protocol)

2. ์†Œ์Šค IP ์ฃผ์†Œ (Source IP Address)

3. ์†Œ์Šค ํฌํŠธ ๋ฒˆํ˜ธ (Source Port Address)

4. ๋ชฉ์ ์ง€ IP ์ฃผ์†Œ (Target IP Address)

5. ๋ชฉ์ ์ง€ ํฌํŠธ ๋ฒˆํ˜ธ (Target Port Address)

 

ํฌํŠธ 

- ํ˜ธ์ŠคํŠธ ๋‚ด์— ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค(Process)๋ฅผ ๊ตฌ๋ถ„์ง“๊ธฐ ์œ„ํ•œ 16๋น„ํŠธ์˜ ๋…ผ๋ฆฌ์  ํ• ๋‹น (๊ฐ’์˜ ๋ฒ”์œ„ : 0 ~ 65536)

1) well known ํฌํŠธ(system ports) : 0-1023

- TCP ๋˜๋Š” UDP์—์„œ ์“ฐ์ด๋Š” 0 ๋ฒˆ๋ถ€ํ„ฐ 65535๋ฒˆ๊นŒ์ง€์˜ ํฌํŠธ(port) ๋ฒˆํ˜ธ ์ค‘์—์„œ IANA(Internet Assigned Numbers Authority)์— ์˜ํ•ด์„œ ํ• ๋‹น๋œ 0๋ฒˆ๋ถ€ํ„ฐ 1023๋ฒˆ๊นŒ์ง€์˜ ํฌํŠธ

- ex) HTTP : 80, HTTPS : 443, FTP : 21, SSH : 22, SMTP : 25

2) Registered Ports(User Ports) : 1024-49151

- IANA๊ฐ€ ๊ด€๋ฆฌ, ์‹ฌ์‚ฌ๋ฅผ ํ†ตํ•ด ํ• ๋‹น

- ex) MySQL : 3306, PostgreSQL : 5432, RDP : 3389

3) Dynamic Ports(Private Ports) : 49152-65535

- ์ž„์‹œํฌํŠธ(Ephemeral Ports)๋กœ ์‚ฌ์šฉ

- ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ์‹œ์ ์œผ๋กœ ์‚ฌ์šฉ

 

์ƒ์„ธ ๋‚ด์šฉ์€ ์•„๋ž˜๋งํฌ ์ฐธ์กฐ :

https://www.iana.org/assignments/port-numbers

 

์—ฐ๊ฒฐ ์ง€ํ–ฅํ˜• ์†Œ์ผ“(SOCK_STREAM, TCP ์†Œ์ผ“)

- SOCK_STREAM ์†Œ์ผ“ ์œ ํ˜•

1. ์ŠคํŠธ๋ฆผ ๋ฐฉ์‹์˜ ์†Œ์ผ“ ์ƒ์„ฑ

2. UNIX์˜ ํŒŒ์ดํ”„ ๊ฐœ๋…๊ณผ ๋™์ผ

3. ์—ฐ๊ฒฐํ˜•(์ŠคํŠธ๋ฆผ) ์„œ๋น„์Šค ์„ ํƒ ์‹œ ์‚ฌ์šฉ

 

- SOCK_STREAM ์†Œ์ผ“ ์œ ํ˜•์˜ ํŠน์„ฑ

1. ๋ฉ”์‹œ์ง€ ๊ฒฝ๊ณ„๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š์Œ (์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์–‘์„ ๋ณด๋ƒ„)

2. ์ „๋‹ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ˆ˜์‹ ๋จ

3. ์ „์†ก๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์• ๋Ÿฌ์—†์ด ์›๊ฒฉ์ง€์— ๋„๋‹ฌ

 

๋น„์—ฐ๊ฒฐ ์ง€ํ–ฅํ˜• ์†Œ์ผ“(SOCK_DGRAM, UDP ์†Œ์ผ“)

- SOCK_DGRAM ์†Œ์ผ“ ์œ ํ˜•

1. ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๋ฐฉ์‹์˜ ์†Œ์ผ“ ์ƒ์„ฑ

2. ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฃผ์†Œ๊ฐ€ ์“ฐ์—ฌ์ง„ ํŒจํ‚ท ์ „์†ก ์‹œ ์‚ฌ์šฉ (๊ฐœ๋ณ„์ฃผ์†Œ + Data)

3. ๋น„์—ฐ๊ฒฐํ˜•(๋ฐ์ดํ„ฐ๊ทธ๋žจ) ์„œ๋น„์Šค ์„ ํƒ ์‹œ ์‚ฌ์šฉ

 

- SOCK_DGRAM ์†Œ์ผ“ ์œ ํ˜•์˜ ํŠน์„ฑ

1. ํŒจํ‚ท์€ ์ „๋‹ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ˆ˜์‹ ๋˜์ง€ ์•Š์Œ

2. ์—๋Ÿฌ๋ณต๊ตฌ๋ฅผ ํ•˜์ง€ ์•Š์Œ(์‹ ๋ขฐ์„ฑ x)

3. ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํŒจํ‚ท์˜ ํฌ๊ธฐ ์ œํ•œ

 

UDP ์†Œ์ผ“์—์„œ๋Š” TCP์™€ ๋‹ค๋ฅด๊ฒŒ listen(), connect(), accept()์˜ ๊ณผ์ •์ด ์—†๋‹ค.

 

์ŠคํŠธ๋ฆผ(Stream)

  • ํ”„๋กœ์„ธ์Šค๋กœ ๋“ค์–ด์˜ค๊ฑฐ๋‚˜ ๋‚˜๊ฐ€๋Š” ๋ฌธ์ž๋“ค์˜ ์—ฐ์†๋œ ํ๋ฆ„
  • ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์€ ํ”„๋กœ์„ธ์Šค์˜ ์ž…๋ ฅ ์†Œ์Šค(ex. ํ‚ค๋ณด๋“œ๋‚˜ ์†Œ์ผ“)์— ์—ฐ๊ฒฐ๋จ
  • ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์ถœ๋ ฅ ์†Œ์Šค(ex. ๋ชจ๋‹ˆํ„ฐ๋‚˜ ์†Œ์ผ“)์— ์—ฐ๊ฒฐ๋จ

 

 

์ฐธ๊ณ  ์ž๋ฃŒ : 

Computer Networking: a Top-Down Approach (8th ed.) - 2.1 Principles of Network Applications

https://www.youtube.com/watch?v=abeupgK5z48 
https://scapy.disruptivelabs.in/networking/socket-interface

https://net.cybbh.io/public/networking/latest/12_programming/fg.html#_12_4_4_1_socket_socket_socket

728x90