[Java/์ž๋ฐ”] 7. ๋„คํŠธ์›Œํฌ Network

๋„คํŠธ์›Œํฌ Network

ํŠน์ • ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค๋“ค์ด ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋˜๊ณ  ์žˆ๊ณ , ์„œ๋น„์Šค ์ด์šฉ์ž๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„คํŠธ์›Œํฌ Network ์™€ ๋„คํŠธ์›Œํ‚น Networking

  • ๋„คํŠธ์›Œํฌ Network: ํ†ต์‹  ๊ฒฝ๋กœ๋“ค์— ์˜ํ•ด ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์ผ๋ จ์˜ ์ง€์ (Point)์ด๋‚˜ ๋…ธ๋“œ(Node)๋“ค์„ ์˜๋ฏธ
  • ๋„คํŠธ์›Œํ‚น Networking: ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ๋””๋ฐ”์ด์Šค๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์˜๋ฏธ

ํ”„๋กœํ† ์ฝœ Protocol

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

ํŒจํ‚ท Packet

  • ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ 1024bit์”ฉ ๋ฌถ์Œ์œผ๋กœ ๋ณด๋‚ด๋Š”๋ฐ, ์ด ๋ฌถ์Œ์„ ํŒจํ‚ท์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ฌถ์Œ ์†์— ๊ฐ์ข… ์—๋Ÿฌ ๊ฒ€์‚ฌ์šฉ ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋Š ํŒจํ‚ท์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์ „์†ก ๋„์ค‘์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋ฌถ์Œ๋งŒ ์žฌ์ „์†ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ํ—ค๋”์™€ ๋ฐ”๋””๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

    • ํ—ค๋” Header

      • ์†ก์‹ ์ž, ์ˆ˜์‹ ์ž์˜ ์ฃผ์†Œ ์ •๋ณด
      • ํŒจํ‚ท์ด ์†์ƒ๋˜์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ checksum
      • ๋„คํŠธ์›Œํฌ ์ „์†กํ•  ๋•Œ ํ•„์š”ํ•œ ๊ธฐํƒ€ ์œ ์šฉํ•œ ์ •๋ณด
    • ๋ฐ”๋”” body

      • ๋ฐ”์ดํŠธ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์ธ ์ „์†กํ•  ๋ฐ์ดํ„ฐ
  • ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ํŒจํ‚ท์œผ๋กœ ๋ฌถ์–ด์„œ ์ „์†กํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ ์ด๋‹ค.

OSI 7๊ณ„์ธต

์˜ค๋Š˜๋‚  ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋Š” 1970๋…„๋Œ€ ๋ง IOS(International Organization for Standardization)์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ OSI 7๊ณ„์ธต(Open Systems Interconnection 7 Layer)์„ ๊ธฐ์ดˆ๋กœ ํ•œ๋‹ค.

OSI7

๋„คํŠธ์›Œํฌ ์žฅ๋น„๋ผ๋ฆฌ ์„œ๋กœ ํ‘œ์ค€์ ์ธ ์—ฐ๊ฒฐ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‹€์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ทœ์ •๋˜์—ˆ๋‹ค.

๊ฐœ๋ฐฉํ˜• ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ๋Š” ์–ด๋–ค ์žฅ๋น„๋ผ๋„ ์ƒํ˜ธ ์ •๋ณด ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ๋„คํŠธ์›Œํฌ์˜ ํ”„๋กœํ† ์ฝœ์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ํ”„๋กœํ† ์ฝœ์ด ๋‹จ์ˆœํ•ด์กŒ๋‹ค.

