๐ŸŒ UDP๋Š” TCP์— ๋น„ํ•ด ์–ผ๋งˆ๋‚˜ ๋น ๋ฅผ๊นŒ? - YangJJune/U-Compass GitHub Wiki

์‹คํ—˜ ๊ฐœ์š”

TCP๋ž‘ UDP, UDP๊ฐ€ ๋” ๋น ๋ฅด๋‹ค ๋น„์—ฐ๊ฒฐ์„ฑ, ์‹ ๋ขฐ์„ฑ ๋ณด์žฅ X ๋“ฑ ์™œ ๋น ๋ฅธ์ง€๋„ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๊ทธ๋™์•ˆ ๋“ค์—ˆ๋˜ ์˜๋ฌธ์€ ๋„๋Œ€์ฒด ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๋‹ค๋Š”๊ฑด๋ฐ? ์˜€๋‹ค.

 

์‹คํ—˜ ๋‚ด์šฉ

UDP๊ฐ€ TCP ๋ณด๋‹ค ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ ์ง€ ์•Œ์•„๋ณด์ž. ๋˜ํ•œ ์ด์— ๋”ฐ๋ฅธ defect๋Š” ์—†๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 

ํ™˜๊ฒฝ ์„ค์ •

โ€ป ์ตœ๋Œ€ํ•œ ๋™์ผํ•œ RTT๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. ์ด๋ฅผ ๊ณ ๋ คํ•˜์ž

โ€ป RTT : Round Trip Time, ์ธํ„ฐ๋„ท ์ƒ์—์„œ ์ถœ๋ฐœ์ง€์—์„œ ๋ชฉ์ ์ง€๋กœ ๊ฐ€๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„

  • ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ (data send ์ˆ˜)๋ฅผ ๋ณด๋‚ด๋ณด์ž

  • ์ปค๋‹ค๋ž€ ์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋ณด์ž (์–ด์ฐจํ”ผ ํŒจํ‚ท์„ ์ชผ๊ฐœ๊ณ  ์˜๋Š” ๊ฒŒ ๋˜‘๊ฐ™์•„์„œ ์œ„์˜ ์‹คํ—˜๊ณผ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จ, ํŠน์ด์ ์ด ์žˆ๋‹ค๋ฉด TCP๋Š” ํŒจํ‚ท์„ ์•Œ์•„์„œ ์ชผ๊ฐœ์ฃผ๊ณ  UDP๋Š” ํŒจํ‚ท์„ ์ง์ ‘ ์ชผ๊ฐœ์•ผํ•จ)

    โ†’ ์ด๋•Œ ๊ฐ๊ฐ์˜ ์ƒํ™ฉ์—์„œ ์†๋„(์†Œ์š” ์‹œ๊ฐ„)์™€ ๋ฐฐํ„ฐ๋ฆฌ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•˜์ž

 

์‹คํ—˜ ๋ชจ๋ธ

1:1 ํ†ต์‹ ์˜ ๊ฒฝ์šฐ, server์™€ client ๊ฐ„์— ์†Œ์ผ“์„ ์—ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

 

ํŠน์ด์‚ฌํ•ญ - localhost์—์„œ๋Š” ์™œ ์ฐจ์ด๊ฐ€ ์•ˆ ๋‚ ๊นŒ?

** 1. ์•ฑ์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก** - ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ http://127.0.0.1๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด์š”. - ์ด ์š”์ฒญ์€ TCP/IP ์Šคํƒ์„ ํ†ตํ•ด ํŒจํ‚ท์œผ๋กœ ๋‚˜๊ฐ€๋ ค๊ณ  ํ•˜๊ฒ ์ฃ ?

** 2. TCP/IP ์Šคํƒ์—์„œ IP์ฃผ์†Œ๋ฅผ ๋ณด๊ณ  ๋ฃจํ”„๋ฐฑ NI๋กœ ๊ฐ‘๋‹ˆ๋‹ค.** - ๋ชฉ์ ์ง€ ์ฃผ์†Œ 127.0.0.1์„ ํ™•์ธํ–ˆ์œผ๋‹ˆ,์ด์ œ ํŒจํ‚ท์„ ์™ธ๋ถ€๋กœ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ๋กœ์ปฌ๋กœ ๋‹ค์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

