์๋ฒ๋ ํญ์ ์คํ๋๊ณ ์์ด์ผ๋๊ณ , ํญ์ ๋์ผํ IP์ฃผ์๋ฅผ ๊ฐ์ง๋ค.
(๊ฐ์ ์ปดํจํฐ ์์์๋ ํ๋ก์ธ์ค๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์๋ '์์ผ'์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋๋ฐ, ๋ฉ๋ฆฌ ๋จ์ด์ง ์ปดํจํฐ๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋๊ฒ๋ ์ด๊ฒ๊ณผ ๋น์ทํ๋ค๊ณ ํ๋ค.)
์ ํ๋ฆฌ์ผ์ด์
๋ ์ด์ด๋, ํธ๋์คํฌํธ ๋ ์ด์ด ์์ ์๋ค. (๊ทธ๋ฆฌ๊ณ ๋คํธ์ํฌ ๊ณ์ธต ๋งจ ์์ ์๋ค.)
๊ฐ ๋ ์ด์ด๋ค์ ์๊ธฐ ์์ ์์นํ ๋ ์ด์ด๋ค์ ์ํด ์ด๋ค ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ค๋ค๊ณ ํ๋ค.
ํธ๋์คํฌํธ ๋ ์ด์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๋ ์ด์ด์๊ฒ ์ ๊ณตํ๋ ์๋น์ค๋ 'data integrity' ๊ฐ ์๋ค. (TCP๊ฐ ํ๊ณ UDP๋ ํ์ง ์๋๋ค.)
์ ํ๋ฆฌ์ผ์ด์
์ด ํ์๋ก ํ๋ timing, throughput, security ๋ ํธ๋์คํฌํธ ๋ ์ด์ด์์ ์ ๊ณตํ์ง ์๋๋ค. ๊ทธ๋์ ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์์ ์ค์ค๋ก ์๊ธ์์กฑ์ผ๋ก ํด๊ฒฐ.
ํ์ด๋ฐ vs ์ค๋ฃจํ ?
HTTP
Hyper Text Transfer Protocol
๋ง ๊ทธ๋๋ก ํ์ดํผ ํ
์คํธ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ๋กํ ์ฝ์ด๋ค. (ํ์ดํผ ํ
์คํธ : ๋งํฌ๋ฅผ ํตํด ๋ค๋ฅธ ๋ฌธ์๋ค๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ๋ฌธ์.)
๊ทธ๋์ ํ์ดํผ ํ
์คํธ๋ฅผ ๋ฌ๋ผ๊ณ ํ๋ '์์ฒญ'๊ณผ ๊ทธ์ ๋ง๋ ํ์ดํผ ํ
์คํธ๋ฅผ ๋ณด๋ด์ฃผ๋ '์๋ต' ๋ ์ข
๋ฅ์ ๋ฉ์์ง๋ฐ์ ์๋ค.
stateless
HTTP๋ stateless ํ๋ค. HTTP ๊ตฌ์กฐ๊ฐ ๋๋ฌด ๋จ์ํด์ ์์ฒญํ๋ ์๋์ ๋ํด์ ์ด๋ค ์ ๋ณด๋ ๊ธฐ์ตํ๊ณ ์์ ํ์๊ฐ ์๋ค๋ ๋ป.
persistent / non-persistent HTTP
HTTP๊ฐ TCP๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ฐ๋ผ persistent HTTP์ธ์ง non-persistent HTTP์ธ์ง ๋๋๋ค.
non-persistent HTTP๋ TCP์ ์ฐ๊ฒฐํ๊ณ ํ๋์ ํ์ผ์ ์ ์กํ ํ์ ๋ฐ๋ก ์ฐ๊ฒฐ์ ๋ซ๋๋ค.
1. HTTPํด๋ผ์ด์ธํธ๊ฐ HTTP์๋ฒ์ TCP์ฐ๊ฒฐ์ ์์.
2. HTTP์๋ฒ ์ฐ๊ฒฐ์ ์๋ฝํ๊ณ ํด๋ผ์ด์ธํธ์ ์๋ฆผ.
3. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ HTTP ์์ฒญ ๋ฉ์์ง๋ฅผ TCP ์ฐ๊ฒฐ ์์ผ์ ์ ์ก.
4. ์์ฒญ์ ๋ฐ์ ์๋ฒ๋ ์์ฒญ๋ฐ์ ํ์ผ์ ๋ด์ ์๋ต ๋ฉ์์ง๋ฅผ ์ ์ก.
5. ์๋ฒ๊ฐ TCP ์ฐ๊ฒฐ์ ๋ซ์.
6. ํด๋ผ์ด์ธํธ๋ ์๋ต์ ๋ฐ๊ณ ๋ฌธ์๋ฅผ parsingํ๊ณ ์ด ํ์ผ์ ๋ธ๋ผ์ฐ์ ์ ์์ ํ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์๋ ๋ค๋ฅธ ํ์ผ๋ค (์ด๋ฏธ์ง ๋ฑ)์ด ํ์ํจ์ ๊ฐ์ง.
7. 1~5๋ฒ ๊น์ง์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค. (ํ์ํ ํ์ผ๋ค์ ์ ๋งํผ ๋ฐ๋ณต.)
์์ ๊ณผ์ ์ ๋ฒ๊ฑฐ๋ก์ ๋ณด์ธ๋ค, ํนํ๋ ํ๋ ์น ํ๊ฒฝ์์๋ html ํ์ผ ํ๋๋ง์ผ๋ก ์น ํ์ด์ง๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ๋ ์ค์ง์ ์ผ๋ก ์์ผ๋ ๋์ฑ ๋ ๋ฒ๊ฑฐ๋กญ๋ค. ๊ทธ๋์ ์ฌ์ฉํ๋๊ฒ persistent HTTP.
์์ผ
๋คํธ์ํฌ ํต์ ๋ ๊ฒฐ๊ตญ ๋ฉ๋ฆฌ ์์นํ ์ปดํจํฐ์ ๊ฐ๋๋๊ณ ์๋ ํ๋ก์ธ์ค๋ค๋ผ๋ฆฌ์ ํต์ ์ด๋ค.
๊ทธ๋์ OS์์ ์ ๊ณตํ๋ ์์ผ API(ํ๋ก์ธ์ค ๋ผ๋ฆฌ์ ์ ๋ณด ๊ตํ์ ๊ฐ๋ฅํ๊ฒ ํจ)๋ฅผ ์ฌ์ฉํ๋ค.
์์ผ์ ์ข
๋ฅ๋ ์ด๋ค ์ ์ก ๊ณ์ธต ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ง์ ๋ฐ๋ผ ๋ ๊ฐ์ง๋ก ๋๋๋ค.
TCP ์์ผ๊ณผ, UDP ์์ผ
TCP ์์ผ
์๋ฒ์ธก์์ ๋จผ์ (ํจ์๋ C์ธ์ด ๊ธฐ์ค)
1. ์์ผ์ ๋ง๋ ๋ค : socket(int domain, int type, int protocol)
2. ์์ผ๊ณผ ํฌํธ๋ฅผ ์ฐ๊ฒฐ : bind(int sockfd, struct sockaddr* myaddr, int addrlen)
3. ํด๋น ์์ผ์ด ์์ฒญ์ ๋ฐ์๋ค์ด๋ ์ฉ๋์์ ์ง์ : listen(int sockfd, intbacklog)
4. ์์ฒญ ๋ฐ์๋ค์ด๊ธฐ ์์ : accept(int sockfd, struct sockaddr* cliaddr, int* addrlen)
ํด๋ผ์ด์ธํธ ์ธก์์๋
1. ํด๋ผ์ด์ธํธ ์ธก์์๋ ํต์ ์ ์ฌ์ฉํ ์์ผ์ ๋ง๋ค์ด์ผ ํ๋ค : socket()
- bind()
๋ ํ์ํ์ง ์๋ค. ์๋ํ๋ฉด ํด๋ผ์ด์ธํธ ์ชฝ์์๋ ๋น์ด์๋ ํฌํธ ์๋ฌด๊ฑฐ๋ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ๊ธฐ ๋๋ฌธ์.
2. ๋ง๋ค์ด์ง ๋ค๋ฅธ ์์ผ๊ณผ ์ฐ๊ฒฐํ๋ค : connect(int sockfd, struct sockaddr* servaddr, int addrlen)