๐Ÿ‘‰ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง€๊ณ  ์ข€ ๋” ์œ ์—ฐํ•œ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

  1. ๋ฌผ๋ฆฌ ๊ณ„์ธต

    • ๋…ธ๋“œ ๊ฐ„ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์ €์ˆ˜์ค€์˜ ๊ณ„์ธต
    • ์ƒ์œ„ ๊ณ„์ธต์ธ ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต์—์„œ ํ˜•์„ฑ๋œ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์„ ์ „๊ธฐ ์‹ ํ˜ธ๋‚˜ ๊ด‘์‹ ํ˜ธ๋กœ ๋ฐ”๊ฟ” ์†ก์ˆ˜์‹ ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹น
    • ํ•˜๋“œ์›จ์–ด๋‚˜ ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ์ž๋“ค์ด C์–ธ์–ด ๋“ฑ์œผ๋กœ ๋‹ค๋ฃฌ๋‹ค.
  2. ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต

    • ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋น„ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฌผ๋ฆฌ ๊ณ„์ธต์ด ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
    • ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ํฌ๋งท์œผ๋กœ ๋งŒ๋“ค๊ณ  ์ˆ˜์‹ ์ง€์™€ ๋ฐœ์‹ ์ง€ ํ•˜๋“œ์›จ์–ด ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”๋ฅผ ์ถ”๊ฐ€
  3. ๋„คํŠธ์›Œํฌ ๊ณ„์ธต

    • ๋‹ค๋ฅธ ์žฅ์†Œ์— ์œ„์น˜ํ•œ ๋‘ ์‹œ์Šคํ…œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ฑ๊ณผ ๊ฒฝ๋กœ ์„ ํƒ์„ ์ œ๊ณต
    • ๋ผ์šฐํŒ… ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๋ฉฐ, ์„ ํƒ๋œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ์ •๋ณด๋ฅผ ๋ณด๋‚ธ๋‹ค.
    • ๋‹ค๋ฅธ ์žฅ์†Œ์— ์œ„์น˜ํ•œ ๋‘ ์‹œ์Šคํ…œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ฑ๊ณผ ๊ฒฝ๋กœ ์„ ํƒ์„ ์ œ๊ณต
  4. ํŠธ๋žœ์ŠคํฌํŠธ ๊ณ„์ธต

    • ๋ฐ์ดํ„ฐ ์ „์†ก ์„œ๋น„์Šค ์ œ๊ณต
    • ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒ ํšŒ๋กœ ๊ตฌ์ถ•, ์œ ์ง€์™€ ์ข…๋ฃŒ, ์ „์†ก ์˜ค๋ฅ˜ ๊ฒ€์ถœ๊ณผ ๋ณต๊ตฌ ๊ทธ๋ฆฌ๊ณ  ์ •๋ณด ํ๋ฆ„ ์ œ์–ด์˜ ์ ˆ์ฐจ๋ฅผ ์ œ๊ณต
  5. ์„ธ์…˜ ๊ณ„์ธต

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ์„ธ์…˜์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ๋™๊ธฐํ™”์‹œํ‚ค๋ฉฐ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ๊ด€๋ฆฌ
  6. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต

    • ํ•œ ์‹œ์Šคํ…œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด๋‚ธ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณณ
  7. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต

    • ์‚ฌ์šฉ์ž์™€ ์ปดํ“จํ„ฐ๊ฐ€ ํ†ต์‹ ํ•˜๋Š” ๊ณณ
    • ํ†ต์‹ ํ•˜๊ณ ์ž ํ•˜๋Š” ์ƒ๋Œ€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ทธ ์ƒ๋Œ€์™€์˜ ํ†ต์‹ ์„ ํ™•๋ณดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ํ†ต์‹ ์„ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ์ž์›์„ ๋ณด์œ ํ•˜๊ณ ์žˆ๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จ

ํ”„๋กœ๊ทธ๋žจ ๊ด€๊ณ„ ๋ชจ๋ธ

ํด๋ผ์ด์–ธํŠธ / ์„œ๋ฒ„ ๋ชจ๋ธ

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

    • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ผ์ข…์˜ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋ธ
    • ํŠน์ • ์›น์„œ๋ฒ„์—๊ฒŒ ์›นํŽ˜์ด์ง€ ๋˜๋Š” ํŒŒ์ผ ์ „์†ก์„ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„์˜ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ผ์„ ์ˆ˜ํ–‰
  • TCP/IP๊ฐ€ ์„ค์น˜๋œ ์ปดํ“จํ„ฐ

    • ์ธํ„ฐ๋„ท ์ƒ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ FTP(File Transfer Protocol)์„œ๋ฒ„๋“ค์—๊ฒŒ ํŒŒ์ผ ์ „์†ก ์š”์ฒญ ๊ฐ€๋Šฅ