** 3. ๋กœ์ปฌ๋กœ ํŒจํ‚ท ์ „๋‹ฌ** - ํŒจํ‚ท์€ ๋‹ค์‹œ TCP/IP ์Šคํƒ ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌ๋˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ํฌํŠธ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

** 4. ์„œ๋ฒ„ ์•ฑ ์š”์ฒญ ์ˆ˜์‹ ** - ๋กœ์ปฌ ์„œ๋ฒ„ ์•ฑ์€ ์ด ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ , ์ ์ ˆํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ๋‹ค์‹œ ๋ฃจํ”„๋ฐฑ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. - ์ด ์•ฑ์€ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  node.js ์•ฑ์ด๋‚˜ ๊ธฐํƒ€ ์•ฑ๋“ค์ด ๋˜๊ฒ ์ฃ ?

** 5. ์‘๋‹ต ํŒจํ‚ท์˜ ๋ฃจํ”„๋ฐฑ ๊ฒฝ๋กœ** - ์‘๋‹ต ํŒจํ‚ท๋„ ๋™์ผํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ ๊ฒฐ๊ตญ, ์ตœ์ข…์ ์œผ๋กœ ์š”์ฒญํ–ˆ๋˜ ์•ฑ์ธ ๋กœ์ปฌ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด localhost๊ฐ€ ๊ฐ์ง€๋˜๋Š” ์ˆœ๊ฐ„ ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€์ง€ ์•Š๊ณ  ๋‚ด๋ถ€์—์„œ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๋‹ค ์ถœ์ฒ˜ : https://velog.io/@480/localhost-%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC

 

์‹คํ—˜ ๊ฒฐ๊ณผ

๊ฐ๊ฐ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์ด 3ํšŒ์”ฉ ์‹คํ–‰ํ•˜๊ณ  ํ‰๊ท ์œผ๋กœ ํ‘œํ˜„ (ํฐ ์ฐจ์ด ์—†์Œ ํ™•์ธ)

โ€ป ๋‚˜์ค‘์— ํ•˜๋‹จ์— ๊ธฐ์ˆ ํ•˜๊ฒ ์ง€๋งŒ UDP์˜ ๊ฒฝ์šฐ Timeout์„ 500ms๋กœ ๊ฑธ์Œ

localhost โ†’ localhost ์ƒํ™ฉ

100,000ํšŒ TCP 42778ms UDP 41806ms   1,000,000ํšŒ TCP 394727ms UDP 406091ms

์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ธฐ์— ์ฆ๊ฐ€ํญ๋„ ๊ต‰์žฅํžˆ linearํ•˜๋ฉฐ, ์˜คํžˆ๋ ค TCP๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ์ธก์ •๋˜๊ธฐ๋„ ํ•œ๋‹ค. ์œ ์˜๋ฏธํ•œ ์ฐจ์ด๋Š” ์—†๋‹ค๊ณ  ๋ณด์ธ๋‹ค

๋กœ์ปฌ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ โ†’ ๋กœ์ปฌ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ (๋ฌด์„ )

100ํšŒ TCP 1522ms UDP 1565ms   1,000ํšŒ TCP 18205ms UDP 9584ms   10,000ํšŒ TCP 163663ms UDP 21728ms   100,000ํšŒ TCP 1801237ms UDP 90765ms โ‡’ ๋ฌด๋ ค 20๋ฐฐ ์ฐจ์ด

๋ชจ๋ฐ”์ผ โ†’ ์„œ๋ฒ„ (์‹ค์งˆ ๋ชจ๋ธ)

100 ํšŒ TCP 24680ms UDP 14618ms   1,000 ํšŒ TCP 240775ms UDP 158400ms   10,000 ํšŒ TCP 2457118ms UDP 754998ms

ํŒจํ‚ท ํฌ๊ธฐ์˜ ์ฐจ์ด

TCP ํŒจํ‚ท 442B UDP ํŒจํ‚ท 321B

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

1. ๋ฉ”์†Œ๋“œ ์ดํ•ด ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์œ ์‚ฌ ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ

A. TCP์˜ ๊ฒฝ์šฐ

  • socket.accept()์˜ ๊ฒฝ์šฐ await์™€ ๋™์ผํ•˜๊ฒŒ connect()๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค
  • ์ด๋ฅผ ์‹ค์ˆ˜๋กœ ๋ฌดํ•œ๋ฃจํ”„ ์•ˆ์— ๋‘์–ด ๋งค ํ†ต์‹ ๋งˆ๋‹ค ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ ์ƒ๊น€

