๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

์†Œ์ผ“ ํ†ต์‹ (Socket)_TCP & UDP ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ/About Computer

์†Œ์ผ“ ํ†ต์‹ (Socket)_TCP & UDP

์ง•์ง•์•ŒํŒŒ์นด 2022. 8. 29. 01:36
728x90
๋ฐ˜์‘ํ˜•

220829 ์ž‘์„ฑ

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” wonos, recipes4dev ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-) >

https://wonos.tistory.com/388

 

[JAVA] ์†Œ์ผ“ ํ†ต์‹ ์ด๋ž€? [์ž๋ฐ” ์ฝ”๋“œ ํฌํ•จ]

์†Œ์ผ“ ์ด๋ž€? ์†Œ์ผ“ → ํ”„๋กœํ† ์ฝœ, ip์ฃผ์†Œ, ํฌํŠธ๋„˜๋ฒ„๋กœ ์ •์˜ ๋จ. ๋–จ์–ด์ ธ ์žˆ๋Š” ๋‘ ํ˜ธ์ŠคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋„๊ตฌ๋กœ์จ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• . ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ฒด๋กœ ์†Œ์ผ“์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ†ต๋กœ๊ฐ€ ๋งŒ

wonos.tistory.com

https://recipes4dev.tistory.com/153

 

์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ. (Socket Programming)

1. ์†Œ์ผ“(Socket) ๋งŒ์•ฝ ๋„คํŠธ์›Œํฌ์™€ ๊ด€๋ จ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, ์‚ฌ์šฉ์ž(User)์˜ ๊ด€์ ์ด ์•„๋‹Œ, ๊ฐœ๋ฐœ์ž(Developer)์˜ ๊ด€์ ์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ๋‹ค๋ค„๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด, "์†Œ์ผ“(Socket)"์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์•„์ฃผ ๋‚ฏ์„ค

recipes4dev.tistory.com

 

 

 

๐Ÿ˜Ž 1. ์†Œ์ผ“ (Socket)

  • ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์—ฐ๊ฒฐ๋ถ€
  • ํ”„๋กœํ† ์ฝœ, ip์ฃผ์†Œ, ํฌํŠธ๋„˜๋ฒ„
  • ๋–จ์–ด์ ธ ์žˆ๋Š” ๋‘ ํ˜ธ์ŠคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋„๊ตฌ = ์ธํ„ฐํŽ˜์ด์Šค
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ฒด๋กœ ์†Œ์ผ“์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ†ต๋กœ๊ฐ€ ๋งŒ๋“ค์–ด์ง
  • ์†Œ์ผ“์˜ ์—ญํ• ์— ๋”ฐ๋ผ client ์†Œ์ผ“, server ์†Œ์ผ“์œผ๋กœ ๊ตฌ๋ถ„๋จ

 

๐Ÿ˜Ž 2. http์™€ socket์˜ ์ฐจ์ด์ 

โ–ถ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  Http ํ†ต์‹ 

  • Http ํ†ต์‹ ์€ Client์˜ ์š”์ฒญ(Request)์ด ์žˆ์„ ๋•Œ๋งŒ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต(Response)ํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ „์†กํ•˜๊ณ  ๊ณง๋ฐ”๋กœ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒ
  • Client๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ์—๋งŒ Server๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ 
  • Server๊ฐ€ Client์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์—†์Œ

โ–ถ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  Socket ํ†ต์‹ 

https://recipes4dev.tistory.com/153

  • Server์™€ Client๊ฐ€ ํŠน์ • Port๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ 
  • Streaming ์ค‘๊ณ„๋‚˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ๊ฒŒ์ž„ ๋“ฑ๊ณผ ๊ฐ™์ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

 

๐Ÿ˜Ž 3. ์†Œ์ผ“์˜ ๊ตฌ์กฐ

: ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ TCP/IP๋ฅผ ์ด์šฉํ•˜๋Š” ์ฐฝ๊ตฌ ์—ญํ• 

: ๋‘ ํ”„๋กœ๊ทธ๋žจ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์„œ๋กœ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์–‘์ชฝ์—์„œ ์ƒ์„ฑ๋˜๋Š” ๋งํฌ์˜ ๋‹จ์ž

: ๋‘ ์†Œ์ผ“์ด ์—ฐ๊ฒฐ๋˜๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

์†Œ์ผ“ API ์‹คํ–‰ ํ๋ฆ„

โ–ถ ์„œ๋ฒ„

  • ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“์˜ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋Œ€๊ธฐํ•˜๊ณ , ์—ฐ๊ฒฐ์š”์ฒญ์ด ์˜ค๋ฉด ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“์„ ์ƒ์„ฑํ•˜์—ฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
  1. socket() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์ผ“ ์ƒ์„ฑ
  2. bind() ํ•จ์ˆ˜๋กœ ip์™€ port ๋ฒˆํ˜ธ ์„ค์ •
  3. listen() ํ•จ์ˆ˜๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘๊ทผ ์š”์ฒญ์— ์ˆ˜์‹  ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“ค์–ด ๋ช‡ ๊ฐœ์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋Œ€๊ธฐ ์‹œํ‚ฌ์ง€ ๊ฒฐ์ •
  4. accept() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€์˜ ์—ฐ๊ฒฐ์„ ๊ธฐ๋‹ค๋ฆผ

