Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Computer/Computer Science

[Network] TCP์™€ UDP์˜ ๊ฐœ๋…, ๊ณตํ†ต์ , ์ฐจ์ด์ 

๊ฐ์ž ๐Ÿฅ” 2022. 9. 4. 16:00
๋ฐ˜์‘ํ˜•

์Šคํ„ฐ๋””๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น repository์— ๊ฐ€๋ฉด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

https://github.com/JulSaMo/CS-start

 

GitHub - JulSaMo/CS-start: ๐Ÿ“ CS ์ง€์‹ ๋Œ€๋ฐฑ๊ณผ โœจ

๐Ÿ“ CS ์ง€์‹ ๋Œ€๋ฐฑ๊ณผ โœจ. Contribute to JulSaMo/CS-start development by creating an account on GitHub.

github.com

 


https://mangkyu.tistory.com/15

๐ŸŸ  ์ „์†ก๊ณ„์ธต (Transport Layer)

  • TCP์™€ UDP ๋Š” OSI ํ‘œ์ค€๋ชจ๋ธ๊ณผ TCP/IP ๋ชจ๋ธ์˜ ์ „์†ก๊ณ„์ธต(transport layer)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • Endpoint ๊ฐ„ ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋‹ด๋‹นํ•˜๋Š” ๊ณ„์ธต
  • ์‹ ๋ขฐ์„ฑ: ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ , ์•ˆ์ •์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ฒŒ๋” ํ•ด์ค€๋‹ค.
  • ์ „์†ก: ํฌํŠธ ๋ฒˆํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
    • TCP์™€ UDP๋Š” ํฌํŠธ๋ฒˆํ˜ธ๋ผ๋Š” ์ˆซ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปดํ“จํ„ฐ ์•ˆ์˜ ์–ด๋–ค์„œ๋น„์Šค(Application)์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ข‹์„์ง€ ์‹๋ณ„
    • ํฌํŠธ ๋ฒˆํ˜ธ๋Š” 0~65535(16๋น„ํŠธ ๋ถ„)๊นŒ์ง€์˜ ์ˆซ์ž๋กœ ๋˜์–ด์žˆ์Œ
    • ๋ฒ”์œ„์— ๋”ฐ๋ผ์šฉ๋„๊ฐ€ ์ •ํ•ด์ง
      • 0~1023์€ ์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ (well-known port) : ์›น์„œ๋ฒ„๋‚˜ ๋ฉ”์ผ์„œ๋ฒ„๋“ฑ ์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์„œ๋น„์Šค์˜ ์š”์ฒญ์„ ๋Œ€๊ธฐํ•  ๋•Œ ์‚ฌ์šฉ
      • 1024~49151์€ ๋“ฑ๋ก๋œ ํฌํŠธ (registered port) : ์ œ์กฐ์—…์ฒด์˜ ๋…์ž์ ์ธ ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์„œ๋น„์Šค ์š”์ฒญ์„ ๋Œ€๊ธฐํ•  ๋•Œ ์‚ฌ์šฉ
      • 49512~65535๋Š” ๋™์  ํฌํŠธ (dynamic port) : ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

๐Ÿ“ ๋งŒ์•ฝ, trnasport layer๊ฐ€ ์—†๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? (์ค‘์š”์„ฑ)

  • ๋ฐ์ดํ„ฐ์˜ ์ˆœ์ฐจ ์ „์†ก์ด ์›ํ™œํ•˜๊ฒŒ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.
    • 1,2,3 ๋ฐ์ดํ„ฐ ์ „์†ก → 2,3,1 ๋กœ ์ „์†ก๋˜์–ด๋ฒ„๋ฆผ
    • ์†ก์‹ ์ž๊ฐ€ ์˜๋„ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๋˜์ง€ ์•Š์Œ
  • ์†ก์ˆ˜์‹ ์ž ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„ ์ฐจ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” Flow (ํ๋ฆ„) ๋ฌธ์ œ ๋ฐœ์ƒ
    • ์˜ˆ๋ฅผ๋“ค์–ด, ์†ก์‹ ์ž๊ฐ€ ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ƒˆ๋Š”๋ฐ, ์ˆ˜์‹ ์ž ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋„๊ฐ€ ๋Š๋ฆด ์ˆ˜ ์žˆ์„ ๊ฒƒ.
    • ์ด๋ ‡๊ฒŒ ๋˜๊ฒŒ ๋˜๋ฉด์„œ ์ˆ˜์‹ ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด '๋ฐ์ดํ„ฐ์˜ ๋ˆ„๋ฝ'์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ
  • ๋„คํŠธ์›Œํฌ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„(๋ผ์šฐํ„ฐ)๋กœ ๋ฐœ์ƒํ•˜๋Š” Congestion ๋ฌธ์ œ ๋ฐœ์ƒ
    • ์†ก์‹ ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ๋ณด๋ƒˆ๋Š”๋ฐ, ๋„คํŠธ์›Œํฌ์—์„œ ์†ก์‹ ์ด ๋˜์ง€ ์•Š๋Š๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์˜ ์†์‹ค์ด ๋ฐœ์ƒํ•จ