โ€ป ์‹ค์ œ๋กœ ์—ฌ๋Ÿฌ ์†Œ์ผ“ ํ†ต์‹ ์„ ์—ด์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ thread๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

B. UDP์˜ ๊ฒฝ์šฐ

  • ์†์‹ค์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ์ œ๋Œ€๋กœ ๋ณด๋‚ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ์ƒ๋Œ€๋ฐฉ ์‘๋‹ต์„ ๋ฆฌ์Šจํ•˜๋Š” ์ƒํ™ฉ์ด ๋˜์–ด๋ฒ„๋ฆผ.
  • UDP์˜ ๋‹จ์ ์ธ ์†์‹ค ๋ฐœ์ƒ์‹œ ์กฐ์น˜๋ฅผ ํ•ด์คŒ(TIMEOUT ์ฒ˜๋ฆฌ)

2. ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ๋กœ์ปฌํ†ต์‹ ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ž์ฒด ๋ผ์šฐํ„ฐ์˜ ์‚ฌ์šฉ ๋ฐ ๊ณ ์œ  IP๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • ์ธ์Šคํ„ด์Šค๋Š” ๋ผ์šฐํ„ฐ์— ์˜ํ•ด ๊ฒฉ๋ฆฌ๋˜๋ฉฐ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์—์„œ ์„œ๋กœ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๋‹ค.

๊ด€๋ จ์ž๋ฃŒ : https://developer.android.com/studio/run/emulator-networking?hl=ko  

3. Broken pipeline Error

  • TCP ํ†ต์‹ ์ด ๋๋‚ฌ๋Š”๋ฐ, ๋˜๋Š” ์–ด๋– ํ•œ ์‚ฌ์œ ๋กœ ์†Œ์ผ“์ด ๋‹ซํ˜”๋Š”๋ฐ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค ๋ณผ ์ˆ˜ ์žˆ์Œ

    ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ

    1. ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„๊ฐ€ ์†Œ์ผ“์„ ๋‹ซ์•˜๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ ๊ฒฝ์šฐ
    2. ์„œ๋ฒ„์˜ ํ”„๋กœ์„ธ์Šค์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ ๊ฒฝ์šฐ
    3. etc..

4. ํฌํŠธํฌ์›Œ๋”ฉ ์ด์Šˆ

  1. ์ง‘ ๊ณต์œ ๊ธฐ ํ™˜๊ฒฝ์ด ๋‹ค์†Œ ๋ณต์žกํ•œ๋ฐ, ๋ฌด์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค์™€์˜ ํฌํŠธํฌ์›Œ๋”ฉ์— ์ด์Šˆ๊ฐ€ ์žˆ์–ด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ์Œ
  2. ์ด๊ด„ ํ—ˆ๋ธŒ, ๋ฐฉ ๋‚ด์˜ Wi-Fi ๊ณต์œ ๊ธฐ ํฌํŠธํฌ์›Œ๋”ฉ ์™„๋ฃŒํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค

์œ ์‚ฌํ•œ ์ƒํ™ฉ์—์„œ ๊ผญ ๋ณธ์ธ์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์ž˜ ํŒŒ์•…ํ•˜๊ณ  ํ•ด๊ฒฐํ•ด์•ผ ์˜ค๋ž˜ ๋ง‰ํžˆ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

๊ฒฐ๋ก 

์ „์†ก์†๋„๊ฐ€ ์ ์  ๋А๋ ค์งˆ์ˆ˜๋ก, RTT๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜๋ก TCP์™€ UDP ๊ฐ„์˜ ์†๋„ ์ฐจ์ด๊ฐ€ ์ ์  ๋ฒŒ์–ด์ง„๋‹ค. ์ด ์ฐจ์ด๋Š” linearํ•˜์ง€ ์•Š์œผ๋ฉฐ exponential ํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

์ถ”๊ฐ€์‚ฌํ•ญ

  • ๋ฐฐํ„ฐ๋ฆฌ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์ ๊ฒ€๋ฒ•์— ๋Œ€ํ•œ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (Android Studio Profiler