ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

CS/Network

[๋„คํŠธ์›Œํฌ] TCP์™€ UDP

๊ฐœ๋ฐœ๊ฐœ๊ตด๐Ÿธ 2022. 6. 6. 17:33

TCP์™€ UDP๋Š” ์ „์†ก ๊ณ„์ธต์—์„œ ํ†ต์‹  ํ™œ์„ฑํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

  • TCP : ์‹ ๋ขฐ์„ฑ, ์—ฐ๊ฒฐ ์ง€ํ–ฅ์ 
  • UDP : ๋น„์‹ ๋ขฐ์„ฑ, ๋น„์—ฐ๊ฒฐ์„ฑ, ์‹ค์‹œ๊ฐ„

 

ํ”„๋กœํ† ์ฝœ์ด๋ž€?

ํ†ต์‹  ๊ทœ์•ฝ์œผ๋กœ ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์—์„œ, ๋˜๋Š” ์ปดํ“จํ„ฐ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ์˜ ๊ตํ™˜ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๊ทœ์น™ ์ฒด๊ณ„์ž…๋‹ˆ๋‹ค.

 

 

TCP๋ž€?

Transmission Control Protocal์˜ ์•ฝ์ž๋กœ ์ง์—ญํ•ด๋ณด๋ฉด ์ „์†ก ์ œ์–ด ํ”„๋กœํ† ์ฝœ๋กœ,

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

 

์ผ๋ฐ˜์ ์œผ๋กœ TCP์™€ IP๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ

- IP:  ๋ฐ์ดํ„ฐ์˜ ๋ฐฐ๋‹ฌ์„ ์ฒ˜๋ฆฌ

- TCP: ํŒจํ‚ท์„ ์ถ”์  ๋ฐ ๊ด€๋ฆฌ

 

** ํŒจํ‚ท์ด๋ž€?

์ธํ„ฐ๋„ท ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๊ฒฝ๋กœ ๋ฐฐ์ •(๋ผ์šฐํŒ…)์„ ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์กฐ๊ฐ์ธ ํŒจํ‚ท์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋Š” ํŒจํ‚ท ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ™์€ ๋ชฉ์ ์ง€(IP๊ณ„์ธต)์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

 

์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅ

- TCP๋Š” ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ์—ฐ๊ฒฐํ˜• ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์ธํ„ฐ๋„ท ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

- ํ๋ฆ„ ์ œ์–ด, ํ˜ผ์žก ์ œ์–ด, ์˜ค๋ฅ˜ ์ œ์–ด๋ฅผ ํ†ตํ•ด ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

- ์ด๋Ÿฌํ•œ ๊ณผ์ •๋•Œ๋ฌธ์— UDP ๋ณด๋‹ค ์ „์†ก ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

TCP ํ†ต์‹  ๊ณผ์ •

- ์‚ฌ์ „์— 3-way handshake๋ผ๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ํ†ต์‹ ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

- 4-way handshake๊ณผ์ •์„ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ํ•ด์ œ(๊ฐ€์ƒ ํšŒ์„  ๋ฐฉ์‹)ํ•ฉ๋‹ˆ๋‹ค.

- TCP๋Š” ํŒจํ‚ท์„ ์ถ”์ ํ•˜๋ฉฐ, ๋‚˜๋ˆ„์–ด ๋ณด๋‚ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์ง€์—์„œ ๋ฐ›๊ณ  ์žฌ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

** TCP์˜ ๊ฐ€์ƒ ํšŒ์„  ๋ฐฉ์‹

์†ก์‹ ์ธก๊ณผ ์ˆ˜์‹ ์ธก์„ ์—ฐ๊ฒฐํ•˜์—ฌ ํŒจํ‚ท์„ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ๋ฆฌ์  ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์ •ํ•œ๋‹ค๋Š” ๋œป

 

ํ๋ฆ„ ์ œ์–ด

์†ก์‹ ์ธก๊ณผ ์ˆ˜์‹ ์ธก ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„ ์ฐจ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ์†ก์‹ ์ธก ์ „์†ก๋Ÿ‰>์ˆ˜์‹ ์ธก ์ „์†ก๋Ÿ‰ ์ด๋ผ๋ฉด, ์ „์†ก๋œ ํŒจํ‚ท์€ ์ˆ˜์‹ ์ธก ํ๋ฅผ ๋„˜์–ด์„œ ์†์‹ค๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†ก์‹ ์ธก ํŒจํ‚ท ์ „์†ก๋Ÿ‰์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

 

1. Stop and Wait