โ–ถ ํด๋ผ์ด์–ธํŠธ

  • ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“
  1. socket() ํ•จ์ˆ˜๋กœ ๊ฐ€์žฅ ๋จผ์ € ์†Œ์ผ“์„ ์—ฐ๋‹ค
  2. connect() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํ†ต์‹  ํ•  ์„œ๋ฒ„์˜ ip์™€ port ๋ฒˆํ˜ธ์— ํ†ต์‹ ์„ ์‹œ๋„
  3. ํ†ต์‹  ์‹œ๋„์‹œ, ์„œ๋ฒ„๊ฐ€ accept() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ socket descriptor๋ฅผ ๋ฐ˜ํ™˜
  4. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ read(), write()๋ฅผ ํ•˜๋ฉฐ ํ†ต์‹  (๋ฐ˜๋ณต)
  5. ํ†ต์‹ ์ด ๋๋‚˜๋ฉด close()๋กœ ์ ‘์†์„ ๋Š๋Š”๋‹ค

 

๐Ÿ˜Ž 4. ์†Œ์ผ“ ์ข…๋ฅ˜

โ–ถ TCP (Transmissoin Control Protocol) ์ŠคํŠธ๋ฆผ 

  • ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ์ „์†ก (์—ฐ๊ฒฐ ์ง€ํ–ฅ์„ฑ)
  • ์˜ค๋ฅ˜ ์ˆ˜์ •, ์ „์†ก ์ฒ˜๋ฆฌ, ํ๋ฆ„์ œ์–ด ๋ณด์žฅ
    • ํ๋ฆ„์ œ์–ด, ๋ณด๋‚ด๋Š” ์ธก๊ณผ ๋ฐ›๋Š” ์ธก์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์†๋„ ์ฐจ์ด๋ฅผ ์กฐ์ ˆํ•ด์ฃผ๋Š” ๊ฒƒ
    • ํ˜ผ์žก์ œ์–ด, ๋„คํŠธ์›Œํฌ ๋‚ด์˜ ํŒจํ‚ท ์ˆ˜๊ฐ€ ๋„˜์น˜๊ฒŒ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ
  • ์†ก์‹ ๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹  → ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ
  • ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์— ์ ํ•ฉ
  • ex. ์›น HTTP ํ†ต์‹ , ์ด๋ฉ”์ผ, ํŒŒ์ผ์ „์†ก

https://badayak.com/entry/tcpip%EC%99%80-udpip-%ED%86%B5%EC%8B%A0-%EC%B0%A8%EC%9D%B4%EC%A0%90

tcp๊ฐ€ ํ๋ฆ„ ์ œ์–ด๋ฅผ ๊ณ„์†ํ•˜๋ฉด์„œ ์—ฐ๊ฒฐ์„ ์œ ์ง€ + ๋” ์ด์ƒ ์ฃผ๊ณ ๋ฐ›์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ์—ฐ๊ฒฐ ๋Š๊ธฐ => tcp/ip ์—ฐ๊ฒฐ ์ง€ํ–ฅ์„ฑ ํ”„๋กœํ† ์ฝœ

 

โ–ถ UDP (user datagram protocol) ๋ฐ์ดํ„ฐ๊ทธ๋žจ

  • ๋น„์—ฐ๊ฒฐํ˜• ์†Œ์ผ“
  • ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ์ œํ•œ์ด ์žˆ์Œ
  • ํ™•์‹คํ•˜๊ฒŒ ์ „๋‹ฌ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์Œ → ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค ๋˜์–ด๋„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์•ˆ๋จ
  • ์‹ค์‹œ๊ฐ„ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ ์‚ฌ์šฉ ex. ์ „ํ™”

https://badayak.com/entry/tcpip%EC%99%80-udpip-%ED%86%B5%EC%8B%A0-%EC%B0%A8%EC%9D%B4%EC%A0%90

ํ๋ฆ„ ์ œ์–ด๊ฐ€ ์—†์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋ฉด ์ˆ˜์‹ ํ•˜๋Š” ์ชฝ์—์„œ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌ => ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ ํŒจํ‚ท ๊ทธ๋Œ€๋กœ ์ƒ๋Œ€๋ฐฉ์ด ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ

 

โ–ถ TCP & UDP 

 

๊ฐ„ํŽธํ•œ ํ†ต์‹ ์€ udp/ip๊ฐ€ ํŽธํ•˜๊ณ  ๋น ๋ฆ„! ๋ฐ˜๋“œ์‹œ ์ „์†กํ•ด์•ผํ•˜๊ฑฐ๋‚˜, ์ˆœ์„œ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” tcp/ip๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „!

 

728x90
๋ฐ˜์‘ํ˜•
Comments