์†Œ์ผ“ ํ†ต์‹  ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ: TCP/IP 4๊ณ„์ธต์„ ์ค‘์‹ฌ์œผ๋กœ

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)**์ด๋ผ๋Š” ๋‹จ์œ„๋‹ค. ์†ก์‹  ์ธก์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ „์†กํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ์˜ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นœ๋‹ค:

  1. ์‘์šฉ ๊ณ„์ธต์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. ์ „์†ก ๊ณ„์ธต์€ ํฌํŠธ ๋ฒˆํ˜ธ, ์˜ค๋ฅ˜ ์ฒดํฌ ์ •๋ณด ๋“ฑ์„ ๋‹ด์€ TCP/UDP ํ—ค๋”๋ฅผ ๋ถ™์ธ๋‹ค.
  3. ์ธํ„ฐ๋„ท ๊ณ„์ธต์€ ๋ชฉ์ ์ง€ IP ์ฃผ์†Œ ๋“ฑ์„ ๋‹ด์€ IP ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  4. ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ ๊ณ„์ธต์€ ์ตœ์ข…์ ์œผ๋กœ MAC ์ฃผ์†Œ, ํ”„๋ ˆ์ž„ ์ •๋ณด ๋“ฑ์„ ๋ง๋ถ™์—ฌ **ํ”„๋ ˆ์ž„(Frame)**์œผ๋กœ ์™„์„ฑํ•œ๋‹ค.
  5. ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํ•ฉ์ณ์ง„ ๊ตฌ์กฐ๊ฐ€ **ํŒจํ‚ท = ํ—ค๋” + ๋ฐ์ดํ„ฐ(ํŽ˜์ด๋กœ๋“œ)**์ด๋ฉฐ, ์ด ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ ์†ก์ˆ˜์‹ ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

๊ณ„์ธต๋ณ„ ์ „์†ก ๊ตฌ์กฐ (์š”์•ฝ)

์‘์šฉ ๊ณ„์ธต:         ๋ฉ”์‹œ์ง€
์ „์†ก ๊ณ„์ธต:       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 ๊ฒฝ๋กœ์— ๋Œ€ํ•ด์„œ๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.


ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ๋‹จ์ˆœํžˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ, ํ†ต์‹ ์˜ ์ข…์ฐฉ์ ์„ ์ •์˜ํ•˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ์‹๋ณ„์ž๋กœ ๋ณด๋Š” ๊ฒƒ์ด ๋ณด๋‹ค ์ •ํ™•ํ•œ ์ดํ•ด๋‹ค. ์ „ํ†ต์ ์œผ๋กœ๋Š” "ํฌํŠธ = ํ”„๋กœ์„ธ์Šค"๋ผ๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ์„ค๋ช…๋˜์ง€๋งŒ, ์‹ค์ œ ๊ตฌํ˜„์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์กด์žฌํ•œ๋‹ค:


ํฌํŠธ ๋ฒˆํ˜ธ์™€ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ๊ด€๊ณ„

  1. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  2. ์˜ˆ: ์›น ์„œ๋ฒ„๊ฐ€ HTTP(80)์™€ HTTPS(443)๋ฅผ ๋™์‹œ์— ์„œ๋น„์Šคํ•  ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‘ ํฌํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ํฌํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค
  4. ์˜ˆ: ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ์„œ๋ฒ„์—์„œ ๋™์ผํ•œ ํฌํŠธ์— ๋Œ€ํ•ด ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— 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_REUSEADDRSO_REUSEPORT ์„ค์ • ์‹œ ์˜ˆ์™ธ ๊ฐ€๋Šฅ).


