์์ผ ํ๋ก๊ทธ๋๋ฐ Socket Programming
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