๐ ์์ง๋ ๋ชจํธํ TCP / UDP ๊ฐ๋ โ ์ฝ๊ฒ ์ดํดํ์
HTTP / IP / TCP / UDP ๋ ๋ชจ๋ ํ๋กํ ์ฝ
ํ๋กํ ์ฝ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ํ๋ ๋ฉ์์ง ํ์ ๋ํ ๊ท์น ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์์ ํธ์คํธ๊ฐ ์ ์ก ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ดํดํ๋ ค๋ฉด ์ค๊ณ๋ ๊ท์น์ ๋ฐ๋ผ ์์ฑ๋ ๋ฐ์ดํฐ ํ์์ด์ด์ผ ํ๋ค๋ ๋ง์ด๋ค.
์๋ฅผ๋ค์ด HTTP ๋ฉ์ธ์ง ํค๋๋ ๊ฒฐ๊ตญ ์ผ์ข ์ ๊ท์น์ด๋ฉฐ, IP์ ์ซ์๋ ๊ท์น์ด๋ผ๊ณ ๋งํ ์ ์๋ค. ๋ง์ผ ๊ท์น์ ๊นจ๋ 256.256.256.256 ์ ๊ฐ์ ํ์์ ์กด์ฌํ์ง๋ ์๋ ์์ดํผ์ด๋ฉฐ ์๋ํ์ง๋ ์๋๋ค.
HTTP์ IP ํ๋กํ ์ฝ์ ๋ํด์ ๋ฐฐ์ฐ๊ฒ๋๋ฉด ๋ฐ๋ก ๊ทธ๋ค์ ์ ํด๋ณด๋ ํ๋กํ ์ฝ ์๋ฅ์ด๊ฐ ๋ฐ๋ก TCP / UDP ์ผ ๊ฒ์ด๋ค.
๋ค๋ง ์ด TCP์ UDP์ ๋ํด์ ๊ท๊ฐ ์ํ์ ๋๋ก ๋ค์ด๋ดค๊ฒ ์ง๋ง ์๋ฌด๋ฆฌ ๋ค์ด๋ ๊ฐ๋ ์ด ์ ๋งคํ๊ฒ ๋๊ปด์ง๋ค.
์๋ํ๋ฉด HTTP ๊ฐ์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋คํธ์ํฌ ํญ์์ HTTP ๋ฉ์ธ์ง์ ํค๋(header)๋ก ์ด๋ ํ ๊ตฌ์กฐ๋ก ๋ฉ์ธ์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋์ง ๋์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ๋ํ IP ๊ฐ์ ๊ฒฝ์ฐ 192.168.10.1 ๊ฐ์ด ์ซ์๋ก ์ด๋ฃจ์ด์ ธ ๋ฌด์ธ๊ฐ ์ฃผ์๊ฐ์ ๋ํ๋ด๊ณ ์๋ค๋ ๊ฒ์์ ์์ ์๊ณ , ๋ธ๋ผ์ฐ์ ์ ์์ดํผ๋ก ์ ์ํ๋ฉด ํด๋น ํํ์ด์ง๋ก ์ด๋ํด ์ด๋ ํ ๋คํธ์ํน ๋์์ด ์ผ์ด๋๊ณ ์์์ ์ง๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ TCP / UDP๋ 3 HandShake๋ ์ ๋ขฐ์ฑ๋ ๋ญ๋ ์ง๊ฒน๊ฒ ๊ฐ๋ ๋จ์ด์ ํ, ๊ทธ๋ฆผ์ ๋ด์์ง๋ง, ์ค์ง์ ์ธ ํต์ ๊ฒฐ๊ณผ์ ๊ฐ์ ๋์ผ๋ก ๋ณด์ด๋๊ฒ ์์ด ์ ์ด๋ก ๋ฉ์ด๋ฆฌ๋ก ๋๊ปด ๋ฐฑ๋ ๋ฐฑ๋ฒ ๋ค์ด๋ ์ ์๋ฟ์ง ์๋๊ฒ ํ์ค์ด๋ค. ๊ทธ๋ ๋ค๊ณ ์์ด์ด์คํฌ(Wireshark) ๊ฐ์ ์ ๋ฌธ ํด์ ์ฐ๊ธฐ์๋ ๋ฉ๋ด๋ ๋ณต์กํ๊ณ ์ํ๋ ํจํท์ ํํฐ๋งํ๊ธฐ๋ ํ๋ค๊ธฐ ๋๋ฌธ์ ๊บผ๋ ค์ง๋ ๊ฒ๋ ์ฌ์ค์ด๋ค.
์ฌ์ค TCP๋ง ํด๋ ๊ต์ฅํ ์ค๋๋ ์ญ์ฌ๋ฅผ ์ง๋ ํ๋กํ ์ฝ์ด๋ผ ์ด์ ๋ํ ์ด๋ก ๋ ๋ช๋ฐฑ์ฅ์ด ๋์ด๊ฐ์ ๋๋ก ๊ต์ฅํ ๋ฐฉ๋ํ๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ํฌ์คํ ์์๋ TCP์ UDP์ ๋ํ ์ด๋ก ๋ฉ์ด๋ฆฌ ๊ฐ๋ ์ ์น์ํ๊ฒ ์ ๊ทผํ์ฌ ์ดํด๋ณด๊ณ , ์๊ฐ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ ์ ๋ค์ง๊ณ ๋์ด๊ฐ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ์ผ๋ก ๋น์ฝํ๊ฒ ๋ฐฐ์ฐ๋ UDP์ ๋ํด์ ์ต์ ๊ธฐ์ ์ธ HTTP 3.0๋ฅผ ์๊ฐํ๋ฉฐ ์ ๊ฐ๊ด์ ๋ฐ์๋์ง์ ๋ํด ์ข๋ ์์ธํ ์์๋ณด๋๋ก ํ๋ ์๊ฐ์ ๊ฐ์ง ๊ฒ์ด๋ค.
TCP - ์ ์ก ์ ์ด ํ๋กํ ์ฝ
IP(Internet Protocol)๊ฐ ์ธํฐ๋ท ํ๋กํ ์ฝ๋ก์ ๋ณต์กํ ์ธํฐ๋ท ๋ง ์์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ํ ์ ์๊ฒ IP ์ฃผ์์ ํจํท๊ณผ ๊ฐ์ ๊ท์น์ ํตํด ํต์ ์ ํ๊ฒ ํ๋ ๊ฒ์ด๋ผ๋ฉด,
TCP(Transmission Control Protocol)๋ IP ๊ท์น์ผ๋ก๋ง ํต์ ํ๊ธฐ์ ๋ถ์กฑํ๊ฑฐ๋ ๋ถ์์ ํ๋ ์ฌ๋ฌ ๋จ์ ๋ค(ํจํท ์์๊ฐ ์ด์ํ๊ฑฐ๋ ํจํท์ด ์ ์ค)์ ์ปค๋ฒํด, ํจํท ์ ์ก์ ์ ์ดํ์ฌ ์ ๋ขฐ์ฑ์ ๋ณด์ฆํ๋ ํ๋กํ ์ฝ๋ก ๋ณด๋ฉด ๋๋ค.
IP์ TCP ๋๋ค ํ๋กํ ์ฝ์ด์ง๋ง ์ด ๋์ ๋์ผ์๋ก ๋ณด๋ฉด ์๋๋ค. ์ด ๋์ ๋ณ๊ฐ์ ๊ท์น์ด๋ค.
IP ๊ท์น์ ์จ์๋๋๋ก ๋ชฉ์ ์ง๊น์ง ๋ค๋ค๋์ผ๋ฉด, TCP ๊ท์น์ ์จ์๋๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋์ฐฉํ๋์ง ์ ํํ ๋๊ตฌ์๊ฒ ์ ๋ฌ๋์ผํ๋์ง ํ๋ํ๋ ๋ฐ์ง๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋์ ์ํ ์ ๋ฌด๋ ๋ฉ์ผ๊ณผ ๊ฐ์ ๋ฐ๋์ ์์ ์๊ฐ ์ ๋ณด๋ฅผ ๋ฐ์์ผํ๋ ์ ๋ขฐ์ฑ ์๋ ํต์ ์ด ํ์ํ ๋ ์ฌ์ฉ๋๋ค.
๐ฆ TCP์ ์์ ํฌ์ฅ
์์ง๋ TCP์ ๋ํด ์ ์๋ฟ์ง ์๋๋ค๋ฉด ์ด๋ฐ์์ผ๋ก ์ ๊ทผํด๋ณด๋ ๊ฒ๋ ์ข๋ค.
์ธํฐ๋ท ํต์ ์ ํ๋ฐฐ ์ํ๋ฌผ๋ก ๋น์ ํ์๋ฉด, IP๋ ๋จ์ํ ๋ฐฐ๋ฌ ์ฃผ์์ง๋ผ๊ณ ํ๋ฉด TCP๋ ์ด ๋ฐฐ๋ฌ์ง๋ก ๋ฌธ์ ์์ด ์ ์ก๋๋๋ก ํ๋ฐฐ ์คํฐ์ปค์ ๊ฐ์ ์ฌ๋ฌ ๋ถ๊ฐ ์ ๋ณด๋ค์ ๊ฐ๋ฏธํ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ๋จ์ํ ๋ชฉ์ ์ง ๋ฟ๋ง ์๋๋ผ ์์, ๊ฒ์ฆ, ์ ์ก ์ ์ด ์ ๋ณด๊ฐ ๋ค์ด์์ด IP ์ฃผ์์ง๋ก๋ง ๋ฌผํ์ ๋ฐฐ๋ฌํ๊ธฐ์ ๋ถ์์ ํ ๋ถ๋ถ๋ค์ ํ์คํ๊ฒ ์ปค๋ฒํ์ฌ ๋ฐฐ๋ฌํ์ด ๋ชฉ์ ์ง๊น์ง ์์ ํ๊ฒ ๋์ฐฉํ๋๋ก ๋ณด์ฆํ๋ค.
์ ์ก ๋ฐ์ดํฐ๊ฐ ํฌ์ฅ๋๋ ๊ณผ์ ์ ๋์ดํด๋ณด๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
๋ค๋ง ์ด๋ถ๋ถ์ OSI 7 Layer์ ๋๋ถ์ด TCP/IP 4๊ณ์ธต ์ ๋ํด ์๊ณ ์์ด์ผ ์ดํด๊ฐ ๊ฐ๋ฅํ์ง๋ง, ์ด ํฌ์คํ ์์ ๋คํธ์ํน ๊น์ง ์์ธํ ๋ค๋ฃจ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์ด ๊ทธ๋ฆผ์ผ๋ก ๊ฐ๋จํ๊ฒ ํํํ์๋ค.
- ์ ์ก๋ฐ์ดํฐ๋ฅผ TCP ํฌ์ฅํ๋ค.
- ํฌ์ฅํ ์ ์ก๋ฐ์ดํฐ๋ฅผ IP ํฌ์ฅํ๋ค
- ํฌ์ฅํ ์ ์ก๋ฐ์ดํฐ๋ฅผ ์ด๋๋ท ํฌ์ฅํ๋ค
- ์ธํฐ๋ท์ ํตํด ์๋ ์ปดํจํฐ ์๋ฒ์ ๋๋ฌํ์ฌ ํฌ์ฅ๋๊ฑธ ํ๋์ฉ ํ๋ฉฐ ์ ์ก๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฒ ๋๋ค
โ TCP์ ๊ผผ๊ผผํ ํต์ ํ์ธ
TCP๋ ์ ๋ขฐ์ฑ ํ๋กํ ์ฝ ๋ต๊ฒ, ๋ฐฐ๋ฌ ํ๊ธฐ์ ์ ๋ชฉ์ ์ง๊ฐ ๋ฌด์ฌํ์ง ๋ฏธ๋ฆฌ ํ์ธํ๊ณ ๋ฐฐ๋ฌ ๋๋๊ณ ๋ ๋ ํ์ธ๋ ํด์ฃผ๋ ๊ต์ฅํ ์น์ ํ ํ๋กํ ์ฝ์ด๋ค. ํต์ ์ ์์ํ ๋์ ์ข ๋ฃํ ๋ ์๋ก ์ค๋น๊ฐ ๋์ด์๋์ง๋ฅผ ๋ฐ๋์ ๋ฏธ๋ฆฌ ๋จผ์ ๋ฌผ์ด๋ณด๊ณ ํจํท์ ์ ์กํ ์์๋ฅผ ์ ํ๊ณ ๋์์ผ ๋ณธ๊ฒฉ์ ์ธ ํต์ ์ ์์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌํ ๊ณผ์ ์ด ์ฐ๋ฆฌ๊ฐ ์ง๊ฒน๋๋ก ๋ค์ 3 Way Handshake ์ 4 Way Handshake ๊ณผ์ ์ด๋ค.
๋๋ค ๋๊ฐ์ ํธ๋์์ดํฌ(Handshake)์ง๋ง, 3 Way๋ ํต์ ์ ์์ํ ๋, 4 Way๋ ํต์ ์ ๋ง์น ๋ ๊ฑฐ์น๋ ๊ณผ์ ์ด๋ผ๋ ์ฐจ์ด๋ง ์์ ๋ฟ์ด๋ค.
ํ๋ง๋๋ก ํ๋ฒ ํต์ ํ๋๋ฐ Handshake๋ฅผ ๋๋ฒ ํด์ ์ ๋ขฐ๊ฐ ๋ํ ๋ค ๋ชปํด ๊ณผํ๊ฒ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ฒ์ ์๋ฒ์ ํต์ ์ ํ๊ธฐ ์ํด TCP ์ฐ๊ฒฐ์ ์์ฑํ ๋ SYN์ ACK์ด๋ผ๋ ํจํท์ ์ฃผ๊ณ ๋ฐ๊ณ , ํต์ ์ ์ข ๋ฃํ๋ ๊ณผ์ ์์ FIN์ด๋ผ๋ ํจํท์ ์ฃผ๊ณ ๋ฐ๊ณ ์๋ ๊ฑธ ํ์ธ ํ ์ ์๋ค.
๋จ์ด๊ฐ ์์ํ๋ค๊ณ ํด์ ์ด๋ ต๊ฒ ์๊ฐํ์ง๋ง๊ณ ๊ทธ๋ฅ ๋ด๊ฐ ๋ ํํ ์ ์กํ์๋ค๋ ์ธ์ฆ ๋์ฅ ์ ๋๋ก ์๊ฐํ๋ฉด ๋๋ค.
์ฆ, ํจํท ๋ด๋ถ์ ๋ค์ด์๋ ์ธ์ฆ ํ๋๊ทธ ๊ฐ๋ค์ ํ์ธํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ๋ณด๋ธ ํจํท์ ์์์ ํจํท์ ์ ๋๋ก ๋ฐ์๋ ์ง๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ์ด๋ค.
๐ฉ Flag ์ข ๋ฅ
FLAG | ์ค๋ช |
SYN | ์ ์์์ฒญ์ ํ ๋ ๋ณด๋ด๋ ํจํท์ ๋งํ๋ค. TCP์ ์์์ ๊ฐ์ฅ๋จผ์ ๋ณด๋ด๋ ํจํท์ด๋ค. |
ACK | ์๋๋ฐฉ์ผ๋ก๋ถํฐ ํจํท์ ๋ฐ์ ๋ค์, ์ ๋ฐ์๋ค๊ณ ์๋ ค์ฃผ๋ ํจํท์ ๋งํ๋ค. ๋ค๋ฅธ ํ๋๊ทธ์ ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ๋ ์๋ค. |
PSH | ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๋ชฉ์ ์ง๋ก ๋ณด๋ด๋ผ๋ ์๋ฏธ์ด๋ค. |
FIN | ์ ์์ข
๋ฃ๋ฅผ ์ํ ํ๋๊ทธ ์ด ํจํท์ ๋ณด๋ด๋ ๊ณณ์ด ํ์ฌ ์ ์ํ๊ณ ์๋ ๊ณณ๊ณผ ์ ์์ ๋๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค. |
๐ค 3-way handshake ๊ณผ์
- ํด๋ผ์ด์ธํธ๋ ์ ์์ ์์ฒญํ๋ SYN ํจํท์ ๋ณด๋ธ๋ค.
์ด๋ ํด๋ผ์ด์ธํธ๋ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๊ธฐ์ํด SYN_SENT ์ํ๋ก ๋ณํ๋ค. - LISTEN ์ํ์๋ ์๋ฒ๋ SYN ์์ฒญ์ ๋ฐ์ผ๋ฉด, ํด๋ผ์ด์ธํธ์๊ฒ ์์ฒญ์ ์๋ฝํ๋ ACK ํจํท๊ณผ SYN ํจํท์ ๋ณด๋ธ๋ค. (์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ ์ํด์ผ ์๋ฐฉํฅ ํต์ ์ด ๋๊ธฐ ๋๋ฌธ์)
๊ทธ๋ฆฌ๊ณ SYN_RCVD(SYN_RECEIVED)์ํ๋ก ๋ณํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ACK ํจํท์ ๋ณด๋ผ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. - ํด๋ผ์ด์ธํธ๋ ๋ค์ ์๋ฒ์ ACK ํจํท์ ๋ณด๋ด๊ณ , ์ด ํ ESTABLISHED ์ํ๊ฐ ๋์ด ๋ฐ์ดํฐ ํต์ ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
โ๏ธ ๋ฐ์ดํฐ ํต์ ๊ณผ์
- Established ๋ ์ํ์์ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ ์ ์ ์ก๋ฐ์๋ค๊ณ ACK ํ๋๊ทธ๋ฅผ ๋ฃ์ด ์๋ตํ๋ค.
- ๋ง์ฝ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก๋ถํฐ ACK๋ฅผ ๋ชป๋ฐ์์ผ๋ฉด ์ ๋๋ก ์ก์ ํ์ง ๋ชปํ๊ฑธ๋ก ํ๋จํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ก์ ํ๋ค.
๐ค 4-way handshake ๊ณผ์
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ TCP ์ฐ๊ฒฐ์ด ๋์ด์๋ ์ํ์์ ํด๋ผ์ด์ธํธ๊ฐ ์ ์์ ๋๊ธฐ ์ํด CLOSE() ํจ์๋ฅผ ํธ์ถํ๋ค.
๊ทธ๋ฌ๋ฉด FIN ํ๋๊ทธ๋ฅผ ๋ณด๋ด๊ฒ ๋๊ณ ํด๋ผ์ด์ธํธ๋ FIN_WAIT1 ์ํ๋ก ๋ณํ๋ค. - ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ CLOSE() ํ๋ค๋ ๊ฒ์ ์๊ฒ๋๊ณ CLOSE_WAIT ์ํ๋ก ๋ฐ๊พผ ํ ACK ํ๋๊ทธ๋ฅผ ์ ์กํ๋ค.
๋ง์ผ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ผ ๋จ์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ์ด๋ ๋๋จธ์ง๋ฅผ ๋ชจ๋ ์ ์ก์ํจ๋ค. - ACK๋ฅผ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ FIN_WAIT2๋ก ๋ณํ๋๊ณ , ์ด๋ ์๋ฒ๋ CLOSE() ํจ์๋ฅผ ํธ์ถํ๊ณ FIN ํ๋๊ทธ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ ์ฐ๊ฒฐ์ ๋ซ์๋ค๋ ์ ํธ๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์์ ํ๋ฉด ACK ํ๋๊ทธ๋ฅผ ๋ณด๋ธ ํ TIME_WAIT ์ํ๋ก ์ ํ๋๋ค.
์ด ํ ๋ชจ๋ ๊ฒ์ด ๋๋๋ฉด CLOSED ์ํ๋ก ๋ณํ๋๋ค.
๐ TCP ํต์ ๊ณผ์ ์๊ฐ์ ์ผ๋ก ๋ณด๊ธฐ
๋ฐฑ๋ ๊ทธ๋ฆผ์ผ๋ก ๋ด๋ ์ค์ ํต์ ๊ณผ์ ์ ์ง์ ๊ฒฝํํ์ง ์์ผ๋ฉด ์๊ฐ์ด ์ง๋๋ฉด ๊ธ์ธ ๊น๋จน๊ฒ ๋๋ค. ์ต๊ณ ์ ๊ธฐ์ต์ ์ง์ ๊ณ ์ํด์ ๊ฒฝํํ๋ ๋ฒ์ด๋ค.
TCP ํธ๋์์ดํฌ ๊ณผ์ ์ ์ดํด๋ณด๊ธฐ ์ํด ์ฐ๋ฆฌ๋ Linux์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ํ์ธํ ์์ ์ด๋ค. ๋ฌผ๋ก ์์ด์ด์คํฌ(WireShark)๋ผ๋ ํ๋ฅญํ ๋ฌด๋ฃ ์ํํธ์จ์ด๊ฐ ์์ง๋ง, ๋ฉ๋ด๋ ๋ณต์กํ๊ณ ์ํ๋ ํจํท์ ํํฐ๋งํ๊ธฐ๋ ํ๋ค๊ธฐ ๋๋ฌธ์ ์ ๋ฌธ์ด ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ์ค ํฐ๋ฏธ๋์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ํํ๋ค.
๐ง ๋ฆฌ๋ ์ค tcpdump ๋ช ๋ น์ด
tcpdump๋ Linux ํ๊ฒฝ์์ Client์ Server๊ฐ ์ฃผ๊ณ ๋ฐ๋ ๋คํธ์ํฌ ํจํท์ TCP Layer์์ ์บก์ณํ์ฌ ๋ฉ์ธ์ง๋ฅผ ํ์ธํ ์ ์๋ ๋ช ๋ น์ด์ด๋ค. UDP๋ ํ์ธ ๊ฐ๋ฅํ๋ค.
๋จผ์ tcpdump ๋ช
๋ น์ด๋ฅผ ๋ฆฌ๋
์ค์ ์ค์นํด์ค๋ค.
# ์ฐ๋ถํฌ ์ค์น
$ apt install tcpdump
# CentOS ์ค์น
$ yum install tcpdump
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
# ์ธํฐ๋ท ํต์ ์ ํ๋ ๋ชจ๋ ํ๋กํ ์ฝ์ ๊ฐ์ง
$ tcpdump -i any -nn port 80
๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์์ ๊ฐ์ด ์ธํฐ๋ท ํต์ ์ ๊ฐ์งํ๋ ์ํ๊ฐ ๋๋ค.
์ด๋ฒ์๋ ์๋ก์ด ํฐ๋ฏธ๋์ ํ๋ ๋ ๋ง๋ค๊ณ , ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌ๋
์ค์ netcat(nc) ๋ช
๋ น์ด๋ก ๋ฐ์ดํฐ ํต์ ์ ํํ๋ค.
# "Hello World" ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ TCP๋ก naver.com ์ 80๋ฒ ํฌํธ๋ก ์ ์ก
$ echo "Hello World" | nc naver.com 80
์๋ก์ด ํฐ๋ฏธ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ฒ๋๋ฉด, ๊ธฐ์กด tcpdump ๋ช ๋ น์ด๋ฅผ ์คํํ Listen ์ํ์๋ ํฐ๋ฏธ๋์์ ํต์ ์ ๋ฐ์ ๋ก๊ทธ๋ฅผ ๋์ฐ๊ฒ ๋๋ค.
๋จผ์ 10.0.2.15:57744์ ํด๋ผ์ด์ธํธ ์์ดํผ ์ด๊ณ , 223.130.200.104:80๋ ์๋ฒ ์์ดํผ ์ด๋ค.
๊ฐ ๋ผ์ธ์ ์ฒซ๋ฒ์งธ ํ๋๋ ๋ณด๋ธ ๋ > ๋ฐ์ ๋์ ์๋ฏธํ๊ณ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์์ Flags [S] ๋ผ๋ ๊ฒ์ด ๋ถ์ด์๋๋ฐ, ๋๊ดํธ ์์ ๋๋ฌธ์๋ ์์์ ์ดํด๋ณธ ํ๋๊ทธ๋ฅผ ์๋ฏธํ๋ค.
Flag | ์ด๋ฆ |
S | SYN |
S. | SYN-ACK |
. | ACK |
P | PSH |
F | FIN |
์ง๊ธ ์์ ์ํ๋ ํ๋์ TCP ์ฐ๊ฒฐ ๋ฐ ๋ฐ์ดํฐ ์ ์ก๊ณผ ์ข ๋ฃ ์ ์ฒด์ ํต์ ๊ณผ์ ์ ํํ ์ํ์ด๋ค.
์ด์ ๊ฐ๊ฐ ๋ช ๋ น์ด ๋ก๊ทธ ์ด๋ ๋ถ๋ถ์ด ์ด๋ ํธ๋์์ดํฌ์ธ์ง ์ดํด๋ณด์.
๐ค 3-way handshake ๊ณผ์
- ํด๋ผ์ด์ธํธ(10.0.2.15) → ์๋ฒ(223.130.200.104) : SYN
- ์๋ฒ(223.130.200.104) → ํด๋ผ์ด์ธํธ(10.0.2.15) : SYN ACK
- ํด๋ผ์ด์ธํธ(10.0.2.15) → ์๋ฒ(223.130.200.104) : ACK
seq ๋ฒํธ๋ ์์ ๋ฒํธ๋ก์ ํจํท์ ์ ๋ฌ ์์๋ฅผ ์๋ณํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ด๋ค.
์ด์์ฒด์ ์ ์ํด์ ๋๋คํ๊ฒ ์์ฑ๋์ SYN ํจํท์ ๋ด๊ฒจ ๋ณด๋ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋ฐ์ ์๋ฒ์๋ ๋๊ธฐํ์ ๋ํ ๋ต์ ์ผ๋ก seq ๋ฒํธ๋ฅผ +1 ์ฆ๊ฐ์ํค๊ณ ack์ ๋ด์ ์๋ตํ๋ค.
โ๏ธ ๋ฐ์ดํฐ ํต์ ๊ณผ์
- ํด๋ผ์ด์ธํธ(10.0.2.15) → ์๋ฒ(223.130.200.104) : PSH ACK
- ์๋ฒ(223.130.200.104) → ํด๋ผ์ด์ธํธ(10.0.2.15) : ACK
๐ค 4-way handshake ๊ณผ์
๊ทธ๋ฆผ์์์๋ ํด๋ผ์ด์ธํธ๊ฐ ๋จผ์ ์ข ๋ฃ ์ ํธ๋ฅผ ๋ณด๋์ง๋ง, ๋ฆฌ๋ ์ค ์์์๋ ์๋ฒ๊ฐ ๋จผ์ ์ข ๋ฃ ์ ํธ๋ฅผ ๋ณด๋ธ ๊ฑฐ๊พธ๋ก๋ ์ํฉ์ด๋ค. ๊ทธ๋์ ์ฒ์์ FIN ACK๊ฐ ๊ฐ์ด ์๋ตํด์๊ณ , ๋ํ ACK์ FIN์ ๋ณด๋ด๋ ๊ณผ์ ์ด ํ๋๋ก ํฉ์ณ์ก๋ค.
- ์๋ฒ(223.130.200.104) → ํด๋ผ์ด์ธํธ(10.0.2.15) : FIN ACK
- ํด๋ผ์ด์ธํธ(10.0.2.15) → ์๋ฒ(223.130.200.104) : FIN ACK
- ์๋ฒ(223.130.200.104) → ํด๋ผ์ด์ธํธ(10.0.2.15) : ACK
๐น๏ธ TCP์ ์ ์ก ์ ์ด ๊ธฐ๋ฒ
TCP(Transmission Control Protocol)๋ ๋จ์ด ๊ทธ๋๋ก ์ํํ ํต์ ์ ์ํด ์ ์ก ํ๋ฆ์ ์ ์ดํ๋ ๊ธฐ๋ฅ์ ํ๋กํ ์ฝ ์์ฒด์ ํฌํจํ๊ณ ์๋ค. ๋ง์ฝ TCP๊ฐ ์์๋๋ผ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ผ์ผํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ๋จ์๋ก ๋ณด๋ผ ๊ฒ์ธ์ง ์ ์ํด์ผํ๊ณ , ํจํท์ด ์ ์ค๋๋ฉด ์ด๋ค ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ ์ง๊น์ง ์ ๊ฒฝ์จ์ผํ๊ธฐ ๋๋ฌธ์, ๋๋ถ์ ์ฐ๋ฆฌ๋ ์จ์ ํ ์์์ ๋์์๋ง ์ง์คํ ์ ์๋ ๊ฒ์ด๋ค.
๋ณดํต TCP์ ์ ์ก ์ ์ด ๋ฐฉ๋ฒ์ ๋ค์ 3๊ฐ์ง๋ก ์ ๋ฆฌ ๋๋ค.
์ด TCP ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ต์ฅํ ์๋ ๋ง๊ณ ๋๋๋ ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์๊ฐ์ด ์์๋ ํ๋ณด๊ธธ ๊ถํ๋ฉฐ, ๊ฐ๋ ์ ์ก๋ ์ง๊ธ์ TCP๋ ์ด๋ฌํ ์์ธ์ ์ธ ์ํฉ์ ๋ํด์ ์ ์์์ ๋์ฒํ๋ค ์ ๋๋ก ์๊ณ ๋์ด๊ฐ๋๋ก ํ์.
๐ต ํ๋ฆ ์ ์ด(Flow Control)
- ์์ ์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ ์๋๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ก์ ์ธก์ ์์ ์ธก์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ํ์ ํ๊ณ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์ด๋ ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ง ์ ์ด
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window) ๋ฐฉ์์ ์ฌ์ฉ
- Window ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ณต๊ฐ์ ๋์ ์ผ๋ก ์กฐ์ ํ์ฌ ๋ฐ์ดํฐ๋์ ์กฐ์
๐ต ์ค๋ฅ ์ ์ด(Error Control)
- ํต์ ๋์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋๊ฑฐ๋ ์๋ชป๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋์์ ๊ฒฝ์ฐ ๋์ฒ
- Go Bank N ๊ธฐ๋ฒ๊ณผ Selective Repeat(์ ํ์ ์ธ ์ฌ์ ์ก) ๊ธฐ๋ฒ์ ์ฌ์ฉ
- Go Bank N ๊ธฐ๋ฒ : ์ด๋ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ํ์ ํ์ฌ, ๊ทธ ๋ถ๋ถ๋ง ๋ค์ ์์๋๋ก ๋ณด๋ด ์ ์ดํ๋ค.
- Selective Repeat ๊ธฐ๋ฒ : ์๋ฌ๋ ๋ฐ์ดํฐ๋ง ์ฌ์ ์กํ๊ณ ๊ทธ์ ์ ๋ฐ์๋ ์์๊ฐ ์๋ชป๋ ๋ฐ์ดํฐ ๋ฒํผ๋ฅผ ์ฌ์ ๋ ฌํ์ฌ ์ ์ดํ๋ค.
๐ต ํผ์ก ์ ์ด(Congestion Control)
- ๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ์ฌ ๋ฐ์ดํฐ๊ฐ ์ํํ ํต์ ์ด ์๋๋ฉด ์ ์ด๋ฅผ ํตํด ์ฌ์ ์ก์ ํ๊ฒ ๋๋๋ฐ, ์ฌ์ ์ก ์์ ์ด ๋ฐ๋ณต๋๋ฉด ๋คํธ์ํฌ๊ฐ ๋ถ๊ดด๋ ์๋ ์๋ค. ๋ฐ๋ผ์ ๋คํธ์ํฌ ํผ์ก ์ํ๊ฐ ๊ฐ์ง๋๋ฉด ์ก์ ์ธก์ ์ ์ก ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ฌ ์ ์ก๋์ ์กฐ์ ํ๋ค.
- TCP์๋ Tahoe, Reno, New Reno, Cubic, Elastic-TCP ..๋ฑ ๋ค์ํ ํผ์ก ์ ์ด ๊ธฐ๋ฒ์ด ์กด์ฌํ๋ค.
UDP - ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ทธ๋จ ํ๋กํ ์ฝ
๋ณดํต UDP ์ TCP๋ฅผ ๋น๊ตํ๋๋ฐ ์์ด ์๋์ ๊ฐ์ ํ๋ฅผ ๋ง์ด ์ธ์ฉํด์์ ๊ฒ์ด๋ค.
ํ๋ฅผ ๋ณด๋ฉด ๋๋ต TCP๋ ์ ๋ขฐ์ฑ์ด ๋๊ณ ๋๋ฆฌ๋ค ์ UDP๋ ์ ๋ขฐ์ฑ์ด ๋ฎ๊ณ ๋น ๋ฅด๋ค ์ ๋๋ก ์ ๋ฆฌ๊ฐ ๋๋ค.
TCP | UDP | |
์ฐ๊ฒฐ ๋ฐฉ์ | ์ฐ๊ฒฐํ ์๋น์ค | ๋น์ฐ๊ฒฐํ ์๋น์ค |
ํจํท ๊ตํ | ๊ฐ์ ํ์ ๋ฐฉ์ | ๋ฐ์ดํฐ๊ทธ๋จ ๋ฐฉ์ |
์ ์ก ์์ ๋ณด์ฅ | ๋ณด์ฅํจ | ๋ณด์ฅํ์ง ์์ |
์ ๋ขฐ์ฑ | ๋์ | ๋ฎ์ |
์ ์ก ์๋ | ๋๋ฆผ | ๋น ๋ฆ |
์๋ฌด๋๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ์ ๋ขฐ์ฑ์๋ ํต์ ์ ํ ์ ์๋๋ก TCP๋ ํธ๋์์ดํฌ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋๋ฐ, ์์์ ์ดํด๋ณธ๊ฒ ์ฒ๋ผ ๋ฐ์ดํฐ ํ๋๋ฅผ ์ ์กํ๊ธฐ ์ํ ๋ฐ์์ ๋ค์ด ๋ง์์๋ค.
๊ทธ๋ ์ง๋ง ์ธํฐ๋ท ๊ธฐ์ ์ด ๋ฐ์ ํ๋ฉด์ ์ ์กํด์ผํ๋ ๋ฐ์ดํฐ๋ ๋จ์ ํ ์คํธ๋ฅผ ๋์ด์ ๋์์์ด๋ ์์ ๊ณผ ๊ฐ์ ๋ฉํฐ๋ฏธ๋์ด๋ ์ ์กํ๋ฉด์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ ์ ์ปค์ ธ๊ฐ๋ฉฐ ๋์์ ๋น ๋ฅธ ํต์ ์ด ํ์ํด ์ก๋ค. ๊ทธ๋์ HTTP 2.0 ์์๋ ํ๋ฒ ์ฐ๊ฒฐ๋ TCP ํ์ ์ ๊ธธ๊ฒ ์ ์งํ๊ณ ๋ฐ์ดํฐ๋ ์คํธ๋ฆผ์ด๋ผ๋ ํน์ํ ํํ๋ก ๋ณด๋ด๋ ์์ผ๋ก ๊ทน๋ณต์ ํ์ง๋ง, TCP ์์ฒด๊ฐ ๊ฐ์ง๋ ๊ทผ๋ณธ์ ์ธ ํน์ง๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ ํ๊ณ๊ฐ ์์๋ค. (์ฆ, ๋๋ฌด ํค๋นํด์ ๋์ด์ ์๋๋ฅผ ๋ฝ์ ๋ผ์๊ฐ ์์)
๋ฐ๋ฉด, UDP(User Datagram Protocol)๋ ๋จ์ด์์๋ ์ ์ ์๋ฏ์ด ๋ฐ์ดํฐ๊ทธ๋จ ๋ฐฉ์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ด๊ธฐ ๋๋ฌธ์ ์ ์ด์ ๊ฐ๊ฐ์ ํจํท ๊ฐ์ ์์๊ฐ ์กด์ฌํ์ง ์๋ ๋ ๋ฆฝ์ ์ธ ํจํท์ ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ๊ทธ๋จ ๋ฐฉ์์ ํจํท์ ๋ชฉ์ ์ง๋ง ์ ํด์ ธ์๋ค๋ฉด ์ค๊ฐ ๊ฒฝ๋ก๋ ์ด๋ ํ๋ ์ ๊ฒฝ์ฐ์ง ์๊ธฐ ๋๋ฌธ์ ํธ๋์์ดํฌ ๊ณผ์ ๊ฐ์ ์ฐ๊ฒฐ ์ค์ ์ด ํ์ ์๊ฒ ๋๋ค. ์ฆ, UDP๋ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ๊ฑฐ์น๋ TCP์ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋ ๋น ๋ฅผ ์ ๋ฐ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ UDP๋ ์ค์๊ฐ ์์ ์คํธ๋ฆฌ๋ฐ๊ณผ ๊ฐ์ ๊ณ ์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ณณ์ ์ด์ฉ๋๋ค.
๐ UDP ํต์ ๊ณผ์ ์๊ฐ์ ์ผ๋ก ๋ณด๊ธฐ
UDP๊ฐ ์ TCP ๋ณด๋ค ๋น ๋ฅธ์ง๋ ๋ฆฌ๋ ์ค ๋ช ๋ น์ด๋ฅผ ํตํด์๋ ํ๋์ ์ดํดํ ์ ์๋ค.
๊ธฐ์กด netcat ๋ช
๋ น์ด์ -u ์ต์
์ ์ฃผ๊ฒ ๋๋ฉด UDP๋ก ๋ฐ์ดํฐ๋ฅผ ์ก์ ํ๊ฒ ๋๋๋ฐ, ์์ ์ธก ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ์ง์ง ๋ธ๋ ํ์ค์ด ๋์ด๋ค. ์๋ฐ์๋ค๋ ์๋ต ํจํท ์์ด ๋ฌด์ง์ฑ์ผ๋ก ๋ณด๋ด๊ธฐ๋ง ํ๋ ๊ฒ์ด๋ค.
# "Hello World" ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ -u ์ต์
(UDP๋ก) naver.com ์ 80๋ฒ ํฌํธ๋ก ์ ์ก
$ echo "Hello World" | nc -u naver.com 80
๐ TCP ํค๋์ UDP ํค๋ ํฌ๊ธฐ ์ฐจ์ด
TCP๊ฐ ์ ๋ขฐ์ฑ์๋ ์ฐ๊ฒฐ๊ณผ ํผ์ก ์ ์ด ๋ฑ์ ์ํด ์ผ๋ง๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ ์ง๋ TCP์ UDP์ ํค๋๋ฅผ ๋น๊ต ํด๋ณด๋ฉด ๋๊ฐ์ด ๋์จ๋ค.
๐ TCP ํค๋ ๊ตฌ์ฑ
TCP์ ๊ฒฝ์ฐ ์๋ ์ค๋ ์ ์ ์ค๊ณ๋๊ธฐ๋ ํ๊ณ , ์ด๋ฐ ์ ๋ฐ ๊ธฐ๋ฅ์ด ์๋ ๋ง์ด ํฌํจ๋ ํ๋กํ ์ฝ์ด๋ค๋ณด๋ ์ด๋ฏธ ํค๋๊ฐ ๊ฑฐ์ ํ๋ฐฉ์ด๋ค.
- Source Port : ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ํฌํธ๋ฒํธ
- Destination Port : ๋ชฉ์ ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ๋ ํฌํธ ๋ฒํธ
- Sequence Number ํ๋ : ์ธ๊ทธ๋จผํธ ์์๋ฅผ ๋ง์ถ๊ธฐ ์ํ ํ๋
- Acknowledgement Number ํ๋ : ๋ค์ ์ธ๊ทธ๋จผํธ ์์ ์ค๋น ๋ฐ ๋ชจ๋ ๋ฐ์ดํฐ ์์ ํ์ธ ์ญํ
- Data Offset ํ๋ : TCP ํค๋์ ํฌ๊ธฐ ( 5~15 : 5*32<160bit> ~ 15*32<480bit> )
- Reserved ํ๋ : ์ฐจํ์ ์ฌ์ฉ์ ์ํ ์์ฝ๋ ํ๋
- Control Flags (SYN, ACK, FIN ...๋ฑ) : ๊ธด๊ธ, ํผ์ก, ํ์ธ, ์์ ๊ฑฐ๋ถ ๋ฑ์ ๊ธฐ๋ฅ
- Window size ํ๋ : ์์ ์๊ฐ ํ๋ฒ์ ๋ฐ์ ์ ์๋ ๋ฐ์ดํฐ์ ์. ์ก์ ์๋ Window size๋งํผ ACK๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ก. ACK๊ฐ ๊ณ์ ์๋ค๊ฐ๋ค ํ์ง ์์๋ ๋๋ค
- Checksum : ์ธ๊ทธ๋จผํธ ๋ด์ฉ์ ์ ํจ์ฑ๊ณผ ์์ ์ฌ๋ถ ๊ฒ์ฌ
๐ UDP ํค๋ ๊ตฌ์ฑ
๋ฐ๋ฉด UDP๋ ๋ฐ์ดํฐ ์ ์ก ์์ฒด์๋ง ์ด์ ์ ๋ง์ถ๊ณ ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ํค๋์ ๋ค์ด์๋๊ฒ ์๋ค. (๊ทธ๋์ ํ์ ๋ํ์ง ๊ฐ๋ค๋ ๋น์ ๊ฐ ์๊ธด ๊ฒ์ด๋ค)
UDP์ ํค๋์๋ ์ถ๋ฐ์ง์ ๋์ฐฉ์ง, ํจํท์ ๊ธธ์ด, ์ฒดํฌ์ฌ ๋ฐ์ ์๋ค.
- Source Port : ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ํฌํธ๋ฒํธ
- Destination Port : ๋ชฉ์ ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ๋ ํฌํธ ๋ฒํธ
- checksum : ์ค๋ณต ๊ฒ์ฌ์ ํ ํํ๋ก, ์ค๋ฅ ์ ์ ์ ํตํด ๊ณต๊ฐ(์ ์ ํต์ )์ด๋ ์๊ฐ(๊ธฐ์ต ์ฅ์น) ์์์ ์ก์ ๋ ์๋ฃ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํ๋ ๋จ์ํ ๋ฐฉ๋ฒ. (TCP์ ์ฒดํฌ์ฌ๊ณผ๋ ๋ค๋ฅด๊ฒ UDP์ ์ฒดํฌ์ฌ์ ์ฌ์ฉํด๋ ๋๊ณ ์ํด๋ ๋๋ ์ต์ )
TCP๋ฅผ ๋ฒ๋ฆฌ๊ณ UDP๋ฅผ ์ ํํ HTTP 3.0
ํ๋ถ์์๋ ์๋ฌด๋๋ TCP๋ ์ธํฐ๋ท ํต์ ์์ ํ์์ ์ผ๋ก ์ฐ์ด๋ ๋ ์์ด๋ผ ์์ธํ ๋ฐฐ์ฐ๊ณ , UDP๋ ๋น ๋ฅด๋ค ์ ๋๋ก ๊ฐ๋จํ ๋ฐฐ์ฐ๊ณ ํ ๋์ด๊ฐ๋ฒ๋ฆฌ๋ ๋ชจ์์ธ๋ฐ, ์ด์ ๋ ๊ทธ๋ด์๊ฐ ์๋ค. ์์ ์ ๋ชฉ์์์ ๊ฐ์ด HTTP/3 ์์๋ TCP๋ฅผ ๋ฒ๋ฆฌ๊ณ UDP๋ฅผ ์ฑํํ๊ธฐ ๋๋ฌธ์ด๋ค.
2022๋ 11์ 15์ผ ํ๊ตญ ์ต์ด๋ก ๋ค์ด๋ฒ๋ HTTP/3์ ๋์ ํ์๋ค๊ณ ํ๋ค.
๐ฌ TCP๋ ๊ตฌ์กฐ์ ํ๊ณ๋ก ๊ฐ์ ํด๋ ์ฌ์ ํ ๋๋ฆฌ๋ค
์ฌ์ค TCP๋ ์ธ๋ฅ๊ฐ ์ง๊ธ๊ณผ ๊ฐ์ด ์์ฒญ๋ ์๋๋ก ๋ฐ์ ํ ๊ฒ์ด๋ผ๊ณค ์์ ํ ์ ์๋ ์๊ธฐ์ ๋ง๋ค์ด์ก๋ค. TCP๊ฐ ๋ง๋ค์ด์ง๋ ์์ ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋์ ๋ค๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ ํ์ผ์ ๋ฐ์ดํฐ ํจํท์ ๊ตํํ ๊ฒ์ด๋ผ๊ณ ์์ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๊ฐ์ด ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ฐ๊พธ์ด๊ฐ๋ฉด์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ํตํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ๋ชปํ๋ค. ๊ทธ ๋๋ฌธ์ ์์ดํ์ด๋ฅผ ๋ฐ๊พธ๋ฉด ๋ค์ ์๋ก์ด ์ปค๋ฅ์ ์ ๋งบ์ด์ผ ๋์ ๋๊น ํ์์ด ์ผ์ด๋๋ ๊ฒ์ด๋ค.
๋ํ TCP๋ฅผ ์ฌ์ฉํ ํต์ ์์ ํจํท์ ์ ๋ขฐ์ฑ์ ์ํด ๋ฌด์กฐ๊ฑด ์์๋๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค. ๋ํ ํจํท์ด ์ฒ๋ฆฌ๋๋ ์์ ๋ํ ์ ํด์ ธ์์ผ๋ฏ๋ก ์ด์ ์ ๋ฐ์ ํจํท์ ํ์ฑํ๊ธฐ ์ ๊น์ง๋ ๋ค์ ํจํท์ ์ฒ๋ฆฌํ ์๋ ์๋ค. ๋ง์ผ ์ค๊ฐ์ ํจํท์ด ์์ค๋์ด ์์ ์ธก์ด ํจํท์ ์ ๋๋ก ๋ฐ์ง ๋ชปํ์ผ๋ฉด ๋ค์ ๋ณด๋ด์ผ ํ๋ค.
์ด๋ ๊ฒ ํจํท์ด ์ค๊ฐ์ ์ ์ค๋๊ฑฐ๋ ์์ ์ธก์ ํจํท ํ์ฑ ์๋๊ฐ ๋๋ฆฌ๋ค๋ฉด ํต์ ์ ๋ณ๋ชฉ์ด ๋ฐ์ํ๊ฒ ๋๋๋ฐ, ์ด๋ฌํ ํ์์HOLB(Head of line Blocking)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด HOLB๋ TCP ์ค๊ณ๋์ ์ด์ฉ์ ์์ด ๋ฐ์ํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ HTTP/1.1 ๋ฟ๋ง ์๋๋ผ HTTP/2๋ ๊ฐ์ง๊ณ ์๋ ์์ฃผ ๊ณ ์ง์ ์ธ ๋ฌธ์ ์๋ค.
๋ฐ๋ผ์ ์ด๋ฐ ๊ณ ์ง์ ์ธ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด HTTP/3๋ TCP๋ฅผ ๋ฒ๋ฆฌ๊ณ UDP๋ฅผ ์ ํํ์๋ค.
๐ฌ UDP๋ ์ ๋ขฐ์ฑ์ด ์๋๊ฒ ์๋๋ผ ํ์ฌ๋ฅผ ์ํ์ ๋ฟ์ด๋ค
์์ ์ ๋ขฐ์ฑ ๋์ ์๋๋ฅผ ํํ UDP๋ ์คํธ๋ฆฌ๋ฐ๊ณผ ๊ฐ์ ์๋น์ค์์ ์ฌ์ฉ๋๋ค๊ณ ์๊ฐํ ๋ฐ๊ฐ ์๋ค. ๋ฐฉ์ก์ด๋ ๋์์์ ์ค๊ฐ์ ๋๊ธธ์ง์ธ์ ๋ฐ๋ก๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ก์ถํ๋๊ฒ์ด ๋ ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐ๋ท์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ ํํ ํจํท ํต์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ ๋ขฐ์ฑ์ด ๋ณด์ฅ๋ฐ์์ผ ํ๋ค. ์ HTTP๊ฐ TCP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋์ง ๊ทธ ์ด์ ์ด๋ค.
๋ง์ด๋ค ์ฐฉ๊ฐํ๋ ๊ฒ์ด ๋น ๋ฅธ๊ฑด ์๊ฒ ๋๋ฐ UDP๋ ์ ๋ขฐ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ฑ์ด ์ ๋ค๊ณ ์ดํดํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ ๋ช ํํ์ง ์๋ค.
UDP๋ ์ ๋ขฐ์ฑ์ด ์๋๊ฒ ์๋๋ผ ํ์ฌ๋ฅผ ์ํ์ ๋ฟ์ด๋ค. UDP์ ์ง์ง ์ฅ์ ์ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.
์ฆ, UDP ์์ฒด๋ ํค๋์ ๋ค์๊ฒ ์์ด ์ ๋ขฐ์ฑ์ด ๋ฎ๊ณ ์ ์ด ๊ธฐ๋ฅ๋ ์์ง๋ง, ์ดํ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ตฌํ์ ์ด๋ป๊ฒ ํ๋์ ๋ฐ๋ผ์ TCP์ ๋น์ทํ ์์ค์ ๊ธฐ๋ฅ์ ๊ฐ์ง ์๋ ์๋ค๋ ๋ง์ด๋ค.
๐ฌ UDP๋ฅผ ๊ฐ์กฐํ QUIC ํ๋กํ ์ฝ
QUIC(Quick UDP Internet Connections)๋ UDP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก TCP + TLS + HTTP ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ตฌํํ๋ ํ๋กํ ์ฝ์ด๋ค. ๋ฐ๋ผ์ HTTP 3.0์ด UDP๋ฅผ ์ด์ฉํ์๋ค๋ผ๋ ๋ง์ ์ ํํ ๋งํ๋ฉด UDP ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง QUIC ํ๋กํ ์ฝ์ ์ฑํํ์๋ค๋ผ๋ ๋ป์ด๋ค.
QUIC์ TCP๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ํต์ ์ ์์ํ ๋ ๋ฒ๊ฑฐ๋ก์ด 3 Way Handshake ๊ณผ์ ์ ๊ฑฐ์น์ง ์์๋ ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ํ ๋ค์ ํด๋ผ์ด์ธํธ๋ก ์๋ตํด์ฃผ๋ ์ฌ์ดํด์ RTT(Round Trip Time)์ด๋ผ๊ณ ํ๋๋ฐ, TCP๋ ์ฐ๊ฒฐ์ ์์ฑํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก 1 RTT๊ฐ ํ์ํ๊ณ , ์ฌ๊ธฐ์ TLS๋ฅผ ์ฌ์ฉํ ์ํธํ๊น์ง ํ๋ ค๊ณ ํ๋ค๋ฉด TLS์ ์์ฒด ํธ๋์์ดํฌ๊น์ง ๋ํด์ ธ ์ด 3 RTT๊ฐ ํ์ํ๋ค.
๋ฐ๋ฉด QUIC์ ์ฒซ ์ฐ๊ฒฐ ์ค์ ์ 1 RTT๋ง ์์๋๋ค.
TCP ํธ๋์์ดํฌ ๊ณผ์ ์ ๊ฑฐ์น์ง ์์ผ๋ฉฐ TLS ์์ฒด๋ฅผ ๋ดํฌํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์ฐ๊ฒฐ ์ค์ ์ ํ์ํ ์ ๋ณด์ ํจ๊ป ๋ฐ์ดํฐ๋ ๋ณด๋ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฒ ์ฐ๊ฒฐ์ ์ฑ๊ณตํ๋ค๋ฉด ์๋ฒ๋ ๊ทธ ์ค์ ์ ์บ์ฑํด๋๊ณ ์๋ค๊ฐ, ๋ค์ ์ฐ๊ฒฐ ๋๋ ์บ์ฑํด๋์ ์ค์ ์ ์ฌ์ฉํ์ฌ ๋ฐ๋ก ์ฐ๊ฒฐ์ ์ฑ๋ฆฝ์ํค๊ธฐ ๋๋ฌธ์ 0 RTT๋ง์ผ๋ก ๋ฐ๋ก ํต์ ์ ์์ํ ์๋ ์๋ค.
์ด๋ฐ์๋ ํจํท ์์ค ๊ฐ์ง์ ๊ฑธ๋ฆฌ๋ ์๊ฐ ๋จ์ถ๋์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์ IP๊ฐ ๋ฐ๋์ด๋ ์ฐ๊ฒฐ์ด ์ ์ง๋์ด ๋ชจ๋ฐ์ผ์์ ์์ดํ์ด๋ฅผ ๋ฐ๊พธ์ด๋ ๋๊น์ด ์์ด์ง๊ฒ ๋์๋ค.
# ์ฐธ๊ณ ์๋ฃ
https://www.crocus.co.kr/1362
https://evan-moon.github.io/2019/11/22/tcp-flow-control-error-control/
https://evan-moon.github.io/2019/10/08/what-is-http3/
https://evan-moon.github.io/2019/11/10/header-of-tcp/#%ED%8C%A8%ED%82%B7-%EA%B5%90%ED%99%98-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EB%AC%B8%EC%A0%9C%EC%A0%90
https://blog.cloudflare.com/ko-kr/http3-the-past-present-and-future-ko-kr/
https://devopedia.org/quic