Peer-to-peer ๋ชจ๋ธ

ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ชจ๋ธ๊ณผ ๋Œ€๋น„๋˜๋Š” ๋ชจ๋ธ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ P2P๋ผ๊ณ  ๋ถ€๋ฆ„

ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ํ™˜๊ฒฝ P2P ํ™˜๊ฒฝ
- ์„œ๋น„์Šค ์ œ๊ณต์ž์™€ ์„œ๋น„์Šค ์ˆ˜์š”์ž๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋œ๋‹ค.
- ์„œ๋น„์Šค ์ œ๊ณต์ž์ธ ์„œ๋ฒ„๊ฐ€ ์„œ๋น„์Šค ์ˆ˜์š”์ž์ธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ผ๋ฐฉ์ ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต
- ์„œ๋ฒ„๋Š” ํ•œ ๋Œ€์ธ๋ฐ, ์ˆ˜๋งŽ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•œ๋‹ค๋ฉด ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐ
- ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์ด์ž ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ ์ˆ˜ํ–‰
- ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๋“ค์ด ์„œ๋กœ ๋Œ€๋“ฑํ•œ ๋™๋ฃŒ์˜ ์ž…์žฅ์—์„œ ๋ฐ์ดํ„ฐ๋‚˜ ์ฃผ๋ณ€ ์žฅ์น˜ ๋“ฑ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
- ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋กœ ์ง‘์ค‘๋˜๋Š” ์š”์ฒญ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ธํ„ฐ๋„ท

  • TCP/IP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜๋งŽ์€ ์ปดํ“จํ„ฐ๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ์ „ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ํฐ ํ†ต์‹ ๋ง
  • OSI 7๊ณ„์ธต ์ค‘ 3๊ณ„์ธต์ธ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์— ๊ธฐ๋ฐ˜์„ ๋‘” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋„คํŠธ์›Œํฌ ๋ชจ์ž„
  • ๊ฐ๊ฐ์˜ ๋„คํŠธ์›Œํฌ๋Š” ์ธํ„ฐ๋„ท ๋‚ด์˜ ๋‹ค๋ฅธ ์–ด๋–ค ๋„คํŠธ์›Œํฌ์™€๋„ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ „ ์„ธ๊ณ„์ ์ธ TCP/IP ๋„คํŠธ์›Œํฌ๋ฉฐ, IP์ฃผ์†Œ์ฒด๊ณ„์™€ IPํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ค‘์š” ํ”„๋กœํ† ์ฝœ

IP(Internet Protocol)

  • IP๋Š” ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์— ์กด์žฌํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ์„œ, ํ™œ์šฉ๋„๊ฐ€ ๋†’๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค.
  • IP๋Š” ์‹ ๋ขฐ์„ฑ์ด ์—†๋Š” ํ”„๋กœํ† ์ฝœ๋กœ, ํŒจํ‚ท์ด ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†ก๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • IP๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์—๋งŒ ์ง‘์ค‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์ฃผ์†Œ ์ฒด๊ณ„์™€ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์— ๋Œ€ํ•œ ๋ผ์šฐํŒ…์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฐ ๋ผ์šฐํ„ฐ๋Š” ํŒจํ‚ท์˜ IP์ฃผ์†Œ๋ฅผ ๊ทผ๊ฐ„์œผ๋กœ ๋ผ์šฐํŒ…์„ ๊ฒฐ์ •

IP ์ฃผ์†Œ

  • 32๋น„ํŠธ ์ •๋ณด๋กœ ๊ตฌ์„ฑ๋จ

    • โ€™.โ€˜๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ํ•ด์„œ 8๋น„ํŠธ์”ฉ ๋„ค ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.
    • ์ผ๋ถ€๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ํ˜ธ์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ํ˜„์žฌ IP๋ฒ„์ „์€ IPv4๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‚˜, IP์ฃผ์†Œ๊ฐ€ ๊ณ ๊ฐˆ๋˜์–ด๊ฐ€๊ณ  ์žˆ์–ด IPv6๋กœ ํ•ด๊ฒฐ์„ ํ•˜๋ ค ํ•œ๋‹ค.