์ด ๋ชจ๋“  ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒฐ๊ตญ, ๋ฐ์ดํ„ฐ์˜ ์†์‹ค์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์•„๋ž˜์™€๊ฐ™์ด!
(https://www.youtube.com/watch?v=ikDVGYp5dhg)

https://www.youtube.com/watch?v=ikDVGYp5dhg

 

๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ํ†ต์‹ ๊ทœ์•ฝ์„ ์ •์˜ํ–ˆ๋Š”๋ฐ, ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ TCP , UDP์™€ ๊ฐ™์€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 


 

๐ŸŸ  TCP (Transmission Control Protocol)

https://www.youtube.com/watch?v=ikDVGYp5dhg

  • ์—ฐ๊ฒฐ ์ง€ํ–ฅ์  ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ
    • ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›๊ณ  ์‹ถ์„๋•Œ TCP ์‚ฌ์šฉ
    • TCP๋Š” ํ†ต์‹ ํ•  ์ปดํ“จํ„ฐ๋ผ๋ฆฌ '๋ณด๋ƒˆ์Œ', '๋„์ฐฉํ–ˆ์Œ'์ด๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Œ์œผ๋กœ์จ ํ†ต์‹ ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž„.
    • ์›น์ด๋‚˜ ๋ฉ”์ผ, ํŒŒ์ผ๊ณต์œ  ๋“ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋ˆ„๋ฝ์‹œํ‚ค๊ณ  ์‹ถ์ง€ ์•Š์€ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ TCP ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ์˜ ์ˆœ์ฐจ ์ „์†ก์„ ๋ณด์žฅํ•œ๋‹ค
  • ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ณ , ํ˜ผ์žก์„ ์ œ์–ดํ•œ๋‹ค. (์œ„์—์„œ ๋งํ•œ ๋ฌธ์ œ์ ๋“ค์„ ์ œ์–ดํ•ด์„œ, ๋ฐ์ดํ„ฐ์˜ ์†์‹ค์„ ๋ง‰๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค.)
  • Error detection : check sum ํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ธ๊ทธ๋จผํŠธ ๋‹จ์œ„๋กœ ์ „์†ก๊ณ„์ธต ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋™์ž‘ํ•œ๋‹ค.
    • ์ „์†ก๊ณ„์ธต ์œ„์— ์žˆ๋Š” layer์—์„œ ๋‚ด๋ ค์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ์„œ
    • ๊ฐ๊ฐ TCP header๋ฅผ ๋ถ™์—ฌ์„œ ๋™์ž‘! → ์ด ํ•œ ๋ฉ์–ด๋ฆฌ๊ฐ€ segment

https://www.youtube.com/watch?v=ikDVGYp5dhg

 

๐Ÿ”ธ TCP์˜ ๋‹จ์ 

  • ๋ฐ์ดํ„ฐ๋กœ ๋ณด๋‚ด๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์—ฐ๊ฒฐ์ด ํ˜•์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.  (์—ฐ๊ฒฐ์ง€ํ–ฅ)
  • 1:1ํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค
  • UDP๋ณด๋‹ค ๋ฐ์ดํ„ฐ ์ „์†ก ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. 
    • ๋งค๋ฒˆ connection(3way handshake)์„ ์—ฐ๊ฒฐํ•ด์„œ ์‹œ๊ฐ„์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
    • ํŒจํ‚ท์„ ์กฐ๊ธˆ๋งŒ ์†์‹คํ•ด๋„ ์žฌ์ „์†ก์„ ๋‹ค์‹œ ํ•ด์•ผํ•œ๋‹ค.  (์œ„ ์‚ฌ์ง„์—์„œ๋„ ๋ณด๋ฉด, ACK๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์žฌ์ „์†กํ•˜๋Š” ๊ณผ์ •)

 

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

 

๐ŸŸ  UDP (User Datagram Protocol)

  • TCP๋ณด๋‹ค ์‹ ๋ขฐ์„ฑ์ด ๋–จ์–ด์ง€์ง€๋งŒ, ์ „์†ก์†๋„๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅธ ํ”„๋กœํ† ์ฝœ
    • ์ˆœ์ฐจ์ „์†ก x, ํ๋ฆ„์ œ์–ด x, ํ˜ผ์žก์ œ์–ด x 
    • Connectionless : TCP์™€ ๋‹ค๋ฅด๊ฒŒ Connection์„ ๋Š์€ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.
  • ์ˆœ์ฐจ์ „์†ก x, ํ๋ฆ„์ œ์–ด x, ํ˜ผ์žก์ œ์–ด x ํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ check sum ํ•ด์„œ ์—๋Ÿฌ๋งŒ ๊ฒ€์ถœํ•ด์ค€๋‹ค. 
  • ๋น„๊ต์  ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์ด ์ค‘์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (ex.์˜์ƒ์ŠคํŠธ๋ฆฌ๋ฐ ๋“ฑ)
  • ํŒจํ‚ท ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ TCP์™€ ๋‹ฌ๋ฆฌ datagram ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 
      • datagram์ด๋ž€ ? ๋…๋ฆฝ์ ์ธ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ํŒจํ‚ท ๋‹จ์œ„
    • Data๋ฅผ ์ชผ๊ฐœ์ง€ ์•Š๊ณ  UDP ํ—ค๋”๋ฅผ ๋ถ™์—ฌ์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒŒ User Datagram์ด๋‹ค. 
      • (TCP์™€์˜ ์ฐจ์ด์ ) ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— application ๋‹จ์—์„œ data๋ฅผ ์ชผ๊ฐœ์ฃผ๋Š” ์ž‘์—…์ด ํ•œ ๋ฒˆ ๋” ํ•„์š”ํ•˜๋‹ค. 
    • ๊ถ๊ธˆ์ฆ) ๊ทธ๋ž˜์„œ ์ผ์ผํžˆ ํŒจํ‚ท ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š”๊ฑด๊ฐ€??  ๋งž๋Š”๋“ฏ!!?!?