- ๋งค๋ฒˆ ์ „์†กํ•œ ํŒจํ‚ท์— ๋Œ€ํ•œ ํ™•์ธ ์‘๋‹ต์„ ๋ฐ›์•„์•ผ ๋‹ค์Œ ํŒจํ‚ท์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Œ

- ๋น„ํšจ์œจ์ ์ธ ๋‹จ์ , Give&Take

 

2. Sliding Window

- Stop and Wait์˜ ๋น„ํšจ์œจ์„ฑ ๊ฐœ์„ 

- ์ˆ˜์‹ ์ธก์—์„œ ์„ค์ •ํ•œ ์œˆ๋„์šฐ ํฌ๊ธฐ๋งŒํผ ์†ก์‹ ์ธก์—์„œ ํ™•์ธ ์‘๋‹ต ์—†์ด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†กํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋™์ ์œผ๋กœ ์กฐ์ ˆ

 

** ์œˆ๋„์šฐ๋ž€?

์†ก์‹ , ์ˆ˜์‹  ์Šคํ…Œ์ด์…˜ ์–‘์ชฝ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฒ„ํผ์˜ ํฌ๊ธฐ

 

์˜ค๋ฅ˜ ์ œ์–ด

์˜ค๋ฅ˜ ๊ฒ€์ถœ๊ณผ ์žฌ์ „์†ก์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

ARQ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ํ”„๋ ˆ์ž„์ด ์†์ƒ๋˜์—ˆ๊ฑฐ๋‚˜ ์†์‹ค๋˜์—ˆ์„ ๊ฒฝ์šฐ, ์žฌ์ „์†ก์„ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค. 

 

1. Stop and Wait ARQ

- Stop and Wait์˜ ์˜ค๋ฅ˜์ œ์–ด

 

2. Go-Back-n ARQ

- Sliding Window์˜ ์˜ค๋ฅ˜์ œ์–ด

 

ํ˜ผ์žก ์ œ์–ด

์†ก์‹ ์ธก์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ๊ณผ ๋„คํŠธ์›Œํฌ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ํ˜ผ์žก์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์†ก์‹ ์ธก์—์„œ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์ „์†ก ์†๋„๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

 

1. AIMD

- ์ฒ˜์Œ์— ํŒจํ‚ท ํ•˜๋‚˜๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•ด ์ „์†กํ•œ ํŒจํ‚ท์ด ๋ฌธ์ œ๊ฐ€ ์—†์ด ๋„์ฐฉํ•œ๋‹ค๋ฉด Window Size๋ฅผ 1์”ฉ ์ฆ๊ฐ€

- ํŒจํ‚ท ์ „์†ก์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜ TIME_OUT์ด ๋ฐœ์ƒํ•˜๋ฉด Window Size๋ฅผ ์ ˆ๋ฐ˜ ๊ฐ์†Œ

 

2. Slow Start

- AIMD๊ฐ€ ์ „์†ก ์†๋„๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋ฐ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ๋‹จ์ ์„ ๊ทน๋ณต

- AIMD์ฒ˜๋Ÿผ ์ฒ˜์Œ์— ํŒจํ‚ท์„ ํ•˜๋‚˜์”ฉ ๋ณด๋‚ด๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ํŒจํ‚ท์ด ๋ฌธ์ œ์—†์ด ๋„์ฐฉํ•˜๋ฉด ๊ฐ๊ฐ์˜ ACK ํŒจํ‚ท๋งˆ๋‹ค Window Size๋ฅผ 1์”ฉ ์ฆ๊ฐ€

- ํ•œ ์ฃผ๊ธฐ๊ฐ€ ์ง€๋‚˜๋ฉด Window Size๋Š” 2๋ฐฐ๊ฐ€ ๋จ

- ํ˜ผ์žก์ด ๋ฐœ์ƒํ•˜๋ฉด Window Size๋ฅผ 1๋กœ ๋–จ์–ด๋œจ๋ฆผ

 

** ๋„คํŠธ์›Œํฌ ํ˜ผ์žก

ํ•œ ๋ผ์šฐํ„ฐ์—๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ ค ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ํ˜ธ์ŠคํŠธ๋“ค์˜ ์žฌ์ „์†ก์˜ ํ˜ผ์žก์œผ๋กœ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋‚˜ ๋ฐ์ดํ„ฐ ์†์‹ค์ด ๋ฐœ์ƒ

 

TCP ์‚ฌ์šฉ ์˜ˆ์‹œ