์‹ค์ œ ์˜ˆ์‹œ (๊ทธ๋ฆผ 1-8 ๊ธฐ๋ฐ˜ ์„ค๋ช…)

  • ํ˜ธ์ŠคํŠธ A๋Š” ๋‘ ๊ฐœ์˜ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ (192.168.1.1010.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๊ฐ€์ง€

  1. ์‚ฌ์šฉํ•  ํ”„๋กœํ† ์ฝœ
    • TCP/IP (์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์—ฐ๊ฒฐํ˜• ํ†ต์‹ )
    • UDP/IP (๋น ๋ฅธ ์ „์†ก์ด ๊ฐ€๋Šฅํ•œ ๋น„์—ฐ๊ฒฐํ˜• ํ†ต์‹ )
  2. ์†ก์‹ ์ธก IP ์ฃผ์†Œ
    • ๋ณดํ†ต ์ž๋™์œผ๋กœ ์„ค์ •๋˜์ง€๋งŒ, ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜๋„ ์žˆ์Œ
    • ex: 192.168.0.11
  3. ์†ก์‹ ์ธก ํฌํŠธ ๋ฒˆํ˜ธ
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์šด์˜์ฒด์ œ๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹น (ephemeral port)
    • ์„œ๋ฒ„๋Š” ๊ณ ์ • ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์—ฐ๊ฒฐ์„ ๋Œ€๊ธฐ
  4. ์ˆ˜์‹ ์ธก IP ์ฃผ์†Œ
    • ์„œ๋ฒ„์˜ ๊ณ ์ •๋œ ์ฃผ์†Œ ๋˜๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์ด DNS๋ฅผ ํ†ตํ•ด IP๋กœ ํ•ด์„๋จ
  5. ์ˆ˜์‹ ์ธก ํฌํŠธ ๋ฒˆํ˜ธ
    • ์„œ๋น„์Šค์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ •ํ•ด์ง„ ๊ฐ’ ์‚ฌ์šฉ (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)pingtraceroute ๋ช…๋ น์— ์‚ฌ์šฉ
  • IGMP (Internet Group Management Protocol): ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๊ทธ๋ฃน ๊ด€๋ฆฌ์— ์‚ฌ์šฉ

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์ธ ์†Œ์ผ“ API๊ฐ€ ์•„๋‹Œ **Raw Socket (์›์‹œ ์†Œ์ผ“)**์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค:

  • ๊ตฌํ˜„ ๋‚œ์ด๋„ ๋†’์Œ
  • ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ•„์š”
  • ์‹ค์ „์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌพ (๋ณด์•ˆ ์†”๋ฃจ์…˜, ๋ผ์šฐํŒ… ์ œ์–ด, ํŠธ๋ž˜ํ”ฝ ๋ถ„์„ ๋“ฑ ํŠน์ˆ˜ ๋ชฉ์ )

๐Ÿ“Œ ๊ฒฐ๋ก 

  • ์†Œ์ผ“์€ TCP/IP ํ†ต์‹ ์˜ โ€œ์ถœ์ž…๋ฌธโ€์— ํ•ด๋‹นํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์ด ์•„๋‹Œ ์ ‘์†, ๋ฐ”์ธ๋”ฉ, ์†ก์ˆ˜์‹  ์š”์ฒญ ๋“ฑ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
  • ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅธ ๋™์ž‘ ๋ฐฉ์‹์€ ๋‚ด๋ถ€์ ์œผ๋กœ TCP/UDP๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ ,
  • ๊ฐœ๋ฐœ์ž๋Š” ์†Œ์ผ“ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ถ”์ƒ์ ์œผ๋กœ ์ œ์–ดํ•˜๋ฉด ๋จ

์†Œ์ผ“์€ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์š”์†Œ์ด๋ฉฐ, **์œˆ๋„์šฐ ์†Œ์ผ“(Winsock)**๊ณผ ๋ฆฌ๋ˆ…์Šค ์†Œ์ผ“์€ ๊ณตํ†ต๋œ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉด์„œ๋„ ๊ฐ ์šด์˜์ฒด์ œ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ผ๋ถ€ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค. ์ด ์ ˆ์—์„œ๋Š” ํŠนํžˆ ์œˆ๋„์šฐ ์†Œ์ผ“์˜ ํŠน์ง•์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ๋ฆฌ๋ˆ…์Šค์™€์˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค๋ฌด์—์„œ ์–ด๋–ค ์ ์„ ์ฃผ์˜ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.


โœ… 1. ์†Œ์ผ“์˜ ํŠน์ง• (์œˆ๋„์šฐ ๊ธฐ์ค€)

๐Ÿ“Œ ๊ณตํ†ต ๊ธฐ๋ฐ˜: BSD UNIX ์œ ๋‹‰์Šค ์†Œ์ผ“ ๋ชจ๋ธ

  • ์œˆ๋„์šฐ ์†Œ์ผ“์€ BSD UNIX ์†Œ์ผ“ ์ธํ„ฐํŽ˜์ด์Šค์— ๊ธฐ๋ฐ˜
  • ๋”ฐ๋ผ์„œ ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ๋Š” ๋ฆฌ๋ˆ…์Šค์™€ ๋น„๊ต์  ํ˜ธํ™˜์„ฑ์ด ๋†’์Œ
  • socket()bind()connect()send()recv() ๋“ฑ ๊ธฐ๋ณธ ํ•จ์ˆ˜๋Š” ๋™์ผ

๐Ÿ“Œ ์ฃผ์š” ์ฐจ์ด์ : ์œˆ๋„์šฐ๋งŒ์˜ ๊ตฌ์กฐ์™€ ์š”๊ตฌ์‚ฌํ•ญ

  1. DLL ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค
    • ์œˆ๋„์šฐ ์†Œ์ผ“์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ **DLL (Dynamic-Link Library)**๋กœ ์ œ๊ณต
    • ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐํ™”(WSAStartup)์™€ ์ข…๋ฃŒ(WSACleanup) ์ž‘์—…์ด ํ•„์ˆ˜
    • ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์ด๋Ÿฐ ์ž‘์—…์ด ์ „ํ˜€ ํ•„์š” ์—†์Œ
  2. ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜ GUI ๊ตฌ์กฐ
    • ์œˆ๋„์šฐ๋Š” GUI ํ”„๋กœ๊ทธ๋žจ์ด ๋งŽ์€ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์—ฌ,
    • ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ๋ฉ”์‹œ์ง€์™€ ์—ฐ๊ณ„ํ•˜๋Š” ํ•จ์ˆ˜๋“ค(ex: WSAAsyncSelect())์„ ์ œ๊ณต
    • ์ด๋Š” ์œˆ๋„์šฐ ๋ฉ”์‹œ์ง€ ํ์™€ ์†Œ์ผ“ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด GUI๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค
  3. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ง€์› ๊ณ ๋ ค
    • ์œˆ๋„์šฐ๋Š” ์šด์˜์ฒด์ œ ์ˆ˜์ค€์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์„ ๊ฐ•๋ ฅํžˆ ์ง€์›
    • ๋”ฐ๋ผ์„œ ์†Œ์ผ“๋„ ์Šค๋ ˆ๋“œ ๊ฐ„ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ„๋„์˜ ๋ณดํ˜ธ ๊ตฌ์กฐ ํ•„์š”
    • WSA_FLAG_OVERLAPPEDCreateThread() ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ ๋“ฑ์ด ์‚ฌ์šฉ๋จ
  4. ์œˆ์† ๋ฒ„์ „ ์˜์กด์„ฑ
    • ์œˆ๋„์šฐ๋Š” ๋ฒ„์ „์— ๋”ฐ๋ผ ์ง€์›ํ•˜๋Š” 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 ์†Œ์ผ“์ด ์‹ค๋ฌด์˜ ์ค‘์‹ฌ์ด๋‹ค.


๐Ÿงฉ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ์ 

  1. ๋†’์€ ์ด์‹์„ฑ (Cross-Platform Compatibility)
    • ๋ฆฌ๋ˆ…์Šค์™€ ์œˆ๋„์šฐ ๋ชจ๋‘ ์†Œ์ผ“ API ๊ตฌ์กฐ๊ฐ€ ์œ ์‚ฌ
    • ๋Œ€๋ถ€๋ถ„์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ”Œ๋žซํผ ๊ฐ„ ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  2. ๋ฒ”์šฉ์„ฑ
    • TCP/IP ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Bluetooth, IPv6 ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์„ ๋™์ผํ•œ ์†Œ์ผ“ API๋กœ ์ง€์›
    • ํ”„๋กœํ† ์ฝœ ๋ณ€๊ฒฝ ์‹œ ์ฝ”๋“œ ์ˆ˜์ • ์ตœ์†Œํ™” ๊ฐ€๋Šฅ
  3. ์ €์ˆ˜์ค€ ์ ‘๊ทผ (Low-Level Control)
    • ํŒจํ‚ท ์ „์†ก/์ˆ˜์‹  ํƒ€์ด๋ฐ, ๋ฒ„ํผ ํฌ๊ธฐ, ์˜ค๋ฅ˜ ์ œ์–ด ๋“ฑ์„ ์ •๋ฐ€ํ•˜๊ฒŒ ์ œ์–ด ๊ฐ€๋Šฅ
    • ๊ณ ์„ฑ๋Šฅ ์„œ๋ฒ„๋‚˜ ๋„คํŠธ์›Œํฌ ํˆด ๊ฐœ๋ฐœ์— ์œ ๋ฆฌ
  4. ์‘์šฉ ํ™•์žฅ์„ฑ
    • ์†Œ์ผ“ ๊ธฐ๋ฐ˜ ์œ„์— HTTP, FTP, MQTT ๋“ฑ ๊ณ ์ˆ˜์ค€ ํ”„๋กœํ† ์ฝœ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
    • ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์–ด ๊ฒฝ๋Ÿ‰ ์‹œ์Šคํ…œ์ด๋‚˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ์œ ๋ฆฌ

โš ๏ธ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋‹จ์ 

  1. ์‘์šฉ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ์ง์ ‘ ์„ค๊ณ„ ํ•„์š”
    • ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ, ์ˆœ์„œ, ํ๋ฆ„ ์ œ์–ด, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ •์˜
    • ์˜ˆ๋ฅผ ๋“ค์–ด โ€œ๋กœ๊ทธ์ธ ์ •๋ณด โ†’ ๊ฒฐ๊ณผ โ†’ ๋Œ€๊ธฐ โ†’ ์ˆ˜์‹ โ€ ๋“ฑ์˜ ํ๋ฆ„์„ ์ง์ ‘ ์ฝ”๋”ฉํ•ด์•ผ ํ•จ
  2. ์ด๊ธฐ์ข… ํ˜ธ์ŠคํŠธ ๊ฐ„ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ
    • ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ”์ดํŠธ ์ˆœ์„œ(Byte Order) ์‚ฌ์šฉ (๋ฆฌํ‹€์—”๋””์•ˆ vs ๋น…์—”๋””์•ˆ)
    • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋‹จ์œ„(32๋น„ํŠธ, 64๋น„ํŠธ) ์ฐจ์ด๋กœ ์ธํ•ด ์ „์†ก ์‹œ ๋ณ€ํ™˜์ด ํ•„์š”ํ•จ
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: htonl()ntohl()memcpy() ๋“ฑ์„ ํ†ตํ•œ ๋ช…์‹œ์  ์ •๊ทœํ™”
  3. ํ”„๋กœํ† ์ฝœ ๋ณ€๊ฒฝ ์‹œ ๊ตฌ์กฐ ์ „์ฒด ์ˆ˜์ • ํ•„์š”
    • ํ•˜๋‚˜์˜ ์ „์†ก ํ๋ฆ„์ด๋‚˜ ๋ฉ”์‹œ์ง€ ํฌ๋งท์ด ๋ณ€๊ฒฝ๋˜๋ฉด, ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ ๋ชจ๋‘ ์ˆ˜์ • ํ•„์š”

์˜ˆ์‹œ: ์„ค๊ณ„ ๋ถ€๋‹ด์ด ํฐ ๊ฒฝ์šฐ

[๋ณด์•ˆ ๋ฉ”์‹œ์ง€ ํ†ต์‹  ์š”๊ตฌ ๋ฐœ์ƒ] โ†’ ๊ธฐ์กด ํ‰๋ฌธ ์ „์†ก ์†Œ์ผ“ ๊ตฌ์กฐ ํŒŒ๊ดด๋จ
โ†’ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ๋กœ์ง ์ถ”๊ฐ€ ํ•„์š”
โ†’ ์ „์†ก ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ๊ตฌ์กฐ๋„ ์ˆ˜์ • ํ•„์š”
โ†’ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€

์ด์ฒ˜๋Ÿผ ์‘์šฉ ํ”„๋กœํ† ์ฝœ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ์ž์œ ๋กœ์›€์€ ๋™์‹œ์— ์œ„ํ—˜์„ ์ˆ˜๋ฐ˜ํ•˜๋ฉฐ,

์‹ค์ œ ์ œํ’ˆ ์ˆ˜์ค€์˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด ์ ์ด ์„ค๊ณ„์™€ ๋””๋ฒ„๊น…์˜ ๊ฐ€์žฅ ํฐ ๋‚œ๊ด€์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค.


์ •๋ฆฌ

์žฅ์  ๋‹จ์ 

๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ๋ฐ ํ”„๋กœํ† ์ฝœ ์ง€์› ํ”„๋กœํ† ์ฝœ ๊ตฌ์กฐ ์ง์ ‘ ์„ค๊ณ„ ํ•„์š”
์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๋ฐ ์ด์‹ ์šฉ์ด ๋ฐ์ดํ„ฐ ํ˜ธํ™˜์„ฑ ์ˆ˜๋™ ์ฒ˜๋ฆฌ
๊ณ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ฐ€๋Šฅ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ์ „๋ฉด ์žฌ์ž‘์—… ํ•„์š”
ํ™•์žฅ์„ฑ ๋†’์Œ ์„ค๊ณ„ ๋ณต์žก์„ฑ ์ฆ๊ฐ€

**์œˆ๋„์šฐ ์†Œ์ผ“ ๊ตฌ์กฐ(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_BTHSOCK_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 ๋ณ‘ํ–‰ ์‚ฌ์šฉ
๊ณ ๊ธ‰ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ WSAEventSelectWSAAsyncSelectIOCP ์‚ฌ์šฉ ์‹œ ๋‚ด๋ถ€์ ์œผ๋กœ MSWSOCK.DLL ์—ฐ๋™
Bluetooth/IrDA ํ†ต์‹  ๋™์ผ ์†Œ์ผ“ ์ธํ„ฐํŽ˜์ด์Šค๋กœ AF_BTHAF_IRDA ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ๋‹จ ์ผ๋ถ€ ํ”„๋กœํ† ์ฝœ์€ ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•„์š”

์ •๋ฆฌ

  • ์œˆ์†์€ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ API, ํ™•์žฅ ๊ธฐ๋Šฅ, ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์„ ํ•˜๋‚˜์˜ ์ผ๊ด€๋œ ๊ตฌ์กฐ๋กœ ํ†ตํ•ฉ
  • ์†Œ์ผ“ ์ƒ์„ฑ ํ•จ์ˆ˜ ํ•œ ์ค„์ด๋ฉด, ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆ˜๋งŽ์€ ์—ฐ๊ฒฐ์„ ์ž๋™ ์ˆ˜ํ–‰
  • **WS2_32.DLL**์€ ์œˆ๋„์šฐ ๋„คํŠธ์›Œํฌ API์˜ ์‹ค์งˆ์  ํ•ต์‹ฌ

์ด์ œ๋ถ€ํ„ฐ ๋ณธ๊ฒฉ์ ์ธ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ธ๊ณ„๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ์ด๋ฒˆ ์„น์…˜์€ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ TCP ์„œ๋ฒ„ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋žจ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ์‹ค์Šต์ด๋‹ค. ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋ณธ TCP ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ํ…”๋„ท์œผ๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค.


โœ… ์‹ค์Šต ๋ชฉ์  ์š”์•ฝ

  • TCP ๊ธฐ๋ฐ˜์˜ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์„ Visual Studio์—์„œ ์ž‘์„ฑ
  • ํด๋ผ์ด์–ธํŠธ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ , ์„œ๋ฒ„ ์ฝ˜์†”์— ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ
  • *ํ…”๋„ท(telnet)**์„ ํด๋ผ์ด์–ธํŠธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
  • ์‹ค์Šต์„ ํ†ตํ•ด Winsock ์ดˆ๊ธฐํ™”, ์†Œ์ผ“ ์ƒ์„ฑ, ๋ฐ”์ธ๋”ฉ, ๋ฆฌ์Šจ, ์ˆ˜์‹  ํ๋ฆ„์„ ์ตํž˜

๐Ÿงช ์‹ค์Šต ํ™˜๊ฒฝ ์ค€๋น„: Visual Studio ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

โ‘  Visual Studio์—์„œ ์ƒˆ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ

  1. ๋ฉ”๋‰ด ์„ ํƒ:
  2. ํŒŒ์ผ(File) โ†’ ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ(New) โ†’ ํ”„๋กœ์ ํŠธ(Project)
  3. ํ”„๋กœ์ ํŠธ ์œ ํ˜• ์„ ํƒ:
    • ๊ฒ€์ƒ‰์ฐฝ์— โ€œ์ฝ˜์†”โ€ ์ž…๋ ฅ
    • ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก์—์„œ โ†’ 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.hstdafx.h ๋“ฑ์ด ์ž๋™ ์ƒ์„ฑ๋˜์ง€ ์•Š์•„ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๋‹จ์ˆœํ•ด์ง

โœ… ํŒ: ์ฒ˜์Œ๋ถ€ํ„ฐ ๋นˆ ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ์˜ˆ์ œ ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋‚˜ ํŒŒ์ผ ์—ฐ๊ฒฐ์ด ์‰ฌ์›Œ์ง€๊ณ ,์˜ˆ์ œ์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ


๐ŸŽฏ ์ดํ›„ ๋‹จ๊ณ„ ์•ˆ๋‚ด

์ด์ œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ค€๋น„๋˜์—ˆ์œผ๋‹ˆ, ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  1. Server.cpp ์†Œ์Šค ํŒŒ์ผ ์ถ”๊ฐ€
    • ํ”„๋กœ์ ํŠธ > ์ถ”๊ฐ€ > ์ƒˆ ํ•ญ๋ชฉ > C++ ํŒŒ์ผ(.cpp) โ†’ ์ด๋ฆ„: Server.cpp
  2. TCP ์†Œ์ผ“ ์ฝ”๋“œ ์ž…๋ ฅ
    • **WSAStartup()**๋ถ€ํ„ฐ socket()bind()listen()accept() ๋“ฑ์„ ๋‹จ๊ณ„๋ณ„๋กœ ๊ตฌํ˜„
  3. ๋นŒ๋“œ & ์‹คํ–‰
    • Ctrl + F5 ๋˜๋Š” ์‹œ์ž‘ ๋ฒ„ํŠผ ํด๋ฆญ
  4. ํด๋ผ์ด์–ธํŠธ ์ ‘์† ํ…Œ์ŠคํŠธ
    • 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 ์†Œ์Šค ํŒŒ์ผ ์ถ”๊ฐ€

  1. ์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ์—์„œ '์†Œ์Šค ํŒŒ์ผ' ํด๋” ์šฐํด๋ฆญ
  2. โ†’ [์ถ”๊ฐ€] โ†’ [์ƒˆ ํ•ญ๋ชฉ...]
  3. [์ƒˆ ํ•ญ๋ชฉ ์ถ”๊ฐ€] ๋Œ€ํ™”์ƒ์ž
    • ํ•ญ๋ชฉ ์œ ํ˜•: C++ ํŒŒ์ผ (.cpp)
    • ์ด๋ฆ„: Server
    • ๊ฒฝ๋กœ๋Š” ๊ธฐ๋ณธ๊ฐ’ (C:\\Test\\Server) ๊ทธ๋Œ€๋กœ
    • [์ถ”๊ฐ€] ํด๋ฆญ
  4. ๋นˆ ํŒŒ์ผ์ด ์—ด๋ฆฌ๋ฉด, Chapter01\\Server\\Server.cpp ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ ๋„ฃ๋Š”๋‹ค.

โ‘ก ์†Œ์ผ“ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•

์œˆ๋„์šฐ์—์„œ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๊ฒฝ์šฐ, ํ•„์ˆ˜์ ์œผ๋กœ ws2_32.lib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•ด์•ผ ํ•œ๋‹ค. ์ด ์ฑ…์—์„œ๋Š” ์ฝ”๋“œ ๋‚ด๋ถ€์— ์ง์ ‘ ๋งํฌ ๋ช…๋ น์„ ๋ช…์‹œํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค:

#pragma comment(lib, "ws2_32")

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Visual Studio์˜ ํ”„๋กœ์ ํŠธ ์†์„ฑ์—์„œ ๋”ฐ๋กœ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋งํฌ๋œ๋‹ค.


โ‘ข ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

  1. ๋นŒ๋“œ
    • ๋ฉ”๋‰ด: [๋นŒ๋“œ] โ†’ [์†”๋ฃจ์…˜ ๋นŒ๋“œ] ๋˜๋Š” Ctrl + Shift + B
  2. ์‹คํ–‰ (๋””๋ฒ„๊น… ์—†์ด ์‹œ์ž‘)
    • ๋ฉ”๋‰ด: [๋””๋ฒ„๊ทธ] โ†’ [๋””๋ฒ„๊น…ํ•˜์ง€ ์•Š๊ณ  ์‹œ์ž‘] ๋˜๋Š” Ctrl + F5
  3. ๋ฐฉํ™”๋ฒฝ ๊ฒฝ๊ณ  ๋ฐœ์ƒ ์‹œ
    • "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์€ ํ…”๋„ท ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค. ๋‹ค์Œ ์ ˆ์ฐจ๋กœ ํ™œ์„ฑํ™”ํ•ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ:

  1. ์‹œ์ž‘ ๋ฉ”๋‰ด์—์„œ control ๊ฒ€์ƒ‰ โ†’ ์ œ์–ดํŒ(Control Panel) ์‹คํ–‰
  2. [ํ”„๋กœ๊ทธ๋žจ] โ†’ [Windows ๊ธฐ๋Šฅ ์ผœ๊ธฐ/๋„๊ธฐ]
  3. ํ…”๋„ท ํด๋ผ์ด์–ธํŠธ ํ•ญ๋ชฉ ์ฒดํฌ โ†’ [ํ™•์ธ]
  4. ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด telnet ๋ช…๋ น์ด ์ •์ƒ ์ž‘๋™

๐Ÿ› ๏ธ ๋˜๋Š” ๋ช…๋ น์–ด๋กœ ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ:

 

dism /online /Enable-Feature /FeatureName:TelnetClient

โœ… ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ ์š”์•ฝ

[ํด๋ผ์ด์–ธํŠธ] โ† telnet 127.0.0.1 9000
   โ‡…
[์„œ๋ฒ„ ์ฝ˜์†”]
 - ํด๋ผ์ด์–ธํŠธ ์ ‘์† IP/ํฌํŠธ ์ถœ๋ ฅ
 - ์ˆ˜์‹  ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
 - ํด๋ผ์ด์–ธํŠธ ์ข…๋ฃŒ ์‹œ ๋กœ๊ทธ ์ถœ๋ ฅ

์ •๋ฆฌ

  • ํ…”๋„ท์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ TCP ํ…Œ์ŠคํŠธ ๋„๊ตฌ
  • ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„ ์ฝ˜์†”์— ์ถœ๋ ฅ๋จ (ํ…”๋„ท ์ž์ฒด์—๋Š” ํ‘œ์‹œ ์•ˆ ๋จ)
  • ์„œ๋ฒ„๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฐ„๋‹จํ•˜๋ฉด์„œ ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•
  • ํด๋ผ์ด์–ธํŠธ ์ข…๋ฃŒ ๋ฐ ์„œ๋ฒ„ ๋กœ๊ทธ ํ™•์ธ์œผ๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ํ๋ฆ„ ์ „์ฒด๋ฅผ ์ ๊ฒ€ ๊ฐ€๋Šฅ

์ด์ œ๋Š” ์œˆ๋„์šฐ์— ์ด์–ด ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ TCP ์„œ๋ฒ„ ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ์‹ค์Šต ๋‹จ๊ณ„๋‹ค. ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” Visual Studio ๊ฐ™์€ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์—†์ด๋„ g++maketelnet ๋งŒ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.


โœ… ์‹ค์Šต 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 ์ฃผ์†Œ(๋ฌผ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ
  • ๊ณ„์ธต: ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ ๊ณ„์ธต๊ณผ ์ธํ„ฐ๋„ท ๊ณ„์ธต ์‚ฌ์ด์˜ ๋ธŒ๋ฆฟ์ง€ ์—ญํ• 
  • ์ž‘๋™ ๋ฐฉ์‹:
    1. IP ์ฃผ์†Œ๋งŒ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ARP ์š”์ฒญ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ „์†ก
    2. ํ•ด๋‹น 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)

  1. Telnet Server, Simple TCP/IP ์„œ๋น„์Šค ์„ค์น˜
    • ์ œ์–ดํŒ > [ํ”„๋กœ๊ทธ๋žจ ๋ฐ ๊ธฐ๋Šฅ] > [Windows ๊ธฐ๋Šฅ ์ผœ๊ธฐ/๋„๊ธฐ]
    • "Simple TCP/IP Services (i.e. echo, daytime etc)" ์ฒดํฌ
    • ํ™•์ธ โ†’ ์„ค์น˜ ์™„๋ฃŒ ํ›„ ์žฌ๋ถ€ํŒ…
  2. Windows Defender ๋ฐฉํ™”๋ฒฝ ์„ค์ •
    • ํฌํŠธ 13 ํ—ˆ์šฉ ๊ทœ์น™ ์ถ”๊ฐ€ ๋˜๋Š” daytime ์•ฑ ์˜ˆ์™ธ ์„ค์ •
  3. ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
    • ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ ํ…Œ์ŠคํŠธ:
    • bash ์ฝ”๋“œ ๋ณต์‚ฌ telnet 127.0.0.1 13

๐Ÿง Linux (inetd ๋˜๋Š” xinetd ์‚ฌ์šฉ ์‹œ)

  1. inetd ๋˜๋Š” xinetd ์„ค์น˜
  2. bash ์ฝ”๋“œ ๋ณต์‚ฌ sudo apt install inetutils-inetd
  3. /etc/inetd.conf์— ์„ค์ • ์ถ”๊ฐ€
    daytime stream tcp nowait root internal
    daytime dgram udp wait root internal
  4. ๋˜๋Š” /etc/xinetd.d/daytime ์ƒ์„ฑ
  5. ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
  6. bash ์ฝ”๋“œ ๋ณต์‚ฌ sudo service inetd restart
  7. ํ…Œ์ŠคํŠธ
  8. 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 ์œ ๋‹ˆ/๋ฉ€ํ‹ฐ/์• ๋‹ˆ์บ์ŠคํŠธ, ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์—†์Œ