[CS:APP] 11. ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ(์ ๋ค์ด๊ฐ๊ธฐ ์ ์)
6์ฃผ์ฐจ๋ CS:APP์ 11์ฅ์ ์ฐธ๊ณ ํ์ฌ '์น์๋ฒ ๋ง๋ค๊ธฐ'๋ฅผ ์งํํ๋ค.
11์ฅ์ ์ฝ๊ธฐ ์ ์ ๊ธฐ๋ณธ์ ์ธ ์ ์์ง์์ ๋ํด์ ์ ๋ฆฌํด ๋ณด์๋ค.
โ๏ธ TCP/IP, HTTP๋ ๋ฌด์์ผ๊น?
๊ณ์ธต | ์ ์ก ๊ณ์ธต | ๋คํธ์ํฌ ๊ณ์ธต | ์์ฉ ๊ณ์ธต |
์ฃผ ๊ธฐ๋ฅ | ๋ฐ์ดํฐ ์ ์ก์ ์ ๋ขฐ์ฑ ๋ณด์ฅ | ๋ฐ์ดํฐ ํจํท์ ์ฃผ์ ์ง์ ๋ฐ ๊ฒฝ๋ก ์ค์ | ์น ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ |
๋ฐ์ดํฐ ๋จ์ | ์ธ๊ทธ๋จผํธ | ํจํท | ๋ฉ์์ง |
ํ๋กํ ์ฝ | ์ฐ๊ฒฐ ์งํฅ์ | ๋น์ฐ๊ฒฐ ์งํฅ์ | ์ํ๊ฐ ์์ |
TCP(Transmission Control Protocol)
- ๋ฐ์ดํฐ์ ์ ํํ ์ ์ก์ ๋ณด์ฅํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ธ๊ทธ๋จผํธ๋ก ๋๋๊ณ , ์์๋๋ก ์ ์กํ๋ฉฐ, ์์ค๋ ๋ฐ์ดํฐ๋ ์ฌ์ ์กํจ
- ๋ฐ์ดํฐ ์ ์ก ์ ์ ํต์ ํ๋ ๋ ์ง์ ๊ฐ์ ์ฐ๊ฒฐ์ ์ค์ ํจ(์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก ๋ณด์ฅ)
IP(Internet Protocol)
- ๊ฐ ํจํท์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ก๋๋ฉฐ, ์๋ก ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ํตํด ๋ชฉ์ ์ง์ ๋๋ฌ ๊ฐ๋ฅํจ(๋น์ฐ๊ฒฐ ์งํฅ์ )
- ํจํท ๋จ์ ๋ฐ์ดํฐ ์ ์ก์ ํ๋ฉฐ ํจํท์๋ ์ก์ง์์ ๋ชฉ์ ์ง IP ์ฃผ์๊ฐ ํฌํจ๋จ
HTTP(Hypertext Transfer Protocol)
- ํด๋ผ์ด์ธํธ(์น๋ธ๋ผ์ฐ์ ) ↔ ์๋ฒ(์น์๋ฒ) ๊ฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ ์น ํ์ด์ง์ ์์ฒญ๊ณผ ์ ์ก์ ์ฌ์ฉ๋จ
- ์ฐ๊ฒฐ/๋น์ฐ๊ฒฐ ์งํฅ์ ํ๋กํ ์ฝ์ด ์๋ ์ํ๊ฐ ์๋(stateless) ํ๋กํ ์ฝ์(์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ด์ ์์ฒญ์ ๊ธฐ์ตํ์ง ์๊ธฐ์ ๊ฐ ์์ฒญ์ ๋ ๋ฆฝ์ ์)
โ๏ธ UDP์ TCP๋?
์ฐ๊ฒฐ ๋ฐฉ์ | ๋น์ฐ๊ฒฐํ(์ฐ๊ฒฐ ์ค์ ์์) | ์ฐ๊ฒฐํ(์ฐ๊ฒฐ ์ค์ ํ์) |
์ ๋ขฐ์ฑ | ๋ฎ์(๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ ์์) | ๋์(๋ฐ์ดํฐ ์์ ๋ฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ) |
์์ ๋ณด์ฅ | ์์ | ์์ |
๋ฐ์ดํฐ ํ๋ฆ ์ ์ด | ์์ | ์์ (ํผ์ก ์ ์ด ๋ฐ ํ๋ฆ ์ ์ด) |
์๋ | ๋น ๋ฆ | ๋น๊ต์ ๋๋ฆผ |
์ฌ์ฉ ์ฌ๋ก | ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, ์จ๋ผ์ธ ๊ฒ์ | ์น ํ์ด์ง ๋ก๋ฉ, ์ด๋ฉ์ผ |
๐ก UDP๋ ์ฒ๋ฆฌ ์๋๊ฐ ์ค์ํ๊ณ , ์ค์๊ฐ์ฑ์ด ์๊ตฌ๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์, TCP๋ ๋ฐ์ดํฐ์ ์ ํ์ฑ๊ณผ ์์๊ฐ ์ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ!
โ๏ธ Socket?
socket์ด๋, ์ธํฐ๋ท ํน์ ๋ค๋ฅธ ๋คํธ์ํฌ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์ํํธ์จ์ด ์ฅ์น์ด๋ค.
- ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ํฌ์ธํธ
- ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ก ํต์ ํ๋ ค๋ฉด ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ์ด ์์ผ์ ์ด๊ณ , ์์ผ ๊ฐ ์ฐ๊ฒฐ๋์ด์ผ ํจ
Burkeley Sockets
๋ฒํด๋ฆฌ ์์ผ์ UNIX ์์คํ ์์ ๋คํธ์ํฌ ํต์ ์ ์ํด ์ฒ์ ๊ฐ๋ฐ๋ API์ด๋ค. ์ด๋ ๋คํธ์ํฌ ํต์ ์ ์ํ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- ํ๋ก๊ทธ๋๋จธ๊ฐ TCP/IP ๊ฐ์ ์ธํฐ๋ท(Inter-network) ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ ์ ์๊ฒ ํจ
๐ก ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์น์๋ฒ๋ ์ฐ๊ฒฐ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ๋ ์ฐ๊ฒฐ ์์ฒญ์ด ์ค๋ฉด, ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฝํ๊ณ , ์๋ก์ด ์์ผ์ ์ด์ด ํด๋ผ์ด์ธํธ์ ํต์ ํ๋ ๋ฐฉ์
โ๏ธ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ๋ชจ๋ธ?
Client-Server Model
๋คํธ์ํฌ ํต์ ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ ์ค ํ๋์ด๋ฉฐ, ‘ํด๋ผ์ด์ธํธ’์ ‘์๋ฒ’๊ฐ ์๋ค. ํด๋ผ์ด์ธํธ์์ ‘์๋น์ค’๋ฅผ ์์ฒญํ๊ณ , ์๋ฒ๋ ๊ทธ ์์ฒญ์ ์๋ตํ์ฌ ‘์๋น์ค’๋ฅผ ์ ๊ณตํ๋ค.
- ์ฅ์ : ์ค์์ง์คํ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์์์ ํจ์จ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ๊ณผ ์๋ฒ๋ ๋ค์์ ํด๋ผ์ด์ธํธ์ ๋ํ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
- ๋จ์ : ์ค์์ง์คํ๋ ์๋ฒ์ด๊ธฐ์ ๋ฌธ์ ๋ฐ์ ์ ์ ์ฒด ์์คํ ์ด ์ํฅ์ ๋ฐ์ ์ ์์(Single Point of Failure, ๋จ์ผ ์ฅ์ ์ง์ ), ๋ํ ํด๋ผ์ด์ธํธ ์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์๋ฒ ๋ถํ๊ฐ ๊ธ๊ฒฉํ ์ฆ๊ฐํ ์ ์์
Peer to Peer(P2P) Model
๋คํธ์ํฌ ์์ ๋ชจ๋ ์ฃผ์ฒด(peer)๊ฐ ๋๋ฑํ ์์น์์ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์์ฒญํ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
- ์ฃผ์ฒด(peer)๋ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ‘์๋ฒ ์ญํ ’์ ํ ์๋ ์๊ณ , ๋ค๋ฅธ ํผ์ด๋ก๋ถํฐ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ‘ํด๋ผ์ด์ธํธ ์ญํ ’์ ํ ์๋ ์์
- ์ฅ์ : ์ค์ ์๋ฒ์ ๋ถ๋ด์ด ๋ฎ๊ณ , ๋คํธ์ํฌ ์์์ ๋ถ์ฐํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ์
- ๋จ์ : peer ๊ฐ ์ง์ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๊ธฐ์ ๋ณด์ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅํ๊ณ ๋ชจ๋ ํผ์ด๊ฐ ์๋ฒ ์ญํ ์ ํด์ผ ํ๋ฏ๋ก ์ผ๊ด๋ ์๋น์ค ํ์ง์ ์ ์งํ๊ธฐ ์ด๋ ค์ธ ์ ์์
- ์: ํ์ผ ๊ณต์ , ์คํธ๋ฆฌ๋ฐ ์๋น์ค ๋ฑ
Publish-Subscribe(Pub/Sub) Model
๋ฉ์์ง ๋ฐํ์(publisher)์ ๊ตฌ๋ ์(subscriber)๋ก ๊ตฌ๋ถ๋๋ ๋ชจ๋ธ๋ก ๋ฐํ์๋ ํน์ ์ฃผ์ ์ ๋ํ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ , ๊ตฌ๋ ์๋ ๊ตฌ๋ ๋ ์ฃผ์ ์ ๋ฉ์์ง๋ง์ ์์ ํ๋ค.
- ๋์จํ ๊ฒฐํฉ(loose coupling)์ ์ ๊ณตํ์ฌ, ๋ฐํ์์ ๊ตฌ๋ ์ ๊ฐ ์ง์ ์ ์ฐ๊ฒฐ ์์ด ํต์ ํ ์ ์๊ฒ ํจ
โ๏ธ (์ฐธ๊ณ ) UNIX File operation
UNIX ์์คํ ์์ ํ์ผ์ ๋ค๋ฃจ๋ ์์ ์ system call์ ํตํด ์ด๋ฃจ์ด์ง๋ค. System call(H/W๋จ control)๋ก OS์ Kernel space๋ก ๊ธฐ๋ฅ ์์ฒญ์ด ๊ฐ๋ฅํ๋ค.
- ํ์ผ ์ด๊ธฐ(open)
- ํ์ผ์ ์ด๊ณ ํ์ผ ๋์คํฌ๋ฆฝํฐ(file descriptor)๋ฅผ ๋ฐํํจ
- ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ ์ด๋ฆฐ ํ์ผ์ ๊ฐ๋ฆฌํค๋ ์ ์ ๊ฐ
- ์: int fd = open("example.txt", O_RDONLY);
- ํ์ผ ์ฝ๊ธฐ(read)
- ํ์ผ ๋์คํฌ๋ฆฝํฐ, ๋ฐ์ดํฐ ์ ์ฅ ๋ฒํผ ์ฃผ์, ์ฝ์ ๋ฐ์ดํธ ์๋ฅผ ์ธ์๋ก ๋ฐ์ ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
- ์: ssize_t bytes_read = read(fd, buffer, sizeof(buffer));
- fd๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์์ sizeof(buffer) ๋งํผ ์ฝ์ ํ์ buffer์ ์ ์ฅํจ
- ํ์ผ ์ฐ๊ธฐ(write)
- ํ์ผ ๋์คํฌ๋ฆฝํฐ, ์ธ ๋ฐ์ดํฐ์ ๋ฒํผ ์ฃผ์, ์ธ ๋ฐ์ดํธ ์๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์
- ์: ssize_t bytes_written = write(fd, buffer, bytes_to_write);
- fd๊ฐ ๊ฐ๋ฆฌํค๋ ํ์ผ์ buffer์์ ์ง์ ๋ ๋ฐ์ดํธ๋งํผ ๋ฐ์ดํฐ๋ฅผ ์
- ํ์ผ ๋ซ๊ธฐ(close)
- open ๋ ํ์ผ์ ๋ซ๊ณ , ๋ซํ ํ์ผ์ ๋์คํฌ๋ฆฝํฐ๋ฅผ ํด์ ํจ
- ์: close(fd) ;
์ด๋ฌํ system call์ ํตํด UNIX ์์คํ ์์ File operation์ ์ํํ๋ค.
โ๏ธ TCP ์ฐ๊ฒฐ ๊ณผ์ ์ 3-way handshake ๊ณผ์
- LISTEN : ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ์ด๋ฉฐ, ์ด ์ํ์์ ์๋ฒ๋ ํน์ ํฌํธ์์ ๋ค์ด์ค๋ SYN(Synchronize) ํจํท์ ๊ธฐ๋ค๋ฆผ
- SYN_RECEIVED(SL2์ ์ ์ฌ) : ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ SYN ํจํท์ ๋ฐ๊ณ , ํด๋ผ์ด์ธํธ์๊ฒ SYN + ACK ํจํท์ ๋ณด๋ด ์ฐ๊ฒฐ ์์ฒญ ์๋ฝํ๋ค๋ ์๋ต์ ๋ณด๋
- ESTABLISHED : ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ACK ํจํท์ ๋ณด๋ด๊ณ , ์๋ฒ๊ฐ ์ด๋ฅผ ๋ฐ์ผ๋ฉด TCP ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋ ๊ฒ
๐ก⇒ ํด๋ผ์ด์ธํธ → ์๋ฒ (LISTEN)/ ์๋ฒ → ํด๋ผ์ด์ธํธ (SYN_RECEIVED)/ ํด๋ผ์ด์ธํธ → ์๋ฒ(ESTABLISHED)
โ๏ธ Abstraction?
์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์ ์์ฃผ ๋ฑ์ฅํ๋ ๊ฐ๋ ์ธ Abstraction์ด ๋คํธ์ํฌ์์๋ ์๋์ ๊ฐ์ด ์กด์ฌํ๋ค.
- IP Adress : ๋ชฉ์ ์ง(or ๋ฐ์ ์ง) ํธ์คํธ
- host name : IP Address๋ฅผ ์ผ์ผ์ด ๊ธฐ์ตํ๊ธฐ ํ๋๋ ๋ฌธ์๋ก ๋ฐ๊พผ ๊ฒ(์ด๋ฅผ IP๋ก ๋ฐ๊พธ๋ ๊ฒ DNS์์ ํ๋ ์ผ)
- TCP Port : ์๋น์ค ์๋ณ์(์ฌ๊ธฐ์ ์๋น์ค๋, ํ๋ก์ธ์ค ๋ฑ)
- PID : ํ๋ก์ธ์ค ๊ตฌ๋ถํ๊ธฐ ์ํ ์๋ณ์(์ฌ์ค ์ฐ๋ฆฌ ์ปดํจํฐ๋ ํ ๋์ธ๋ฐ ์ฌ๋ฌ ๋ ์ธ ๊ฒ์ฒ๋ผ, process๋ ์ปดํจํฐ๋ฅผ Abstraction ํ ๊ฒ)
- URI : ๋คํธ์ํฌ์ ‘๋ฆฌ์์ค’์ Abstraction
- ๋ฉ๋ชจ๋ฆฌ๋ File๋ก ๋ณด๊ณ Abstraction์ด ๊ฐ๋ฅํ๋ค.
- ์ด๋ฌํ Abstraction ๊ณ์ธต์ด OSI 7 Layer
โ๏ธ HTTP vs HTTPS
๋ณด์ | ํ๋ฌธ ๋ฐ์ดํฐ ์ ์ก, ์ค๊ฐ์ ๊ณต๊ฒฉ์ ์ทจ์ฝ | TLS๋ฅผ ํตํ ๋ฐ์ดํฐ ์ํธํ, ๊ธฐ๋ฐ์ฑ ๋ฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ, ์๋ฒ ์ธ์ฆ |
ํฌํธ ๋ฒํธ | 80 | 443 |
์ฑ๋ฅ | ์ํธํ ๊ณผ์ ์ด ์์ด ๋น ๋ฆ | ์ํธํ/๋ณตํธํ ๊ณผ์ ์ผ๋ก ์ธํด ์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ, ํ์ง๋ง ์ต๊ทผ ๊ธฐ์ ๋ฐ์ ์ผ๋ก ์ฐจ์ด ๊ฐ์ |
์ ๋ขฐ์ฑ | ์์ | SSL/TLS ์ธ์ฆ์๋ฅผ ํตํ ์น์ฌ์ดํธ ์ ๋ขฐ์ฑ ๋ณด์ฆ |
TLS(Transport Layer Security)?
TLS๋ ์ธํฐ๋ท์์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํด ์ค๊ณ๋์๋ค. TLS์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ์ผ๋ก ํต์ ์ ๋ณด์์ ๊ฐํํ๋ค.
- ์ํธํ(encryption) : ๋ฐ์ดํฐ๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์์ค๋ ๋ ์ ์ผ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์กฐ์ํ๋ ๊ฒ์ ๋ฐฉ์ง
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(Data Integrity) : ์ ์ก ์ค์ธ ๋ฐ์ดํฐ๊ฐ ์ค๊ฐ์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์์๋์ง ์์๋์ง ๊ฒ์ฆ
- ์ธ์ฆ(Authentication) : TLS๋ ‘์๋ฒ’์ ‘ํด๋ผ์ด์ธํธ’๊ฐ ์๋ก์ ์ ์์ ํ์ธํ ์ ์๋๋ก ํจ, ํนํ ‘์๋ฒ’๋ ๋์งํธ ์ธ์ฆ์๋ฅผ ํตํด ์์ ์ ์ ์์ ์ฆ๋ช ํด์ผ ํจ, ์ด ์ธ์ฆ์๋ ์ธ์ฆ๊ธฐ๊ด(CA)์์ ๋ฐ๊ธ๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ๋ ์น์ฌ์ดํธ๊ฐ ์ค์ ๋ก ์ํ๋ ์ฌ์ดํธ์ ๊ฐ์ ๊ธฐ๊ด์์ ๋ณด์ฆํจ