IP์ Port ๊ด๋ จ
IP์ Port?
IP
๋คํธ์ํฌ ์์์์ ํน์ ์ปดํจํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฃผ์
ํ์ง๋ง, ํ๋์ ์ฅ๋น๊ฐ ๋คํธ์ํฌ์ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์ด ์๋๋์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ฐ์ง ์๋ ์์.
| ์ฌ๋ก | ์ค๋ช |
|---|---|
| ๐ป Wi-Fi + Ethernet | ๋ฌด์ LAN(Wi-Fi)๊ณผ ์ ์ LAN(Ethernet) ๋ ๋ค ์ฐ๊ฒฐ๋ผ ์์ ๊ฒฝ์ฐ โ ๊ฐ ์ธํฐํ์ด์ค๋ง๋ค IP ํ๋์ฉ |
| ๐งโ๐ป Docker, WSL | ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์์ฑ๋จ โ WSL, Docker ๊ฐ๊ฐ ๋ฐ๋ก IP๋ฅผ ๊ฐ์ง |
| ๐งญ ๋ก์ปฌ vs ๊ณต์ธ IP | ๋ด๋ถ๋ง์์๋ 192.168.x.x / ์ธ๋ถ๋ง์์๋ 203.xxx.xxx.xxx์ฒ๋ผ ๋ค๋ฅธ IP ๊ฐ์ง |
| ๐งฌ ๊ฐ์ ์ธํฐํ์ด์ค (lo, tun0 ๋ฑ) | ์์คํ
๋ด๋ถ loopback(127.0.0.1), VPN ์ฐ๊ฒฐ ์ธํฐํ์ด์ค, ๊ฐ์ ๋ธ๋ฆฌ์ง ๋ฑ๋ ๊ฐ๊ฐ IP ๊ฐ์ง |
์ค์ ์์ (ip addr ๋ก ํ์ธ ๊ฐ๋ฅ)
lo: 127.0.0.1
eth0: 192.168.0.13
docker0: 172.17.0.1
br-xxxx: 172.18.0.1
wsl: 172.24.100.1์ ๋ถ ๋์ผํ ์ปดํจํฐ๊ฐ ๊ฐ๊ณ ์๋ ์ฌ๋ฌ IP ์ฃผ์
IP๋ ์ธํฐํ์ด์ค(๋คํธ์ํฌ ์นด๋)๋ง๋ค ๋ถ๋ ๊ฒ์ด๋ฏ๋ก, ์ปดํจํฐ์ ์ธํฐํ์ด์ค๊ฐ ์ฌ๋ฌ ๊ฐ๋ฉด IP๋ ์ฌ๋ฌ ๊ฐ ๊ฐ๋ฅํ๋ค. ๋ํ, ํ๋์ ์ธํฐํ์ด์ค์ ์ฌ๋ฌ IP๋ฅผ ํ ๋นํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
โ๊ณ ์ ํ IPโ๋ผ๋ ๊ฒ์ ๋คํธ์ํฌ ๋ด์์๋ง ๊ณ ์ ํ๋ค๋ ๋ป์ผ๋ก, ๊ฐ์ ๋คํธ์ํฌ(์๋ธ๋ท) ๋ด์์ ์ค๋ณต๋๋ฉด ์ ๋๋ค(๋ค๋ฅธ ๋คํธ์ํฌ๋ผ๋ฉด ๋์ผํ IP๋ ์กด์ฌํ ์ ์์).
Port
ํฌํธ ๋ฒํธ๋ ๋ฐ๋ ์ชฝ(์๋ฒ ์ธก)์์ ์ด์ด๋์ โ๋ฌธโ์ด๊ณ , ํด๋ผ์ด์ธํธ(๋)๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋ ๊ทธ ๋ฌธ์ผ๋ก ๋ณด๋ด๋ ๊ฒ.
๋น์ ํ์๋ฉด, ๋ค์๊ณผ ๊ฐ์
- IP ์ฃผ์ = ์ด๋ ์ํํธ ๋จ์ง
- ํฌํธ ๋ฒํธ = ๋ช ๋ ๋ช ํธ
- ํด๋ผ์ด์ธํธ = ํ๋ฐฐ ๊ธฐ์ฌ
- ์๋ฒ = ์์ ์
๋(ํด๋ผ์ด์ธํธ)๊ฐ 3000ํธ๋ก ํ๋ฐฐ๋ฅผ ๋ณด๋ผ ์๋ ์์ง๋ง, ๊ทธ ์ง(์๋ฒ)์ด 3000ํธ ๋ฌธ์ ์ ์ด์ด๋จ๋ค๋ฉด ๋ชป ๋ฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ.
IP vs. Port
| ํญ๋ชฉ | IP ์ฃผ์ | Port ๋ฒํธ |
|---|---|---|
| ์ญํ | ์ด๋์ ์๋์ง๋ฅผ ๋ํ๋ (์ฃผ์) | ๋ฌด์์ ์ฌ์ฉํ๋์ง๋ฅผ ๋ํ๋ (๋ฌธ/ํต๋ก) |
| ๋น์ | ์ํํธ ๋จ์ง ์ฃผ์ | ์ํํธ ์์ ๊ฐ ์ง(ํธ์) |
| ๋ฒ์ | ์ ์ธ๊ณ ๊ณ ์ or ๋ก์ปฌ ๊ณ ์ | 0 ~ 65535 (16๋นํธ ์ซ์) |
| ์ข ๋ฅ | IPv4 (192.168.0.1 ๋ฑ), IPv6 | well-known, registered, dynamic/ephemeral |
| ๊ธฐ๋ฅ | ํจํท์ ๋ชฉ์ ์ง๊น์ง ๋ผ์ฐํ | ๋ชฉ์ ์ง IP ๋ด๋ถ์์ ์ฑ/์๋น์ค๋ฅผ ๊ตฌ๋ถ |
| ์ฌ์ฉ ์์น | ๋คํธ์ํฌ ๊ณ์ธต (3๊ณ์ธต) | ์ ์ก ๊ณ์ธต (4๊ณ์ธต, TCP/UDP) |
| ์์ | 192.168.0.10 | 80 (HTTP), 3306 (MySQL), 22 (SSH) |
curl http://192.168.0.10:8080192.1678.0.10์ด๋ ์ปดํจํฐ(IP)๋ก ๊ฐ์ง8080๊ทธ ์ปดํจํฐ์์ ์ด๋ค ์ฑ/์๋น์ค์ ์ฐ๊ฒฐํ ์ง (ํฌํธ)
ํ๋์ ์๋ฒ(๊ฐ์ IP)์์ ์ฌ๋ฌ ์๋น์ค๊ฐ ๋์์ ์คํ๋ ์ ์์(ํฌํธ ๋ฒํธ๋ก ๊ตฌ๋ถ ๊ฐ๋ฅ):
| ์๋น์ค | IP ์ฃผ์ | Port |
|---|---|---|
| Nginx (์น์๋ฒ) | 192.168.0.10 | 80 |
| Flask (API ์๋ฒ) | 192.168.0.10 | 8000 |
| PostgreSQL | 192.168.0.10 | 5432 |
IP:Port์ ์กฐํฉ์ด ์ง์ง ์ ๋ํฌํ ๋จ์
์ด๊ฑธ ์์ผ ์ฃผ์ (socket address) ๋ผ๊ณ ํจ:
<IP\>:<Port\> โ ์: 192.168.0.10:8000ํ๋์ ์๋ฒ์ ๊ฐ์ ํฌํธ ๋ฒํธ๋ฅผ ๊ฐ์ง ์๋น์ค๋ ๋์์ ๋ชป ๋์ฐ๋ ์ด์ ๋ ์ฌ๊ธฐ์ ์์
๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๋์
๋ด๊ฐ ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ http://naver.com ๋๋ ๊ทธ๋ฅ naver.com ์ ์
๋ ฅํ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์๋์ผ๋ก 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํด์ ์๋ฒ์ ์ฐ๊ฒฐ์ ์๋ํจ.
์ 80๋ฒ ํฌํธ?
HTTP์ ๊ธฐ๋ณธ ํฌํธ๊ฐ
80์ผ๋ก ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์ด๋ค(HTTPS๋ 443๋ฒ ํฌํธ๊ฐ ๊ธฐ๋ณธ).
๋์ ํ๋ฆ ์์
http://naver.com ์ ์ ์ํ๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ์ผ๋ก ๋ค์ ์์ฒญ์ ๋ณด๋:
GET / HTTP/1.1
Host: naver.com
๊ทธ๋ฌ๋ฉด, ์ฐ๊ฒฐ ๋์์ naver.com:80 ์ด๋ค.
๊ฐ์ ๋ฐฉ์์ผ๋ก, https://naver.com ์ด๋ผ๋ฉด, ์ํธํ๋ ์ฐ๊ฒฐ์ด๋ฏ๋ก 443๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํด์ naver.com:443 ์ ์์ฒญ์ ๋ณด๋ธ๋ค.
ํ๋กํ ์ฝ๋ณ ๊ธฐ๋ณธ ํฌํธ
ํ๋กํ ์ฝ ๊ธฐ๋ณธ ํฌํธ HTTP 80 HTTPS 443 FTP 21 SSH(Secure Shell Protocol) 22 ๊ฐ๋ฐ ์๋ฒ ๋ฑ ์ฌ์ฉ์ ์ง์ ํฌํธ 3000 ํํ ๋นํ์ค ํฌํธ (Nginx/React/Node ๋ฑ์์ ์์ฃผ ์ฌ์ฉ) 8080 ์ด ํฌํธ๋ค์ ๋ช ์ํ์ง ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋์ผ๋ก ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ
์ก์ ์์ ์์ ์
์์ ์(๋คํธ์ํฌ)๋ IP + ํฌํธ ์ ๋ณด๊ฐ ์๋ค๋ฉด, ์ก์ ์(ํด๋ผ์ด์ธํธ) ์ชฝ ์ ๋ณด๋ ๋ญ๋ก ๊ตฌ๋ถํ ๊น?
๋ณด๋ธ ์ชฝ๋ IP + ํฌํธ ์กฐํฉ์ด ์๋ค.
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ์ก์ ์ IP | ํด๋ผ์ด์ธํธ(๋)์ IP ์ฃผ์ (์: 192.168.0.100) |
| ์ก์ ์ ํฌํธ | ๋ธ๋ผ์ฐ์ ๋ ํ๋ก๊ทธ๋จ์ด ๋๋ค์ผ๋ก ์ก๋ ์์ ํฌํธ ๋ฒํธ (ephemeral port) |
๋ด๊ฐ ๋ธ๋ผ์ฐ์ ๋ก http://naver.com ์ ์ ์ํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฆ์ด ์๋ค:
์ถ๋ฐ์ง IP : 192.168.0.100
์ถ๋ฐ์ง ํฌํธ : 54321 โ OS๊ฐ ์๋์ผ๋ก ์ง์ ํ ์์ ํฌํธ
๋์ฐฉ์ง IP : 223.130.200.104 (naver.com)
๋์ฐฉ์ง ํฌํธ : 80์ ์ถ๋ฐ์ง ํฌํธ๋ ํ์ํ ๊น?
์๋ต์ ๋ณด๋ผ ๋ โ์ด๋์ ์๋์งโ ์ ํํ ์์์ผ, ๋ค์ ๋๋๋ ค ๋ณด๋ผ ์ ์๋ค. ์๋ฒ๋ ์์ฒญ์ ๋ฐ์ผ๋ฉด ์ด ์ถ๋ฐ์ง ์ ๋ณด๋ก ๋ค์ ์๋ต์ ์ ์กํจ:
์๋ฒ ์ ์ฅ์์: ์๋ต โ ๋์ฐฉ์ง IP: 192.168.0.100, ๋์ฐฉ์ง ํฌํธ: 54321๋ธ๋ผ์ฐ์ ๋ ์ด 54321 ํฌํธ๋ฅผ ํตํด ์๋ต์ ์์ ํจ