TCP(Transmission Control Protocol)

  • ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ
  • ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅ
  • ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ฐœ์‹ ์ž๊ฐ€ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.
  • ํ”ํžˆ ์ „ํ™”ํ†ตํ™”์™€ ๋น„๊ต
  • ์—ฐ๊ฒฐ ์ง€ํ–ฅ ํ”„๋กœํ† ์ฝœ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก/์ˆ˜์‹  ํ•˜๊ธฐ ์ „์— ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • checksum์„ ํ†ตํ•ด์„œ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. (์†ก์‹ ์ž-checksum ํฌํ•จํ•ด์„œ ์ „๋‹ฌ, ์ˆ˜์‹ ์ž-checksum์„ ์ด์šฉํ•ด์„œ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ ํ™•์ธ ํ›„ ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐœ์‹ ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ ์žฌ์ „์†ก ์š”์ฒญ)
  • ์†Œ์ผ“๊ณผ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ ‘์†์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ํ•˜๋‚˜์˜ ์ฑ„ํŒ… ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ์ˆ˜์ฒœ ๋ช… ๋™์‹œ ์‚ฌ์šฉ์ž๋“ค์˜ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ TCP๊ฐ€ ์ง€์›ํ•˜๋Š” ๋‹ค์ค‘ ์†ก์ˆ˜์‹  ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅ -์ฆ‰, TCP๋Š” UDP์— ๋น„ํ•ด ํ”„๋กœํ† ์ฝœ์ด ๋ณต์žกํ•˜๊ณ  ์†๋„๊ฐ€ ๋Š๋ฆฌ์ง€๋งŒ, ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP, FTP, TELNET ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ TCP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

UDP(User Datagram Protocol)

  • ์‹ ๋ขฐ์„ฑ ์—†๋Š” ํ”„๋กœํ† ์ฝœ
  • ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ž์‹ ์˜ ์ž„๋ฌด๋ฅผ ๋‹คํ•œ ๊ฒƒ์œผ๋กœ ์—ฌ๊ธด๋‹ค.
  • ํ”ํžˆ UDP๋ฅผ ์šฐํŽธ๋ฐฐ๋‹ฌ์— ๋น„์œ 
  • ๋น„์—ฐ๊ฒฐ์ง€ํ–ฅ ํ”„๋กœํ† ์ฝœ๋กœ์„œ, ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์šฐํŽธ์„ ๋ณด๋‚ธ๋‹ค๊ณ  ์•Œ๋ฆฌ์ง€ ์•Š์•„๋„ ์ƒ๋Œ€๋ฐฉ์ด ์–ด๋””์— ์žˆ๋Š”์ง€๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ๋ณด๋‚ด๋Š” ๊ฒƒ.
  • UDP๋Š” ์Œ์•…, ๋™์˜์ƒ์˜ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค ๊ฐ™์€ ๊ฒƒ์— ์ ๋‹นํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

HTTP(Hypertext Transfer Protocol)

  • ์ธํ„ฐ๋„ท์—์„œ ํ•˜์ดํผ ํ…์ŠคํŠธ ๋ฌธ์„œ(ํ…์ŠคํŠธ, ๊ทธ๋ž˜ํ”ฝ, ์‚ฌ์šด๋“œ, ๋น„๋””์˜ค, ๊ธฐํƒ€ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํŒŒ์ผ ํฌํ•จ)๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๊ทœ์•ฝ๋“ค์˜ ์ง‘ํ•ฉ
  • HTTP๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€์•Š๋Š”(Stateless)ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ ‘์†ํ•ด์„œ ์š”์ฒญ์„ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์ •๋ณด์— ๋Œ€ํ•ด์„œ ์ ์ ˆํ•œ ์‘๋‹ต์„ ํ•œ ๋’ค ์ ‘์†์„ ๋Š๋Š”๋‹ค.
  • HTTP ๋ฌธ์„œ๋Š” ์š”์ฒญ์— ๊ด€ํ•œ ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ—ค๋”์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ”๋””๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • HTTP ํ”„๋กœํ† ์ฝœ์€ TCP ํฌํŠธ 80๋ฒˆ์„ ์‚ฌ์šฉ

๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ

์†Œ์ผ“

  • ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žˆ์–ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„คํŠธ์›Œํฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต
  • ์†Œ์ผ“์˜ ์ƒ๋ช…์ฃผ๊ธฐ

    1. ์†Œ์ผ“ ์ƒ์„ฑ
    2. ์†Œ์ผ“์„ ํ†ตํ•œ ์†ก์ˆ˜์‹ 
    3. ์†Œ์ผ“ ์†Œ๋ฉธ
  • ์†Œ์ผ“ ํ˜•์‹

    • SOCK_STREAM

      • ๋ฐ”์ดํŠธ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” Stream ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์†Œ์ผ“
      • ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ๊ฐ€๋Šฅ
      • ์ด ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ•์„ TCP๋ผ๊ณ  ํ•œ๋‹ค.
    • SOCK_DGRAM

      • ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ†ต์‹ ์šฉ ์†Œ์ผ“
      • SOCK_STREAM๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ๊ฐ€๋Šฅ
      • ์ด ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ•์„ UDP๋ผ๊ณ  ํ•œ๋‹ค.
    • SOCK_RAW

      • ์ž๋ฐ”์—์„œ ์ง€์› X

์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธํ„ฐ๋„ท ์ฃผ์†Œ์™€ ํฌํŠธ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค.

  • ์ธํ„ฐ๋„ท ์ฃผ์†Œ(IP)๋ฅผ ์ด์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ์ปดํ“จํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ๋ฅผ ์ฐพ์•˜๋‹ค๊ณ  ํ•ด์„œ ์˜ฌ๋ฐ”๋ฅธ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. โˆต ์ปดํ“จํ„ฐ ์•ˆ์—๋Š” ํ”„๋กœ์„ธ์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๊ฐ์ž์˜ ํฌํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์ ‘์†์„ ๋Œ€๊ธฐ ์ค‘์ด๊ฑฐ๋‚˜ ํ†ต์‹  ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ํฌํŠธ

    • ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์—๋Š” ํ”„๋กœ์„ธ์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์†Œ์ผ“์œผ๋กœ ํ†ต์‹ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๊ฐ๊ฐ€์˜ ์†Œ์ผ“์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ํฌํŠธ๋Š” ์ •์ˆ˜๊ฐ’์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.
    • 0~1023๊นŒ์ง€๋Š” ์œ ๋ช… ํ”„๋กœ๊ทธ๋žจ(FTP, WWW)๋“ฑ์ด ์‚ฌ์šฉํ•˜๋„๋ก ์ด๋ฏธ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” 1023์ดํ›„์˜ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๋„๋ฉ”์ธ & IP ๋ณ€ํ™˜

  • java.net ํŒจํ‚ค์ง€์˜ InetAddress ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ IP์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, IP์ฃผ์†Œ๋ฅผ ๋„๋ฉ”์ธ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ž์—ด์ด๋‚˜ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ IP์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ ์ด๋ฆ„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    //๊ตฌ๋ฌธ
    InetAddress address = InetAddress.getLocalhost();
    
    //๊ทธ๋ฐ–์—๋„
    String domain = address.getHostName() //๋„๋ฉ”์ธ ๋„ค์ž„์„ ์–ป์Œ
    String ip = address.getHostAddress()//dotted decimal ์ฃผ์†Œ ์–ป๊ธฐ
    byte[] ipByte = address.getAddress()//4๋ฐ”์ดํŠธ IP์ฃผ์†Œ๋ฅผ ์–ป์Œ

๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

TCP ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • TCP๋Š” ์ŠคํŠธ๋ฆผ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ
  • ์—ฐ๊ฒฐ์ง€ํ–ฅ ํ”„๋กœํ† ์ฝœ: TCP ํ†ต์‹ ์„ ํ•˜๋ ค๋ฉด ์–‘์ชฝ์˜ ์†Œ์ผ“์ด ์—ฐ๊ฒฐ๋œ ์ƒํƒœ์—ฌ์•ผ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์ด๋ž€?

  • ์†ก์‹ ํ•œ ์ชฝ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์‹  ์ธก์— ์ฐจ๋ก€๋Œ€๋กœ, ์ค‘๊ฐ„์— ์œ ์‹ค๋˜๋Š” ์ผ ์—†์ด ๋„์ฐฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ์ˆ˜์‹  ์ธก๊ณผ ์†ก์‹  ์ธก์ด ๋ฏธ๋ฆฌ ์—ฐ๊ฒฐ์„ ๋งบ๊ณ  ์—ฐ๊ฒฐ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ์—ฐ๊ฒฐ์ด ๋Š์–ด์งˆ ๋•Œ๊นŒ์ง€๋Š” ์†ก์‹ ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ๋ชฉ์ ์ง€์˜ ์†Œ์ผ“์— ์ „๋‹ฌ๋˜๋Š” ์‹ ๋ขฐ์„ฑ์ด ์žˆ๋Š” ํ†ต์‹ ์ด ๊ฐ€๋Šฅ
  • ์ฆ‰, ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ์„ ๋งบ๊ฒŒ ๋˜๋ฉด, ์•ˆ์ •์ ์œผ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ

TCP ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด์„œ๋Š” TCP ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ๋™์ž‘ ์ˆœ์„œ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, java์—์„œ๋Š” TCP ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก java.net ํŒจํ‚ค์ง€์— ๊ด€๋ จ ํด๋ž˜์Šค๋“ค์„ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•ด๋’€๋‹ค.

  • ์ฃผ์š” ํด๋ž˜์Šค

    • ServerSocket: ์„œ๋ฒ„ ์ชฝ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๋Œ€๊ธฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ํด๋ž˜์Šค

      • ์ฃผ์š” ๋ฉ”์†Œ๋“œ

        • Socket accept(): ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์† ์š”์ฒญ์„ ๋ฐ›์•„ ์ƒˆ๋กœ์šด Socket ๊ฐ์ฒด return
        • void claose(): ์„œ๋ฒ„ ์†Œ์ผ“ ๋‹ซ๊ธฐ
        • InetAddress getInetAddress(): ์„œ๋ฒ„ ์ž์‹ ์˜ ์ธํ„ฐ๋„ท ์ฃผ์†Œ๋ฅผ return
    • Socket: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ํด๋ž˜์Šค

      • ์ฃผ์š” ๋ฉ”์†Œ๋“œ

        • void claose(): ์†Œ์ผ“ ๋‹ซ๊ธฐ
        • InetAddress getInetAddress(): ์ƒ๋Œ€๋ฐฉ์˜ InetAddress๋ฅผ return
        • InetAddress getInetStream(): ์ด ์†Œ์ผ“๊ณผ ์—ฐ๊ฒฐ๋œ InputStream์„ ์–ป๋Š”๋‹ค.
        • OutputStream getOutputStream(): ์ด ์†Œ์ผ“๊ณผ ์—ฐ๊ฒฐ๋œ OutputStream์„ ์–ป์Œ

์†Œ์ผ“ ๊ธฐ๋ฐ˜์˜ ํ†ต์‹ 

TCP ์—์ฝ” ์„œ๋ฒ„

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„ ์ชฝ์—์„œ ๋ฐ›์•„๋“ค์—ฌ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธ

  • TCP ์—์ฝ” ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ˆœ์„œ

    1. ServerSocket(ํฌํŠธ๋ฒˆํ˜ธ)์„ ์ƒ์„ฑํ•˜์—ฌ ํŠน์ • ํฌํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๋Œ€๊ธฐ
    2. ServerSocket์˜ accept()๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    3. ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์† ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด accept()๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ Socket ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    4. ์ƒ์„ฑ๋œ Socket ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ํ†ต์‹ ์„ ์œ„ํ•œ InputStream, OutputStream์„ ์–ป๋Š”๋‹ค.
    5. InputStream, OutputStream์„ ์ด์šฉํ•ด์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•œ๋‹ค.
    6. ํ†ต์‹ ์— ์‚ฌ์šฉ๋œ IO์ŠคํŠธ๋ฆผ๊ณผ Socket๊ฐ์ฒด close()

TCP ์—์ฝ” ํด๋ผ์ด์–ธํŠธ

  • TCP ์—์ฝ” ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„ํ•˜๋Š” ์ˆœ์„œ

    1. ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ์œ„ํ•œ Socket ๊ฐ์ฒด ์ƒ์„ฑ. ์ด๋•Œ ์ ‘์† ์š”์ฒญํ•  ์„œ๋ฒ„์˜ IP์ฃผ์†Œ์™€ Port๋ฒˆํ˜ธ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •
    2. Socket๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ InputStream, OutputStream์„ ์–ป์Œ
    3. ์ƒ์„ฑ๋œ InputStream, OutputStream์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„์™€ ํ†ต์‹ 
    4. ํ†ต์‹ ์ด ์™„๋ฃŒ๋˜๋ฉด ํ†ต์‹ ์— ์‚ฌ์šฉ๋œ IO์ŠคํŠธ๋ฆผ๊ณผ Socket ๊ฐ์ฒด๋ฅผ close()ํ•œ๋‹ค.