- ์›น HTTP ํ†ต์‹ , ์ด๋ฉ”์ผ, ํŒŒ์ผ ์ „์†ก

 

 

UDP๋ž€?

User Datagram Protocal์˜ ์•ฝ์ž๋กœ ์ง์—ญํ•ด๋ณด๋ฉด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ”„๋กœํ† ์ฝœ๋กœ,

๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

 

** ๋ฐ์ดํ„ฐ๊ทธ๋žจ๋ž€?

๋…๋ฆฝ์ ์ธ ๊ด€๊ณ„๋ฅผ ์ง€๋‹ˆ๋Š” ํŒจํ‚ท์ด๋ผ๋Š” ๋œป

 

๋น„์—ฐ๊ฒฐํ˜• ํ”„๋กœํ† ์ฝœ

- UDP๋Š” ๋น„์—ฐ๊ฒฐํ˜• ํ”„๋กœํ† ์ฝœ๋กœ ์‚ฌ์ „์— ์—ฐ๊ฒฐ ์„ค์ • ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

(์—ฐ๊ฒฐ์„ ์œ„ํ•ด ํ• ๋‹น๋˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋Š” ๋œป)

- ํ•˜๋‚˜์˜ ๋ฉ”์„ธ์ง€์—์„œ ๋ถ„ํ• ๋œ ๊ฐ๊ฐ์˜ ํŒจํ‚ท์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ „์†ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

- ์†ก์‹ ์ธก์—์„œ ์ „์†กํ•œ ํŒจํ‚ท์˜ ์ˆœ์„œ์™€ ์ˆ˜์‹ ์ธก์—์„œ ๋„์ฐฉํ•œ ํŒจํ‚ท์˜ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. (์ˆœ์„œ๋ถ€์—ฌX, ์žฌ์กฐ๋ฆฝX)

- ํŒจํ‚ท์— ์ˆœ์„œ ๋ถ€์—ฌ๋‚˜ ์žฌ์กฐ๋ฆฝ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์†์„ฑ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

- ์ด๋Ÿฌํ•œ ๊ณผ์ •๋•Œ๋ฌธ์— ์ „์†ก ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์ ์ง€๋งŒ, ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

 

UDP ์‚ฌ์šฉ ์˜ˆ์‹œ

- ์žฌ์„ ์†ก์„ ํ•˜๋ฉด ์•ˆ๋˜๋Š” ์„œ๋น„์Šค์— ์‚ฌ์šฉ

- RTP, Multicast, DNS

 

 

TCP์™€ UDP ๋น„๊ต

  TCP UDP
์—ฐ๊ฒฐ ๋ฐฉ์‹ ์—ฐ๊ฒฐํ˜• ๋น„์—ฐ๊ฒฐํ˜•
ํŒจํ‚ท ๊ตํ™˜ ๋ฐฉ์‹ ๊ฐ€์ƒ ํšŒ์„  ๋ฐ์ดํ„ฐ๊ทธ๋žจ
์ „์†ก ์ˆœ์„œ ๋ณด์žฅ ๋ณด์žฅX
์ˆ˜์‹  ์—ฌ๋ถ€ ํ™•์ธ O X
ํ†ต์‹  ๋ฐฉ์‹ 1:1 ํ†ต์‹  1:1 , 1:N, N:N ํ†ต์‹ 
์‹ ๋ขฐ์„ฑ ๋†’์Œ ๋‚ฎ์Œ
์†๋„ ๋Š๋ฆผ ๋น ๋ฆ„

 

 

 

 

 

 

https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/TCP.md

 

GitHub - WooVictory/Ready-For-Tech-Interview: ๐Ÿ’ป ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

๐Ÿ’ป ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„ ๐Ÿ‘จ‍๐Ÿ’ป. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.

github.com

https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/UDP.md

 

GitHub - WooVictory/Ready-For-Tech-Interview: ๐Ÿ’ป ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

๐Ÿ’ป ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„ ๐Ÿ‘จ‍๐Ÿ’ป. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.

github.com

https://livlikwav.github.io/study/tcp-and-udp/

 

TCP์™€ UDP์˜ ์ฐจ์ด

๋ณต์Šต ๊ฒธ ๊ธฐ์ˆ ๋ฉด์ ‘ ์ค€๋น„

livlikwav.github.io

https://mangkyu.tistory.com/15

 

[TCP/UDP] TCP์™€ UDP์˜ ํŠน์ง•๊ณผ ์ฐจ์ด

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

mangkyu.tistory.com