DevLog ๐ถ
[Network] ์๋ฒ์ ํจํท ์์ ๋์ ์์๋ณด๊ธฐ ๋ณธ๋ฌธ
๐ฑ ๋ค์ด๊ฐ๊ธฐ ์
๋๋์ด ๊ธฐ๋๊ธด ํจํท ์ฌํ์ ๋ง์ง๋ง์ด๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์น ์๋ฒ์ธก์์ ์ด๋ค ์์ผ๋ก ํจํท์ ๋ฐ์์ค๋์ง ์์๋ณผ ๊ฒ์ด๋ค!
ํด๋ผ์ด์ธํธ์์ ํจํท์ ์ ์กํ๋ ๋จ๊ณ๋ฅผ ๋ฐ๋๋ก ๋ค์ง์ ๊ฒ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ ์ด๋ ต์ง ์์ ๊ฒ์ด๋ค.
๐ฑ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ํจํท์ด ์๋ฒ๋ก ๋์ฐฉํ ์งํ
๋ค์ ๋์์์, ํด๋ผ์ด์ธํธ์์ ๋ณด๋ธ ํจํท์ด ์๋ฒ๋ก ๋์ฐฉํ ์งํ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ๊ฐ๋จํ๊ฒ๋ง ์์๋ณด์.
(์ด ๋ถ๋ถ์ ํฌ๊ฒ ์ค์ํ ๊ฑด ์๋๋ผ์ ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ณ ์ ํ๋ค.)
์ฐ์ , ์๋ฒ ์ธก์ผ๋ก ๋ค์ด์จ ํจํท์ ๊ฒฝ์ฐ ์ฌ์ค '์ ๊ธฐ ์ ํธ'์ ํํ๋ก ๋ค์ด์จ๋ค.
์ ๊ธฐ ์ ํธ๋ LAN ์ด๋ํฐ์์ ์์ ๋๋ฉฐ, ์ฌ๊ธฐ์ 1๊ณผ 0์ ๋์งํธ ๋ฐ์ดํฐ๋ก ๋ฐ๋๊ฒ ๋๋ค.
์ ๊ทธ๋ฆผ์ ์ ๊ธฐ ์ ํธ์์ ๋์งํธ ๋ฐ์ดํฐ๋ก ๋ณํ๋์์ ๋ ํจํท์ ํํ์ด๋ค.
๋ณ๊ฒฝ๋ ๋์งํธ ๋ฐ์ดํฐ์์ ํจํท์ ๊ฐ์ฅ ๋ง์ง๋ง๋จ์ ์๋ FCS (Frame Check Sequence, ์ค๋ฅ ๊ฒ์ฌ์ฉ ๋ฐ์ดํฐ)๋ฅผ ํตํด ์ค๋ฅ์ ์ ๋ฌด๋ฅผ ๊ฒ์ฌํ๊ฒ ๋๊ณ , ๋ฐ์ดํฐ๊ฐ ๋ฌด๊ฒฐํ๋ค๋ฉด ๋งจ ์์ ์๋ MAC ํค๋์ ์๋ ์์ ์ฒ์ MAC ์ฃผ์๋ฅผ ํ์ธํด์ ๋ณธ์ธ์๊ฒ ์จ ๋ฐ์ดํฐ์ธ์ง ์ฒดํฌํ๋ค.
์ด๋, ์ ๊ธฐ ์ ํธ๊ฐ LAN ์ ์ฒด๋ก ํ๋ฌ๊ฐ๊ณ ํด๋นํ๋ ๊ฒ๋ง ์ ํธ๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ธฐ๊ธฐ๋ก ๊ฐ์ผ ํ๋ ํจํท์ด ๋ค์ด์ฌ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ดํ LAN ์ด๋ํฐ ๋ด๋ถ์ ๋ฒํผ์ ์ ์ฅํด๋๊ณ , ์ธํฐ๋ฝํธ๋ฅผ ํตํด์ CPU์๊ฒ ํจํท์ด ๋์ฐฉํ์์ ์๋ฆฐ๋ค.
๊ทธ๋ผ CPU๋ ํ๋ ์์ ์ ์ค๋จํ๊ณ LAN ๋๋ผ์ด๋ฒ๋ฅผ ํตํด LAN ์ด๋ํฐ์ ๋ฒํผ ๋ฉ๋ชจ๋ฆฌ์์ ์์ ํ ํจํท์ ์ถ์ถํ๊ณ , MAC ํค๋์ ํ์ ํ๋๋ฅผ ํตํด ํ๋กํ ์ฝ์ ํ๋ณํ๊ณ , ํด๋น ํ๋กํ ์ฝ์ ์ฒ๋ฆฌํ ์ ์๋ ์ํํธ์จ์ด๋ฅผ ํธ์ถํ๋ค.
๋ณดํต ํด๋น ํ์ ํ๋ ๊ฐ์ IP ํ๋กํ ์ฝ์ ๋ํ๋ด๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ TCP / IP์ ํ๋กํ ์ฝ ์คํ์ ํธ์ถ ํ ํจํท์ ๊ฑด๋ค์ค๋ค.
๐ฑ ํ๋กํ ์ฝ ์คํ๊ณผ IP ๋ด๋น ๋ถ๋ถ
ํ๋กํ ์ฝ ์คํ๊น์ง ํจํท์ด ์ค๊ฒ ๋๋ฉด IP ๋ด๋น ๋ถ๋ถ์ด IP ํค๋๋ฅผ ์ ๊ฒํ๋ค.
MAC ํค๋์ ๋ง์ฐฌ๊ฐ์ง๋ก IP ํค๋์์ ์์ ์ฒ IP ์ฃผ์๋ฅผ ํตํด ๋ณธ์ธ์๊ฒ ๋ณด๋ด๋ ํจํท์ธ์ง ์ฒดํฌํ๋ค.
์ด๋ OS ๋ด๋ถ์์ ํจํท ์ค๊ณ ์ ์์์น ๋ชปํ๊ฒ ๋ค๋ฅธ ํจํท์ด ๋ค์ด์ฌ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ดํ, ํจํท์ด ์ ๋ถํ ๋์๋์ง ์ฒดํฌํ๊ณ (IP ํค๋์ ํ๋๊ทธ ๊ฐ์ ํตํด ํ์ธ) ๋ถํ ๋ ํจํท์ด ๋ชจ๋ ๋์ฐฉํ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
์ ๋ถ ๋์ฐฉํ๊ฒ ๋๋ฉด ์ฌ์กฐ๋ฆฝํ์ฌ ์๋์ ํจํท์ผ๋ก ๋ณต์์ ํ๊ณ , ํ๋กํ ์ฝ ๋ฒํธ ํญ๋ชฉ์ ๋ฐ๋ผ์ TCP or UDP or ICMP ๋ด๋น ๋ถ๋ถ์๊ฒ ํจํท์ ๊ฑด๋ค์ค๋ค.
๐ฑ ์๋ฒ์์ ์์ผ์ ๋ฐ๋ ๊ณผ์ - ์์ผ ๋ฉ์๋๋ก ๋ถ์ํ๊ธฐ
๋ณดํต ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ 1:1๋ก ์ ์ํ์ฌ ๋ํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ๋ณดํต ๋ฉํฐ์ค๋ ๋๋ฅผ ํตํด์ ์๋ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์, ํด๋ผ์ด์ธํธ์ ์ ์์ ๋๊ธฐํ ๋ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์ ์ ์ ์๋ก ์์ฑํ ์์ผ์ ๊ฑด๋ค์ฃผ๊ฒ ๋๋ค. ๋ณดํต ์ด์์ฒด์ ์ ์ปค๋ ๋ด๋ถ์ ์์ผ์ ๊ด๋ฆฌํ๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๊ธฐ ๋๋ฌธ์, ํด๋น ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์์ผ ์ ๋ณด๊ฐ ๋ถ๋ฐฐ๋๋ค.
์ด์ ์ ํ๋กํ ์ฝ ์คํ๊ณผ ๋ฉ์์ง ์ก์ ๊ณผ์ ์ ๊ดํ ํฌ์คํ ์์ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ ์ก-์์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ์๋ค.
1. ์์ผ ์์ฑ
2. ์๋ฒ์ ์์ผ๊ณผ ํ์ดํ๋ก ์ฐ๊ฒฐ (์ ์)
3. ๋ฐ์ดํฐ ์ก-์์
4. ํ์ดํ ๋ถ๋ฆฌ ํ ์์ผ ๋ง์ (์ฐ๊ฒฐ ๋๊ธฐ)
ํ์ง๋ง, ์๋ฒ์ ์ ์ฅ์์๋ ์กฐ๊ธ ๋ค๋ฅด๋ค.
1. ์์ผ ์์ฑ
2-1. ์์ผ์ ์ ์ ๋๊ธฐ ์ํ๋ก ๋ง๋ค๊ธฐ
2-2. ์์ผ ์ ์์ ๋ํด ์ ์
3. ๋ฐ์ดํฐ ์ก-์์
4. ํ์ดํ ๋ถ๋ฆฌ ํ ์์ผ ๋ง์
๊ตฌ์ฒด์ ์ธ ์ฝ๋์์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด์.
ํด๋ผ์ด์ธํธ์ ์์ผ ์ฐ๊ฒฐ ํ๋ก์ธ์ค์ ๋น์ทํ์ง๋ง, ์ถ๊ฐ์ ์ผ๋ก bind, listen, accept ๊ฐ์ ์ฝ๋๊ฐ ์๊ธด ๊ฒ์ ๋ณผ ์ ์๋ค.
1. bind : ์์ผ์ ์ฃผ์๋ฅผ ํ ๋นํ๊ธฐ
int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen);
bind ๋ฉ์๋์ ๊ฒฝ์ฐ ์ด 3๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค.
์ฒซ ๋ฒ์งธ ์ธ์์ ๊ฒฝ์ฐ socket()์ ํตํด ๋ฐ์์ค๋ ๋์คํฌ๋ฆฝํฐ์ด๋ฉฐ, ๋ ๋ฒ์งธ ์ธ์์ ๊ฒฝ์ฐ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ๋ด๊ณ ์๋ ๊ตฌ์กฐ์ฒด์ด๋ค.
์ธ ๋ฒ์งธ ์ธ์์ ๊ฒฝ์ฐ ์ฃผ์ ์ ๋ณด๋ฅผ ๋ด์ ๋ณ์์ ๊ธธ์ด์ด๋ฉฐ, ๋ฐ์ธ๋ฉ์ด ์ฑ๊ณตํ๋ฉด 0์, ์คํจํ๋ฉด -1์ ๋ฐํํ๋ค.
2. listen: ์ฐ๊ฒฐ ์์ฒญ์ ๋๊ธฐํ๊ธฐ
int listen(int sock, int backlog);
bind ๋ฉ์๋๋ฅผ ํตํด์ ํ๋์ ์์ผ์ ip ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ํ ๋นํ๋ค.
์ด์ , ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์์ผ์ ์ฐ๊ฒฐํ ์ ์๋๋ก ํด๋น ์์ฒญ์ ๋๊ธฐํ๋ ์ํ๋ก ๋ง๋ค์ด์ค์ผ ํ๋ค.
listen์ด ํธ์ถ๋ ์ดํ๋ถํฐ ํด๋ผ์ด์ธํธ๋ connect๋ฅผ ํตํด์ ์๋ฒ๋ก ์ฐ๊ฒฐ์ ์์ฒญํ ์ ์๊ฒ ๋๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ ์์ผ ๋์คํฌ๋ฆฝํฐ์ ๋ฒํธ๋ฅผ, ๋ ๋ฒ์งธ ์ธ์๋ ์ฐ๊ฒฐ ์์ฒญ์ ๋๊ธฐํ๊ณ ์๋ ํ์ ํฌ๊ธฐ์ด๋ค.
์ฌ๊ธฐ์ ๋งํ๋ ํ๋, ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ์์ฒญํ์ ๋ ์์ฒญ์ด ์จ ์์๋๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํด๋ผ์ด์ธํธ๋ฅผ ํ์ ๋ด์๋๊ณ ๋ชจ์๋ ๊ณณ์ด๋ค.
3. accept: ์ฐ๊ฒฐ ์์ฒญ ์๋ฝํ๊ธฐ
int accept(int sock, struct sockaddr*addr, socklen_t *addrlen);
๋๊ธฐ ์ค์ธ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฐจ๋ก๋๋ก ์๋ฝํ ์ ์๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ ๊ธฐ์กด์ ๋์คํฌ๋ฆฝํฐ ๋ฒํธ, ๋ ๋ฒ์งธ ์ธ์๋ ๋๊ธฐ ํ์์ ์ป์ด์จ ํด๋ผ์ด์ธํธ์ ์ฃผ์ ์ ๋ณด, ์ธ ๋ฒ์งธ ์ธ์๋ addr ๋ณ์์ ํฌ๊ธฐ๋ฅผ ์๋ฏธํ๋ค. ๋ง์ฝ, ๋๊ธฐ ํ๊ฐ ๋น์ด์๋ค๋ฉด accept์ ๋ฐํ๋์ง ์๊ณ ์๋ก์ด ์์ฒญ์ด ์ฌ ๋๊น์ง blocking ์ํ๊ฐ ๋๋ค.
์ฌ๊ธฐ์ accept์ ๊ธฐ์กด์ ๋์คํฌ๋ฆฝํฐ๊ฐ ์๋, ์๋ก์ด ๋์คํฌ๋ฆฝํฐ๋ฅผ (๋์คํฌ๋ฆฝํฐ 2) ๋ฐํํ๋ค.
์์์ ์ฌ์ฉํ๋ ๋์คํฌ๋ฆฝํฐ๋ ์ฐ๊ฒฐ ์์ฒญ์ ๋ํ ๋๊ธฐ๊น์ง๋ง ์งํํ๊ณ , accept์ ํตํด ์๋กญ๊ฒ ํ ๋น๋ฐ์ ๋์คํฌ๋ฆฝํฐ๋ฅผ ํตํด ์ค์ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ ์ก-์์ ๊ณผ์ ์ ์งํํ ์ ์์์ ์๋ฏธํ๋ค.
๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋์คํฌ๋ฆฝํฐ์ ๊ฒฝ์ฐ ๊ณ์ ์ ์ ๋๊ธฐ์ธ ์ํ๋ก ์กด์ฌํ๊ฒ ๋๋ค. ๋ง์ฝ, ์๋กญ๊ฒ ํ ๋น๋ฐ์ ๋์คํฌ๋ฆฝํฐ ๋์ ๊ธฐ์กด์ ๋์คํฌ๋ฆฝํฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ์ ์ ๋๊ธฐ ์์ผ์ด ์ฌ๋ผ์ง๊ฒ ๋์ด์ ๋ค์์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๊ฒ ๋๋ค๋ฉด ์ด๋ฏธ ์์ผ์ด ์ฐ๊ฒฐ๋ ์ํ๋๊น ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์ด ๊ณค๋ํด์ง๋ค. ๊ทธ๋์, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ฌ ๋๋ง๋ค ์๋ก์ด ์์ผ์ ์์ฑํ์ฌ ํด๋น ํด๋ผ์ด์ธํธ์ ํต์ ๊ณผ๋ฅผ ๋ด๋นํ๋๋ก ๋ง๋ ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
ํ์ง๋ง, ์๋ก์ด ์์ผ์ ๋ง๋ค ๋ ํฌํธ ๋ฒํธ๋ ๊ทธ๋๋ก ์ ์งํ๋ค. ์ด๋ ์ ์ ํจํท์ ๋ณด๋์ ๋ ๋ค๋ฅธ ํฌํธ ๋ฒํธ์์ ๋ต๋ณ์ด ๋์์ค๋ ์ผ์ ๋ง๊ธฐ ์ํด์์ด๋ค. ๋ง์ฝ ๋ค๋ฅธ ํฌํธ ๋ฒํธ๋ก๋ถํฐ ๋ต์ด ์จ๋ค๋ฉด, ์ ์ ํจํท์ ๋ณด๋ธ ์๋๋ก๋ถํฐ ์จ ๊ฒ์ธ์ง, ์๋๋ฉด ๋ค๋ฅธ ์๋๋ก๋ถํฐ ์จ ๊ฒ์ธ์ง ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทผ๋ฐ ํฌํธ ๋ฒํธ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๊ฒ ๋๋ค๋ฉด ํ๋์ ํฌํธ ๋ฒํธ์ ์ฌ๋ฌ ๊ฐ์ ์์ผ์ด ์กด์ฌํ ์๋ ์๋ ๊ฒ์ด๋ค. (์ ์ ๋๊ธฐ ์ฉ๋ / ๋ฐ์ดํฐ ์ก-์์ ์ฉ๋) ํด๋ผ์ด์ธํธ์์ ํจํท์ด ๋์ฐฉํ์ ๋ ๋จ์ํ ํฌํธ ๋ฒํธ๋ก ์ด๋ค ์์ผ์ด๋ ๋ํํ๊ณ ์๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์, ์ถ๊ฐ์ ์ผ๋ก ์๋์ ๊ฐ์ ์ ๋ณด๋ค์ ํตํด ์์ผ์ ์๋ณํ๋ค.
- ํด๋ผ์ด์ธํธ์ IP ์ฃผ์
- ํด๋ผ์ด์ธํธ์ ํฌํธ ๋ฒํธ
- ์๋ฒ์ธก์ IP ์ฃผ์
- ์๋ฒ์ธก์ ํฌํธ ๋ฒํธ
์ด ๋๋ถ์ ์๋ฒ์ธก์ ๊ฐ์ ํฌํธ ๋ฒํธ๋ฅผ ๊ฐ์ง ์์ผ์ด ์ฌ๋ฌ ๊ฐ์ด๋๋ผ๋, ํด๋ผ์ด์ธํธ ์ธก์ ๋ชจ๋ ๋ค๋ฅธ ํฌํธ ๋ฒํธ๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๊ฐ ์์ผ๋ค์ด ์ถฉ๋ถํ ์๋ณ๋๋ค. ํ์ง๋ง, ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํฌํธ ๋ฒํธ๋ง ๊ฐ์ง๊ณ ์๋ณ์ ๋ถ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด, ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๊ฒ ๋๋ค๋ฉด ํด๋ผ์ด์ธํธ์ ํฌํธ ๋ฒํธ ์ญ์ ์ค๋ณต๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์ถ๊ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๊น์ง ํฉํ์ฌ ์์ ํ๊ฒ ์์ผ์ ์๋ณํ๊ฒ ๋๋ค!
๊ทธ๋ ๋ค๋ฉด, ๊ตณ์ด ์์ผ ๋์คํฌ๋ฆฝํฐ๋ผ๋ ๊ฒ์ ์ฌ์ฉํ ํ์๊ฐ ์์๊น?
์ด๋, ์์ผ์ ๋ง๋ ์งํ ์ ์ ๋์์ ํ๊ธฐ ์ ์๋ ํด๋ผ์ด์ธํธ์ IP, ํฌํธ ๋ฒํธ๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ 4๊ฐ์ง ์ ๋ณด๋ณด๋ค๋ ๋์คํฌ๋ฆฝํฐ ํ๋๋ก ์๋ณํ๋ ๊ฒ ๋ ๊ฐ๋จํ๊ณ (๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ ์ ๊ฒ ์ฐจ์งํ๋๊น ์ฑ๋ฅ ๊ฐ์ ๊ฐ๋ฅ), ํ์ค ์ธํฐํ์ด์ค์ธ ๋งํผ ํ๋ก๊ทธ๋จ๊ณผ OS ์ฌ์ด์ ์ํํ ํต์ ์ ์ง์ํ๊ฒ ๋๋ค.
๐ฑ ์๋ฒ์์ ์์ผ์ ๋ฐ๋ ๊ณผ์ - TCP ํค๋์ ๊ด์ ์์ ๋ถ์ํ๊ธฐ
๋ฐ๋ก ์์ ๋งํ ๋ด์ฉ๊ณผ ๋น์ทํ์ง๋ง, TCP ํค๋๊ฐ ํ๋ ์ผ์ ์์ฃผ๋ก ๋์๊ฒจ๋ณด์.
๐ฌ ์์ผ ์ ์ ๋์
๊ธฐ๋ณธ์ ์ผ๋ก TCP ํค๋์ SYN ์ปจํธ๋กค ๋นํธ๊ฐ 1๋ก ํจํท์ด ๋ค์ด์๋ค๋ฉด, ํด๋น ํจํท์ ์ ์ ๋์์ ํจํท์ด ๋๋ค.
ํด๋น ํจํท์ด ๋ค์ด์ค๋ฉด ํจํท์ ์์ ์ฒ ํฌํธ ๋ฒํธ๋ฅผ ์กฐ์ฌํ์ฌ ํด๋น ๋ฒํธ์ ๊ฐ์ ํฌํธ ๋ฒํธ๋ฅผ ํ ๋นํ ์ ์ ๋๊ธฐ ์ํ์ ์์ผ์ด ์๋์ง ํ์ธํ๋ค. ์ด ๊ณผ์ ์์ ์กด์ฌํ๋ ํจํท์ด ์๋ค๋ฉด, ์ค๋ฅ ํต์ง ํจํท์ ๋ฐ์กํ๋ค.
ํด๋นํ๋ ์ ์ ๋๊ธฐ ํจํท์ด ์๋ค๋ฉด ๋ณต์ฌํ์ฌ ์๋ก์ด ์์ผ์ ๋ง๋ค๊ณ (์์์ ๋ดค๋ ๋์คํฌ๋ฆฝํฐ2์ ๋ํ ๋ถ๋ถ) ์ก์ ์ฒ์ IP ์ฃผ์, ํฌํธ ๋ฒํธ, ์ํ์ค ๋ฒํธ์ ์ด๊ธฐ๊ฐ, ์๋์ฐ ๊ฐ ๋ฑ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ค. ๋ํ, ์ก-์์ ๋ฒํผ๋ก ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ๋ณดํ ๋ค์, ACK ๋ฒํธ, ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ด๋ ๋ฐ์ดํฐ์ ๋ํ ์ํ์ค ๋ฒํธ์ ์ด๊ธฐ๊ฐ, ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์ํด ์์ ๋ฒํผ์ ๋น ์ฉ๋์ ๋ํ๋ด๋ ์๋์ฐ ๊ฐ ๋ฑ์ ๊ธฐ๋กํ TCP ํค๋๋ฅผ ๋ง๋ค์ด์ IP ๋ด๋น ๋ถ๋ถ์๊ฒ ์๋ขฐํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์กํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋น ํจํท์ด ํด๋ผ์ด์ธํธ์๊ฒ ๋์ฐฉํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ํจํท์ ๋ฐ์๋ค๋ ACK๋ฅผ ๋ณด๋ผ ๊ฒ์ด๊ตฌ, ํด๋น ํจํท์ ๋ฐ๊ฒ ๋๋ฉด ์์ผ์ ์ ์ ๋์์ด ์๋ฃ๋๋ค. accept์ ํตํด ์ฌ๊ณ ์๋ ์๋ฒ๋ ์๋ก ๋ง๋ ์์ผ์ ๋์คํฌ๋ฆฝํฐ๋ฅผ ์ ๋ฌํ์ฌ ๋ค์ ๋์์ ์ฌ๊ฐํ๊ฒ ๋๋ค.
1. TCP ํค๋์ SYN ์ปจํธ๋กค ๋นํธ ํ์ธ
2. ์์ ์ฒ ํฌํธ ๋ฒํธ ์กฐ์ฌ
3. ํด๋น ํฌํธ ๋ฒํธ์ ๋์ผํ ๋ฒํธ๋ฅผ ๊ฐ์ง ์ ์ ๋๊ธฐ ์์ผ ๋ณต์ฌ ํ ์ ์์ผ ์์ฑ
4. ์ก์ ์ฒ์ IP / ํฌํธ ๋ฒํธ ๋ฑ ๊ธฐ๋ก
๐ฌ ๋ฐ์ดํฐ ์ก-์์ ๋์
์ ์์ด ์๋ฃ๋๋ฉด ๋ฐ์ดํฐ ์ก-์์ ๋จ๊ณ๋ฅผ ๋ค์ด๊ฐ ํ ๋ฐ, ๋จผ์ ๋์ฐฉํ ํจํท์ด ์ด๋ ์์ผ์ ํด๋นํ๋์ง ์กฐ์ฌํ๋ค.
์๋ก์ด ์์ผ์ด ๋ณต์ฌ๋๋ฉด์ ๋์ผํ ํฌํธ ๋ฒํธ๋ฅผ ๊ฐ์ง ์์ผ์ด ์ฌ๋ฌ ๊ฐ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ก-์์ ์ฒ์ IP, ํฌํธ ๋ฒํธ ๋ชจ๋๋ฅผ ์กฐํฉํ์ฌ ์์ผ์ ์ฐพ๋๋ค. ์ดํ, ์์ผ์ ๊ธฐ๋ก๋ ์ํ์ค ๋ฒํธ๋ ์ด์ ์ ์จ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ๊ธธ์ด๋ก๋ถํฐ ๋ค์ ์ํ์ค ๋ฒํธ ๊ฐ์ ๊ณ์ฐํ์ฌ, TCP ํค๋์ ๊ธฐ๋ก๋ ์ํ์ค ๋ฒํธ์ ์ผ์นํ๋์ง ํ์ธํ์ฌ ๋์ค์ ์ ์ค๋ ํจํท์ด ์๋์ง ํ์ธํ๋ค.
๐ก ์ด๋, ๋ถํ ๋ ํจํท์ ์๋๋ก ๋ณต์ํ๊ธฐ ์ํด์ ์๋ก์ด ํจํท์ด ๋์ฐฉํ ๋๋ง๋ค ๋ฐ์ดํฐ ์กฐ๊ฐ๋ค์ ์ฐ๊ฒฐํ๋ค.
์์ ํ ๋ฐ์ดํฐ๋ฅผ ์์ ๋ฒํผ์ ์ ์ฅํ๋ฉด ์๋ต์ฉ TCP ํค๋์ ์์ ํจํท์ ์ํ์ค ๋ฒํธ์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ผ๋ก๋ถํฐ ๊ณ์ฐํ ACK ๋ฒํธ๋ฅผ ๊ธฐ๋กํ ๋ค, IP ๋ด๋น ๋ถ๋ถ์๊ฒ ์๋ขฐํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ค์ ๋ฐ์กํ๋ค. ์ดํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ์ ๋ฒํผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋ค์ฃผ๊ฒ ๋๋ค.
1. ๋์ฐฉํ ํจํท์ ์ก-์์ ์ฒ IP / ํฌํธ ๋ฒํธ๋ฅผ ํตํด ์์ผ ์๋ณ
2. ๋ฐ์ดํฐ ์กฐ๊ฐ๋ค์ ์ฐ๊ฒฐํ์ฌ ์์ ๋ฒํผ์ ๋ณด๊ด
3. ํด๋ผ์ด์ธํธ์๊ฒ ACK ๋๋๋ ค์ค
๐ฌ ์ ์ ๋๊ธฐ ๋์
ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ close ํธ์ถํ๊ณ , FIN=1์ IP ๋ด๋น ๋ถ๋ถ์๊ฒ ์๋ขฐํ๋ค.
์ด๋ฅผ ๋ฐ์ ์์ ์ธก์ ACK ๋ฒํธ๋ฅผ ๋ฐ์กํ๊ณ , ๋ ๋ค์ FIN=1์ ๋ณด๋ด๊ณ , ๋ค์ ACK๋ฅผ ๋ณด๋ด๊ณ ์ฐ๊ฒฐ์ด ๋๊ธด๋ค.
์ดํ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์ ์ ํ ์์ผ์ด ๋ง์ํ๊ฒ ๋๋ค!
ํํ ์๊ฐํ๋ 4-way handshake ๊ณผ์ ์ด๊ธฐ ๋๋ฌธ์ ์์ธํ ๋ด์ฉ์ ์๋ตํ๊ฒ ๋ค.
์ด ํฌ์คํ ์์ ์ฐ๊ฒฐ ๋๊ธฐ ๋์์ ๋ํ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋์๋ค ๐ถ
์ด๋ ๊ฒ ๋๋ต์ ์ธ ํด๋ผ์ด์ธํธ <-> ์๋ฒ ๊ฐ์ ํต์ ๊ณผ์ ์ ์์๋ณด์๋ค.
์ฌ์ค ์ค๊ฐ์ค๊ฐ ์๋ตํ ๋ด์ฉ๋ ์๊ณ , ํนํ ๋ฆฌํ์คํธ ๋ฉ์์ง ํด์ํ๋ ๋ถ๋ถ์ ์ฑ ํ ๊ถ์ผ๋ก ์ฐ์ผ ์ ์์ ๋งํผ ๋ด์ฉ์ด ๋ง์์ ๋ฐ๋ก ์ ๋ฆฌํ์ง๋ ์์๋ค. ์ ๋ง ๊ฐ๋จํ๊ฒ ์ค์ธ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋ฆฌํ์คํธ ๋ฉ์์ง๋ฅผ ํ์ฑํ์ฌ ์ก์ธ์ค ์ ์ด์ ๋ฐ๋ฅธ ๊ฒ์ฆ ์ ์ฐจ ์งํ
2. ๋ฆฌํ์คํธ ๋ฉ์์ง ์ฒ๋ฆฌ
3. ์๋ต ๋ฉ์์ง ์์ฑ ํ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ก (ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ ๋๋ ๋ค์์ ํจํท์ผ๋ก ๋ฐ์)
4. ํด๋ผ์ด์ธํธ๋ฅผ ์ด๋ฅผ ๋ฐ์ ์ ๊ธฐ ์ ํธ -> ๋์งํธ ๋ฐ์ดํฐ -> ๋ถํ ๋ ํจํท ๋ชจ์ผ๊ธฐ -> ๋ฉ์์ง๋ก ๋ณํ -> ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ์ก
5. ๋ธ๋ผ์ฐ์ ๋ Content-Type ๊ฐ์ ํค๋ ๊ฐ์ ๋ฐ๋ผ์ ์ด๋ค ์์ผ๋ก ๋ ๋๋งํ ์ง ์ ํจ
์๋ฌดํผ ๋!
๋์ค์ ํ ๋ฒ ๋ ๊ณต๋ถํด๋ด์ผ๊ฒ ๋ค... ์ง๊ธ์ ๋จธ๋ฆฌ์ ๋จ์ ๊ฒ ์๋ค ๐ฅน