โ—๏ธ์—์ฝ” ์„œ๋ฒ„์™€ ์—์ฝ” ํด๋ผ์ด์–ธํŠธ์—์„œ์˜ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ ์€ ์„œ๋ฒ„๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ ์ ‘์†๋งŒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

accept()๋ฉ”์†Œ๋“œ๋กœ ๋Œ€๊ธฐ -> ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์† ์š”์ฒญ -> ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์ผ“ return -> ๋‹ค์‹œ accept()ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋ฒ„๋“ค์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋ช…์˜ ์‚ฌ์šฉ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋Š” ๋ฉ€ํ‹ฐ Thread๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ์ง€์›ํ•ด์•ผํ•œ๋‹ค.

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ - ์†Œ์ผ“

  • TCP ๊ธฐ๋ฐ˜์˜ ๋ฉ€ํ‹ฐ Thread ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ˆœ์„œ


    - (์„œ๋ฒ„์˜ ์—ญํ• )
    1. ServerSocket(50000)์„ ์ƒ์„ฑํ•˜์—ฌ ํŠน์ • ํฌํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๋Œ€๊ธฐํ•จ
    2. ServerSocket์˜ accept() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    3. ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์† ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด accept()๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ Socket๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    4. ์ƒ์„ฑ๋œ Socket ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์—ฌ Thread ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    - (์ƒ์„ฑ๋œ Thread ๊ฐ์ฒด์— ์˜ํ•ด์„œ ํ†ต์‹ ์ด ์ด๋ค„์ง€๊ธฐ ์‹œ์ž‘)
    1. Thread๋Š” ์ƒ์„ฑ์ž ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด์„œ ์ „๋‹ฌ๋œ Socket์œผ๋กœ๋ถ€ํ„ฐ ํ†ต์‹ ์— ํ•„์š”ํ•œ InputStream, OutputStream์„ ์–ป๋Š”๋‹ค.
    2. InputStream, OutputStream์„ ์ด์šฉํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•œ๋‹ค.
    3. ํ†ต์‹ ์— ์‚ฌ์šฉ๋œ IO์ŠคํŠธ๋ฆผ๊ณผ Socket ๊ฐ์ฒด๋ฅผ close()ํ•œ๋‹ค.

UDP ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • UDP๋Š” ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless) ํ”„๋กœํ† ์ฝœ
  • ํŒจํ‚ท์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์ˆ˜์‹  ์ธก ์ฃผ์†Œ์™€ ๋กœ์ปฌ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ํ•จ๊ป˜ ์ „์†กํ•ด์•ผํ•œ๋‹ค. ์ฆ‰, ์ „์†กํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ ์™ธ์— ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•จ๊ป˜ ์ „์†ก๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ชจ๋‘ java.net ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋Š” DatagramSocket๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด DatagramPacket๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.
  • DatagramSocket์€ DatagramPacket์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ฐ›์„ ๋•Œ ๋ชจ๋‘ ํ•„์š”ํ•˜๋‹ค.

๐Ÿ‘‰UDP๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ 64KB๋กœ ์ œํ•œ๋˜์–ด ์žˆ๊ณ  ์‹ ๋ขฐ์„ฑ์ด ๋–จ์–ด์ง€๋‚˜, ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณต์žกํ•˜์ง€ ์•Š๊ณ  ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š” ๊ณณ์— ์ ํ•ฉ

