2์ฅ ์ปดํจํฐ ๋คํธ์ํฌ
6. ์ปดํจํฐ ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ ๋ณด๋ด๊ธฐ์ ๋ฐ๊ธฐ
UDP ๋คํธ์ํน
UDP๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ฐ์ดํฐ๊ทธ๋จ์ ์๋๋ฐฉ์๊ฒ ๋ณด๋ผ ์ ์๊ฒ ํ๋ ํต์ ๊ท์ฝ(ํ๋กํ ์ฝ)์ด๋ค. ์ด๋ ๋ฐ์ดํฐ๊ทธ๋จ์ 64ํฌ๋ก๋ฐ์ดํธ ์ดํ์ ์ด์ง ๋ฐ์ดํฐ๋ก ๋ฉ์์ง ์ฑ์ง์ ๊ฐ์ง๋ค. ์ฆ, ๋ฐ์ดํฐ ์ผ๋ถ๊ฐ ๋ญ์น๊ฑฐ๋ ์ชผ๊ฐ์ง์ง ์๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ ค๋ฉด ์์ผ์ ์์ฑํด์ผ ํ๋ค. ์์ผ์ ๋จ๋ง๊ธฐ ์ฌ์ด์ ํต์ ํ ์ ์๊ฒ ์ด์์ฒด์ ์์ ์ ๊ณตํ๋ ์์์ด๋ค.
์๋๋ ์์ผ์ ์ด์ฉํด UDP๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- socket() ํจ์์ ๋งค๊ฐ๋ณ์๋ก UDP๋ฅผ ์ฐ๊ฒ ๋ค๊ณ ์ ์ธํ๋ฉด ์์ผ์ ์์ฑํ๊ณ ์์ผ ํธ๋ค์ ๋ฐํํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ ค๋ฉด ๊ทธ์ ์ ํฌํธ๋ฅผ ํ ๋นํด์ผ ํ๋๋ฐ, bind() ํจ์๋ฅผ ํธ์ถํ์ฌ ํ ๋นํ๋ค. any_port๋ฅผ ํฌํธ ๊ฐ์ผ๋ก ๋ฃ์ผ๋ฉด ์ด์์ฒด์ ๊ฐ ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํฌํธ๋ฅผ ํ ๋นํด์ค๋ค.
- sendTo() ํจ์๋ฅผ ์ด์ฉํด ์๋๋ฐฉ์ ๋์ (endpoint, IP์ฃผ์์ ํฌํธ)๊ณผ ๋ณด๋ผ ๋ฐ์ดํฐ๊ทธ๋จ์ ๋ฃ์ด ๋ณด๋ธ๋ค.
- close() ํจ์๋ฅผ ํธ์ถํ๋ฉด ์์ผ ํธ๋ค์ด ๋ซํ๊ณ ํ ๋น๋ฐ์๋ ํฌํธ๋ ๋ค์ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค.
- ์์ผ ํธ๋ค์ ๋ง๋ค๊ณ ํฌํธ๋ฅผ ํ ๋นํ๋ ๊ณผ์ ๊น์ง๋ ์ก์ ๊ณผ ๊ฐ๋ค. ๋ค๋ง ์ก์ ์ธก์์ ํฌํธ๋ฅผ ์ง์ ํ์ฌ ๋ณด๋๊ธฐ์ bind() ํจ์ ๋ด ํฌํธ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ํ๋๋ค.
- recvfrom() ํจ์๋ฅผ ์ด์ฉํด ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ค. ์ด๋ ์์ง ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ์ง ์์์ผ๋ฉด ํจ์๋ ๋ฆฌํดํ์ง ์๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ๋น๋ก์ ํจ์๋ ๋ฆฌํดํ๊ณ ๋ฐ์ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ์ก์ ์ ์ฃผ์๊ฐ ๋ณ์ r์ ์ฑ์์ง๋ค.
UDP๋ ํ๋์ UDP ์์ผ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ๋ฐ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, ์์ ์ฉ ์ก์ ์ฉ ์์ผ์ ๋ฐ๋ก ๋ง๋ค์ง ์์๋ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋๋ค ํต์ ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์๋๋ฐฉ์ ๋์ ๋ง ์๋ฉด ๊ณ์ ๋ณด๋ด๋ ๋ฌด๋ฐฉํ๋ค.
UDP์ ๋ฌธ์ ์ ์ ํจํท ์ ์ค ํ์์ด ๋ฐ์ํ ์ ์๋ค๋ ์ ์ด๋ค. ๋ฐ์ดํฐ๊ทธ๋จ ์ผ๋ถ๋ฅผ ๋ฐ์ง ๋ชปํ๊ฑฐ๋ ๋ ๋ฒ ์ด์ ๋ฐ์ ์๊ฐ ์๋ค. ์ฌ์ง์ด ๋ณด๋ธ ์์์ ๋ค๋ฅด๊ฒ ๋ฐ์ ์๋ ์๋ค.
๋ฐ๋ผ์ ํจํท ์ ์ค ํ์์ด ๋ฐ์ํด๋ ๋ฌธ์ ์์ ๋๋ง UDP๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์๋ฅผ ๋ค์ด ์บ๋ฆญํฐ ์ด๋์ด๋ ์์ฑ ๋ฉ์์ง๊ฐ ์๋๋ฐ, ํจํท ์ ์ค์ด ๋ฐ์ํ๋๋ผ๋ ๋ค์ ์ค๋ ๋ฐ์ดํฐ๋ก ๋ณด์ฌ์ฃผ๋ฉด ์ ์ ๋ ํฌ๊ฒ ๋ถํธํจ์ ๋๋ผ์ง ์์ ๊ฒ์ด๋ค.
TCP ๋คํธ์ํน
UDP์ ๋ฌธ์ ์ ์ธ ํจํท ์ ์ค ํ์์ TCP๋ฅผ ์ด์ฉํด ํด๊ฒฐํ ์ ์๋ค. TCP๋ ๋ณด๋ด๋ ์ชฝ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ์ชฝ์์ ์์ ํ ๋์ผํจ์ ๋ณด์ฅํด ์ฃผ๋ ํ๋กํ ์ฝ์ด๋ค. ๋ฐ์ดํฐ๋ ์คํธ๋ฆผ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ญ์น๊ฑฐ๋ ์ชผ๊ฐค ์ ์๋ค.
TCP๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ ์ ์ฐ๊ฒฐ ๊ณผ์ ์ ๋จผ์ ํด์ผ ํ๋ฉฐ ์ด๋ฅผ ์ฐ๊ฒฐ ์งํฅํ์ด๋ผ ํ๋ค. ์ด๋ ์ฐ๊ฒฐ์ ์ผ๋์ผ ํต์ ๋ง ๊ฐ๋ฅํ๋ค.
UDP์ TCP ๋ชจ๋ ๊ณ์ธต 4์ ์์นํ๋ฉฐ ์ธํฐ๋ท ํ๋กํ ์ฝ(IP, ๊ณ์ธต 3) ์์์ ์๋ํ๋ค. ๊ทธ๋์ UDP๋ IP ํจํท ์ ์ค์ด ๋ฐ์ํ ๊ฒฝ์ฐ UDP ๋ฐ์ดํฐ๊ทธ๋จ๋ ๋ฉ๋ฌ์ ๋๋กญ๋๋ค. ํ์ง๋ง TCP๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ฐฉ์๊ฒ ์ ํํ ์ ์ก๋๋ค. ์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ TCP์ ํ๋ฆ ์ ์ด ๊ธฐ๋ฅ ๋๋ฌธ์ด๋ค.
TCP์์ ๋ณด๋ผ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ ์ธ๊ทธ๋จผํธ๋ผ๋ IP ํจํท์ ๋ฃ์ ์ ์๋ ํฌ๊ธฐ์ ๋จ์๋ก ์ชผ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ IP ํจํท ์์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฃ์ด ์์ ์์๊ฒ ์ ์ก๋๋ค. ์์ ์๋ IP ํจํท์ ๋ฐ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๊บผ๋ด๊ณ ๋ฐ์ ์ธ๊ทธ๋จผํธ ์๋ต(ack)์ ์ก์ ์์๊ฒ ๋ฐ์กํ๋ค. ๋ณด๋ธ ์ชฝ์์๋ ์ผ์ ์๊ฐ ์์ ์ธ๊ทธ๋จผํธ์ ๋ํ ack๊ฐ ํ์ ๋์ง ์์ผ๋ฉด ์๋ต์ด ์ฌ ๋๊น์ง ๋ค์ ๋ณด๋ธ๋ค.
์๋๋ ์์ผ์ ์ด์ฉํด TCP๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. UDP์ ๋ง์ ๋ถ๋ถ์ด ๋น์ทํ์ง๋ง ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์๋ค.
- socket() ํจ์๋ก ์์ผ์ ์์ฑํ ๋ TCP๋ฅผ ์ฐ๊ฒ ๋ค๊ณ ์ ์ธํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ ์๋๋ฐฉ๊ณผ ์ฐ๊ฒฐ์ด ํ์ํ๋ค. connect(addr) ํจ์๋ฅผ ํธ์ถํ์ฌ ์ฐ๊ฒฐ์ ์๋ํ๋ฉฐ ์ฑ๊ณตํ ๋๊น์ง ๋ธ๋กํน๋๋ค.
- send() ํจ์๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค. ์ด๋ฏธ connect()์ผ๋ก ๋์ ์ ์ง์ ํ๊ธฐ ๋๋ฌธ์ ๋์ ์ธ์๋ ํ์ ์๋ค.
- ๋จผ์ ์์ผ์ ์์ฑํ๋๋ฐ ์ด ์์ผ์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ฐ์ง ์๊ณ listen socket ์ญํ ์ ํ๋ค. listen socket์ TCP ์ฐ๊ฒฐ์ ๋ฐ์๋ค์ด๋ ์ญํ ๋ง ํ์ฌ ๊ณ ์ ๋ ๋์ ์ ๊ฐ๊ณ ์์ด์ผ ํ๋ค. ๊ทธ๋์ listen() ํจ์๋ฅผ ์ด์ฉํด ๋์ ์ ํ๋ณดํ๋ค.
- accept() ํจ์๋ฅผ ์คํํ๋ฉด TCP ์ฐ๊ฒฐ์ ๋ฐ์ ๋๊น์ง ๋ธ๋กํน๋๋ค. ์ฐ๊ฒฐ์ ์ฑ๊ณตํ๋ฉด ์๋ก์ด ์์ผ ์์ฑ๊ณผ ํจ๊ป ํต์ ์ ์ํ ์์ผ ํธ๋ค์ด ๋ฐํ๋๋ค. ์ด๋ ์๋ก์ด ์์ผ์ ๊ธฐ์กด ์์ผ๊ณผ ๋ค๋ฅธ ํฌํธ๋ฅผ ๊ฐ๋๋ค.
- recv() ํจ์๋ฅผ ์ด์ฉํด ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ค.
- close() ํจ์๋ฅผ ์ด์ฉํด ์ฐ๊ฒฐ์ ๋๋๋ค. ์ด ํจ์๊ฐ ํธ์ถ๋๋ฉด ํธ์ถํ ํ๋ก์ธ์ค ์์ ์๋ recv() ํจ์๋ 0์ ๋ฆฌํดํ๊ฒ ๋๋ค.
TCP๋ ์คํธ๋ฆผ ํ์์ด๋ผ ๋ณด๋ recv() ํธ์ถ ํ ๋ฒ์ผ๋ก ๋ค ๋ฐ์ง ๋ชปํ๊ธฐ๋ ํ๋ค. ์ํ๋ ๋งํผ ๊ณ์ํด์ ๋ฐ์์ค๊ฑฐ๋ ๋ฐ์ ๋๋ง๋ค ๋ถ๋ถ ๋ฐ์ดํฐ๋ผ๋ ํ์ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ TCP๋ UDP์ ๋์ผํ๊ฒ ์์ผ ํ๋๋ก ์ก์์ ์ด ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
7. ํจํท ์ ์ค ์ UDP์ TCP์์ ํ์
OSI ๋ชจ๋ธ์ ๊ณ์ธต 1~3์์๋ ํจํท ์ ์ค์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋ UDP์ TCP์์ ์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ๋์ง ์์๋ณด์.
UDP์์๋ ๋ฐ์ดํฐ๊ทธ๋จ ์์ฒด๊ฐ ์ ์ค๋๋ค. ๊ฒ๋ค๊ฐ ๋ฐ์ดํฐ๊ทธ๋จ ํฌ๊ธฐ๊ฐ ํด์๋ก ์ ์ค๋ ํ๋ฅ ์ด ๋์์ง๋ค. ๋ฐ์ดํฐ๊ทธ๋จ์ IP ํจํท ํฌ๊ธฐ์ ๋ง๊ฒ ๋๋ ๋ณด๋ด๋๋ฐ, ์ด ์ค ํ๋๋ผ๋ ์ ์ค๋๋ฉด ์์ ์๋ ์ ์ฒด ๋ฐ์ดํฐ๊ทธ๋จ์ ๋ฐ์ง ๋ชปํ๊ฒ ๋๋ค.
TCP์์๋ ์ ์ค๋ ํจํท์ ๋ํ ack๊ฐ ๋์ฐฉํ์ง ๋ชปํด์ ์ฌ์ก์ ์ ์๋ํ๋ค. ์์ ์ธก์์๋ ๋์ฐฉํ์ง ์๋ ํจํท์ด ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์กฐ๋ฆฝํ์ง ๋ชปํ๋ค. ๊ฒฐ๊ตญ ์ฌ์ ์ก ์๊ฐ๋งํผ ์ง์ฐ ์๊ฐ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
์ด์ ๊ฐ์ ์ฐจ์ด๋ก UDP๋ ํจํท ์ ์ค์ด ์์ด๋ ๊ด์ฐฎ์ ๊ณณ์์ ์ฌ์ฉํ๋ค. ๊ทธ ์ธ์ ๋ชจ๋ ๊ฒฝ์ฐ์๋ ๋๋ถ๋ถ TCP๋ฅผ ์ฌ์ฉํ๋ค.
8. ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฉ์์ง ํ์
๊ฒ์์ ๋ฉ์์ง๋ ํฌ๊ฒ ํ ์คํธ๋ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ ์ํ๋ค.
- ํ ์คํธ ํ์์ ๋ฉ์์ง๋ฅผ ๋ฐ๋ ์ชฝ์์ ํน์ ๊ธ์๊ฐ ๋์ฌ ๋๊น์ง ๊ธ์ ๊ฒ์์ ํ๊ฑฐ๋ ํ์ฑ์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ์์ฆ์ HTPP๋ JSON ๊ฐ์ ํ์คํ๋ ํ์์ ์ฌ์ฉํ๋ค.
- ์ด์ง, ์ฆ ๋ฐ์ด๋๋ฆฌ ํ์์ ๊ฐ ๋ฐ์ดํธ ํน์ ๋นํธ ํ๋๋ ํน์ ํ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ ๊ตฌ๋ฌธ ๋ถ์๊ธฐ๊ฐ ํ์ ์๋ค.
๋ฉ์์ง ์์ ๋ด์ฉ์ ๋ด๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ๊ทธ ๋ฉ์์ง ๋ด์ฉ์ด ์ด๋ค ๊ฒ์ ๋ด๊ณ ์๋์ง์ ์ ๋ณด๋ฅผ ๊ฐ์ด ํฌํจ์ํค๋ ํ์๋ ์๋ค. ์ด๋ฌํ ์ ๋ณด๋ฅผ ํํ ๋ฉํ๋ฐ์ดํฐ๋ผ ํ๋ค. ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ฉด ๋ฐ์ดํฐ ํต์ ๋์ด ๋ง์์ง์ง๋ง ์ ํํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๊ตฌ ํด๋ผ์ด์ธํธ์ ์ต์ ํด๋ผ์ด์ธํธ๊ฐ ํ ์๋ฒ์ ์ ์ํ ๋ ๋ฉ์์ง ๊ตฌ์กฐ๋ฅผ ์ ํํ๊ฒ ์ฃผ๋ฉด ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
9. ๋คํธ์ํฌ ์ฃผ์ ๋ณํ
๋คํธ์ํฌ ์ฃผ์ ๋ณํ(Network Address Translation)์ด๋ ๋ค๋ฅธ ๋จ๋ง๊ธฐ๋ก ์ ์ก๋๋ ํจํท์ ์ก์ ์ ์ฃผ์๋ ์์ ์ ์ฃผ์๊ฐ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณํ๋๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. NAT ๋ณํ์ ํ๋ ๊ธฐ๊ธฐ๋ฅผ NAT ๋ผ์ฐํฐ(๊ณต์ ๊ธฐ)๋ผ ํ๋ค.
NAT ๋ผ์ฐํฐ๊ฐ ํ๋ ์ผ์ IP ์ฃผ์ 1๊ฐ๋ฅผ ์ฌ๋ฌ ๊ธฐ๊ธฐ๊ฐ ๊ณต์ฉํ๋๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด๋ค.