2025. 4. 10. 19:25ใDevelopment๐ฉ๐ปโ๐ฆณ/Communication

TCP/IP ๊ณ์ธต ๊ตฌ์กฐ์ ์ญํ
์ธํฐ๋ท์์ ํต์ ์ด ์ํํ ์ด๋ฃจ์ด์ง๊ธฐ ์ํด์๋ ๊ฐ ๊ตฌ์ฑ ์์๋ค์ด ์ผ์ ํ ๊ท์น๊ณผ ์ ์ฐจ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํ๋ค. ์ด๋ฅผ ์ํด TCP/IP๋ ๋ค ๊ฐ์ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅธ๋ค. ๊ฐ๊ฐ์ ๊ณ์ธต์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ๊ณผ์ ์์ ์ํํด์ผ ํ ๊ธฐ๋ฅ๋ค์ ๋ถ๋ดํ๋ฉฐ, ๊ณ์ธต ๊ฐ์ ๋ช ํํ ์ญํ ๋ถ๋ด ๋๋ถ์ ๋ค์ํ ์์คํ ๊ฐ์ ์ํธ ์ด์ฉ์ฑ์ด ๋ณด์ฅ๋๋ค. ์ด ๊ตฌ์กฐ๋ ์์ ๊ณ์ธต์ด ํ์ ๊ณ์ธต์ ๋์ ๋ฐฉ์์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
๊ฐ ๊ณ์ธต์ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ์ํํ๋ค.
- ์์ฉ ๊ณ์ธต(Application Layer): ์ต์์ ๊ณ์ธต์ผ๋ก, ์ฌ์ฉ์์๊ฒ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค. ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ฉํ๋ HTTP, ์ด๋ฉ์ผ ์ก์์ ์ ์ํ SMTP, FTP, DNS ๋ฑ์ด ์ด ๊ณ์ธต์ ์ํ๋ค. ์์ผ ํ๋ก๊ทธ๋๋ฐ์์ ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ค๋ฃจ๊ฒ ๋๋ ๊ณ์ธต๋ ์ด ์์ฉ ๊ณ์ธต์ด๋ค.
- ์ ์ก ๊ณ์ธต(Transport Layer): ์์ฉ ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฅผ ์ก์ ์ธก์์๋ ๋ถํ ํ๊ณ , ์์ ์ธก์์๋ ์ฌ์กฐ๋ฆฝํ๋ฉฐ, ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ณด์ฅํ๋ ์ญํ ์ ํ๋ค. ๋ํ์ ์ธ ํ๋กํ ์ฝ๋ก๋ ์ฐ๊ฒฐ ์งํฅํ์ TCP(Transmission Control Protocol)์ ๋น์ฐ๊ฒฐํ์ UDP(User Datagram Protocol)๊ฐ ์๋ค. TCP๋ ๋ฐ์ดํฐ ์ ์ก์ ์์์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ๋ฉด, UDP๋ ๋น ๋ฅธ ์ ์ก์ด ํ์ํ ์ํฉ์์ ๊ฐ๋จํ๊ฒ ์ฌ์ฉ๋๋ค.
- ์ธํฐ๋ท ๊ณ์ธต(Internet Layer): ๋ฐ์ดํฐ๋ฅผ ๋ชฉ์ ์ง๊น์ง ์ ๋ฌํ๊ธฐ ์ํด ์ฃผ์๋ฅผ ๋ถ์ฌํ๊ณ , ์ ์ ํ ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ ์ญํ ์ ํ๋ค. IP(Internet Protocol)๊ฐ ํต์ฌ ํ๋กํ ์ฝ์ด๋ฉฐ, ICMP(Internet Control Message Protocol), ARP(Address Resolution Protocol) ๋ฑ๋ ํฌํจ๋๋ค. IP๋ ๋ฐ์ดํฐ๋ฅผ ํจํท์ด๋ผ๋ ๋จ์๋ก ๋๋์ด ์ ์กํ๋ฉฐ, ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ผ์ฐํ ์ด ์ด๋ฃจ์ด์ง๋ค.
- ๋คํธ์ํฌ ์ธํฐํ์ด์ค ๊ณ์ธต(Network Interface Layer): ์ค์ ๋ฌผ๋ฆฌ์ ์ธ ๋คํธ์ํฌ์์ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋นํ๋ค. ์ด๋๋ท, ์์ดํ์ด, ๊ดํต์ ๋ฑ์ ๋ฌผ๋ฆฌ์ ์ธ ์ฐ๊ฒฐ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๋ฉฐ, MAC ์ฃผ์ ๊ธฐ๋ฐ์ผ๋ก ํต์ ์ด ์ด๋ฃจ์ด์ง๋ค. ์ด ๊ณ์ธต์์๋ ์ด์ ์ฒด์ ์ ๋๋ผ์ด๋ฒ๋ ํ๋์จ์ด ์ฅ์น๊ฐ ์ฃผ๋ก ๊ด์ฌํ๊ฒ ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ OSI 7๊ณ์ธต ๋ชจ๋ธ๊ณผ ์ ์ฌํ์ง๋ง, TCP/IP๋ ์ค์ ๊ตฌํ๊ณผ ๊ฐ๊ฒฐ์ฑ์ ์ค์ํ์ฌ 4๊ณ์ธต์ผ๋ก ๋จ์ํ๋์๋ค. ๊ฐ๊ฐ์ ๊ณ์ธต์ ์๋์ชฝ ๊ณ์ธต์ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ์ํธ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌํ๋ ์ ์๋ค๋ ์ ์์ ๋คํธ์ํฌ ๊ธฐ์ ์ ๋ฐ์ ๊ณผ ํธํ์ฑ์ ์ค์ํ ๊ธฐ๋ฐ์ ์ ๊ณตํ๋ค.
TCP/IP ํ๋กํ ์ฝ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ํต์ฌ์, ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ โ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ์ ํต์ โ์ ์ด๋ป๊ฒ ์์ ์ ์ผ๋ก ์ํํ ๊ฒ์ธ๊ฐ์ ์๋ค. ์ค์ ๋ก ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ์ ์ํ๊ฑฐ๋ ๋ฉ์ผ์ ์ก์์ ํ ๋, ํต์ ์ ์ฃผ์ฒด๋ ํธ์คํธ(PC๋ ์ค๋งํธํฐ)๊ฐ ์๋๋ผ ๊ทธ ์์์ ๋์ํ๋ ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฉ์ผ ํด๋ผ์ด์ธํธ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ค. ์ฆ, ๋คํธ์ํฌ ํต์ ์ **"ํธ์คํธ ๊ฐ"์ด ์๋ "์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ"**์ด๋ผ๋ ์ ์ด TCP/IP ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ๊ด์ ์ด๋ค.
์ด๋ฅผ ์ํด TCP/IP ํ๋กํ ์ฝ์ ์ด์์ฒด์ ๋ด๋ถ์ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ์ ๋ด์ฅ๋ ์ด TCP/IP ์คํ์ ํตํด ํต์ ๊ธฐ๋ฅ์ ์์ฒญํ๊ฒ ๋๋ค. ์ด๋, ์ด์์ฒด์ ๋ ์์ฒญ๋ ๋ฐ์ดํฐ๋ฅผ ํจํท ๋จ์๋ก ๋๋๊ณ , ์์ ์ง ์ฃผ์๋ฅผ ๋ถ์ฌ ์ ์กํ๋ฉฐ, ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ฌ์ ์ก์ ์ํํ๊ฑฐ๋ ํต์งํ๋ ๋ฑ์ ์ผ๋ จ์ ๊ณผ์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ด ์ง์ ์ฒ๋ฆฌํ์ง ์์๋ ๋๋ ๋ํ์ ์ธ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ์ฃผ์ ์ง์ (Addressing): ์ด๋ค ์ฅ์น(ํธ์คํธ)์ ์ด๋ค ์์ฉ ํ๋ก๊ทธ๋จ(ํฌํธ)๊ณผ ํต์ ํ ์ง๋ฅผ ์ง์ ํ๋ค.
- ์ค๋ฅ ๊ฒ์ถ ๋ฐ ๋ณต๊ตฌ(Error Detection & Recovery): ๋ฐ์ดํฐ๊ฐ ์์๋์๋์ง๋ฅผ ํ์ธํ๊ณ , ์์ ์ ์ฌ์ ์กํ๋ค.
- ์์ ๋ณด์ฅ(Sequencing): ๋ฐ์ดํฐ๊ฐ ์๋ ๋ณด๋ธ ์์๋๋ก ๋์ฐฉํ๋๋ก ์ ๋ ฌํ๋ค.
- ํ๋ฆ ์ ์ด(Flow Control): ์์ ์ธก์ด ๊ฐ๋นํ ์ ์๋ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๋ก ์ ์ดํ๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ ์ค ์ด๋ ๊ฒ์ ์ ๊ณตํ ์ง, ์ด๋ ์์ค๊น์ง ์ ๊ณตํ ์ง๋ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์๋ฅผ ๋ค์ด, TCP๋ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, UDP๋ ์ต์ํ์ ๋ฐ์ดํฐ ์ ์ก๋ง์ ๋ชฉ์ ์ผ๋ก ํ๋ฏ๋ก ์ด ์ค ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค. ์ด ์ฐจ์ด๋ ์์ผ ํ๋ก๊ทธ๋๋ฐ ์์ ์์ ํ๋กํ ์ฝ ์ ํ์ ๊ธฐ์ค์ด ๋๋ค.
๊ณ์ธต๋ณ ๊ธฐ๋ฅ ์์ฝ:
- ์์ฉ ๊ณ์ธต (Application Layer): ์ฌ์ฉ์๊ฐ ์ง์ ์ฌ์ฉํ๋ ์ํํธ์จ์ด ์์ค. HTTP, FTP, SMTP ๋ฑ์ ํ๋กํ ์ฝ์ด ๋์ํ๋ค.
- ์ ์ก ๊ณ์ธต (Transport Layer): TCP/UDP๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ก์ ์ ๋ขฐ์ฑ๊ณผ ํจ์จ์ฑ์ ๊ด๋ฆฌํ๋ค.
- ์ธํฐ๋ท ๊ณ์ธต (Internet Layer): IP๋ฅผ ํตํด ์ ์ก ๊ฒฝ๋ก๋ฅผ ์ ํํ๊ณ ์ฃผ์๋ฅผ ํ ๋นํ๋ค.
- ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต (Network Access Layer): ์ค์ ๋ฌผ๋ฆฌ์ ์ธ ๋คํธ์ํฌ ์ฅ์น(๋์นด๋, ์์ดํ์ด ๋ชจ๋ ๋ฑ)์์ ์ฐ๊ฒฐ์ ๋ด๋นํ๋ค.
์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ณต์กํ ํต์ ์ด ๋จ์ํ๊ณ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ์์ผ ํ๋ก๊ทธ๋๋จธ๋ ์ด๋ฌํ ๊ณ์ธต ์ค ์ฃผ๋ก โ์์ฉ ๊ณ์ธตโ๊ณผ โ์ ์ก ๊ณ์ธตโ์ ๋ค๋ฃจ๊ฒ ๋๋ฉฐ, ๋๋จธ์ง ๊ณ์ธต์ ์ด์์ฒด์ ๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ฑ์ ๋ง์ถฐ ์ ์ ํ ํ๋กํ ์ฝ์ ์ ํํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ง์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ ์์ญ์ ๊ตฌ๋ถํ ์ ์์ด์ผ ํ๋ค.
๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต์ TCP/IP ๊ตฌ์กฐ์ ๊ฐ์ฅ ํ๋จ์ ์์นํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ฌผ๋ฆฌ์ ์ธ ํต์ ๋งค์ฒดโ์๋ฅผ ๋ค๋ฉด ์ด๋๋ท ์ผ์ด๋ธ, ๋ฌด์ ์ฃผํ์, ๊ด์ฌ์ ๋ฑโ๋ฅผ ํตํด ์ ์ก๋๋ ๊ณผ์ ์ ๋ด๋นํ๋ค. ์ด ๊ณ์ธต์ ํต์ฌ์ ๋ ๊ฐ์ง๋ก ๋๋๋ค: ํ๋์จ์ด์ ๋๋ผ์ด๋ฒ. ์ฆ, ์ปดํจํฐ ๋ด๋ถ์ ๋คํธ์ํฌ ์นด๋์ ์ด๋ฅผ ์ ์ดํ๋ ์ด์์ฒด์ ์ ์ฅ์น ๋๋ผ์ด๋ฒ๊ฐ ํ๋ ฅํ์ฌ ๋ฐ์ดํฐ ์ก์์ ์ ์ฒ๋ฆฌํ๋ค.
ํนํ ์ด ๊ณ์ธต์์๋ IP ์ฃผ์๊ฐ ์๋ ๋ฌผ๋ฆฌ์ ์ฃผ์(Physical Address), ์ฆ MAC ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์ด ๋ฌผ๋ฆฌ์ ์ฃผ์๋ ์ ์กฐ ์ ํ๋์จ์ด์ ๊ณ ์ ๋๋ฉฐ, ์ด๋๋ท ๊ธฐ์ค์ผ๋ก๋ 48๋นํธ ํฌ๊ธฐ์ ๊ณ ์ ํ ๊ฐ์ด๋ค. MAC ์ฃผ์๋ ๋คํธ์ํฌ ์์์ ์ฅ์น๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํต์ ๊ณผ์ ์์ ์ต์ข ์ ์ผ๋ก ๋ชฉ์ ์ง ์ฅ์น๋ฅผ ์๋ณํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
์ด์์ฒด์ ๋ณ๋ก MAC ์ฃผ์๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค:
- Windows: ๋ช ๋ น ํ๋กฌํํธ์์ ipconfig /all ๋ช ๋ น์ ์คํํ๋ฉด, ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ MAC ์ฃผ์์ ๊ธฐํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค. ์์ ์ถ๋ ฅ์ **08-00-27-00-00-08**์ฒ๋ผ ํ์๋๋ค.
- Linux: ํฐ๋ฏธ๋์์ ifconfig ๋๋ ip a ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด MAC ์ฃผ์๋ฅผ ํฌํจํ ์ธํฐํ์ด์ค ์ ๋ณด๊ฐ ๋ํ๋๋ค. ์์๋ก **ether 08:00:27:26:7e:ac**์ฒ๋ผ ํ์๋๋ค. ๋ง์ฝ ifconfig ๋ช ๋ น์ด ์๋ค๋ฉด, Ubuntu์์๋ **sudo apt install net-tools**๋ฅผ ํตํด ์ค์น ๊ฐ๋ฅํ๋ค.
์ด๋ฌํ ๋ฌผ๋ฆฌ์ ์ฃผ์๋ ๋ก์ปฌ ๋คํธ์ํฌ ๋ด์์๋ง ์ ํจํ๋ฉฐ, ์ธ๋ถ ๋คํธ์ํฌ๋ก ๋๊ฐ ๋๋ IP ์ฃผ์์ ํจ๊ป ์ฃผ์ ๋ณํ(Network Address Translation, NAT) ๋ฑ์ ๊ฑฐ์ณ ์ฒ๋ฆฌ๋๋ค.
ํํธ, ์ธํฐ๋ท ๊ณ์ธต์ ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต์ด ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋ ผ๋ฆฌ์ ์ฃผ์(IP ์ฃผ์) ๊ธฐ๋ฐ์ผ๋ก **๊ฒฝ๋ก ์ค์ (Routing)**์ ์ํํ๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก **IP(Internet Protocol)**๋ค. IP๋ ์ ์ก ๋ฐ์ดํฐ๋ฅผ โํจํทโ์ด๋ผ๋ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋๊ณ , ์ด๋ฅผ ๋ชฉ์ ์ง๊น์ง ์ ๋ฌํ๊ธฐ ์ํด ์ ์ ํ ๋ผ์ฐํฐ๋ฅผ ์ฐพ์๊ฐ๋ ์ผ์ ๋งก๋๋ค. ์ด๋ ์ฌ์ฉ๋๋ IP ์ฃผ์๋ MAC ์ฃผ์์ ๋ฌ๋ฆฌ ์ํํธ์จ์ด์ ์ผ๋ก ์ค์ ๋๋ฉฐ, ๋ผ์ฐํฐ๊ฐ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ๊ธฐ์ค์ด ๋๋ค.
๊ฒฐ๊ตญ ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต์ด "์ด๋ค ์ฅ์น"์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ์ง๋ฅผ ๊ฒฐ์ ํ๊ณ , ์ธํฐ๋ท ๊ณ์ธต์ "์ด๋ค ๊ฒฝ๋ก"๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ๋ฌผ๋ฆฌ์ ์ฅ์น๊ฐ ๋ฌ๋ผ๋, ํต์ ์ด ๊ฐ๋ฅํ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ด ํ๋ณด๋๋ค.
์ธํฐ๋ท ๊ณ์ธต์์ ๋ฐ์ดํฐ๊ฐ ๋ชฉ์ ์ง ํธ์คํธ๊น์ง ๋๋ฌํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค๋ฉด, ์ด์ ์ ์ก ๊ณ์ธต์ ๋ชฉ์ ์ง ํธ์คํธ ๋ด์์ **์ ํํ ์์ฉ ํ๋ก๊ทธ๋จ(ํ๋ก์ธ์ค)**์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ์ํํ๋ค. ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก **ํฌํธ ๋ฒํธ(Port Number)**๋ค. ํฌํธ๋ ํ๋์ IP ์ฃผ์ ์๋ ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ถํ๋ ์๋จ์ผ๋ก, TCP/IP ํต์ ์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
์ด๋ ์ฌ์ฉ๋๋ ํฌํธ ๋ฒํธ๋ 16๋นํธ ์ ์ ๊ฐ์ด๋ฉฐ, ์ด๋ก ์ ์ผ๋ก๋ 0๋ถํฐ 65535๊น์ง ์กด์ฌํ๋ค. ์ด ์ค 0~1023๋ฒ ํฌํธ๋ **"์ ์๋ ค์ง ํฌํธ(Well-known Port)"**๋ก์ HTTP(80), HTTPS(443), FTP(21), SMTP(25)์ฒ๋ผ ํน์ ์๋น์ค์ ํ ๋น๋์ด ์ฌ์ฉ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋คํธ์ํฌ ํต์ ์ ์์ํ๋ฉด, ์ด์์ฒด์ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํฌํธ๋ฅผ ํ ๋นํ๊ณ ์ด ํฌํธ๋ฅผ ํตํด ์ก์์ ์ ์ํํ๋ค.
๊ทธ๋ฌ๋ ๋จ์ํ ํฌํธ๋ฅผ ์ง์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ํต์ ์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ ์ ์๋ค. ์ธํฐ๋ท ๊ณ์ธต์ IP๋ "๋ฐ์ดํฐ๋ฅผ ์ต์ ์ ๋คํด ์ ๋ฌํ ๋ฟ(Best-effort)", ๋์ฐฉ ์ฌ๋ถ๋ ์์, ์์ ์ฌ๋ถ์ ๋ํด ํ์ธํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ ์ก ๊ณ์ธต์ ์ด๋ฐ ๋ถ์์ ํ ์๋น์ค๋ฅผ ๋ณด์ํ๊ณ , ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ์ ์ ํํ๊ณ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ณด์ฅํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค.
์ ์ก ๊ณ์ธต์์ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ํ๋กํ ์ฝ์ ๋ ๊ฐ์ง๋ค:
- TCP (Transmission Control Protocol)
- ๋ฐ์ดํฐ ์ ์ก ์์ ๋ณด์ฅ (Sequence Control)
- ์ค๋ฅ ๊ฒ์ถ ๋ฐ ์ฌ์ ์ก (Error Detection & Retransmission)
- ํ๋ฆ ์ ์ด (Flow Control)
- ํผ์ก ์ ์ด (Congestion Control) TCP๋ ์ฐ๊ฒฐ ์งํฅ(Connection-Oriented) ๋ฐฉ์์ผ๋ก ์๋ํ๋ฉฐ, ํต์ ์ ์์ํ๊ธฐ ์ ์ ์ฐ๊ฒฐ์ ์ค์ (3-way handshake)ํด์ผ ํ๋ค.
- TCP๋ ์ ๋ขฐ์ฑ ์๋ ์ ์ก์ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค:
- UDP (User Datagram Protocol)
- UDP๋ ์๋๋ฅผ ์ฐ์ ์ํ๋ ๋น์ฐ๊ฒฐํ(Connnectionless) ํ๋กํ ์ฝ๋ก, ์์ TCP ๊ธฐ๋ฅ๋ค์ ๋๋ถ๋ถ ์๋ตํ๋ค. ๊ทธ ๋์ ๋น ๋ฅธ ์ ์ก์ด ๊ฐ๋ฅํ์ฌ, ์ค์๊ฐ ์์ ์คํธ๋ฆฌ๋ฐ, ๊ฒ์ ํต์ , IoT ๊ธฐ๊ธฐ ์ ์ด ๋ฑ์์ ์ฌ์ฉ๋๋ค. ์ ๋ขฐ์ฑ์ ๋ฎ์ง๋ง ๋จ์ํ ๊ตฌ์กฐ ๋๋ถ์ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ค.
์ฆ, ์ ์ก ๊ณ์ธต์ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ํตํด **"์ด๋ ํธ์คํธ์ ์ด๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๊ฒ์ธ๊ฐ"**๋ฅผ ๊ฒฐ์ ํ๊ณ , ์ ํํ ํ๋กํ ์ฝ(TCP ๋๋ UDP)์ ํน์ฑ์ ๋ฐํ์ผ๋ก ์ ์ก์ ์ ๋ขฐ์ฑ๊ณผ ํจ์จ์ฑ์ ์กฐ์ ํ๋ค.
๊ฒฐ๊ตญ ์์ฉ ํ๋ก๊ทธ๋จ ์ ์ฅ์์ ํต์ ์ "IP + Port"์ ์์ผ๋ก ํํ๋๋ฉฐ, ์ด๋ฌํ ๊ตฌ์กฐ๊ฐ ์ธ๊ณ ์ด๋์๋ ๋ค์ํ ์ฅ์น ๊ฐ์ ์์ ์ ์ธ ๋ฐ์ดํฐ ๊ตํ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค.
TCP์ UDP๋ ์ ์ก ๊ณ์ธต์์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ ํ๋กํ ์ฝ๋ก, ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ๋์ ๋ฐฉ์์ ์ง์ ์ ์ธ ์ํฅ์ ์ค๋ค. ์ด ๋์ ๊ธฐ๋ฅ์ ํน์ฑ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์, ํต์ ๋ชจ๋ธ ๋ฑ ์ฌ๋ฌ ์ธก๋ฉด์์ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด๋ฉฐ, ์ด๋ค ํ๋กํ ์ฝ์ ์ ํํ๋๋์ ๋ฐ๋ผ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ, ์ ๋ขฐ์ฑ, ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง๋ค.
TCP vs UDP ์์ฝ ์ ๋ฆฌ
ํญ๋ชฉ TCP (Transmission Control Protocol) UDP (User Datagram Protocol)
ํต์ ๋ฐฉ์ | ์ผ๋์ผ(Unicast) | ์ผ๋์ผ(Unicast), ์ผ๋๋ค(Broadcast, Multicast) |
์ฐ๊ฒฐ ๋ฐฉ์ | ์ฐ๊ฒฐํ(Connection-oriented) โ ํต์ ์ ์ ์ฐ๊ฒฐ ์ค์ ํ์ (3-way handshake) | ๋น์ฐ๊ฒฐํ(Connectionless) โ ์ฐ๊ฒฐ ์ค์ ์์ด ๋ฐ์ดํฐ ์ก์์ ๊ฐ๋ฅ |
๋ฐ์ดํฐ ๊ฒฝ๊ณ | ๋ฐ์ดํธ ์คํธ๋ฆผ (Byte-Stream): ๋ฐ์ดํฐ๊ฐ ์ฐ์๋ ํ๋ฆ์ผ๋ก ์ฒ๋ฆฌ๋จ | ๋ฐ์ดํฐ๊ทธ๋จ (Datagram): ์ ์ก ๋จ์๋ณ๋ก ๊ฒฝ๊ณ ๊ตฌ๋ถ์ด ๋ช ํํจ |
์ ๋ขฐ์ฑ | ์ ์ก ์์ ๋ณด์ฅ, ์ค๋ฅ ๊ฒ์ถ ๋ฐ ์ฌ์ ์ก ๋ฑ ๋์ ์ ๋ขฐ์ฑ ์ ๊ณต | ์ ๋ขฐ์ฑ ์์: ๋ฐ์ดํฐ ์์ค, ์์ ๋ฐ๋, ์ค๋ณต ๊ฐ๋ฅ์ฑ ์กด์ฌ |
์ค๋ฒํค๋ | ๋น๊ต์ ํผ (ํค๋ ํฌ๊ณ ์ฒ๋ฆฌ ๋ณต์ก) | ์์ (๊ตฌ์กฐ ๋จ์, ๋น ๋ฆ) |
์ฌ์ฉ ์ฌ๋ก | ์น(HTTP/HTTPS), ์ด๋ฉ์ผ(SMTP), ํ์ผ ์ ์ก(FTP) ๋ฑ ์ ๋ขฐ์ฑ ์๊ตฌ | ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, VoIP, ์จ๋ผ์ธ ๊ฒ์ ๋ฑ ์๋ ์ฐ์ |
โ ๏ธ ์ฐธ๊ณ : TCP๋ผ๊ณ ํด์ ๋ฌผ๋ฆฌ์ ์ธ ์ฅ์ (์: ๋์ ๋ถ๋ฆฌ, ์์คํ ๋ค์ด)๋ฅผ ์๋ฒฝํ๊ฒ ๋ง๋ ๊ฑด ์๋๋ค. TCP๊ฐ ๋ณด์ฅํ๋ ๊ฒ์ "์ํํธ์จ์ด์ ์ผ๋ก ๊ฐ๋ฅํ ์ ๋ขฐ์ฑ"์ด๋ค. ์ฆ, ์ฌ์ ์ก, ์์ ๋ณด์ , ์ค๋ฅ ๊ฐ์ง ์์ค์ ์ ๋ขฐ์ฑ์ ์๋ฏธํ๋ค.
์์ฉ ๊ณ์ธต๊ณผ์ ์ฐ๊ณ
์์ฉ ๊ณ์ธต์ ์ ์ก ๊ณ์ธต์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ฐํ์ผ๋ก ์ค์ ์ฌ์ฉ์ ์๋น์ค๋ฅผ ๊ตฌํํ๋ค. ์๋ฅผ ๋ค์ด ์น ๋ธ๋ผ์ฐ์ ๋ ์ ์ก ๊ณ์ธต์ TCP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTTP ํต์ ์ ์ํํ๊ณ , ๋ฉ์ ์ ์ฑ์ UDP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋น ๋ฅด๊ฒ ์ ์กํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ ๊ฒ์, ์์ฉ ๊ณ์ธต์์ ์ ์ก ๊ณ์ธต์ ํธ์ถํ๊ณ ํต์ ํ๋ ์ญํ ์ ์ง์ ๊ตฌํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐ์ดํฐ ์ ์ก ์๋ฆฌ
ํต์ ์ ์ํ ๋ฐ์ดํฐ๋ ๋จ์ํ ๋ฉ์์ง๊ฐ ์๋๋ผ, ๋ค์ํ ์ ์ด ์ ๋ณด์ ํจ๊ป ๊ตฌ์กฐํ๋ ํํ๋ก ์ ์ก๋๋ค. ์ด ๊ตฌ์กฐ์ ํต์ฌ์ **ํจํท(Packet)**์ด๋ผ๋ ๋จ์๋ค. ์ก์ ์ธก์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ ์กํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ ๋ค์์ ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋ค:
- ์์ฉ ๊ณ์ธต์์ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ค.
- ์ ์ก ๊ณ์ธต์ ํฌํธ ๋ฒํธ, ์ค๋ฅ ์ฒดํฌ ์ ๋ณด ๋ฑ์ ๋ด์ TCP/UDP ํค๋๋ฅผ ๋ถ์ธ๋ค.
- ์ธํฐ๋ท ๊ณ์ธต์ ๋ชฉ์ ์ง IP ์ฃผ์ ๋ฑ์ ๋ด์ IP ํค๋๋ฅผ ์ถ๊ฐํ๋ค.
- ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต์ ์ต์ข ์ ์ผ๋ก MAC ์ฃผ์, ํ๋ ์ ์ ๋ณด ๋ฑ์ ๋ง๋ถ์ฌ **ํ๋ ์(Frame)**์ผ๋ก ์์ฑํ๋ค.
- ๋ชจ๋ ์ ๋ณด๊ฐ ํฉ์ณ์ง ๊ตฌ์กฐ๊ฐ **ํจํท = ํค๋ + ๋ฐ์ดํฐ(ํ์ด๋ก๋)**์ด๋ฉฐ, ์ด ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ์ก์์ ์ด ์ด๋ฃจ์ด์ง๋ค.
๊ณ์ธต๋ณ ์ ์ก ๊ตฌ์กฐ (์์ฝ)
์์ฉ ๊ณ์ธต: ๋ฉ์์ง
์ ์ก ๊ณ์ธต: TCP/UDP ํค๋ + ๋ฉ์์ง
์ธํฐ๋ท ๊ณ์ธต: IP ํค๋ + TCP/UDP ํค๋ + ๋ฉ์์ง
๋คํธ์ํฌ ๊ณ์ธต: MAC ํค๋ + IP + TCP/UDP + ๋ฉ์์ง + FCS
์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ๊ฐ ๊ณ์ธต์ ์ฑ ์ ๋ถ๋ด์ ํตํด ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ฐ๊ฒ ๋๋ฉฐ, ๋ค์ํ ํ๊ฒฝ์์๋ ์์ ์ ์ผ๋ก ๋ฐ์ดํฐ ํต์ ์ด ๊ฐ๋ฅํด์ง๋ค.
ํจํท์ ์ ์ก ๊ตฌ์กฐ๋ TCP/IP ํ๋กํ ์ฝ์ ๊ณ์ธต์ ์ค๊ณ ์๋ฆฌ๋ฅผ ๊ฐ์ฅ ์ง๊ด์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์์๋ค. ์ก์ ์ธก์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์์ฑ๋ ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ฌผ๋ฆฌ์ ์ธ ๋คํธ์ํฌ๋ฅผ ๊ฑฐ์ณ ์์ ์ธก์ ์์ฉ ํ๋ก๊ทธ๋จ๊น์ง ๋๋ฌํ๋ ๋์, ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ๊ณ์ธต์ ํต๊ณผํ๋ฉด์ **ํค๋(Header)**์ **ํธ๋ ์ผ๋ฌ(Trailer)**๊ฐ ๋ง๋ถ๊ณ ์ ๊ฑฐ๋๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ด ๊ณผ์ ์ **์บก์ํ(Encapsulation)**์ **์ญ์บก์ํ(Decapsulation)**๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ก์ ์ธก์์์ ํจํท ๊ตฌ์ฑ (Encapsulation)
์ก์ ์ธก์์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ฉด, ๊ทธ ๋ฐ์ดํฐ๋ ์๋์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ ํจํท์ด ์์ฑ๋๋ค:
[์์ฉ ๊ณ์ธต]
โ ๋ฐ์ดํฐ
โ
[์ ์ก ๊ณ์ธต]
โ TCP ํค๋ + ๋ฐ์ดํฐ
โ
[์ธํฐ๋ท ๊ณ์ธต]
โ IP ํค๋ + TCP ํค๋ + ๋ฐ์ดํฐ
โ
[๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต]
โ ์ด๋๋ท ํค๋ + IP ํค๋ + TCP ํค๋ + ๋ฐ์ดํฐ + ์ด๋๋ท ํธ๋ ์ผ๋ฌ
- TCP ํค๋: ํฌํธ ๋ฒํธ, ์ํ์ค ๋ฒํธ, ์ค๋ฅ ๊ฒ์ถ ๋ฑ์ ํฌํจ
- IP ํค๋: ์ก์ ์ง/๋ชฉ์ ์ง IP ์ฃผ์, TTL(Time To Live), ํ๋กํ ์ฝ ๋ฒํธ ๋ฑ ํฌํจ
- ์ด๋๋ท ํค๋ ๋ฐ ํธ๋ ์ผ๋ฌ: ์ก์ /์์ MAC ์ฃผ์, FCS(Frame Check Sequence) ๋ฑ ํฌํจ
๊ฐ ๊ณ์ธต์ ์์ ์ด ํ์ํ ์ ์ด ์ ๋ณด๋ฅผ ํค๋์ ์ถ๊ฐํ ๋ค ๋ค์ ๊ณ์ธต์ผ๋ก ๋๊ธฐ๋ฉฐ, ์ต์ข ์ ์ผ๋ก ์์ฑ๋ ์ด๋๋ท ํ๋ ์์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์ก๋๋ค.
์์ ์ธก์์์ ์ญ์บก์ํ (Decapsulation)
์์ ์ธก์ ๋ฐ๋๋ก ํจํท์ ๋ฐ์์ ๊ฐ ๊ณ์ธต์ ํค๋๋ฅผ ํ๋์ฉ ์ ๊ฑฐํด๊ฐ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค:
plaintext
์ฝ๋ ๋ณต์ฌ
[๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต]
โ ์ด๋๋ท ํค๋/ํธ๋ ์ผ๋ฌ ์ ๊ฑฐ
โ
[์ธํฐ๋ท ๊ณ์ธต]
โ IP ํค๋ ์ ๊ฑฐ
โ
[์ ์ก ๊ณ์ธต]
โ TCP ํค๋ ์ ๊ฑฐ
โ
[์์ฉ ๊ณ์ธต]
โ ์์ ๋ฐ์ดํฐ๋ง ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ๋ฌ
์์ฉ ํ๋ก๊ทธ๋จ์ด ์ ๊ฒฝ ์จ์ผ ํ ๋ถ๋ถ์ ์ค์ง ๋ฐ์ดํฐ ์์ฒด์ด๋ฉฐ, ๋๋จธ์ง ๋ชจ๋ ์บก์ํ/์ญ์บก์ํ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ, ์ ์ก ์์ ๋ณด์ ๋ฑ์ ์ด์์ฒด์ ๋ด๋ถ์ ํ๋กํ ์ฝ ์คํ์ด ์๋์ผ๋ก ์ํํ๋ค. ์ด ๊ตฌ์กฐ ๋๋ถ์ ์์ฉ ํ๋ก๊ทธ๋๋จธ๋ ํต์ ์ ๋ณต์ก์ฑ์ ๋ชฐ๋ผ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ ์ ์๋ ์ถ์ํ๋ ํ๊ฒฝ์ ์ป์ ์ ์๋ค.
๊ณ์ธต ๊ฐ ํต์ ์ ํต์ฌ ๊ฐ๋ : Peer-to-Peer Model
๊ฐ ๊ณ์ธต์ ์์ ๊ณผ ๋์ผํ ๊ณ์ธต(peer) ๊ฐ์๋ง ์ง์ ์ ์ผ๋ก ๋ ผ๋ฆฌ์ ํต์ ์ ์ํํ๋ค๊ณ ๊ฐ์ฃผํ๋ค. ์๋ฅผ ๋ค์ด ์ก์ ์ธก์ TCP ๊ณ์ธต์ ์์ ์ธก์ TCP ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค๊ณ ์๊ฐํ๋ฉฐ, IP ๊ณ์ธต์ IP ๊ณ์ธต๋ผ๋ฆฌ, ์ด๋๋ท ๊ณ์ธต์ ์ด๋๋ท ๊ณ์ธต๋ผ๋ฆฌ ํต์ ํ๋ ํํ๋ค. ์ค์ ๋ก๋ ์ด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ์ ๊ณ์ธต์ ํตํด ์ ๋ฌ๋์ง๋ง, ๊ณ์ธต ์ค๊ณ ์ฒ ํ์ ์ด๋ฌํ ๋ ผ๋ฆฌ์ ๋์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
์ฃผ์์ฌํญ
๋์ผํ ์ด๋๋ท ๋คํธ์ํฌ(์: ํ๋์ ์ค์์น์ ์ฐ๊ฒฐ๋ LAN)์์๋ง ์ด๋๋ท ํ๋ ์์ด ์ง์ ์ ๋ฌ๋๋ฉฐ, ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ์ ์์นํ ํธ์คํธ ๊ฐ์๋ ๋ผ์ฐํฐ๋ฅผ ๊ฑฐ์ณ IP ๊ณ์ธต ์์ค์์๋ง ํต์ ์ด ์ด๋ฃจ์ด์ง๋ค. ๋ฐ๋ผ์ [๊ทธ๋ฆผ 1-6]์์๋ ์ด๋๋ท ๊ณ์ธต์ ์๋ตํ์ฌ ๋จ์ํํ ๊ฒ์ด๋ค.
TCP/IP ํ๋กํ ์ฝ์ ๋ฐ์ดํฐ ์ ์ก ์๋ฆฌ๋ฅผ ์ผ๋ฐํํด ๋ณด๋ฉด, ๊ฐ ๊ณ์ธต์ ์ญํ ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์์ค์ ์ฑ ์์ ๊ฐ์ง๋ฉฐ, ๊ณ์ธต ๊ฐ ํ๋ ฅ์ ํตํด ์ข ๋จ ๊ฐ(End-to-End) ํต์ ์ ์คํํ๋ค. ํนํ, ์์ฉ ๊ณ์ธต๊ณผ ์ ์ก ๊ณ์ธต์ ์ก์ ์ธก๊ณผ ์์ ์ธก ํธ์คํธ์๋ง ์กด์ฌํ๋ฉฐ, ์ด ๋ ์ฌ์ด์ ๋ผ์ฐํฐ๊ฐ ๊ฐ์ ํ๋๋ผ๋ ๊ทธ ๊ณ์ธต์๋ ์ ํ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๋ฐ๋ฉด, ์ธํฐ๋ท ๊ณ์ธต๊ณผ ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต์ ์ค๊ฐ ๊ฒฝ๋ก์ ๋ผ์ฐํฐ์๋ ์กด์ฌํ๋ฉฐ, ์ค์ ํจํท์ ์ด๋ฐํ๊ณ ๋ค์ ๋ชฉ์ ์ง๋ก ์ ๋ฌํ๋ ์ญํ ์ ๋งก๋๋ค.
๊ณ์ธต๋ณ ์ ์ก ํ๋ฆ: ๊ฐ์ ์ฐ๊ฒฐ๊ณผ ์ค์ ์ฐ๊ฒฐ์ ๊ตฌ๋ถ
[๊ทธ๋ฆผ 1-7]์ ๊ตฌ์กฐ ํด์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ์ก์ ์ธก์์ ์์ ์ธก๊น์ง ๋๋ฌํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ ์ ์๋ค:
[์ก์ ์ธก ํธ์คํธ]
์์ฉ ๊ณ์ธต โ ์ค์ ๋ฐ์ดํฐ ์์ฑ
์ ์ก ๊ณ์ธต โ ํฌํธ ๋ฒํธ๋ก ์์ฉ ํ๋ก๊ทธ๋จ ์ง์
์ธํฐ๋ท ๊ณ์ธต โ IP ์ฃผ์๋ก ๋ชฉ์ ์ง ํธ์คํธ ์ง์
๋คํธ์ํฌ ๊ณ์ธต โ ๋ค์ ์ฅ์น์ MAC ์ฃผ์๋ก ๋ฌผ๋ฆฌ์ ์ ๋ฌ
[๋ผ์ฐํฐ A]
์ธํฐ๋ท ๊ณ์ธต โ ๋ชฉ์ ์ง IP ๊ธฐ๋ฐ ๋ผ์ฐํ
๊ฒฐ์
๋คํธ์ํฌ ๊ณ์ธต โ ๋ค์ ๋ผ์ฐํฐ ๋๋ ๋ชฉ์ ์ง ํธ์คํธ์ MAC ์ฃผ์๋ก ์ ์ก
[๋ผ์ฐํฐ B ...]
(๋ฐ๋ณต ์ฒ๋ฆฌ)
[์์ ์ธก ํธ์คํธ]
์ธํฐ๋ท ๊ณ์ธต โ ์ต์ข
๋ชฉ์ ์ง๋ก ํจํท ๋๋ฌ ํ์ธ
์ ์ก ๊ณ์ธต โ ํฌํธ ๋ฒํธ ๊ธฐ๋ฐ์ผ๋ก ์์ฉ ํ๋ก๊ทธ๋จ ์๋ณ
์์ฉ ๊ณ์ธต โ ๋ฐ์ดํฐ ์์ ๋ฐ ์ฒ๋ฆฌ ์๋ฃ
- ์์ฉ ๊ณ์ธต๊ณผ ์ ์ก ๊ณ์ธต์ ์ค๊ฐ ๋ผ์ฐํฐ์ ์กด์ฌํ์ง ์๋๋ค. ์ด ๊ณ์ธต์ ์ฐ๊ฒฐ์ ๊ฐ์์ ์ธ ์ฐ๊ฒฐ์ด๋ฉฐ, ์ค์ ๋ก๋ IP์ MAC ์ฃผ์๊ฐ ์ค๊ฐ์์ ๋ฐ๋๋ฉด์ ์ด์ด์ง๋ค.
- ์ธํฐ๋ท ๊ณ์ธต๊ณผ ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต์ ๊ฐ ๋ผ์ฐํฐ๋ง๋ค ์กด์ฌํ๊ณ , ์ค์ ํจํท์ ๋ฌผ๋ฆฌ์ ์ ๋ฌ์ ์ํํ๋ค.
- ํจํท์ ๋ผ์ฐํฐ๋ฅผ ํต๊ณผํ ๋๋ง๋ค MAC ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ฉฐ, IP ์ฃผ์๋ ์ ์ง๋๋ค.
IP ์ฃผ์์ ํฌํธ ๋ฒํธ์ ์ญํ
TCP/IP ํต์ ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ณ์๋ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ค. ์ด ๋ ๊ฐ์ ์กฐํฉํ ๊ฒ์ด ๊ณง ํ๋์ ํต์ ์ธ์ ์ ์ ์ํ๋ค:
- IP ์ฃผ์ (Internet Protocol Address)
- ํธ์คํธ๋ฅผ ๊ตฌ๋ถํ๋ ๋ ผ๋ฆฌ์ ์ฃผ์
- ์ ์ธ๊ณ์์ ๊ณ ์ ํจ์ด ๋ณด์ฅ๋จ
- IPv4 (32๋นํธ): 147.46.114.70 ํ์
- IPv6 (128๋นํธ): 2001:0230:abcd:ffab:0023:eb00:ffff:1111 ํ์
- ํฌํธ ๋ฒํธ (Port Number)
- ํ๋์ ํธ์คํธ ๋ด ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ถ
- 16๋นํธ ํฌ๊ธฐ (0~65535)
- ์: HTTP โ 80๋ฒ, HTTPS โ 443๋ฒ, FTP โ 21๋ฒ
- ์ฌ์ฉ์๋ ์ผ๋ฐ์ ์ผ๋ก 1024 ์ด์์ ํฌํธ๋ฅผ ์ฌ์ฉ (ephemeral ํฌํธ)
๋ฐ๋ผ์ ํ๋์ ์์ผ(Socket)์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ํต์ ์๋๋ฅผ ์๋ณํ๋ค:
[์ก์ IP]:[์ก์ ํฌํธ] โ [์์ IP]:[์์ ํฌํธ]
์ด ๊ตฌ์กฐ๋ ์์ ํ ์ ์ผํ ์ธ์ ์ ์๋ณํ๋ฉฐ, ํ๋์ ํธ์คํธ์์ ์ฌ๋ฌ ํต์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ค๋ค.
์์: ์ค์ ์ฐ๊ฒฐ ์ ์ธ์ ๊ตฌ์ฑ
ํด๋ผ์ด์ธํธ (๋ด ์ปดํจํฐ): 192.168.0.11:52345
์๋ฒ (์น ์๋ฒ): 147.46.114.70:80
=> ์ด ์์ด ํ๋์ TCP ์ฐ๊ฒฐ์ ๊ตฌ์ฑํจ
๋ผ์ฐํฐ๋ IP ์ฃผ์๋ง์ ๊ธฐ๋ฐ์ผ๋ก ๋ชฉ์ ์ง๋ฅผ ํ๋จํ๋ฉฐ, ์ ์ก ๊ณ์ธต๊ณผ ํฌํธ ์ ๋ณด๋ ์ ํ ๊ด์ฌํ์ง ์๋๋ค. ๋ฐ๋๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ํฌํธ ๋ฒํธ๋ฅผ ํตํด ์์ ์๊ฒ ์จ ๋ฐ์ดํฐ์ธ์ง ์๋ณํ๋ฉฐ, IP ๊ฒฝ๋ก์ ๋ํด์๋ ์ ๊ฒฝ ์ฐ์ง ์๋๋ค.
ํฌํธ ๋ฒํธ๋ ๋จ์ํ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๋ ์ซ์๊ฐ ์๋๋ผ, ํต์ ์ ์ข ์ฐฉ์ ์ ์ ์ํ๋ ๋ ผ๋ฆฌ์ ์ธ ์๋ณ์๋ก ๋ณด๋ ๊ฒ์ด ๋ณด๋ค ์ ํํ ์ดํด๋ค. ์ ํต์ ์ผ๋ก๋ "ํฌํธ = ํ๋ก์ธ์ค"๋ผ๋ ๋จ์ํ ๊ตฌ์กฐ๋ก ์ค๋ช ๋์ง๋ง, ์ค์ ๊ตฌํ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ณต์กํ ์๋๋ฆฌ์ค๊ฐ ์กด์ฌํ๋ค:
ํฌํธ ๋ฒํธ์ ํ๋ก์ธ์ค ๊ฐ์ ๊ด๊ณ
- ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ํฌํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค
- ์: ์น ์๋ฒ๊ฐ HTTP(80)์ HTTPS(443)๋ฅผ ๋์์ ์๋น์คํ ๊ฒฝ์ฐ, ํ๋์ ํ๋ก์ธ์ค๊ฐ ๋ ํฌํธ๋ฅผ ๋ฐ์ธ๋ฉํ ์ ์๋ค.
- ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ํ๋์ ํฌํธ๋ฅผ ๊ณต์ ํ ์ ์๋ค
- ์: ๋ฉํฐ ํ๋ก์ธ์ค ์๋ฒ์์ ๋์ผํ ํฌํธ์ ๋ํด ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋์์ SO_REUSEPORT ์ต์ ์ ์ค์ ํ๊ณ ๋ฐ์ธ๋ฉํ๋ฉด ์ปค๋์ด ๋ถํ ๋ถ์ฐํ์ฌ ์ฐ๊ฒฐ์ ๋ถ๋ฐฐํด ์ค๋ค.
์ฆ, ํฌํธ ๋ฒํธ๋ "IP ์ฃผ์ + ํ๋กํ ์ฝ + ํฌํธ"์ ์กฐํฉ์ผ๋ก ํต์ ์ธ์ ์ ์ข ์ฐฉ์ง๋ฅผ ์๋ณํ๋ฉฐ, ์ด๋ ๋ฐ๋์ ํ๋์ ํ๋ก์ธ์ค์ ์ผ๋์ผ ๋์ํ์ง ์๋๋ค.
ํฌํธ ๋ฒํธ์ ๊ตฌ์กฐ์ ๋ฒ์
TCP์ UDP๋ 16๋นํธ ๋ถํธ ์๋ ์ ์๋ก ํฌํธ๋ฅผ ํํํ๊ธฐ ๋๋ฌธ์ ์ด 65,536๊ฐ(0~65535)์ ํฌํธ๊ฐ ์กด์ฌํ๋ฉฐ, ์ฉ๋์ ๋ฐ๋ผ ๋ค์์ฒ๋ผ ์ธ๋ถํ๋๋ค:
ํฌํธ ๋ฒํธ ๋ฒ์ ๋ช ์นญ ์ฉ๋ ์์
0 ~ 1023 | ์๋ ค์ง ํฌํธ (Well-known) | HTTP(80), HTTPS(443), FTP(21), SSH(22) ๋ฑ ์์คํ ์์ฝ ํฌํธ |
1024 ~ 49151 | ๋ฑ๋ก๋ ํฌํธ (Registered) | ์ฌ์ฉ์ ๋ฑ๋ก ์๋น์ค์ฉ. ์ผ๋ฐ ์๋ฒ ํ๋ก์ธ์ค์ ์ฌ์ฉ |
49152 ~ 65535 | ๋์ /์ฌ์ค ํฌํธ (Dynamic) | ํด๋ผ์ด์ธํธ์์ ์๋ ํ ๋น๋๋ ์ผ์์ ํฌํธ (ephemeral) |
โ ์๋ฒ ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก 1024๋ฒ ์ด์์ ํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ , ํด๋ผ์ด์ธํธ ํ๋ก์ธ์ค๋ ๋์ ์ผ๋ก ํ ๋น๋ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค.
๊ณต์ ๋ฑ๋ก ์ ๋ณด๋ IANA (Internet Assigned Numbers Authority)์ ํฌํธ ๋ฒํธ ํ ๋น ๋ฌธ์์์ ํ์ธํ ์ ์๋ค:
๐ https://www.iana.org/assignments/port-numbers
IP ์ฃผ์์ ํฌํธ ๋ฒํธ์ ๊ฒฐํฉ ๊ตฌ์กฐ
ํ๋์ IP ์ฃผ์์ ์ฌ๋ฌ ํฌํธ๋ฅผ ํ ๋นํ ์ ์๊ธฐ ๋๋ฌธ์, ์ค์ ์์ผ ์ฐ๊ฒฐ์ ์๋ ๊ตฌ์กฐ๋ก ์ ์๋๋ค:
(IP ์ฃผ์, ํฌํธ ๋ฒํธ, ํ๋กํ ์ฝ)
์: (192.168.0.100, 8080, TCP)
์ด ์กฐํฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ปค๋์ ๋คํธ์ํฌ ํธ๋ํฝ์ ํน์ ํ๋ก์ธ์ค์ ์์ผ์ผ๋ก ์ ํํ ๋ถ๋ฐฐํ๋ค. ํ๋์ ํธ์คํธ๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค(IP)๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์, IP ์ฃผ์๊ฐ ๋ค๋ฅด๋ฉด ๋์ผ ํฌํธ ๋ฒํธ๋ ์ค๋ณต ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ๋ฐ๋๋ก, ๋์ผ IP์ ๋์ผ ํ๋กํ ์ฝ์ ๋์ผ ํฌํธ๋ฅผ ์ค๋ณต ๋ฐ์ธ๋ฉํ๋ ๊ฒ์ ์์น์ ์ผ๋ก ๊ธ์ง๋๋ค(๋จ, SO_REUSEADDR, SO_REUSEPORT ์ค์ ์ ์์ธ ๊ฐ๋ฅ).
์ค์ ์์ (๊ทธ๋ฆผ 1-8 ๊ธฐ๋ฐ ์ค๋ช )
- ํธ์คํธ A๋ ๋ ๊ฐ์ IP ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ (192.168.1.10, 10.0.0.10)
- ํ๋ก์ธ์ค 1: HTTP ์์ฒญ ์์ (80๋ฒ ํฌํธ) โ TCP ํฌํธ 80 ์ฌ์ฉ
- ํ๋ก์ธ์ค 2: ๋ด๋ถ ๊ด๋ฆฌ ๋๊ตฌ ์๋น์ค (8080๋ฒ ํฌํธ) โ ๋์ผ IP๋ผ๋ ๋ค๋ฅธ ํฌํธ๋ก ๋์ ์ด์ ๊ฐ๋ฅ
- ํ๋ก์ธ์ค 3: ๋น๋๊ธฐ ํต์ ์๋ฒ โ ํ๋์ ํ๋ก์ธ์ค๊ฐ TCP์ UDP ํฌํธ๋ฅผ ๋์์ ๋ฐ์ธ๋ฉ ๊ฐ๋ฅ
- ํ๋ก์ธ์ค 4~n: ๋์ ํฌํธ๋ฅผ ์ฌ์ฉํด ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ธ๋ถ ์ฐ๊ฒฐ์ ์๋ฆฝ
์ด๋ฌํ ๊ตฌ์กฐ๋ ์์ผ ํ๋ก๊ทธ๋๋ฐ์์ ๋ณต์กํ ์๋น์ค ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ์ ์๋ ์ ์ฐํจ์ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ๋ฉํฐํ๋ ์ฑ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
์ซ์๋ก ์ด๋ฃจ์ด์ง IP ์ฃผ์๋ ๋คํธ์ํฌ ํต์ ์์ ๋ฐ๋์ ํ์ํ ์๋ณ์์ง๋ง, ์ฌ๋์ด ๊ธฐ์ตํ๊ณ ๋ค๋ฃจ๊ธฐ์ ๋ฒ๊ฑฐ๋กญ๋ค. ์๋ฅผ ๋ค์ด 147.46.114.70 ๊ฐ์ ์ฃผ์๋ ํ ๋ฒ ๋ณด๊ณ ์ฝ๊ฒ ๊ธฐ์ตํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ **www.microsoft.com**๊ณผ ๊ฐ์ **๋๋ฉ์ธ ์ด๋ฆ(Domain Name)**์ ์ฌ์ฉํ๋ค. ์ด ๋๋ฉ์ธ ์ด๋ฆ์ ์ค์ ๋ก๋ ๋จ์ํ **IP ์ฃผ์์ ๋ณ์นญ(Alias)**์ผ ๋ฟ์ด๋ฉฐ, ํต์ ์ ์ํํ ๋๋ ๋ฐ๋์ IP ์ฃผ์๋ก ๋ณํ๋ ํ ์ฌ์ฉ๋๋ค. ์ด ๋ณํ ์์ ์ **DNS(Domain Name System)**์ ์ํด ์ํ๋๋ฉฐ, ์ด ์ฑ ์์๋ ์ดํ 3์ฅ์์ ์์ธํ ์ค๋ช ๋๋ค.
ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ์ ๊ฐ๋ ๊ณผ ๊ตฌ์กฐ
์ค์ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ๋๋ถ๋ถ **ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ(Client-Server Model)**์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ค. ์ด ๋ชจ๋ธ์ ๋ ํ๋ก๊ทธ๋จ ๊ฐ ์ํธ์์ฉ์ ํํ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ํ๋๋ฐ, ํต์ฌ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ํด๋ผ์ด์ธํธ(Client): ์๋น์ค ์์ฒญ์ ๋ณด๋ด๋ ํ๋ก๊ทธ๋จ
- ์๋ฒ(Server): ์์ฒญ์ ๋ฐ๊ณ ์๋ต์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋จ
์ด ๋ชจ๋ธ์ ๋ฐ๋์ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, ํ๋์ ์ปดํจํฐ ๋ด๋ถ์์ ์คํ๋๋ ์ฌ๋ฌ ํ๋ก์ธ์ค ๊ฐ์๋ ์ ์ฉ ๊ฐ๋ฅํ๋ค. ๋จ, ๋ก์ปฌ ํ๊ฒฝ์์๋ IPC (Inter-Process Communication) ๊ธฐ๋ฒโ์: ํ์ดํ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ, ๋ฉ์์ง ํโ๋ฑ์ ์ฌ์ฉํ๊ณ , ๋คํธ์ํฌ ํ๊ฒฝ์์๋ ๋ฐ๋์ **ํต์ ํ๋กํ ์ฝ(์: TCP/IP)**์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํด์ผ ํ๋ค.
๋์ ์ ์ ๋ชจ๋ธ vs ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ
- *[๊ทธ๋ฆผ 1-9(a)]**๋ ์ ํต์ ์ธ ๋์ ์ ์ ๋ชจ๋ธ์ ๋ณด์ฌ์ฃผ๋๋ฐ, ์ด ๋ฐฉ์์์๋ ๋ ํ๋ก๊ทธ๋จ์ด ์๋ก ๋์์ ์คํ๋์ด ์์ด์ผ ์ ์์ด ๊ฐ๋ฅํ๋ค. ์ด ๊ตฌ์กฐ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค:
- ์๋๊ฐ ์คํ๋์ง ์์์ ๊ฒฝ์ฐ ์ ์ ์คํจ
- ํ์ด๋ฐ ๋ง์ถ๊ธฐ ์ด๋ ค์
- ์ ์ ์๋์ ์คํจ ๋ฐ๋ณต์ผ๋ก ๋นํจ์จ
์ด์ ๋ฐํด **[๊ทธ๋ฆผ 1-9(b)]**์ ๊ฐ์ ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ์์๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ํด๊ฒฐ๋๋ค. ๊ทธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค:
[์๋ฒ]
- ๋จผ์ ์คํ
- ํฌํธ ๋ฒํธ๋ฅผ ์ง์ ํ๊ณ โ๋๊ธฐ ์ํโ๋ก ์ ์ง (bind โ listen)
- ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ ์ ์๋๋ก ์ด๋ ค ์์
[ํด๋ผ์ด์ธํธ]
- ๋์ค์ ์คํ
- ์๋ฒ์ IP ์ฃผ์(๋๋ ๋๋ฉ์ธ ์ด๋ฆ)์ ํฌํธ ๋ฒํธ๋ฅผ ์์์ผ ํจ
- ์๋ฒ๋ก ์ ์ ์์ฒญ์ ๋ณด๋ (connect)
โ ์ ์ ์ฑ๊ณต ์ ๋ฐ์ดํฐ ์ก์์ ๊ฐ๋ฅ
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ IP์ ํฌํธ ์ ๋ณด๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ํจํท ๋ด๋ถ์ ํด๋น ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์, ์๋ฒ๋ ์๋ต์ ๋ณด๋ผ ๋ ์ด ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ๊ตฌ์กฐ ๋๋ถ์, ์๋น์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ๊ณตํ๋ ์๋ฒ์ ํ์ํ ๋ ์ ์ํ๋ ํด๋ผ์ด์ธํธ ๊ฐ์ ํจ์จ์ ์ธ ํต์ ์ด ๊ฐ๋ฅํด์ง๋ค.
์ ๋ฆฌ: ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ์ ์ฅ์
- ํ์ด๋ฐ ๋ฌธ์ ๋ก ์ธํ ์ ์ ์คํจ๋ฅผ ๋ฐฉ์ง
- ๋ค์์ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ํ ์๋ฒ์ ์ ์ ๊ฐ๋ฅ (๋ฉํฐ ์ค๋ ๋ ๋๋ ๋ฉํฐ ํ๋ก์ธ์ค ๊ตฌ์กฐ ํ์ฉ ๊ฐ๋ฅ)
- ์๋ฒ๋ ๊ณ ์ ๋ ํฌํธ๋ฅผ ์ด์ด๋๊ณ , ํด๋ผ์ด์ธํธ๋ ๋์ ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ๊ตฌ์กฐ๋ฅผ ๋จ์ํ
์์ผ(Socket)์ ๋คํธ์ํฌ ํต์ ์ ์ํ ํ์ค ์ธํฐํ์ด์ค๋ก, ๋ค์ํ ์ด์์ฒด์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํญ๋๊ฒ ์ฌ์ฉ๋๋ค. ํนํ BSD UNIX์์ ์ฒ์ ์ ์๋ ์ดํ, ์๋์ฐ์์๋ **Winsock(์์)**์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ณต์ ์ง์๋๋ฉด์ ์ด์์ฒด์ ์ ์๊ด์์ด ์ผ๊ด๋ ๋ฐฉ์์ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํด์ก๋ค.
์์ผ์ ๋คํธ์ํฌ์ ์ฝ์ผํธ๋ค
์์ผ์ด๋ผ๋ ๊ฐ๋ ์ ์ผ๋ฐ ์ ํ ์์คํ ์ ๋น๋์ด ์ดํดํ๋ฉด ์ง๊ด์ ์ด๋ค:
์ค์ ์์คํ ๋์ํ๋ ๊ฐ๋
์ฌ๋ | ์์ฉ ํ๋ก๊ทธ๋จ (Application) |
์ ํ๊ธฐ | ์์ผ (Socket) |
๋ด์ ๋ฒํธ | ํฌํธ ๋ฒํธ (Port Number) |
๋ํ ์ ํ๋ฒํธ | IP ์ฃผ์ (IP Address) |
์ ํ๋ง | ์ธํฐ๋ท (Network) |
๊ทธ๋ฆผ (a): ๋ด๊ฐ ๋งํ ์๋ฆฌ๊ฐ ์ ํ๊ธฐ๋ฅผ ํตํด ์๋๋ฐฉ์๊ฒ ์ ๋ฌ๋๋ ๊ฒ์ฒ๋ผ์์ผ์ ํตํด ์ ์กํ ๋ฐ์ดํฐ๋ ์๋๋ฐฉ ์์ผ์ ํตํด ์ ๋ฌ๋๋ค.๊ทธ๋ฆผ (b): ์ ํ ์ฐ๊ฒฐ์ด ๋๊ธฐ ์ํด์ โ์ ํ๊ธฐ + ๋ํ๋ฒํธ + ๋ด์ ๋ฒํธโ๊ฐ ๋ชจ๋ ํ์ํ๋ฏ์์ผ๋ IP ์ฃผ์ + ํฌํธ ๋ฒํธ๋ฅผ ์กฐํฉํด์ผ ์ ํํ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ์ฐ๊ฒฐ๋๋ค.
์์ผ์ ๋ฌด์์ธ๊ฐ?
์์ผ์ ๋ค์ ์ธ ๊ฐ์ง ๊ด์ ์์ ์ดํดํ ์ ์๋ค:
1. ๋ฐ์ดํฐ ํ์ (Data Type) ๊ด์
- ์์ผ์ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก **ํ์ผ ๋์คํฌ๋ฆฝํฐ(file descriptor)**์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ **์ ์ํ ํธ๋ค(handle)**์ด๋ค.
- ์์ผ ์์ฑ ํจ์(socket())๋ฅผ ํธ์ถํ๋ฉด, ์ด์์ฒด์ ๋ ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฒํธ๋ฅผ ํ ๋นํ๋ค.
- ์ด๋ ๋ง์น ํ์ผ์ ์ด๋ฉด ํ์ผ ํธ๋ค์ ์ป๋ ๊ฒ์ฒ๋ผ, ์์ผ๋ ๋ฆฌ์์ค๋ฅผ ๋ค๋ฃจ๋ ์๋ณ์๋ก์์ ์ญํ ์ ํ๋ค.
2. ํต์ ์ข ๋จ์ (Communication Endpoint) ๊ด์
- ์์ผ์ ๋คํธ์ํฌ ํต์ ์์ **ํ์ชฝ ๋(End Point)**์ ๋ํ๋ธ๋ค.
- ํ๋์ ์์ผ์ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์๋๋ฐฉ์ ์์ผ๊ณผ ์ฐ๊ฒฐ๋์ด์ผ ๋ฐ์ดํฐ ์ก์์ ์ด ๊ฐ๋ฅํ๋ค.
- ์ด๋ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ TCP ๋๋ UDP ๋ฑ ์ ์ก ๊ณ์ธต์ ๋ฐฉ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
3. ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค (API) ๊ด์
- ์์ผ์ ์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ํ์ค ํจ์ ์ธํธ๋ฅผ ํตํด ์ ์ด๋๋ค.
- ์ฃผ์ ํจ์์๋ socket(), bind(), connect(), listen(), accept(), send(), recv() ๋ฑ์ด ์๋ค.
- ์ด ํจ์๋ค์ ํตํด ์์ผ์ ์์ฑ, ์ฐ๊ฒฐ, ๋ฐ์ดํฐ ์ก์์ ๊น์ง ์ผ๋ จ์ ํต์ ์ ์ฐจ๋ฅผ ์ ์ดํ ์ ์๋ค.
์์ผ์ด ํ์ํ ์ด์
ํ๋์จ์ด ์ ํธ, ์ฅ์น ๋๋ผ์ด๋ฒ, ํ๋กํ ์ฝ ์คํ ๋ฑ ๋คํธ์ํฌ ํต์ ์ ๋ชจ๋ ๋ด๋ถ ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ค๋ฃฐ ํ์๋ ์๋ค. ๋ง์น ์ ์๊ธฐ๊ธฐ๋ฅผ ๋ฒฝ๋ฉด์ ์ ์ ์์ผ์ ๊ฝ๊ธฐ๋ง ํ๋ฉด ์ ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ฏ, ์์ผ์ ๋ณต์กํ ๋คํธ์ํฌ ๊ณ์ธต์ ์ถ์ํํ ์ ๊ทผ์ ์ ์ ๊ณตํ๋ค. ๋๋ถ์ ํ๋ก๊ทธ๋๋จธ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋คํธ์ํฌ ํต์ ์ ๊ตฌํํ ์ ์๋ค.
์ ๋ฆฌ
- ์์ผ์ **IP ์ฃผ์ + ํฌํธ ๋ฒํธ + ํ๋กํ ์ฝ(TCP/UDP)**์ ๊ธฐ๋ฐ์ผ๋ก ํต์ ์ข ๋จ์ ์ ์ ์
- ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ
- Winsock์ ์๋์ฐ์์ ์์ผ์ ์ง์ํ๊ธฐ ์ํ API ์งํฉ
์์ผ๋ก ์์ผ์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ , ์๋ฒ๊ฐ ์์ ํ๋ฉฐ ๋ค์ ์๋ต์ ์ฃผ๊ณ ๋ฐ๋ ๋ค์ํ ์์ ๋ฅผ ํตํด ์ด ์ถ์ ๊ฐ๋ ์ด ๊ตฌ์ฒดํ๋ ๊ฒ์ด๋ค.
์์ผ(Socket)์ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์์ **ํธ๋ค(handle)**์ด๋ **ํ์ผ ๋์คํฌ๋ฆฝํฐ(file descriptor)**์ฒ๋ผ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๊ณ ์ ์ดํ๋ ์ถ์์ ์ธ ๋ฐ์ดํฐ ํ์ ์ด๋ค. ์ด ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ค๋ช ํ๋ฉด, ์์ผ์ ํต์ ์ฉ "ํ์ผ"๊ณผ ๊ฐ๊ณ , ๊ทธ ํ์ผ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค๋ ์ ์์ ํ์ผ ์ ์ถ๋ ฅ๊ณผ ๋งค์ฐ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
๐ ์ ํ ํต์ vs ์์ผ ํต์ (๊ทธ๋ฆผ 1-10 ํด์)
(a) ์ ํ๊ธฐ ๊ตฌ์กฐ
- ์ฌ๋ โ ์์ฉ ํ๋ก๊ทธ๋จ
- ์ ํ๊ธฐ โ ์์ผ
- ์ ํ๋ง โ ์ธํฐ๋ท
๋ด๊ฐ ์ ํ๊ธฐ์ ๋๊ณ ๋งํ๋ฉด, ์๋๋ฐฉ์ ์ ํ๊ธฐ๋ก ์์ฑ์ด ์ ๋ฌ๋๋ฏ
์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ผ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ฉด, ์๋๋ฐฉ ์์ผ์ผ๋ก ๊ทธ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ค.
(b) ์์ธ ๋งคํ
- ๋ํ ์ ํ๋ฒํธ โ IP ์ฃผ์ (์ฃผ์์ ๋ฒ์๋ฅผ ๊ฒฐ์ )
- ๋ด์ ๋ฒํธ โ ํฌํธ ๋ฒํธ (๋์ผ ํธ์คํธ ๋ด ํน์ ์์ฉ ํ๋ก๊ทธ๋จ ์๋ณ)
- ์ ํ๊ธฐ โ ์์ผ (์ ํ๋ง์ ํตํด ์ฐ๊ฒฐ๋ ์ ์ถ๋ ฅ ์ฅ์น)
๋ฐ๋ผ์ ์์ผ์ IP ์ฃผ์ + ํฌํธ ๋ฒํธ + ํ๋กํ ์ฝ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ
๋คํธ์ํฌ ํต์ ์ ์ข ๋จ์ (endpoint) ์ญํ ์ ์ํํ๋ค.
๐ ์์ผ = ํต์ ๊ฐ๋ฅํ ํ์ผ ํธ๋ค
์์ผ์ ๋ฐ์ดํฐ ํ์ ๊ด์ ์์ ๋ณด๋ฉด "ํ์ผ ํธ๋ค"์ด๋ "๋์คํฌ๋ฆฝํฐ"์ ๋์ผํ ํจํด์ผ๋ก ๋์ํ๋ค.
(a) ๋ฆฌ๋ ์ค ํ์ผ ์ ์ถ๋ ฅ ์์
int fd = open("myfile.txt", O_RDONLY); // ํ์ผ ์ด๊ธฐ
read(fd, buf, size); // ์ฝ๊ธฐ
write(fd, buf, size); // ์ฐ๊ธฐ
(b) ์๋์ฐ ์์ผ ํต์ ์์
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); // ์์ผ ์์ฑ
recv(sock, buf, size, 0); // ๋ฐ์ดํฐ ์์
send(sock, buf, size, 0); // ๋ฐ์ดํฐ ์ก์
โ ๋ชจ์์ด ๊ฑฐ์ ๋์ผํ๋ฉฐ, ์์ผ๋ ์ผ์ข ์ ์ ์ถ๋ ฅ ์คํธ๋ฆผ์ผ๋ก ๋ค๋ฃฐ ์ ์์์ ๋ณด์ฌ์ค๋ค.
โ ๋ฆฌ๋ ์ค vs ์๋์ฐ์ ์ฐจ์ด์
ํญ๋ชฉ ๋ฆฌ๋ ์ค ์๋์ฐ
์์ผ ํ์ | int (ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ๋์ผ) | SOCKET (๋ณ๋ ์ ์๋ ํ์ ) |
ํจ์ ํธํ์ฑ | read() / **write()**๋ ์ฌ์ฉ ๊ฐ๋ฅ | recv() / **send()**๋ง ์ฌ์ฉ |
์ ์ถ๋ ฅ ํตํฉ ์ฒ๋ฆฌ | select, epoll ๋ฑ์ผ๋ก ํ์ผ/์์ผ ํตํฉ ๊ด๋ฆฌ | Winsock ์ ์ฉ API ํ์ |
์์ธ ์ฒ๋ฆฌ | errno ๊ธฐ๋ฐ | WSAGetLastError() ๊ธฐ๋ฐ |
๋ฆฌ๋ ์ค๋ ์์ผ์ ํ์ผ์ฒ๋ผ ์ทจ๊ธํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ด๋ ์ถ์ํ์ ์ ๋ฆฌ๋ฐ๋ฉด ์๋์ฐ๋ ๋ณ๋ API ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌ๋์ด ์์ด Winsock ์ด๊ธฐํ์ ์ข ๋ฃ ์ฝ๋ ํ์
์ ๋ฆฌ: ์์ผ์ ํต์ฌ ๊ฐ๋ ์์ฝ
- ์์ผ์ ๋คํธ์ํฌ ํต์ ์ ์ํ ๋ ผ๋ฆฌ์ ์ ์ถ๋ ฅ ์ฅ์น
- IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ก ๋คํธ์ํฌ์์ ์๋๋ฅผ ์ง์
- ํจ์ ํธ์ถ๋ง์ผ๋ก ๋ณต์กํ ํต์ ์ ์ถ์ํ
- ๋ฆฌ๋ ์ค์์ ํ์ผ ๋์คํฌ๋ฆฝํฐ, ์๋์ฐ์์ ์ ์ฉ SOCKET ํ์ ์ฌ์ฉ
์ดํ ํ์ต์์๋ ์ด ์์ผ์ ์ค์ฌ์ผ๋ก ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๋ ์์ ๋ฅผ ๋ค๋ฃจ๊ฒ ๋๋ค.
์์ผ์ ์ด์ฉํ ํต์ ์์ ํต์ฌ์ **์๋ก ์ฐ๊ฒฐ๋ ๋ ํต์ ์ข ๋จ์ (Communication End-Point)**์ ์ ์ํ๊ณ , ์ด๋ฅผ ํตํด ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด๋ค. ํต์ ์ ์ฑ๋ฆฝ์ํค๊ธฐ ์ํด ํ์ํ ์์๋ค์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์ด ์ ๋ณด๋ ๋ชจ๋ ์ด์์ฒด์ ๊ฐ ์์ผ ๋ด๋ถ์์ ๊ด๋ฆฌํ๋ค.
โ ํต์ ์ ํ์ํ ๊ธฐ๋ณธ ์์ 5๊ฐ์ง
- ์ฌ์ฉํ ํ๋กํ ์ฝ
- TCP/IP (์ ๋ขฐ์ฑ ์๋ ์ฐ๊ฒฐํ ํต์ )
- UDP/IP (๋น ๋ฅธ ์ ์ก์ด ๊ฐ๋ฅํ ๋น์ฐ๊ฒฐํ ํต์ )
- ์ก์ ์ธก IP ์ฃผ์
- ๋ณดํต ์๋์ผ๋ก ์ค์ ๋์ง๋ง, ๋ช ์์ ์ผ๋ก ๋ฐ์ธ๋ฉํ ์๋ ์์
- ex: 192.168.0.11
- ์ก์ ์ธก ํฌํธ ๋ฒํธ
- ํด๋ผ์ด์ธํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด์์ฒด์ ๊ฐ ๋์ ์ผ๋ก ํ ๋น (ephemeral port)
- ์๋ฒ๋ ๊ณ ์ ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์ฐ๊ฒฐ์ ๋๊ธฐ
- ์์ ์ธก IP ์ฃผ์
- ์๋ฒ์ ๊ณ ์ ๋ ์ฃผ์ ๋๋ ๋๋ฉ์ธ ์ด๋ฆ์ด DNS๋ฅผ ํตํด IP๋ก ํด์๋จ
- ์์ ์ธก ํฌํธ ๋ฒํธ
- ์๋น์ค์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ ํด์ง ๊ฐ ์ฌ์ฉ (ex: HTTP: 80, FTP: 21, ์ฌ์ฉ์ ์ ์ ํฌํธ๋ ๊ฐ๋ฅ)
์์ฉ ํ๋ก๊ทธ๋จ์ ์ด๋ฌํ ์ ๋ณด์ ์ง์ ์ ๊ทผํ์ง ์์๋ ๋๊ณ , ์์ผ์ ํตํด ์ด๋ฅผ ์ถ์์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ค. ์ด ๋๋ถ์ ๋ณต์กํ ๋คํธ์ํฌ ์ ์ด ์์ด๋ ํต์ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ ์ ์๊ฒ ๋๋ค.
๐ ํต์ ์ข ๋จ์ (Endpoint)์ผ๋ก์์ ์์ผ
[๊ทธ๋ฆผ 1-12]๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๊ฐ๊ฐ ์์ผ์ ํตํด ํต์ ํ๋ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ์ค๋ช ํ๋ค:
[ํด๋ผ์ด์ธํธ]
send(sock, buf, size)
์์ผ A
- IP: 147.46.114.70
- ํฌํธ: 12023
[์ธํฐ๋ท]
TCP/IP ํ๋กํ ์ฝ
์์ผ B
- IP: 61.72.244.22
- ํฌํธ: 9001
[์๋ฒ]
recv(sock, buf, size)
- ํด๋ผ์ด์ธํธ๋ ์์ ์ ์์ผ์ด ์๋ฒ์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๋ฏฟ๊ณ send() ํธ์ถ
- ์๋ฒ๋ ์์ ์ ์์ผ์ด ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๋ฏฟ๊ณ recv() ํธ์ถ
- ์ค์ ๋ก๋ ์ด์์ฒด์ ๊ฐ TCP/IP๋ฅผ ์ด์ฉํด ์์ชฝ ์์ผ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ค๊ณํด์ค๋ค
์์ผ์ ์ค์ ๋คํธ์ํฌ ์ฅ๋น๊ฐ ์๋๋ผ, ์ด์์ฒด์ ์์ ์กด์ฌํ๋ ๋ ผ๋ฆฌ์ ์ธ ์ฐ๊ฒฐ์ ์ด๋ฉฐ,ํต์ ์ ํ์ํ ๋ชจ๋ ์ ๋ณด(IP, ํฌํธ, ์ํ ๋ฑ)๋ฅผ ์ด ์์ผ์ด ํฌํจํ๊ณ ์๋ค.
๐ก ์ฐธ๊ณ : ์ค์ ์ฐ๊ฒฐ ์ ์์
ํด๋ผ์ด์ธํธ ์์ผ:
IP: 147.46.114.70
Port: 12023
์๋ฒ ์์ผ:
IP: 61.72.244.22
Port: 9001
ํต์ ์๋ณ์:
[147.46.114.70:12023] <-> [61.72.244.22:9001]
์ด๋ฌํ ์์ TCP ์ฐ๊ฒฐ์ด ์ ์ง๋๋ ๋์ ์ ์ผํ๊ฒ ์กด์ฌํ๋ฉฐ,
์ด์์ฒด์ ๋ ์ด ์กฐํฉ์ ๊ธฐ์ค์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๋ค.
์ ๋ฆฌ
- ์์ผ์ ํต์ ์ ๋ ผ๋ฆฌ์ ์ถ๋ฐ์ ์ด์ ๋์ฐฉ์
- send()์ recv() ํธ์ถ๋ง์ผ๋ก ์ค์ ํต์ ์ด ์ด๋ฃจ์ด์ง๋ค๊ณ ๋ฏฟ๊ณ ํ๋ก๊ทธ๋๋ฐํ๋ฉด ๋จ
- ์ด์์ฒด์ ๋ ํต์ ์ ํ์ํ ๋ชจ๋ ์ ๋ณด(IP, ํฌํธ, ํ๋กํ ์ฝ)๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์์ผ์ ์ ์ฅํ๊ณ ์ฒ๋ฆฌ
- ์์ผ์ ์ถ์์ ์ด์ง๋ง ์ค์ ๋ฐ์ดํฐ๋ ๋ฌผ๋ฆฌ ๋คํธ์ํฌ๋ฅผ ํตํด ์ค๊ฐ๋ค
์์ผ์ TCP/IP ํ๋กํ ์ฝ ์คํ์์ ์์ฉ ๊ณ์ธต๊ณผ ์ ์ก ๊ณ์ธต ์ฌ์ด์ ์์นํ๋ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค์ด๋ค. ๋ค์ ๋งํด, ์์ผ์ ํต์ ์ ์ํ '์ฐฝ๊ตฌ' ์ญํ ์ ํ ๋ฟ, ํต์ ์์ฒด์ ์ฃผ์ฒด๋ ์๋๋ค. ๋ฐ๋ผ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ๋ฐ๋์ ์์ชฝ ๋ชจ๋๊ฐ ์์ผ์ ์ฌ์ฉํ ํ์๋ ์๋ค. ๋จ์ง ๋์ผํ ํ๋กํ ์ฝ(TCP, UDP ๋ฑ)์ ์ฌ์ฉํ๊ณ , ์ ํด์ง ํ์๊ณผ ์ ์ฐจ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๐ ์์ผ์ "์ ๊ทผ ์ฐฝ๊ตฌ"์ผ ๋ฟ์ด๋ค
[๊ทธ๋ฆผ 1-13]์ ํตํด ์ดํดํ ์ ์๋ ํต์ฌ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค:
์์ฉ ๊ณ์ธต
โ ์์ฉ ํ๋ก๊ทธ๋จ (Web, FTP, Chat, ๋ฑ)
โ (API ํธ์ถ)
์์ผ ์ธํฐํ์ด์ค
โ send(), recv(), connect(), bind() ๋ฑ
โ
์ ์ก ๊ณ์ธต
โ TCP (์ ๋ขฐ์ฑ), UDP (์๋ ์ฐ์ )
โ
์ธํฐ๋ท ๊ณ์ธต
โ IP, ICMP, IGMP
์์ผ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด TCP ๋๋ UDP ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์๋๋ก API ํํ๋ก ์ ๊ณต๋๋ ์ ์ ์ด๋ค.์ฆ, ์์ผ์ ์ ์ก ๊ณ์ธต(TCP/UDP) ์์ ์๊ณ , ์์ฉ ๊ณ์ธต(Web, Mail, Chat ๋ฑ) ์๋์ ์์นํ๋ค.
๐ฏ ํต์ฌ ๊ฐ๋ ์์ฝ
- ์์ผ์ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ์ ์กํ๋ ๊ฒ์ด ์๋๋ผ, ์ ์ก ๊ณ์ธต ํ๋กํ ์ฝ์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค
- ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ผ์ ํตํด TCP๋ UDP๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด์ ๋ณ๋๋ก IP ์ฃผ์, ํฌํธ, ๋ฐ์ดํฐ ํฌ๋งท ๋ฑ์ ์ง์
- ํต์ ์๋๋ฐฉ์ด ์์ผ์ด ์๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก TCP/IP ํต์ ์ ๊ตฌํํด๋ ์ํธ ํต์ ์ ๊ฐ๋ฅํ๋ค (๋จ, ํ๋กํ ์ฝ ํฌ๋งท์ ๋์ผํด์ผ ํจ)
๐งญ ์์ธ์ ์ ๊ทผ: ์ ์ก ๊ณ์ธต ์๋ต
์ ์ก ๊ณ์ธต์ ๊ฑด๋๋ฐ๊ณ **์ธํฐ๋ท ๊ณ์ธต(IP ๊ณ์ธต)**์ ์ง์ ์ ์ดํ๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด:
- ICMP (Internet Control Message Protocol): ping, traceroute ๋ช ๋ น์ ์ฌ์ฉ
- IGMP (Internet Group Management Protocol): ๋ฉํฐ์บ์คํธ ๊ทธ๋ฃน ๊ด๋ฆฌ์ ์ฌ์ฉ
์ด๋ฌํ ๋ฐฉ์์ ์ผ๋ฐ์ ์ธ ์์ผ API๊ฐ ์๋ **Raw Socket (์์ ์์ผ)**์ ํตํด ๊ตฌํ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ํ๊ณ๊ฐ ์๋ค:
- ๊ตฌํ ๋์ด๋ ๋์
- ๊ด๋ฆฌ์ ๊ถํ ํ์
- ์ค์ ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌพ (๋ณด์ ์๋ฃจ์ , ๋ผ์ฐํ ์ ์ด, ํธ๋ํฝ ๋ถ์ ๋ฑ ํน์ ๋ชฉ์ )
๐ ๊ฒฐ๋ก
- ์์ผ์ TCP/IP ํต์ ์ โ์ถ์ ๋ฌธโ์ ํด๋นํ๋ฉฐ, ๋ฐ์ดํฐ ์ก์์ ์ด ์๋ ์ ์, ๋ฐ์ธ๋ฉ, ์ก์์ ์์ฒญ ๋ฑ์ ์ํ ์ธํฐํ์ด์ค
- ํ๋กํ ์ฝ์ ๋ฐ๋ฅธ ๋์ ๋ฐฉ์์ ๋ด๋ถ์ ์ผ๋ก TCP/UDP๊ฐ ์ฒ๋ฆฌํ๊ณ ,
- ๊ฐ๋ฐ์๋ ์์ผ ํจ์๋ฅผ ํตํด ์ถ์์ ์ผ๋ก ์ ์ดํ๋ฉด ๋จ
์์ผ์ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์์ ๋งค์ฐ ์ค์ํ ์์์ด๋ฉฐ, **์๋์ฐ ์์ผ(Winsock)**๊ณผ ๋ฆฌ๋ ์ค ์์ผ์ ๊ณตํต๋ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์๋ ๊ฐ ์ด์์ฒด์ ์ ํน์ฑ์ ๋ฐ๋ผ ์ผ๋ถ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋ค. ์ด ์ ์์๋ ํนํ ์๋์ฐ ์์ผ์ ํน์ง์ ์ค์ฌ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๊ณ , ๋ฆฌ๋ ์ค์์ ๋น๊ต๋ฅผ ํตํด ๊ฐ๋ฐ์๊ฐ ์ค๋ฌด์์ ์ด๋ค ์ ์ ์ฃผ์ํด์ผ ํ๋์ง ์ ๋ฆฌํด๋ณธ๋ค.
โ 1. ์์ผ์ ํน์ง (์๋์ฐ ๊ธฐ์ค)
๐ ๊ณตํต ๊ธฐ๋ฐ: BSD UNIX ์ ๋์ค ์์ผ ๋ชจ๋ธ
- ์๋์ฐ ์์ผ์ BSD UNIX ์์ผ ์ธํฐํ์ด์ค์ ๊ธฐ๋ฐ
- ๋ฐ๋ผ์ ์์ค ์ฝ๋ ์์ค์์๋ ๋ฆฌ๋ ์ค์ ๋น๊ต์ ํธํ์ฑ์ด ๋์
- socket(), bind(), connect(), send(), recv() ๋ฑ ๊ธฐ๋ณธ ํจ์๋ ๋์ผ
๐ ์ฃผ์ ์ฐจ์ด์ : ์๋์ฐ๋ง์ ๊ตฌ์กฐ์ ์๊ตฌ์ฌํญ
- DLL ๊ธฐ๋ฐ ์ธํฐํ์ด์ค
- ์๋์ฐ ์์ผ์ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ **DLL (Dynamic-Link Library)**๋ก ์ ๊ณต
- ๋ฐ๋ผ์ ์ด๊ธฐํ(WSAStartup)์ ์ข ๋ฃ(WSACleanup) ์์ ์ด ํ์
- ๋ฆฌ๋ ์ค์์๋ ์ด๋ฐ ์์ ์ด ์ ํ ํ์ ์์
- ๋ฉ์์ง ๊ธฐ๋ฐ GUI ๊ตฌ์กฐ
- ์๋์ฐ๋ GUI ํ๋ก๊ทธ๋จ์ด ๋ง์ ํ๊ฒฝ์ ๊ณ ๋ คํ์ฌ,
- ๋น๋๊ธฐ ํต์ ์ ๋ฉ์์ง์ ์ฐ๊ณํ๋ ํจ์๋ค(ex: WSAAsyncSelect())์ ์ ๊ณต
- ์ด๋ ์๋์ฐ ๋ฉ์์ง ํ์ ์์ผ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํด GUI๊ฐ ๋ฉ์ถ์ง ์๊ณ ๋์ํ ์ ์๋๋ก ํ๋ค
- ๋ฉํฐ์ค๋ ๋ ์ง์ ๊ณ ๋ ค
- ์๋์ฐ๋ ์ด์์ฒด์ ์์ค์์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์ ๊ฐ๋ ฅํ ์ง์
- ๋ฐ๋ผ์ ์์ผ๋ ์ค๋ ๋ ๊ฐ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋๋ก ๋ณ๋์ ๋ณดํธ ๊ตฌ์กฐ ํ์
- WSA_FLAG_OVERLAPPED, CreateThread() ๊ธฐ๋ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ตฌ์กฐ ๋ฑ์ด ์ฌ์ฉ๋จ
- ์์ ๋ฒ์ ์์กด์ฑ
- ์๋์ฐ๋ ๋ฒ์ ์ ๋ฐ๋ผ ์ง์ํ๋ Winsock ๋ฒ์ ์ด ๋ค๋ฅด๋ฉฐ, ๊ฐ๋ฐ์๋ ์ด๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค
- ์์:์๋์ฐ ๋ฒ์ ์ง์ Winsock ๋ฒ์
Windows 95 1.1 (์ ๊ทธ๋ ์ด๋๋ก 2.2 ๊ฐ๋ฅ) Windows 98 ์ดํ ๊ธฐ๋ณธ์ ์ผ๋ก 2.2 ์ง์ - ๋ฆฌ๋ ์ค(๋๋ ์ ๋์ค)์๋ ๋ฒ์ ๊ฐ๋ ์ด ์์ผ๋ฉฐ, ์์คํ ํธ์ถ๋ง์ผ๋ก ๋ฐ๋ก ์์ผ ์ฌ์ฉ ๊ฐ๋ฅ
โ๏ธ ์ ๋ฆฌ: ๋ฆฌ๋ ์ค ์์ผ๊ณผ ์๋์ฐ ์์ผ์ ๋น๊ต ์์ฝ
ํญ๋ชฉ ๋ฆฌ๋ ์ค ์์ผ ์๋์ฐ ์์ผ (Winsock)
์ด๊ธฐํ / ์ข ๋ฃ | ํ์ ์์ | WSAStartup(), WSACleanup() ํ์ |
ํ์ | int (ํ์ผ ๋์คํฌ๋ฆฝํฐ) | SOCKET (๋ณ๋ ํ์ ) |
๋น๋๊ธฐ ๋ฐฉ์ | select(), poll(), epoll() ๋ฑ | WSAAsyncSelect(), WSAEventSelect() ๋ฑ |
๋ฉํฐ์ค๋ ๋ | OS์์ ๊ธฐ๋ณธ ์ง์ | ์ค๋ ๋ ์์ ์ฑ์ ์ํ ์ถ๊ฐ ๊ณ ๋ ค ํ์ |
API ๊ตฌ์กฐ | ์์คํ ์ฝ์ ๊ฐ๊น์ | DLL ๊ธฐ๋ฐ์ API ํจ์ ๊ตฌ์กฐ |
๋ฒ์ ๊ฐ๋ | ์์ | Winsock 1.1 / 2.2 ๊ตฌ๋ถ๋จ |
๐งญ ์ค๋ฌด ํ
- ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ ์์๋ #ifdef WIN32 ๋ฑ์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด๊ธฐํ ์ฝ๋์ ํ์ ์ ๋ถ๋ฆฌ ์ค๊ณ
- ๋น๋๊ธฐ ์์ผ ๊ตฌํ ์, ๋ฆฌ๋ ์ค๋ epoll, ์๋์ฐ๋ WSAEventSelect ๋๋ IOCP ๋ชจ๋ธ์ ํ์ฉ
- ์ฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ GUI ๊ธฐ๋ฐ ์ฑ์ ๋ง๋๋ ๊ฒฝ์ฐ, ์๋์ฐ ๋ฉ์์ง ๊ธฐ๋ฐ ์์ผ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์์ ๊ณ ๋ คํด์ผ ํจ
์์(Winsock)์ Windows ํ๊ฒฝ์์ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ํ์ ์ธ ์ธํฐํ์ด์ค๋ก, ์ด๊ธฐ 1.x ๋ฒ์ ์ UNIX ์์ผ๊ณผ์ ํธํ์ฑ์ ๊ณ ๋ คํด TCP/IP ์ค์ฌ์ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์๊ณ , 2.x ๋ฒ์ ๋ถํฐ๋ ๋ค์ํ ํ๋กํ ์ฝ์ ํฌ๊ดํ ์ ์๋๋ก ํ์ฅ๋์๋ค. ์ด๋ฌํ ๋ฐ์ ๋๋ถ์ ์๋์ฐ ์์ผ์ ์ค๋๋ Bluetooth, IPv6 ๋ฑ ๋ณตํฉ์ ์ธ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ ๊ฐ๋ ฅํ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ค.
โ ์๋์ฐ & ๋ฆฌ๋ ์ค ๊ณตํต ์ง์ ํ๋กํ ์ฝ (Windows 10 ๊ธฐ์ค)
- IPv4: ์ธํฐ๋ท์ ๊ธฐ๋ณธ ์ฃผ์ ์ฒด๊ณ (์๋์ฐ 95 ์ด์)
- IPv6: ํ์ฅ๋ ์ฃผ์ ๊ณต๊ฐ ๋ฐ ํฅ์๋ ๊ธฐ๋ฅ ์ ๊ณต (์๋์ฐ XP SP1 ์ด์)
- Bluetooth: ๊ทผ๊ฑฐ๋ฆฌ ๋ฌด์ ํต์ (์๋์ฐ XP SP2 ์ด์)
- IrDA (์ ์ธ์ ํต์ ): ๋จ๊ฑฐ๋ฆฌ ์ ์ธ์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ ์ก (์๋์ฐ 98 ์ด์)
๋จ, ์ต์ ํ๊ฒฝ์์๋ Bluetooth๋ IrDA๋ ํน์ ๋ชฉ์ ์ธ์๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ, ์ฃผ๋ก IPv4/IPv6 ๊ธฐ๋ฐ TCP/IP ์์ผ์ด ์ค๋ฌด์ ์ค์ฌ์ด๋ค.
๐งฉ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์
- ๋์ ์ด์์ฑ (Cross-Platform Compatibility)
- ๋ฆฌ๋ ์ค์ ์๋์ฐ ๋ชจ๋ ์์ผ API ๊ตฌ์กฐ๊ฐ ์ ์ฌ
- ๋๋ถ๋ถ์ ์์ค ์ฝ๋๋ฅผ ํ๋ซํผ ๊ฐ ์ฝ๊ฒ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฒ์ฉ์ฑ
- TCP/IP ๋ฟ๋ง ์๋๋ผ Bluetooth, IPv6 ๋ฑ ๋ค์ํ ํ๋กํ ์ฝ์ ๋์ผํ ์์ผ API๋ก ์ง์
- ํ๋กํ ์ฝ ๋ณ๊ฒฝ ์ ์ฝ๋ ์์ ์ต์ํ ๊ฐ๋ฅ
- ์ ์์ค ์ ๊ทผ (Low-Level Control)
- ํจํท ์ ์ก/์์ ํ์ด๋ฐ, ๋ฒํผ ํฌ๊ธฐ, ์ค๋ฅ ์ ์ด ๋ฑ์ ์ ๋ฐํ๊ฒ ์ ์ด ๊ฐ๋ฅ
- ๊ณ ์ฑ๋ฅ ์๋ฒ๋ ๋คํธ์ํฌ ํด ๊ฐ๋ฐ์ ์ ๋ฆฌ
- ์์ฉ ํ์ฅ์ฑ
- ์์ผ ๊ธฐ๋ฐ ์์ HTTP, FTP, MQTT ๋ฑ ๊ณ ์์ค ํ๋กํ ์ฝ์ ์ง์ ๊ตฌํํ ์ ์์
- ํ์ํ ๊ธฐ๋ฅ๋ง ๊ตฌํํ๊ณ ์ต์ ํํ ์ ์์ด ๊ฒฝ๋ ์์คํ ์ด๋ ์ปค์คํฐ๋ง์ด์ง์ ์ ๋ฆฌ
โ ๏ธ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์
- ์์ฉ ๊ณ์ธต ํ๋กํ ์ฝ ์ง์ ์ค๊ณ ํ์
- ๋ฐ์ดํฐ์ ๊ตฌ์กฐ, ์์, ํ๋ฆ ์ ์ด, ์์ธ ์ฒ๋ฆฌ ๋ฑ ๋ชจ๋ ์์๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์
- ์๋ฅผ ๋ค์ด โ๋ก๊ทธ์ธ ์ ๋ณด โ ๊ฒฐ๊ณผ โ ๋๊ธฐ โ ์์ โ ๋ฑ์ ํ๋ฆ์ ์ง์ ์ฝ๋ฉํด์ผ ํจ
- ์ด๊ธฐ์ข
ํธ์คํธ ๊ฐ ํธํ์ฑ ๋ฌธ์
- ์๋ก ๋ค๋ฅธ ๋ฐ์ดํธ ์์(Byte Order) ์ฌ์ฉ (๋ฆฌํ์๋์ vs ๋น ์๋์)
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋จ์(32๋นํธ, 64๋นํธ) ์ฐจ์ด๋ก ์ธํด ์ ์ก ์ ๋ณํ์ด ํ์ํจ
- ํด๊ฒฐ ๋ฐฉ๋ฒ: htonl(), ntohl(), memcpy() ๋ฑ์ ํตํ ๋ช ์์ ์ ๊ทํ
- ํ๋กํ ์ฝ ๋ณ๊ฒฝ ์ ๊ตฌ์กฐ ์ ์ฒด ์์ ํ์
- ํ๋์ ์ ์ก ํ๋ฆ์ด๋ ๋ฉ์์ง ํฌ๋งท์ด ๋ณ๊ฒฝ๋๋ฉด, ์๋ฒ-ํด๋ผ์ด์ธํธ ์ฝ๋ ๋ชจ๋ ์์ ํ์
์์: ์ค๊ณ ๋ถ๋ด์ด ํฐ ๊ฒฝ์ฐ
[๋ณด์ ๋ฉ์์ง ํต์ ์๊ตฌ ๋ฐ์] โ ๊ธฐ์กด ํ๋ฌธ ์ ์ก ์์ผ ๊ตฌ์กฐ ํ๊ดด๋จ
โ ์ํธํ/๋ณตํธํ ๋ก์ง ์ถ๊ฐ ํ์
โ ์ ์ก ์คํจ ์ ์ฌ์๋ ๊ตฌ์กฐ๋ ์์ ํ์
โ ์ฝ๋ ์ ์ง๋ณด์ ๋ณต์ก์ฑ ์ฆ๊ฐ
์ด์ฒ๋ผ ์์ฉ ํ๋กํ ์ฝ์ ์ง์ ๊ตฌํํ๋ ์์ ๋ก์์ ๋์์ ์ํ์ ์๋ฐํ๋ฉฐ,
์ค์ ์ ํ ์์ค์ ์์คํ ์์๋ ์ด ์ ์ด ์ค๊ณ์ ๋๋ฒ๊น ์ ๊ฐ์ฅ ํฐ ๋๊ด์ด ๋๊ธฐ๋ ํ๋ค.
์ ๋ฆฌ
์ฅ์ ๋จ์
๋ค์ํ ํ๋ซํผ ๋ฐ ํ๋กํ ์ฝ ์ง์ | ํ๋กํ ์ฝ ๊ตฌ์กฐ ์ง์ ์ค๊ณ ํ์ |
์ฝ๋ ์ฌ์ฌ์ฉ ๋ฐ ์ด์ ์ฉ์ด | ๋ฐ์ดํฐ ํธํ์ฑ ์๋ ์ฒ๋ฆฌ |
๊ณ ์ฑ๋ฅ ์ต์ ํ ๊ฐ๋ฅ | ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ ์ ๋ฉด ์ฌ์์ ํ์ |
ํ์ฅ์ฑ ๋์ | ์ค๊ณ ๋ณต์ก์ฑ ์ฆ๊ฐ |
**์๋์ฐ ์์ผ ๊ตฌ์กฐ(Windows Socket Architecture)**๋ ๋ค์ํ ๋ฒ์ ๊ณผ ํ๋กํ ์ฝ์ ํ๋์ ํต์ผ๋ ๊ตฌ์กฐ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ณ์ธต ๊ธฐ๋ฐ ์ค๊ณ๋ก, ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ ํ๋กํ ์ฝ์ ๋ด๋ถ๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๋ ๊ฐ๋จํ API ํธ์ถ๋ง์ผ๋ก ํต์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
โ ์๋์ฐ ์์ผ ๊ตฌ์กฐ ํต์ฌ ์ดํด (๊ทธ๋ฆผ 1-14 ๊ธฐ์ค)
[์์ฉ ํ๋ก๊ทธ๋จ]
โ
WSOCK32.DLL โ (์์ 1.x API)
โ โ
WS2_32.DLL โ MSWSOCK.DLL (ํ์ฅ ๊ธฐ๋ฅ)
โ
[ํ๋ถ ํ๋กํ ์ฝ] โ TCP/IP, Bluetooth, IrDA
๐ DLL ๊ตฌ์ฑ ์์ ์ค๋ช
1. WSOCK32.DLL
- ์์ 1.x ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ
- ๋ด๋ถ์ ์ผ๋ก **WS2_32.DLL**์ ํธ์ถํ์ฌ ๊ธฐ๋ฅ์ ์์
- ๋ ๊ฑฐ์ ์์คํ ๊ณผ์ ํธํ์ฑ ์ ์ง์ฉ (์: ์ค๋๋ ๋คํธ์ํฌ ๊ฒ์์ด๋ ๋๊ตฌ)
2. WS2_32.DLL
- ์์ 2.x์ ์ค์ฌ DLL์ด์ ํ์ค ์์ผ API ์ ๊ณต์
- TCP, UDP, Bluetooth, IrDA ๋ฑ ๋ค์ํ ํ๋กํ ์ฝ ์คํ๊ณผ ์ฐ๊ฒฐํ๋ ์ค๊ฐ์ ์ญํ
- ๊ฑฐ์ ๋ชจ๋ ํ๋ ์๋์ฐ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ์ด DLL์ ์ง์ ์ฐ๊ฒฐ๋จ
3. MSWSOCK.DLL
- Microsoft์์ ์์ ํ์ค ์ธ์ ์ ๊ณตํ๋ ํ์ฅ ๊ธฐ๋ฅ ์งํฉ
- ์: IOCP (์ ์ถ๋ ฅ ์๋ฃ ํฌํธ), ๊ณ ๊ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ, QoS(์๋น์ค ํ์ง) ๊ด๋ จ ๊ธฐ๋ฅ
- ๊ณ ์ฑ๋ฅ ์๋ฒ ํ๋ก๊ทธ๋๋ฐ์ด๋ ํน์ ๋ชฉ์ ์ ์ปค๋-๋ ๋ฒจ ๋คํธ์ํฌ ์ฒ๋ฆฌ์ ํ์ฉ๋จ
๐ง ์๋ ํ๋กํ ์ฝ ์ฐ๊ฒฐ ๋ฐฉ์
- ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ผ์ ์์ฑํ ๋ AF_INET ๋๋ AF_BTH, SOCK_STREAM ๋ฑโ WS2_32.DLL์ด ์๋์ผ๋ก ํด๋น ํ๋กํ ์ฝ ๋๋ผ์ด๋ฒ(TCP/IP, Bluetooth ๋ฑ)์ ์ฐ๊ฒฐ
- โ ๊ฐ๋ฐ์๋ ์ค์ ๊ตฌํ์ฒด์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ์ถ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
- ์ฌ์ฉํ๋ ค๋ ํ๋กํ ์ฝ์ ์์ฑ์ ์ ๋ฌํ๋ฉด
๐ก 64๋นํธ ํ๊ฒฝ์์์ DLL ์ฒ๋ฆฌ
- 64๋นํธ ์๋์ฐ๋ 32๋นํธ์ฉ๊ณผ 64๋นํธ์ฉ DLL์ ๋ถ๋ฆฌํด์ ์ ๊ณต
- WS2_32.DLL (32bit) โ SysWOW64\\
- WS2_32.DLL (64bit) โ System32\\
- ์ด์์ฒด์ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด 32๋นํธ์ธ์ง 64๋นํธ์ธ์ง ์๋ ํ๋จํ์ฌ
- ์ฌ๋ฐ๋ฅธ DLL์ ๋ก๋ฉํ๋ฏ๋ก ๋ณ๋ ์ค์ ์์ด๋ ํธํ ๊ฐ๋ฅ
๐ฏ ์ค๋ฌด ์ ์ฉ ํฌ์ธํธ
์ํฉ ์ฒ๋ฆฌ ๋ฐฉ์
๊ตฌ๋ฒ์ ํ๋ก๊ทธ๋จ ์ ์ง | WSOCK32.DLL ์ฌ์ฉ (์๋์ ์ผ๋ก WS2_32.DLL ํธ์ถ) |
์ต์ API ๋๋ ๊ณ ์ฑ๋ฅ ์๋ฒ ๊ตฌํ | WS2_32.DLL ์ง์ ํธ์ถ + ํ์์ MSWSOCK.DLL ๋ณํ ์ฌ์ฉ |
๊ณ ๊ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ | WSAEventSelect, WSAAsyncSelect, IOCP ์ฌ์ฉ ์ ๋ด๋ถ์ ์ผ๋ก MSWSOCK.DLL ์ฐ๋ |
Bluetooth/IrDA ํต์ | ๋์ผ ์์ผ ์ธํฐํ์ด์ค๋ก AF_BTH, AF_IRDA ์ฌ์ฉ ๊ฐ๋ฅ, ๋จ ์ผ๋ถ ํ๋กํ ์ฝ์ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ |
์ ๋ฆฌ
- ์์์ ์ฌ๋ฌ ๋ฒ์ ์ API, ํ์ฅ ๊ธฐ๋ฅ, ๋ค์ํ ํ๋กํ ์ฝ์ ํ๋์ ์ผ๊ด๋ ๊ตฌ์กฐ๋ก ํตํฉ
- ์์ผ ์์ฑ ํจ์ ํ ์ค์ด๋ฉด, ๋ด๋ถ์ ์ผ๋ก ์๋ง์ ์ฐ๊ฒฐ์ ์๋ ์ํ
- **WS2_32.DLL**์ ์๋์ฐ ๋คํธ์ํฌ API์ ์ค์ง์ ํต์ฌ
์ด์ ๋ถํฐ ๋ณธ๊ฒฉ์ ์ธ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ณ๋ก ๋ค์ด๊ฐ๋ค. ์ด๋ฒ ์น์ ์ ์๋์ฐ ํ๊ฒฝ์์ TCP ์๋ฒ ์์ผ ํ๋ก๊ทธ๋จ์ ์ง์ ์์ฑํ๊ณ ํ ์คํธํ๋ ์ค์ต์ด๋ค. ๋ชฉํ๋ ๊ฐ๋จํ๋ค: ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๋ฐ์ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๊ธฐ๋ณธ TCP ์๋ฒ๋ฅผ ๊ตฌํํ๊ณ ํ ๋ท์ผ๋ก ํ ์คํธํด๋ณด๋ ๊ฒ์ด๋ค.
โ ์ค์ต ๋ชฉ์ ์์ฝ
- TCP ๊ธฐ๋ฐ์ ์๋ฒ ํ๋ก๊ทธ๋จ์ Visual Studio์์ ์์ฑ
- ํด๋ผ์ด์ธํธ์ ๋ฉ์์ง๋ฅผ ์์ ํ๊ณ , ์๋ฒ ์ฝ์์ ๊ทธ๋๋ก ์ถ๋ ฅ
- *ํ ๋ท(telnet)**์ ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ ํ ์คํธ ๊ฐ๋ฅ
- ์ค์ต์ ํตํด Winsock ์ด๊ธฐํ, ์์ผ ์์ฑ, ๋ฐ์ธ๋ฉ, ๋ฆฌ์จ, ์์ ํ๋ฆ์ ์ตํ
๐งช ์ค์ต ํ๊ฒฝ ์ค๋น: Visual Studio ํ๋ก์ ํธ ์์ฑ
โ Visual Studio์์ ์ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
- ๋ฉ๋ด ์ ํ:
- ํ์ผ(File) โ ์๋ก ๋ง๋ค๊ธฐ(New) โ ํ๋ก์ ํธ(Project)
- ํ๋ก์ ํธ ์ ํ ์ ํ:
- ๊ฒ์์ฐฝ์ โ์ฝ์โ ์ ๋ ฅ
- ํ ํ๋ฆฟ ๋ชฉ๋ก์์ โ Windows ๋ฐ์คํฌํฑ ๋ง๋ฒ์ฌ ์ ํ
- [๋ค์] ํด๋ฆญ
โก ์ ํ๋ก์ ํธ ์ค์
- ์ด๋ฆ(Name): Server
- ์์น(Location): ์ํ๋ ๊ฒฝ๋ก ์ค์
- ์๋ฃจ์ ๋๋ ํฐ๋ฆฌ ๋ง๋ค๊ธฐ: ์ฒดํฌ ํด์ ๊ฐ๋ฅ (๊ฐ์ธ ์ทจํฅ)
- [๋ง๋ค๊ธฐ] ํด๋ฆญ
โข ํ๋ก์ ํธ ์ต์ ์ค์ (์๋์ฐ ๋ฐ์คํฌํฑ ๋ง๋ฒ์ฌ)
- ์์ฉ ํ๋ก๊ทธ๋จ ์ข ๋ฅ: ์ฝ์ ์์ฉ ํ๋ก๊ทธ๋จ
- ์ถ๊ฐ ์ต์
:
- ๋น ํ๋ก์ ํธ ์ ํ โ
- ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋ ๋นํ์ฑํ (์ ํ ์ฌํญ)
๋๋ ์ด๋ฏธ ์ ๊ณต๋ ์์ ๋ฅผ ํ์ฉํ๋ ค๋ฉด:ํ์ผ โ ์ด๊ธฐ โ ํ๋ก์ ํธ/์๋ฃจ์ ...Chapter01\Server\Server.sln ์ ํํ์ฌ ์ด๊ธฐ
๐ ๊ฒฐ๊ณผ ๊ตฌ์กฐ ์์
ProjectFolder/
โ
โโโ Server.cpp โ ์ฌ๊ธฐ์ ์ฝ๋ ์์ฑ
โโโ Server.vcxproj โ ํ๋ก์ ํธ ์ค์ ํ์ผ
โโโ Server.sln โ ์๋ฃจ์
ํ์ผ
๐ฌ ๋ค์ ๋จ๊ณ
์ด์ ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ์ค๋น๋์์ผ๋ฏ๋ก, ๋ค์ ๋จ๊ณ์์๋ **Server.cpp**์ TCP ์๋ฒ ์์ผ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ๊ฒ ๋๋ค. Winsock ์ด๊ธฐํ๋ถํฐ socket(), bind(), listen(), accept() ๊ทธ๋ฆฌ๊ณ **recv()**๊น์ง์ ์ ํ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ค์ตํ๋ฉด์ ๊ธฐ์ด์ ์ธ TCP ์๋ฒ์ ํ๋ฆ๊ณผ ์ฝ๋ ํจํด์ ๋ชธ์ ์ตํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
์ด ๋จ๊ณ์์๋ Visual Studio ํ๊ฒฝ์์ ์ค์ ๋ก "Server"๋ผ๋ ์ด๋ฆ์ TCP ์์ผ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ์ธ๋ถ์ ์ผ๋ก ์ค์ ํ๊ณ ์๋ค. ์ด ์ค์ ์ ์ค์ต์ ๊ธฐ๋ฐ์ ๋ค์ง๋ ์ค์ํ ๋ถ๋ถ์ด๋ฉฐ, ํนํ ๋น ํ๋ก์ ํธ๋ก ๊ตฌ์ฑํด์ผ ์์ ์ฝ๋์์ ์ถฉ๋ ์์ด ์ง์ ์์ฑํ ์์ผ ์ฝ๋๋ฅผ ์จ์ ํ ๋ฐ์ํ ์ ์๋ค.
โ ์ค์ต 1-1: ์์ผ ์๋ฒ ํ๋ก์ ํธ ์์ฑ ์ ์ฐจ ์์ฝ
โ ํ๋ก์ ํธ ์ด๋ฆ ๋ฐ ์์น ์ง์
- ํ๋ก์ ํธ ์ด๋ฆ(Project Name): Server
- ์์น(Location): ์๋ฅผ ๋ค์ด **C:\\Test**์ ๊ฐ์ด ์ค์ต์ฉ ํด๋ ์ง์
- [์๋ฃจ์ ๋ฐ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ๋๋ ํฐ๋ฆฌ์ ๋ฐฐ์น] ์ฒดํฌ
- โ ์ด ์ค์ ์ ํ๋ก์ ํธ์ ์๋ฃจ์ ์ด ํ๋์ ํด๋ ์์ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋๋๋ก ํด์ค
- [๋ง๋ค๊ธฐ] ํด๋ฆญ
C:\\Test\\Server\\
โโโ Server.sln
โโโ Server.vcxproj
โโโ (์ฝ๋ ํ์ผ์ ๋์ค์ ์์ฑ)
โก ํ๋ก์ ํธ ์ต์ ๊ตฌ์ฑ
- ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฅ:
- ์ฝ์ ์ ํ๋ฆฌ์ผ์ด์ (.exe) โ ํฐ๋ฏธ๋ ๊ธฐ๋ฐ TCP ์๋ฒ ์ค์ต์ ์ ํฉ
- ๋น ํ๋ก์ ํธ (Empty Project): โ ์ฒดํฌ
- โ ์๋ ์์ฑ๋๋ **main()**์ด๋ ๊ธฐํ ์์ ์ฝ๋ ์์ด ์์ ํ ๋น์ด ์๋ ํ๋ก์ ํธ๋ก ์์ ๊ฐ๋ฅ
- ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋ (Precompiled Header): ์ฒดํฌ ํด์ ๊ถ์ฅ
- โ pch.h, stdafx.h ๋ฑ์ด ์๋ ์์ฑ๋์ง ์์ ์ฝ๋ ์์ฑ์ด ๋จ์ํด์ง
โ ํ: ์ฒ์๋ถํฐ ๋น ํ๋ก์ ํธ๋ก ์์ํ๋ฉด ์์ ์ฝ๋ ๋ถ์ฌ๋ฃ๊ธฐ๋ ํ์ผ ์ฐ๊ฒฐ์ด ์ฌ์์ง๊ณ ,์์ ์ ๋์ผํ ํ๊ฒฝ์ ์ ์งํ ์ ์์
๐ฏ ์ดํ ๋จ๊ณ ์๋ด
์ด์ ํ๋ก์ ํธ๊ฐ ์ค๋น๋์์ผ๋, ๋ค์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
- Server.cpp ์์ค ํ์ผ ์ถ๊ฐ
- ํ๋ก์ ํธ > ์ถ๊ฐ > ์ ํญ๋ชฉ > C++ ํ์ผ(.cpp) โ ์ด๋ฆ: Server.cpp
- TCP ์์ผ ์ฝ๋ ์
๋ ฅ
- **WSAStartup()**๋ถํฐ socket(), bind(), listen(), accept() ๋ฑ์ ๋จ๊ณ๋ณ๋ก ๊ตฌํ
- ๋น๋ & ์คํ
- Ctrl + F5 ๋๋ ์์ ๋ฒํผ ํด๋ฆญ
- ํด๋ผ์ด์ธํธ ์ ์ ํ
์คํธ
- Windows ๋ช ๋ น ํ๋กฌํํธ์์ telnet 127.0.0.1 [์๋ฒ ํฌํธ] ์ ๋ ฅ
๐ ๋ง๋ฌด๋ฆฌ ๊ตฌ์กฐ
C:\\Test\\Server\\
โโโ Server.sln โ ์๋ฃจ์
ํ์ผ
โโโ Server.vcxproj โ ํ๋ก์ ํธ ํ์ผ
โโโ Server.cpp โ TCP ์๋ฒ ์์ค ์ฝ๋
โโโ (Debug/Release ํด๋) โ ์คํ ํ์ผ ๋ฑ
์ด์ ์์ผ ์๋ฒ ํ๋ก๊ทธ๋จ์ ์ค์ ๋ก ์์ฑํ๊ณ ์คํํ ์ค๋น๊ฐ ์๋ฃ๋์๋ค. ์ด ๋จ๊ณ์์๋ Visual Studio์์ ์์ค ํ์ผ(Server.cpp)์ ์ถ๊ฐํ๊ณ , ์์ ์ฝ๋๋ฅผ ๋ถ์ฌ ๋ฃ์ ๋ค ํ๋ก๊ทธ๋จ์ ๋น๋ ๋ฐ ์คํํ๋ค. ๋ํ, ์์ผ ํต์ ์ ์ํ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ws2_32.lib) ๋งํฌ ๋ฐฉ๋ฒ๊น์ง ํฌํจ๋์ด ์์ด ์ค์ต ๊ณผ์ ์ ์๊ฒฐ์ฑ์ด ํ๋ณด๋๋ค.
โ ์ค์ต 1-2: ์์ค ํ์ผ ์ถ๊ฐ ๋ฐ ์คํ ์ ์ฐจ ์์ฝ
โ Server.cpp ์์ค ํ์ผ ์ถ๊ฐ
- ์๋ฃจ์ ํ์๊ธฐ์์ '์์ค ํ์ผ' ํด๋ ์ฐํด๋ฆญ
- โ [์ถ๊ฐ] โ [์ ํญ๋ชฉ...]
- [์ ํญ๋ชฉ ์ถ๊ฐ] ๋ํ์์
- ํญ๋ชฉ ์ ํ: C++ ํ์ผ (.cpp)
- ์ด๋ฆ: Server
- ๊ฒฝ๋ก๋ ๊ธฐ๋ณธ๊ฐ (C:\\Test\\Server) ๊ทธ๋๋ก
- [์ถ๊ฐ] ํด๋ฆญ
- ๋น ํ์ผ์ด ์ด๋ฆฌ๋ฉด, Chapter01\\Server\\Server.cpp ์์ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ถ์ฌ ๋ฃ๋๋ค.
โก ์์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ
์๋์ฐ์์ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ํ ๊ฒฝ์ฐ, ํ์์ ์ผ๋ก ws2_32.lib ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํฌํด์ผ ํ๋ค. ์ด ์ฑ ์์๋ ์ฝ๋ ๋ด๋ถ์ ์ง์ ๋งํฌ ๋ช ๋ น์ ๋ช ์ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค:
#pragma comment(lib, "ws2_32")
์ด๋ ๊ฒ ํ๋ฉด Visual Studio์ ํ๋ก์ ํธ ์์ฑ์์ ๋ฐ๋ก ์๋์ผ๋ก ์ ๋ ฅํ์ง ์์๋ ์๋์ผ๋ก ๋งํฌ๋๋ค.
โข ํ๋ก๊ทธ๋จ ๋น๋ ๋ฐ ์คํ
- ๋น๋
- ๋ฉ๋ด: [๋น๋] โ [์๋ฃจ์ ๋น๋] ๋๋ Ctrl + Shift + B
- ์คํ (๋๋ฒ๊น
์์ด ์์)
- ๋ฉ๋ด: [๋๋ฒ๊ทธ] โ [๋๋ฒ๊น ํ์ง ์๊ณ ์์] ๋๋ Ctrl + F5
- ๋ฐฉํ๋ฒฝ ๊ฒฝ๊ณ ๋ฐ์ ์
- "Windows ๋ณด์ ๊ฒฝ๊ณ " ์ฐฝ์ด ๋ํ๋ ์ ์์
- ๋ฐ๋์ **[์ก์ธ์ค ํ์ฉ]**์ ๋๋ฌ์ผ ํด๋ผ์ด์ธํธ์ ์ ์์ด ํ์ฉ๋จ
- ํนํ ๊ฐ์ PC์์ ํ ๋ท ํ ์คํธํ ๊ฒฝ์ฐ, ํ์ฉํ์ง ์์ผ๋ฉด ์ ์์ด ์ฐจ๋จ๋จ
๐ ๊ฒฝ๋ก ์์
C:\\Test\\Server\\
โโโ Server.cpp โ ์์ฑํ TCP ์๋ฒ ์ฝ๋
โโโ Server.vcxproj โ Visual Studio ํ๋ก์ ํธ
โโโ Server.sln โ ์๋ฃจ์
ํ์ผ
โโโ Debug\\Server.exe โ ๋น๋๋ ์คํ ํ์ผ
๐ง ์ค๋ฌด ํ
- ๋ฐฉํ๋ฒฝ ํ์ฉ ํ ์ฌ์์ ํ์ํ ์๋ ์์ (ํนํ ๊ด๋ฆฌ์ ๊ถํ ์์ด ์คํ ์)
- Debug ํด๋ ์ธ์๋ Release๋ก ๋น๋ํด๋ณด๋ฉฐ ์คํ ์๋ ์ฐจ์ด๋ ๋น๊ต ๊ฐ๋ฅ
- ์ดํ telnet 127.0.0.1 9000 (์: ์๋ฒ ํฌํธ๊ฐ 9000์ผ ๊ฒฝ์ฐ)์ผ๋ก ์ ์ ํ ์คํธ
์ ๋ฆฌ
- ์์ค ํ์ผ ์ถ๊ฐ โ ์ฝ๋ ๋ถ์ฌ๋ฃ๊ธฐ โ ๋น๋ โ ์คํ โ ๋ฐฉํ๋ฒฝ ํ์ฉ โ ํ ์คํธ
- **#pragma comment(lib, "ws2_32")**๋ ์์ผ ํ๋ก์ ํธ์ ํ์ ์์
- Visual Studio ํ๊ฒฝ์์๋ GUI๋ก๋ ํ๋ก์ ํธ ๊ด๋ฆฌ๊ฐ ์ฉ์ด
์ด ๋จ๊ณ์์๋ ์์ฑํ TCP ์๋ฒ ํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก ์ ์๋ํ๋์ง ํ ๋ท ํด๋ผ์ด์ธํธ๋ฅผ ํตํด ํต์ ํ ์คํธ๋ฅผ ์งํํ๋ค. ์ด๋ฅผ ํตํด TCP ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐ์๋ค์ด๊ณ , ๋ฉ์์ง๋ฅผ ์์ ํ ๋ค ์ถ๋ ฅํ๋์ง ์ค์๊ฐ์ผ๋ก ๊ฒ์ฆํ ์ ์๋ค. ํ ๋ท์ ๊ฐ๋จํ์ง๋ง ๋งค์ฐ ๊ฐ๋ ฅํ ๋คํธ์ํฌ ํ ์คํธ ๋๊ตฌ๋ค.
โ ์ค์ต 1-3: ํ ๋ท ํด๋ผ์ด์ธํธ๋ฅผ ์ด์ฉํ TCP ์๋ฒ ํ ์คํธ
๐ฅ๏ธ โ ํ ๋ท ํด๋ผ์ด์ธํธ ์คํ
- ๋ช ๋ น ํ๋กฌํํธ(cmd) ์คํ
- ์๋ ๋ช ๋ น์ด ์ ๋ ฅ:
telnet 127.0.0.1 9000
- **127.0.0.1**์ IPv4 ๋ฃจํ๋ฐฑ ์ฃผ์, ๋์ผ PC์์ ์๋ฒ ํ ์คํธ ์ ์ฌ์ฉ
- **9000**์ ์๋ฒ๊ฐ ๋ฐ์ธ๋ฉํ ํฌํธ ๋ฒํธ (์ฝ๋ ๋ด์์ ์ค์ ํ ๊ฐ)
๐ IPv6 ํ๊ฒฝ์ด๋ผ๋ฉด telnet ::1 9000 ๋ ๊ฐ๋ฅ
๐ค โก ๋ฐ์ดํฐ ์ ๋ ฅ ๋ฐ ์๋ฒ ์๋ต ํ์ธ
- ํ ๋ท ์ฐฝ์์๋ ์ ๋ ฅํ ๊ธ์๊ฐ ๋ณด์ด์ง ์๋๋ค (๊ธฐ๋ณธ ์ค์ )
- ํ์ง๋ง, ์๋ฒ ์ฝ์์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ ๋ด์ฉ์ด ์ค์๊ฐ์ผ๋ก ์ถ๋ ฅ๋๋ค:
[TCP ์๋ฒ] ํด๋ผ์ด์ธํธ ์ ์: IP ์ฃผ์=127.0.0.1, ํฌํธ ๋ฒํธ=14209
์๋
ํ์ธ์.
๋ฐ๊ฐ์์.
- ํด๋ผ์ด์ธํธ(ํ ๋ท)์์ ์ ๋ ฅํ ๋ชจ๋ ๋ฉ์์ง๊ฐ ์๋ฒ ํ๋ก๊ทธ๋จ์ ์ฝ์์ ์ถ๋ ฅ๋จ
๐งจ โข ํด๋ผ์ด์ธํธ ์ข ๋ฃ ๋ฐฉ๋ฒ
- ํ ๋ท ํด๋ผ์ด์ธํธ์์ Ctrl + ] ์ ๋ ฅ โ Microsoft Telnet> ํ๋กฌํํธ ์ง์
- ๊ทธ ํ quit ๋ช ๋ น ์ ๋ ฅ โ ์ฐ๊ฒฐ ์ข ๋ฃ
Microsoft Telnet> quit
- ์๋ฒ ์ธก์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋๋ค:
csharp
์ฝ๋ ๋ณต์ฌ
[TCP ์๋ฒ] ํด๋ผ์ด์ธํธ ์ข
๋ฃ: IP ์ฃผ์=127.0.0.1, ํฌํธ ๋ฒํธ=14209
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ข ๋ฃ๋ฅผ ๊ฐ์งํ๊ณ , ์ฐ๊ฒฐ ์ข ๋ฃ ์์ ์ IP์ ํฌํธ ์ ๋ณด๋ก ๋ก๊ทธ ์ถ๋ ฅํจ
โ ๏ธ ์ฃผ์์ฌํญ: ํ ๋ท ๊ธฐ๋ฅ ํ์ฑํ
์๋์ฐ 7/8.1/10/11์ ํ ๋ท ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์๋ค. ๋ค์ ์ ์ฐจ๋ก ํ์ฑํํด์ผ ์ฌ์ฉ ๊ฐ๋ฅ:
- ์์ ๋ฉ๋ด์์ control ๊ฒ์ โ ์ ์ดํ(Control Panel) ์คํ
- [ํ๋ก๊ทธ๋จ] โ [Windows ๊ธฐ๋ฅ ์ผ๊ธฐ/๋๊ธฐ]
- ํ ๋ท ํด๋ผ์ด์ธํธ ํญ๋ชฉ ์ฒดํฌ โ [ํ์ธ]
- ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด telnet ๋ช ๋ น์ด ์ ์ ์๋
๐ ๏ธ ๋๋ ๋ช ๋ น์ด๋ก ํ์ฑํ ๊ฐ๋ฅ:
dism /online /Enable-Feature /FeatureName:TelnetClient
โ ํ ์คํธ ๊ตฌ์กฐ ์์ฝ
[ํด๋ผ์ด์ธํธ] โ telnet 127.0.0.1 9000
โ
[์๋ฒ ์ฝ์]
- ํด๋ผ์ด์ธํธ ์ ์ IP/ํฌํธ ์ถ๋ ฅ
- ์์ ๋ฐ์ดํฐ ์ถ๋ ฅ
- ํด๋ผ์ด์ธํธ ์ข
๋ฃ ์ ๋ก๊ทธ ์ถ๋ ฅ
์ ๋ฆฌ
- ํ ๋ท์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ TCP ํ ์คํธ ๋๊ตฌ
- ์ ๋ ฅํ ๋ฐ์ดํฐ๋ ์๋ฒ ์ฝ์์ ์ถ๋ ฅ๋จ (ํ ๋ท ์์ฒด์๋ ํ์ ์ ๋จ)
- ์๋ฒ๊ฐ ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๋ ๊ฐ๋จํ๋ฉด์ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ
- ํด๋ผ์ด์ธํธ ์ข ๋ฃ ๋ฐ ์๋ฒ ๋ก๊ทธ ํ์ธ์ผ๋ก ์๋ฐฉํฅ ํต์ ํ๋ฆ ์ ์ฒด๋ฅผ ์ ๊ฒ ๊ฐ๋ฅ
์ด์ ๋ ์๋์ฐ์ ์ด์ด ๋ฆฌ๋ ์ค ํ๊ฒฝ์์ TCP ์๋ฒ ์์ผ ํ๋ก๊ทธ๋จ์ ๋น๋ํ๊ณ ํ ์คํธํ๋ ์ค์ต ๋จ๊ณ๋ค. ๋ฆฌ๋ ์ค์์๋ Visual Studio ๊ฐ์ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ ์์ด๋ g++, make, telnet ๋ง์ผ๋ก ๊ฐ๋จํ๊ฒ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๊ณ ํ ์คํธํ ์ ์๋ค.
โ ์ค์ต 1-2: ๋ฆฌ๋ ์ค์์ TCP ์๋ฒ ์์ผ ํ๋ก๊ทธ๋จ ํ ์คํธํ๊ธฐ
๐งฐ โ ์ปดํ์ผ๋ฌ ๋ฐ Make ์ค์น ํ์ธ
๋ฆฌ๋ ์ค์์๋ ๋ค์ ๋ ๋๊ตฌ๊ฐ ๋ฐ๋์ ํ์ํ๋ค:
- g++: C++ ์ปดํ์ผ๋ฌ
- make: ์๋ ๋น๋ ๋๊ตฌ (Makefile ๊ธฐ๋ฐ)
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ผ๋ก ์ค์น ์ฌ๋ถ ํ์ธ:
g++ --version
make --version
์ค์น ์ ๋์ด ์์ผ๋ฉด Ubuntu ๊ธฐ์ค ์๋ ๋ช ๋ น์ผ๋ก ์ค์น:
sudo apt update
sudo apt install g++ make
๐ โก ์์ ์ฝ๋ ์์น๋ก ์ด๋ํ๊ณ ๋น๋
๋ณธ๋ฌธ์ ์์ ์ฝ๋๊ฐ ๋ค์ด ์๋ ๊ฒฝ๋ก๋ก ์ด๋:
cd ~/Source/Linux/Chapter01
**Makefile**์ด ์๋ ๋๋ ํ ๋ฆฌ์์ ๋น๋:
make
์ถ๋ ฅ ์์:
g++ --Wall Server.cpp -lpthread -o Server
- **lpthread**๋ ๋ฉํฐ์ค๋ ๋ ๊ธฐ๋ฅ์ ์ํ ๋ง์ปค ์ต์
- ๊ฒฐ๊ณผ ํ์ผ **./Server**๊ฐ ์์ฑ๋จ
โถ๏ธ โข ์๋ฒ ํ๋ก๊ทธ๋จ ์คํ
./Server
์ด์ ์๋ฒ๋ 9000๋ฒ ํฌํธ์์ ํด๋ผ์ด์ธํธ ์ ์์ ๊ธฐ๋ค๋ฆผ
(์ด ํฌํธ๋ ์ฝ๋ ๋ด์์ bind() ์ ์ค์ ๋ ๊ฐ)
๐ฌ โฃ ํด๋ผ์ด์ธํธ ์ ์ (ํ ๋ท ์ฌ์ฉ)
๋ค๋ฅธ ํฐ๋ฏธ๋์ ์ด๊ณ ํ ๋ท์ผ๋ก ์๋ฒ์ ์ ์:
telnet ::1 9000
- **::1**์ IPv6 ๋ฃจํ๋ฐฑ ์ฃผ์ (๊ฐ์ ์ปดํจํฐ ๋ด์์ ํ ์คํธํ ๋ ์ฌ์ฉ)
- IPv4๋ผ๋ฉด **127.0.0.1**๋ก ์ ์ ๊ฐ๋ฅ
์ ๋ ฅ ์์:
Hello.
Nice to meet you.
์๋ฒ ์ฝ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋จ:
[TCP ์๋ฒ] ํด๋ผ์ด์ธํธ ์ ์: IP ์ฃผ์=::1, ํฌํธ ๋ฒํธ=XXXXX
Hello.
Nice to meet you.
[TCP ์๋ฒ] ํด๋ผ์ด์ธํธ ์ข
๋ฃ: IP ์ฃผ์=::1, ํฌํธ ๋ฒํธ=XXXXX
๐งจ ํด๋ผ์ด์ธํธ ์ข ๋ฃ ๋ฐฉ๋ฒ
ํ ๋ท ํ๊ฒฝ์์๋ Ctrl + ] ์ ๋ ฅ ํ, ์๋์ฒ๋ผ ์ข ๋ฃ:
telnet> quit
โ ๏ธ ์ ์์ฌํญ
- ํ๊ธ ์ ๋ ฅ ์ ์ถ๋ ฅ์ด ๊นจ์ง ์ ์์โ ํ ์คํธ๋ ์๋ฌธ์ผ๋ก ์งํ ๊ถ์ฅ
- โ UTF-8 ์ธ์ฝ๋ฉ ๋ฌธ์ ๋๋ ์๋ฒ ์ฝ๋ ์ char ์ฒ๋ฆฌ ๋ฐฉ์ ์ฐจ์ด ๋๋ฌธ
- ์๋ฒ๋ฅผ ์ธ๋ถ์์ ์ ์ ํ
์คํธํ๋ ค๋ฉด:
- ๋ฐฉํ๋ฒฝ์์ ํฌํธ ํ์ฉ ํ์
- ::1 ๋์ ์ค์ IP ์ฃผ์ ์ฌ์ฉ
๐ ํ ์คํธ ํ๋ฆ ์์ฝ
[ํฐ๋ฏธ๋ 1] โ ./Server โ ์๋ฒ ์คํ
[ํฐ๋ฏธ๋ 2] โ telnet ::1 9000 โ ํด๋ผ์ด์ธํธ ์ ์
โณ ํ
์คํธ ์
๋ ฅ โ ์๋ฒ์ ์ถ๋ ฅ
โณ Ctrl + ] โ quit โ ์ข
๋ฃ
์ด์ ๋ถํฐ๋ **์ฝ๋ฉ ์คํ์ผ(Coding Style)**์ ๋ํ ๊ฐ์ด๋๋ผ์ธ์ด๋ค. ์ค๋ฌด์์๋ **์ ํํ ๊ตฌํ ๋ชป์ง์๊ฒ ์ฝ๋์ "๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ"**์ด ์ค์ํ๋ฉฐ, ํนํ C/C++์์๋ ์คํ์ผ์ ๋ฐ๋ผ ๊ฐ๋ฐ ํจ์จ๊ณผ ํ์ ์์ค์ด ๊ทน๋ช ํ๊ฒ ๊ฐ๋ฆด ์ ์๋ค. ๋ณธ๋ฌธ์์ ์ฌ์ฉํ๋ ์์ ๋ ๋ค์๊ณผ ๊ฐ์ ํ๋์ ์ด๊ณ ์ค์ฉ์ ์ธ ์ฝ๋ฉ ์คํ์ผ์ ์งํฅํ๋ค.
โ ์ฃผ์ ์ฝ๋ฉ ์คํ์ผ ํน์ง ์์ฝ
โ ํ์ํ ๊ณณ์์ ๋ฐ๋ก ๋ณ์ ์ ์ธ
์ ํต์ ์ธ C ์คํ์ผ์์๋ ๋ณ์ ์ ์ธ์ ํจ์ ๋งจ ์์์ ๋ชฐ์์ ์ฒ๋ฆฌํ์ง๋ง,
ํ๋์ ์ธ C++ ์คํ์ผ์์๋ ์ฌ์ฉํ ์์น์์ ๋ฐ๋ก ์ ์ธํ๋ค.
for (int i = 0; i < 100; i++) {
// ๋ณ์ i๋ ์ด ๋ฒ์ ์์์๋ง ์ฌ์ฉ๋จ โ ์ฝ๋ ํ๋ฆ ๋ช
ํ
}
โ ์ฅ์ :๋ณ์ ๋ฒ์(Scope)๊ฐ ๋ช ํํด์ ธ ๋ฒ๊ทธ ๋ฐ์๋ฅ ๊ฐ์ํ์ ์ถ์ ์ ์ํด ์ฝ๋ ์๋จ์ผ๋ก ๋ค์ ์ฌ๋ผ๊ฐ ํ์ ์์์์ฐจ์ ์ฝ๋ ์ฝ๊ธฐ๊ฐ ์ฌ์ โ ํนํ ๋๋ฒ๊น ์ด๋ ์ฝ๋ ๋ฆฌ๋ทฐ ์ ์ ๋ฆฌ
โก ํ ์ค ์ค๋ฅ ์ฒ๋ฆฌ ํจํด
์ฝ๋๊ฐ ๋ณต์กํด์ง์ง ์๋๋ก, ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ํ ์ค๋ก ์ฒ๋ฆฌํ๋ ์คํ์ผ์ ์ฑํ:
if (listen_sock == INVALID_SOCKET) err_quit("socket()");
if (retval == SOCKET_ERROR) err_quit("bind()");
โ ์ฅ์ :์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง์ด ํต์ฌ ์ฝ๋ ํ๋ฆ์ ๋ฐฉํดํ์ง ์์์๋ฌ ๋ฉ์์ง์ ์กฐ๊ฑด์ด ์๊ฐ์ ์ผ๋ก ๋ฐ์ ํ๊ฒ ๋ฐฐ์น์๋ ๋ช ํ, ๊ฐ๊ฒฐ, ๊ฐ๋ ์ฑ ํฅ์
โข ๋ช ํํ ํจ์ ๋จ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ
๋ฉํฐ์ค๋ ๋ ์คํ ๊ตฌ์กฐ๋ ๊น๋ํ๊ฒ ํํ:
HANDLE hThread[2];
hThread[0] = CreateThread(NULL, 0, TCPServer4, NULL, 0, NULL);
hThread[1] = CreateThread(NULL, 0, TCPServer6, NULL, 0, NULL);
WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
- ๊ฐ ์ค๋ ๋๋ ๋ช ์์ ์ธ ์ด๋ฆ์ ๊ฐ์ง ํจ์(TCPServer4, TCPServer6)๋ฅผ ์คํ
- ๋ช ํํ ์ค๋ ๋ ๋ถ๋ฆฌ์ ์ฒ๋ฆฌ ์์, ์ง๊ด์ ์ผ๋ก ๋๋ฌ๋จ
โ๏ธ ์คํ์ผ ์ฒ ํ: ๊ฐ๊ฒฐํ์ง๋ง ๋ช ํํ๊ฒ
- ๋ณ์๋ "ํ์ํ ๋ ์ ์ธ"
- ์กฐ๊ฑด๋ฌธ/ํจ์ ํธ์ถ์ "ํ ์ค๋ก ์์ฝ"
- ์ฝ๋๋ณด๋ค ๋ก์ง์ ์ง์คํ ์ ์๋ ํ๊ฒฝ ๋ง๋ค๊ธฐ
์ด๋ฌํ ์คํ์ผ์ ์ด๋ณด์์๊ฒ๋ ๊ฐ๋ ์ฑ์ด ๋๊ณ ,
ํ ํ๋ก์ ํธ์์๋ ์ผ๊ด์ฑ ์๊ฒ ์ ์ง๋๊ธฐ ๋๋ฌธ์ ๊ถ์ฅํ ๋งํ๋ค.
์์ ์ฝ๋ ๋จํธ ๋น๊ต
โ ์ ํต์ ์คํ์ผ
int retval;
SOCKET s;
s = socket(...);
if (s == INVALID_SOCKET) {
printf("socket error\\n");
exit(1);
}
โ ๋ณธ๋ฌธ ์คํ์ผ
SOCKET s = socket(...);
if (s == INVALID_SOCKET) err_quit("socket()");
๐ ์ ๋ฆฌ
ํญ๋ชฉ ์ค๋ช ์ฅ์
์ง์ญ ์ ์ธ | ๋ณ์๋ ์ฌ์ฉํ ์์ ์ ์ ์ธ | ๊ฐ๋ ์ฑ, ๋๋ฒ๊น ์ฉ์ด |
ํ ์ค ์ฒ๋ฆฌ | ์ค๋ฅ ์ฒดํฌ + ๋ฉ์์ง ์ถ๋ ฅ | ๊ฐ๊ฒฐํจ, ๋ก์ง ํ๋ฆ ์ ์ง |
์ค๋ ๋ ๋ช ์ ์ฒ๋ฆฌ | ํจ์ ๋จ์๋ก ์ค๋ ๋ ํ ๋น | ๋ณ๋ ฌ์ฒ๋ฆฌ ๊ตฌ์กฐ ๋ช ํ |
์ง๊ธ๊น์ง ํ์ตํ Chapter 01์ ํต์ฌ ๋ด์ฉ์ ์์ฝํ๋ฉด, ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฒด ๊ตฌ์กฐ์ ํ๋ฆ์ด ๋ผ๋์ฒ๋ผ ์ ๋ฆฌ๋๋ค. ์๋ ๋ด์ฉ์ ๋ณธ๊ฒฉ์ ์ธ ์์ผ ์ฝ๋ ๊ตฌํ ์ ์ ๋ฐ๋์ ์ดํดํ๊ณ ์์ด์ผ ํ๋ ๊ธฐ์ด ๊ฐ๋ ์์ฝ ์ ๋ฆฌ์ด๋ฉฐ, ๊ฐ ๊ณ์ธต ๋ฐ ์ฃผ์ ๊ฐ๋ ์ด ์ด๋ป๊ฒ ๋ง๋ฌผ๋ฆฌ๋์ง๋ฅผ ๋ช ํํ ๋ณด์ฌ์ค๋ค.
๐ Chapter 01 ์์ฝ: ๋คํธ์ํฌ์ ์์ผ ํ๋ก๊ทธ๋๋ฐ ํต์ฌ ์ ๋ฆฌ
โ 01. ์ธํฐ๋ท ํต์ ๊ฐ์ฒด
- ํต์ ์ฃผ์ฒด๋ ๋ ๊ฐ์ง๋ก ๊ตฌ๋ถ๋จ:
- ํธ์คํธ(Host): ์ต์ข ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ํ (PC, ์๋ฒ, ์ค๋งํธํฐ ๋ฑ)
- ๋ผ์ฐํฐ(Router): ๋ฐ์ดํฐ ์ ๋ฌ ์ค๊ณ (๊ฒฝ๋ก ๊ฒฐ์ )
โ 02. TCP/IP ํ๋กํ ์ฝ ๊ตฌ์กฐ
๊ณ์ธต ์ญํ ์ฃผ์ ์ฒด๊ณ
๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต | ์ค์ ๋ฌผ๋ฆฌ ๋คํธ์ํฌ ์์ ์ก์์ ์ฒ๋ฆฌ, ๋ฌผ๋ฆฌ์ ์ฃผ์(MAC) ์ฌ์ฉ | MAC ์ฃผ์ |
์ธํฐ๋ท ๊ณ์ธต | ๋ฐ์ดํฐ ๋ผ์ฐํ , ๋ชฉ์ ์ง ๊ฒฐ์ , IP ์ฃผ์ ์ฌ์ฉ | IP ์ฃผ์ |
์ ์ก ๊ณ์ธต | ์ต์ข ํต์ ๋์ ์๋ณ, ์ ๋ขฐ์ฑ ํ๋ณด, ํฌํธ ๋ฒํธ ์ฌ์ฉ | ํฌํธ ๋ฒํธ |
์์ฉ ๊ณ์ธต | ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ, ํ๋กํ ์ฝ ์งํฉ(HTTP, FTP ๋ฑ) ํฌํจ | ์์ (๋ ผ๋ฆฌ ๊ณ์ธต) |
โ 03. TCP vs UDP ์ฐจ์ด์
ํญ๋ชฉ TCP UDP
์ฐ๊ฒฐ ์ฌ๋ถ | ์ฐ๊ฒฐํ (Connection-Oriented) | ๋น์ฐ๊ฒฐํ (Connectionless) |
์ ๋ขฐ์ฑ | ๋ณด์ฅ๋จ (์ฌ์ ์ก, ์์ ๋ณด์ฅ) | ์ ๋ขฐ์ฑ ์์ (์ฌ์ ์ก ์์) |
๋ฐ์ดํฐ ๋จ์ | ๋ฐ์ดํธ ์คํธ๋ฆผ (์ฐ๊ฒฐ๋ ํ๋ฆ) | ๋ฐ์ดํฐ๊ทธ๋จ (๋จ์๋ณ ์ ์ก) |
ํต์ ๋ฐฉ์ | ์ผ๋์ผ ํต์ | ์ผ๋์ผ, ์ผ๋๋ค ํต์ ๋ ๊ฐ๋ฅ |
๋ํ ์ฌ์ฉ์ฒ | HTTP, FTP, ์ด๋ฉ์ผ ๋ฑ | VoIP, ์คํธ๋ฆฌ๋ฐ, DNS ๋ฑ |
โ 04. IP ์ฃผ์ (์ธํฐ๋ท ๊ณ์ธต)
- ๋คํธ์ํฌ ์์์ ๊ฐ์ฒด๋ฅผ ์ ์ผํ๊ฒ ์๋ณ
- ๋ฒ์ ๊ตฌ๋ถ:
- IPv4: 32๋นํธ (์: 192.168.0.1)
- IPv6: 128๋นํธ (์: 2001:0db8::1)
- ์ฃผ์: ๋ฌผ๋ฆฌ์ ์ฃผ์(MAC)์ ๋ค๋ฆ
โ 05. ํฌํธ ๋ฒํธ (์ ์ก ๊ณ์ธต)
- ํต์ ์ ์ข ์ฐฉ์ = ์์ฉ ํ๋ก๊ทธ๋จ ๋จ์ ์๋ณ
- 16๋นํธ ์ ์ (0 ~ 65535)
- 0~1023: ์์ฝ๋ ํฌํธ (Well-known)
- 1024~49151: ๋ฑ๋ก ํฌํธ (Registered)
- 49152~65535: ๋์ /์ฌ์ค ํฌํธ (Dynamic)
โ 06. ๋ฃจํ๋ฐฑ ์ฃผ์ (Loopback Address)
- ์๊ธฐ ์์ ์๊ฒ ๋ณด๋ด๋ ๋คํธ์ํฌ ์ฃผ์
- ํ ์คํธ์ฉ์ผ๋ก ๋งค์ฐ ์ ์ฉํจ
๋ฒ์ ์ฃผ์ ํํ ๋ณ์นญ
IPv4 | 127.0.0.1 | localhost |
IPv6 | ::1 | (๋์ผ ์ญํ ) |
๐งญ ์ ์ฒด ๋คํธ์ํฌ ํ๋ฆ ์์ฝ
[์์ฉ ํ๋ก๊ทธ๋จ]
โ
[์์ผ ์ธํฐํ์ด์ค]
โ
[TCP/UDP (์ ์ก ๊ณ์ธต)] โ ํฌํธ ๋ฒํธ ์ฌ์ฉ
โ
[IP (์ธํฐ๋ท ๊ณ์ธต)] โ IP ์ฃผ์ ์ฌ์ฉ
โ
[์ด๋๋ท (์ ๊ทผ ๊ณ์ธต)] โ MAC ์ฃผ์ ์ฌ์ฉ
์ด ํํธ๋ Chapter 01 ์ ์ฒด์ ๋ง์ง๋ง ์์ฝ ๋จ๊ณ๋ก, ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ ๊ตฌ์กฐ, ์์ผ์ ๊ฐ๋ , ์ด์์ฒด์ ๋ณ ์์ผ ์์ฉ ๊ตฌ์กฐ ์ฐจ์ด๊น์ง ์ ๋ฆฌ๋๋ค. ์ด ์ ๋ฆฌ๋ ์ดํ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ ๋ก ์ค๊ณํ๊ณ ๊ตฌํํ ๋์ ์ฌ๊ณ ๋ผ๋๊ฐ ๋๋ค. ํต์ฌ ํฌ์ธํธ๋ฅผ ๋น ์ง์์ด ์ฌ๊ตฌ์ฑํด์ ์๋์ ๊ฐ์ด ์์ฝํ ์ ์๋ค.
๐ Chapter 01 ํต์ฌ ์์ฝ (๊ณ์)
โ 07. ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ
- ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ ๊ธฐ๋ฐ
- ์ญํ ๊ตฌ๋ถ:
- ํด๋ผ์ด์ธํธ(Client): ์๋น์ค ์์ฒญ์
- ์๋ฒ(Server): ์๋น์ค ์ ๊ณต์
[ํด๋ผ์ด์ธํธ] โ ์์ฒญ (Request)
[์๋ฒ] โ ์๋ต (Response)
- ํน์ง:
- ์๋ฒ๋ ํญ์ ๋๊ธฐ ์ํ, ํด๋ผ์ด์ธํธ๋ ํ์ ์ ์ฐ๊ฒฐ
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ IP/ํฌํธ ์ ๋ณด๋ฅผ ์ด์ฉํด ์๋ต ๊ฐ๋ฅ
- ๋์ ์ ์ ํ์ฉ ๊ตฌ์กฐ(๋ฉํฐ์ค๋ ๋, select ๋ฑ) ํ์
โ 08. ์์ผ์ ๊ฐ๋
์์ผ์ ๋ ๊ฐ์ง ์ธก๋ฉด์์ ์ ์ํ ์ ์๋ค:
๊ด์ ์ค๋ช
ํต์ ์ข ๋จ์ | ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์์๊ณผ ๋ ์ง์ (End-point) |
ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค | TCP/UDP์ ์ ๊ทผํ๊ธฐ ์ํ API ๊ตฌ์กฐ |
- ๋ด๋ถ์ ์ผ๋ก๋ ์์ผ์ด IP ์ฃผ์ + ํฌํธ ๋ฒํธ + ํ๋กํ ์ฝ ์ ๋ณด๋ฅผ ๋ณด์
- ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ผ์ ํตํด ํ์ ๊ณ์ธต(IP, MAC, ๋ผ์ฐํ ๋ฑ)์ ์ง์ ๋ค๋ฃฐ ํ์ ์์ด ๊ฐ์ ์ ์ผ๋ก ํต์
โ 09. ์ด์์ฒด์ ๋ณ ์์ผ ์์ฉ ๊ตฌ์กฐ
OS ๋งํฌ ๋ฐฉ์ ๋ฐ ๊ตฌ์กฐ
Windows | WS2_32.DLL ์ฌ์ฉ (Winsock 2.x) โ ๋ฐ๋์ WS2_32.LIB ๋งํฌ ํ์ |
Linux | ๋ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ ์์ (**socket()**์ ์์คํ ์ฝ) |
// Windows ์ฝ๋ ์์
#pragma comment(lib, "ws2_32")
WSAStartup(...);
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
// Linux ์ฝ๋ ์์
int s = socket(AF_INET, SOCK_STREAM, 0);
- ์๋์ฐ๋ ์์ผ ์ฌ์ฉ ์ ์ด๊ธฐํ/์ ๋ฆฌ ์์ ํ์
- ๋ฆฌ๋ ์ค๋ ๋จ์ํ๊ฒ ์์คํ ํธ์ถ ํํ๋ก ์์ผ ์ฌ์ฉ ๊ฐ๋ฅ
๐ ์ ์ฒด ํ๋ฆ ์์ฝ ๋ค์ด์ด๊ทธ๋จ
[ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ]
โ (์์ผ ์์ฑ)
[ํด๋ผ์ด์ธํธ ์์ผ] โโ [์๋ฒ ์์ผ]
โ
[์๋ฒ ํ๋ก๊ทธ๋จ]
์์ธก ์์ผ์ TCP/UDP๋ฅผ ํตํด ์ฐ๊ฒฐ๋๋ฉฐ,
์ค์ ๋ฐ์ดํฐ๋ IP์ MAC ์ฃผ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ก๋จ
๋ง๋ฌด๋ฆฌ ํฌ์ธํธ
๊ฐ๋ ํต์ฌ ํค์๋ ์ญํ
ํด๋ผ์ด์ธํธ-์๋ฒ | ์์ฒญ, ์๋ต | ๊ตฌ์กฐ ์ค๊ณ ๊ธฐ๋ฐ |
์์ผ | ์ข ๋จ์ , ์ธํฐํ์ด์ค | ํ๋ก๊ทธ๋๋ฐ ์ ์ |
์ด์์ฒด์ | WS2_32 vs ์์คํ ์ฝ | ํ๋ซํผ ์ฐจ์ด ์ธ์ |
์๋๋ ์ฐ์ต๋ฌธ์ 07~09์ ๋ํ ๊ธฐ์ ์ ์ด๊ณ ์ค๋ฌด ์ค์ฌ์ ํด์ค์ด๋ค. ๊ฐ ๋ฌธํญ์ ๋จ์ ์๊ธฐ๋ณด๋ค ์๋ฆฌ ์ดํด ๋ฐ ์ค๋ฌด ํ์ฉ ๊ฐ๋ฅ์ฑ์ ์ค์ ์ ๋๊ณ ํ์ด๋์๋ค.
โ 07. ๋ค์์ TCP/IP์ ์ฐ๊ด๋ ํ๋กํ ์ฝ์ ์ญํ ๊ณผ ํน์ง์ ๊ธฐ์ ํ์์ค.
๐น ARP (Address Resolution Protocol)
- ์ญํ : IP ์ฃผ์์ ํด๋นํ๋ MAC ์ฃผ์(๋ฌผ๋ฆฌ ์ฃผ์)๋ฅผ ์ฐพ๊ธฐ ์ํ ํ๋กํ ์ฝ
- ๊ณ์ธต: ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต๊ณผ ์ธํฐ๋ท ๊ณ์ธต ์ฌ์ด์ ๋ธ๋ฆฟ์ง ์ญํ
- ์๋ ๋ฐฉ์:
- IP ์ฃผ์๋ง ์๊ณ ์์ ๋ ARP ์์ฒญ ๋ธ๋ก๋์บ์คํธ ์ ์ก
- ํด๋น IP๋ฅผ ๊ฐ์ง ์ฅ๋น๊ฐ MAC ์ฃผ์์ ํจ๊ป ARP ์๋ต ์ ์ก
- ํน์ง:
- LAN ๋ด ํต์ ์์๋ง ์ฌ์ฉ (๋ผ์ฐํฐ๋ฅผ ๋์ง ์์)
- ์บ์ ์ ์ง (ARP ์บ์), ๋ณด์์ ์์กฐ(ARP Spoofing)์ ์ทจ์ฝ
๐น ICMP (Internet Control Message Protocol)
- ์ญํ : ๋คํธ์ํฌ ์ํ ์๋ฆผ ๋ฐ ์ค๋ฅ ๋ฉ์์ง ์ ์ก
- ๊ณ์ธต: ์ธํฐ๋ท ๊ณ์ธต (IP์ ํจ๊ป ๋์)
- ์ฌ์ฉ ์์:
- ping: ๋ชฉ์ ์ง๊น์ง ์ฐ๊ฒฐ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ (ICMP Echo Request/Reply)
- tracert(Windows), traceroute(Linux): ๊ฒฝ๋ก ์ถ์
- ํน์ง:
- ์ ๋ขฐ์ฑ ์๋ ์ ๋ณด ์ ๋ฌ (TCP์ฒ๋ผ ์ฌ์ ์ก ์์)
- ๋ณด์์ ๊ณต๊ฒฉ ๋์์ด ๋๊ธฐ๋ ํจ (ex. Ping of Death)
๐น IGMP (Internet Group Management Protocol)
- ์ญํ : ๋ฉํฐ์บ์คํธ ๊ทธ๋ฃน ๊ด๋ฆฌ ํ๋กํ ์ฝ
- ๊ณ์ธต: ์ธํฐ๋ท ๊ณ์ธต
- ์ฌ์ฉ ์์:
- ํ ์ก์ ์๊ฐ ๋ค์ ์์ ์์๊ฒ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ (์: ์คํธ๋ฆฌ๋ฐ)
- ํธ์คํธ๊ฐ ํน์ ๋ฉํฐ์บ์คํธ ๊ทธ๋ฃน์ ๊ฐ์ ํ๊ฑฐ๋ ํํด
- ํน์ง:
- IPv4 ์ ์ฉ (IPv6์์๋ MLD๋ก ๋์ฒด)
- ๋ผ์ฐํฐ๋ IGMP ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ฉํฐ์บ์คํธ ํธ๋ํฝ ์ ๋ฌ ๊ฒฐ์
โ 08. ํ ๋ท ํ๋กํ ์ฝ์ ๋ฌธ์ ์ ์ ๋ณด์(Security) ๊ด์ ์์ ์ค๋ช ํ์์ค.
๐ ํ ๋ท์ ๋ณด์ ๋ฌธ์ ์
- ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฌธ(Plain Text) ์ ์ก
- ์ฌ์ฉ์ ID, ๋น๋ฐ๋ฒํธ, ๋ช ๋ น์ด, ์๋ต ๊ฒฐ๊ณผ๊ฐ ์ํธํ๋์ง ์์
- ๋คํธ์ํฌ ์์์ **์ค๋ํ(sniffing)**์ ๋งค์ฐ ์ทจ์ฝ
- MITM(์ค๊ฐ์ ๊ณต๊ฒฉ)์ ๋
ธ์ถ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด ํต์ ์ ๊ฐ๋ก์ฑ์ด ๋ช ๋ น์ด ์กฐ์ ๊ฐ๋ฅ
- ์ ์ ์ธ์ฆ ์ฒด๊ณ๊ฐ ์ฝํจ
- ๋๋ถ๋ถ ๊ธฐ๋ณธ ์ธ์ฆ๋ง ์ ๊ณต, ์ถ๊ฐ ์ธ์ฆ ์๋จ ์์ (์: 2FA, ๊ณต๊ฐํค ์์)
- ๋์ฒด ๊ธฐ์ : SSH
- ์ํธํ๋ ํฐ๋ฏธ๋ ์ ์ ํ๋กํ ์ฝ
- ๋์นญํค/๋น๋์นญํค ๊ธฐ๋ฐ, ๋ค์ํ ์ธ์ฆ ๋ฐฉ์, ์ธ์ ๋ณดํธ ๊ฐ๋ฅ
๐ ๊ฒฐ๋ก : ํ ๋ท์ ํ ์คํธ์ฉ์ผ๋ก๋ง ์ฌ์ฉํ๊ณ , ์ค์ด์ ํ๊ฒฝ์์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์์น์ด๋ค.
โ 09. ์๋์ฐ ๋๋ ๋ฆฌ๋ ์ค์์ daytime ์๋ฒ(ํฌํธ 13)๋ฅผ ํ์ฑํํ๋ ์ ์ฐจ๋ฅผ ์ค๋ช ํ์์ค.
๐ฅ๏ธ Windows์์ daytime ์๋ฒ ํ์ฑํ (์: Windows 10/11)
- Telnet Server, Simple TCP/IP ์๋น์ค ์ค์น
- ์ ์ดํ > [ํ๋ก๊ทธ๋จ ๋ฐ ๊ธฐ๋ฅ] > [Windows ๊ธฐ๋ฅ ์ผ๊ธฐ/๋๊ธฐ]
- "Simple TCP/IP Services (i.e. echo, daytime etc)" ์ฒดํฌ
- ํ์ธ โ ์ค์น ์๋ฃ ํ ์ฌ๋ถํ
- Windows Defender ๋ฐฉํ๋ฒฝ ์ค์
- ํฌํธ 13 ํ์ฉ ๊ท์น ์ถ๊ฐ ๋๋ daytime ์ฑ ์์ธ ์ค์
- ์๋น์ค ์ํ ํ์ธ
- ๋ช ๋ น ํ๋กฌํํธ์์ ํ ์คํธ:
- bash ์ฝ๋ ๋ณต์ฌ telnet 127.0.0.1 13
๐ง Linux (inetd ๋๋ xinetd ์ฌ์ฉ ์)
- inetd ๋๋ xinetd ์ค์น
- bash ์ฝ๋ ๋ณต์ฌ sudo apt install inetutils-inetd
- /etc/inetd.conf์ ์ค์ ์ถ๊ฐ
daytime stream tcp nowait root internal daytime dgram udp wait root internal
- ๋๋ /etc/xinetd.d/daytime ์์ฑ
- ์๋น์ค ์ฌ์์
- bash ์ฝ๋ ๋ณต์ฌ sudo service inetd restart
- ํ ์คํธ
- bash ์ฝ๋ ๋ณต์ฌ telnet 127.0.0.1 13 ๋๋ telnet ::1 13
โ daytime ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋ฉด ๋ ์ง+์๊ฐ์ ์ ์กํ ๋ค ๋ฐ๋ก ์ฐ๊ฒฐ ์ข ๋ฃํ๋ค.
๐ ์ ์ฒด ์ ๋ฆฌํ
๋ฒํธ ํญ๋ชฉ ํต์ฌ ํฌ์ธํธ
07 | ARP/ICMP/IGMP | ์ฃผ์ ํด์, ์ค๋ฅ ์๋ฆผ, ๋ฉํฐ์บ์คํธ |
08 | ํ ๋ท ๋ณด์ ๋ฌธ์ | ์ํธํ ์์, ์ค๋ํ/MITM ์ทจ์ฝ |
09 | Daytime ์๋ฒ | ํฌํธ 13, ์ฌ๋ถํ ํ ๋์, telnet ํ ์คํธ ๊ฐ๋ฅ |
์๋๋ ์ฐ์ต๋ฌธ์ 01~06์ ๋ํ ์ ๋ฌธ์ ์ธ ํด์ค์ด๋ค. ๊ฐ ๋ฌธํญ์ ์ด๋ก +์ค์ต+์ค๋ฌด ์์ฉ์ ์กฐํฉํ์ฌ ๊ตฌ์ฑํ์ผ๋ฉฐ, TCP/IP ๊ธฐ๋ฐ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ด ์ด๋ก ์ ๊ฒฌ๊ณ ํ๊ฒ ๋ค์ง ์ ์๋ ๋ด์ฉ์ด๋ค.
โ 01. ์ด๋๋ท์ 48๋นํธ ๋ฌผ๋ฆฌ ์ฃผ์ ๊ตฌ์กฐ์ ๋ด PC์ MAC ์ฃผ์ ๋ถ์
๐ ์ด๋๋ท 48๋นํธ ์ฃผ์(MAC ์ฃผ์) ๊ตฌ์กฐ
- ์ด 48๋นํธ (6๋ฐ์ดํธ) = OO:OO:OO:UU:UU:UU
- OUI(Organizationally Unique Identifier): ์์ 3๋ฐ์ดํธ โ ์ ์กฐ์ฌ ์๋ณ
- NIC Specific: ๋ค์ 3๋ฐ์ดํธ โ ์ ์กฐ์ฌ ๊ณ ์ ์ผ๋ จ๋ฒํธ
๊ตฌ๋ถ ๋นํธ ์ ์ค๋ช
OUI | 24๋นํธ | ์ ์กฐ์ฌ ID (์: Intel, Realtek) |
NIC | 24๋นํธ | ์ฅ์น ๊ณ ์ ๋ฒํธ |
๐ MAC ์ฃผ์ ํ์ธ
- Windows:
- ipconfig /all
- Linux/macOS:
- ifconfig ๋๋ ip link
์์:
๋ฌผ๋ฆฌ์ ์ฃผ์(MAC) = 08-00-27-4A-BC-D1
โ OUI = 08-00-27 (VirtualBox)
โ 02. OSI 7๊ณ์ธต๊ณผ TCP/IP ๋น๊ต
OSI ๊ณ์ธต ์ญํ ์ค๋ช TCP/IP ๊ณ์ธต ๋์
7. ์์ฉ๊ณ์ธต (Application) | ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ ๊ณต | ์์ฉ ๊ณ์ธต |
6. ํํ๊ณ์ธต (Presentation) | ์ธ์ฝ๋ฉ/์ํธํ | ํฌํจ๋์ง ์์ (์์ฉ์ ํฌํจ) |
5. ์ธ์ ๊ณ์ธต (Session) | ์ฐ๊ฒฐ/์ธ์ ๊ด๋ฆฌ | ํฌํจ๋์ง ์์ (์์ฉ์ ํฌํจ) |
4. ์ ์ก๊ณ์ธต (Transport) | ํฌํธ/์ ๋ขฐ์ฑ ์ ์ก | ์ ์ก ๊ณ์ธต (TCP, UDP) |
3. ๋คํธ์ํฌ๊ณ์ธต (Network) | IP ์ฃผ์/๋ผ์ฐํ | ์ธํฐ๋ท ๊ณ์ธต (IP) |
2. ๋ฐ์ดํฐ๋งํฌ๊ณ์ธต (Data Link) | MAC ์ฃผ์/ํ๋ ์ | ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต |
1. ๋ฌผ๋ฆฌ๊ณ์ธต (Physical) | ์ ๊ธฐ/๊ด ์ ํธ ์ ์ก | ๋คํธ์ํฌ ์ ๊ทผ ๊ณ์ธต |
โ TCP/IP๋ 4๊ณ์ธต ๋ชจ๋ธ๋ก OSI 7๊ณ์ธต์ ํตํฉ์ ์ผ๋ก ๋ค๋ฃธ
โ 03. ๋คํธ์ํฌ ์ฅ์น ๊ธฐ๋ฅ
์ฅ์น ๊ธฐ๋ฅ
๋ฆฌํผํฐ (Repeater) | ์ ํธ๋ฅผ ๋จ์ ์ฆํญํ์ฌ ์ ์ก ๊ฑฐ๋ฆฌ ์ฐ์ฅ |
๋ธ๋ฆฌ์ง (Bridge) | MAC ์ฃผ์ ๊ธฐ๋ฐ์ผ๋ก ํธ๋ํฝ ๋ถํ |
ํ๋ธ (Hub) | ๋จ์ ์ ํธ ๋ถ๋ฐฐ๊ธฐ, ๋ชจ๋ ํฌํธ๋ก ํธ๋ํฝ ์ ํ |
๋ผ์ฐํฐ (Router) | ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ(IP) ๊ฐ ๋ฐ์ดํฐ ๋ผ์ฐํ |
IP ๊ณต์ ๊ธฐ (Sharing Device) | NAT ๊ธฐ๋ฅ ํฌํจ, ๋ด๋ถ ๋คํธ์ํฌ์ ์ธ๋ถ ์ธํฐ๋ท ์ค๊ณ |
โ ๋ฆฌํผํฐ/ํ๋ธ๋ 1~2๊ณ์ธต, ๋ธ๋ฆฌ์ง๋ 2๊ณ์ธต, ๋ผ์ฐํฐ๋ 3๊ณ์ธต ์ฅ๋น
โ 04. RFC๋ ๋ฌด์์ด๋ฉฐ ์ฃผ์ ํ๋กํ ์ฝ RFC ๋ฒํธ
๐ RFC (Request for Comments)
- ์ธํฐ๋ท ๊ธฐ์ ์ ๊ณต์ ํ์ค ๋ฌธ์
- IETF์์ ๊ด๋ฆฌ, ๊ณต๊ฐ์ ์ผ๋ก ์ด๋ ๊ฐ๋ฅ
๐ ๊ณต์ ์ฌ์ดํธ
์ฃผ์ RFC ๋ฒํธ
ํ๋กํ ์ฝ RFC ๋ฒํธ
IPv4 | RFC 791 |
IPv6 | RFC 8200 |
TCP | RFC 793 |
UDP | RFC 768 |
HTTP/1.1 | RFC 2616 |
HTTP/2 | RFC 7540 |
โ 05. IPv4 ์ฃผ์์ ๊ตฌ์กฐ ๋ฐ ์ข ๋ฅ
๐ ๋นํธ ๊ตฌ์กฐ
- ์ด 32๋นํธ = ๋คํธ์ํฌ ์ฃผ์ + ํธ์คํธ ์ฃผ์
- ๊ธฐ๋ณธ 4์ฅํ ํํ (192.168.0.1)
๐ ์ฉ๋๋ณ ๋ถ๋ฅ
์ ํ ์ญํ
์ ๋์บ์คํธ | ํน์ ํ ๋์์๊ฒ๋ง ์ ์ก (์ผ๋์ผ) |
๋ฉํฐ์บ์คํธ | ํน์ ๊ทธ๋ฃน์ ์ํ ๋ค์์๊ฒ ์ ์ก |
๋ธ๋ก๋์บ์คํธ | ๊ฐ์ ๋คํธ์ํฌ ๋ด ๋ชจ๋ ์ฅ์น์ ์ ์ก |
โ 06. IPv6 ์ฃผ์์ ๊ตฌ์กฐ ๋ฐ ์ข ๋ฅ
๐ ๋นํธ ๊ตฌ์กฐ
- ์ด 128๋นํธ = 16๋นํธ ร 8๋ธ๋ก, ์ฝ๋ก (:) ๊ตฌ๋ถ
๐ ์ฉ๋๋ณ ๋ถ๋ฅ
์ ํ ์ญํ
์ ๋์บ์คํธ | 1:1 ํต์ |
๋ฉํฐ์บ์คํธ | 1:N ํต์ (ํน์ ๊ทธ๋ฃน ์์ ์๋ง) |
์ ๋์บ์คํธ | 1:1์ค ์ต์ ๊ฒฝ๋ก ์์ ์์๊ฒ๋ง ์ ์ก |
โ IPv6์๋ ๋ธ๋ก๋์บ์คํธ๊ฐ ์กด์ฌํ์ง ์์, ๋์ ๋ฉํฐ์บ์คํธ/์ ๋์บ์คํธ๋ก ๋์ฒด
๐ก ์ ๋ฆฌํ
ํญ๋ชฉ ํคํฌ์ธํธ
MAC ์ฃผ์ | OUI + NIC, 48๋นํธ |
OSI ๊ณ์ธต | 7๋จ๊ณ โ TCP/IP๋ 4๋จ๊ณ๋ก ์์ถ |
์ฅ๋น | Repeater~Router: ๊ณ์ธต๋ณ ์ญํ ๋ค๋ฆ |
RFC | ์ธํฐ๋ท ๊ธฐ์ ํ์ค, ๊ฐ ํ๋กํ ์ฝ ์ ์ |
IPv4 | ์ ๋/๋ฉํฐ/๋ธ๋ก๋์บ์คํธ |
IPv6 | ์ ๋/๋ฉํฐ/์ ๋์บ์คํธ, ๋ธ๋ก๋์บ์คํธ ์์ |

'Development๐ฉ๐ปโ๐ฆณ > Communication' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์์: ์ฃผ์ ์ฒด๊ณ๋ถํฐ closesocket๊น์ง ํ๋์ ๋ณด๊ธฐ (0) | 2025.04.11 |
---|