๐Ÿ‘‰TCP๋Š” ์—ฐ๊ฒฐ์„ฑ์œผ๋กœ ์ธํ•ด ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ์„ ๋งบ์œผ๋ฉด ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ์‹ ๋ขฐ์„ฑ์ด ๋†’์ง€๋งŒ, ์—ฐ๊ฒฐ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฏธ๋ฆฌ ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์•Œ๋งž๋‹ค

  • DatagramPacket ํด๋ž˜์Šค์˜ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

    • Inetaddress getAddress(): ์ด ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ธ ๊ณณ์˜ IP ์ฃผ์†Œ๋ฅผ return
    • byte[] getData(): ์ด ๊ฐ์ฒด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์˜ ๋‚ด์šฉ์„ byte ๋ฐฐ์—ด๋กœ return
    • int getLength(): ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋ฅผ return
    • int getPort(): ๋ณด๋‚ธ ๊ณณ์˜ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ return
  • DatagramSocket ํด๋ž˜์Šค์˜ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

    • void close(): ์†Œ์ผ“ ํ†ต์‹  ์ข…๋ฃŒ
    • InetAddress getInetAddress(): ํ˜„์žฌ ์†Œ์ผ“์ด ๋ฐ”์ธ๋”ฉ ๋œ ์ฃผ์†Œ return
    • void receive(DatagramPacket p): p๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ 

UDP ์—์ฝ” ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ˆœ์„œ

  1. ํŠน์ • ํฌํŠธ์—์„œ ๋™์ž‘ํ•˜๋Š” DatagramSocket ๊ฐ์ฒด ์ƒ์„ฑ
  2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ DatagramPacket์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ๋‚ด์šฉ์ด ๋น„์–ด์žˆ๋Š” DatagramPacket ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  3. ์ƒ์„ฑํ•œ DatagramPacket์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ DatagramSocket์ด ์ œ๊ณตํ•˜๋Š” receive()๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
  4. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„ ์ฝ˜์†”์— ์ถœ๋ ฅ
  5. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด DatagramPacket์„ ์ƒ์„ฑํ•œ๋‹ค.
  6. ์ƒ์„ฑํ•œ DatagramPacket์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ DatagramSocket์ด ์ œ๊ณตํ•˜๋Š” send()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก
  7. DatagramSocket์˜ close()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์—ฐ๊ฒฐ ํ•ด์ œ

UDP ์—์ฝ”์„œ๋ฒ„ ๋™์ž‘

UDP ์—์ฝ” ํด๋ผ์ด์–ธํŠธ

  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด์„œ DatagramSocket์„ ์ƒ์„ฑ
  • ์„œ๋ฒ„์™€ ๋‹ค๋ฅด๊ฒŒ, ๋™์ž‘ํ•˜๋Š” ํฌํŠธ๋Š” ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • โˆต ํด๋ผ์ด์–ธํŠธ๋Š” ์ „์†กํ•  DatagramPacket์— ์„œ๋ฒ„์˜ DatagramSocket์˜ ๋™์ž‘ ํฌํŠธ, ์„œ๋ฒ„์˜ IP, ์ „์†กํ•  ๋ฐ์ดํ„ฐ, ์ „์†กํ•  ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด ๋“ฑ์„ ์ง€์ •ํ•œ ํ›„, send()๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • UDP ์—์ฝ” ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„ ์ˆœ์„œ

    1. DatagramSocket ๊ฐ์ฒด ์ƒ์„ฑ
    2. ์ „์†กํ•  ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ ๊ธธ์ด, ์„œ๋ฒ„ IP, ์„œ๋ฒ„ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์—ฌ DatagramPacket ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    3. ์ƒ์„ฑํ•œ DatagramPacket์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์—ฌ DatagramSocket์ด ์ œ๊ณตํ•˜๋Š” send()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋ฒ„ ์ชฝ์— DatagramPacket()์„ ์ „์†ก
    4. ์„œ๋ฒ„์—์„œ ์ „์†กํ•˜๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ๋‚ด์šฉ์ด ๋น„์–ด์žˆ๋Š” ์ˆ˜์‹ ์šฉ DatagramPacket ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    5. ์ƒ์„ฑํ•œ DatagramPacket์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด DatagramSocket์ด ์ œ๊ณตํ•˜๋Š” receive()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ
    6. ์„œ๋ฒ„์—์„œ ์ˆ˜์‹ ํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅ
    7. DatagramSocket์˜ close() ํ˜ธ์ถœํ•˜์—ฌ ์—ฐ๊ฒฐ ํ•ด์ œ

Hi! I'm @Yeseul Lee
Passionate for what I love

GitHubLinkedIn