https://www.youtube.com/watch?v=ikDVGYp5dhg

๐Ÿ”ธ UDP์˜ ๋‹จ์ 

  • ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์ด ์—†๋‹ค.
  • ์˜๋ฏธ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ์ผํžˆ ํŒจํ‚ท์„ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. (์œ„ ์‚ฌ์ง„!!)

 


 

โœ… ๋ฉด์ ‘์„ ์œ„ํ•œ ์ค€๋น„! TCP์™€ UDP์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์  ์‚ดํŽด๋ณด๊ธฐ

 

 

https://coding-factory.tistory.com/614#recentComments

 


 

๐Ÿ“– Reference

https://www.youtube.com/watch?v=ikDVGYp5dhg 

https://coding-factory.tistory.com/614#recentComments

https://mangkyu.tistory.com/15

https://github.com/JulSaMo/CS-start/pull/38

 

[Add] tcpVsUdp ๋‚ด์šฉ ์ •๋ฆฌ by SeonJeon · Pull Request #38 · JulSaMo/CS-start

๐ŸŸฃ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ TCP์™€ UDP๋ฅผ ๋น„๊ตํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๐ŸŸฃ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ƒ๊ธด ์˜๋ฌธ์  TCP์™€ UDP ์ด์™ธ์— ํ†ต์‹ ๊ณ„์ธต์ด ๋” ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. Paritiy Bit์™€ ๊ฐ™์ด ํ†ต์‹  ์‹œ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ฑ๋„ ์žˆ์—ˆ๋Š”๋ฐ

github.com

 

๋ฐ˜์‘ํ˜•