TCP (Flow Control, Connection Management)

9/5/2025

RDT(Reliable Data Transfer) ๋ณต์Šต

์ง€๋‚œ ์‹œ๊ฐ„์— ํ•™์Šตํ•œ RDT์˜ ์ฃผ์š” ํŠน์ง•๋“ค:

  1. Cumulative ACK
    • ํŠน์ • ์‹œํ€€์Šค ๋ฒˆํ˜ธ๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ „๋‹ฌ๋˜์—ˆ์Œ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹
  2. Fast Retransmit
    • ํƒ€์ด๋จธ ๋งŒ๋ฃŒ ์ „์— ๋™์ผํ•œ ACK๊ฐ€ 3๊ฐœ ์—ฐ์†์œผ๋กœ ๋„์ฐฉํ•˜๋ฉด (์ด 4๊ฐœ) ํ•ด๋‹น ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์œ ์‹ค๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จ
    • ์ฆ‰์‹œ ์žฌ์ „์†ก์„ ์ˆ˜ํ–‰
  3. ๋™์  ํƒ€์ž„์•„์›ƒ ์„ค์ •
    • ํ†ต์‹  ์ƒํ™ฉ์— ๋”ฐ๋ผ ํƒ€์ด๋จธ ๊ฐ’์„ ๋™์ ์œผ๋กœ ์กฐ์ •
  4. ํ๋ฆ„ ์ œ์–ด(Flow Control)
    • ์ˆ˜์‹ ์ž์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์— ๋งž์ถฐ ์†ก์‹  ์†๋„๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜

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

ํ๋ฆ„ ์ œ์–ด(Flow Control)

๊ธฐ๋ณธ ๋™์ž‘ ์›๋ฆฌ

TCP์—์„œ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์ „๋‹ฌํ•˜๋Š” ์‹œ์ ์€ ์ „์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฐ์ •์— ๋‹ฌ๋ ค ์žˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ read() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•ด์•ผ๋งŒ TCP ์ˆ˜์‹  ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

๋งŒ์•ฝ ํ”„๋กœ์„ธ์Šค๊ฐ€ read() ํ˜ธ์ถœ์„ ์ž์ฃผ ํ•˜์ง€ ์•Š์œผ๋ฉด:

  • ์ˆ˜์‹  ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ถ•์ 
  • ๋ฒ„ํผ ํฌํ™” ์‹œ ์ถ”๊ฐ€ ์„ธ๊ทธ๋จผํŠธ ์œ ์‹ค ์œ„ํ—˜ ๋ฐœ์ƒ

์ˆ˜์‹  ์œˆ๋„์šฐ(Receive Window)

์ˆ˜์‹ ์ž๋Š” ์ž์‹ ์˜ ์ˆ˜์‹  ๋ฒ„ํผ ์—ฌ์œ  ๊ณต๊ฐ„ ์ •๋ณด๋ฅผ ์†ก์‹ ์ž์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. ์ด๊ฒƒ์ด ์ˆ˜์‹  ์œˆ๋„์šฐ์ด๋ฉฐ, TCP ํ—ค๋”์˜ Window ํ•„๋“œ์— ํฌํ•จ๋œ๋‹ค.

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

ํ•ต์‹ฌ: ์œˆ๋„์šฐ ํฌ๊ธฐ๋Š” ์ˆ˜์‹ ์ž์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋ฉฐ, ์ด๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ๊ฐ€ ์†ก์‹ ์ž์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ๊ณผ ๋Œ€์กฐ์ ์ด๋‹ค.

๋ฐ๋“œ๋ฝ ์ƒํ™ฉ๊ณผ ํ•ด๊ฒฐ์ฑ…

TCP ์„ธ๊ทธ๋จผํŠธ ์ „์†ก ์กฐ๊ฑด

TCP ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ „์†ก๋˜๋Š” ๊ฒฝ์šฐ:

  1. ํ”„๋กœ์„ธ์Šค์˜ write() ํ˜ธ์ถœ๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก
  2. ์ˆ˜์‹ ํ•œ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ACK ์‘๋‹ต ์ „์†ก

๋ฐ๋“œ๋ฝ ์‹œ๋‚˜๋ฆฌ์˜ค

์ƒํ™ฉ: ์ˆ˜์‹ ์ž์˜ ๋ฒ„ํผ๊ฐ€ ํฌํ™” ์ƒํƒœ โ†’ ์†ก์‹ ์ž๊ฐ€ ์ „์†ก ์ค‘๋‹จ โ†’ ์–‘์ธก ๋ชจ๋‘ ์ƒ๋Œ€๋ฐฉ์˜ ์‘๋‹ต ๋Œ€๊ธฐ

๋ฌธ์ œ์ :

  • ์†ก์‹ ์ž: ์ˆ˜์‹  ์œˆ๋„์šฐ ๊ฐฑ์‹ ์„ ์œ„ํ•ด ๋Œ€๊ธฐ
  • ์ˆ˜์‹ ์ž: ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์–ด ์‘๋‹ต ์„ธ๊ทธ๋จผํŠธ ์—†์Œ

์œˆ๋„์šฐ ํ”„๋กœ๋ธŒ(Window Probe)

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • ์ˆ˜์‹  ์œˆ๋„์šฐ๊ฐ€ 0์ž„์„ ํ†ต์ง€๋ฐ›์€ ์†ก์‹ ์ž๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž‘์€ ํฌ๊ธฐ์˜ ์œˆ๋„์šฐ ํ”„๋กœ๋ธŒ ์„ธ๊ทธ๋จผํŠธ ์ „์†ก
  • ํฌ๊ธฐ: TCP ํ—ค๋”(20๋ฐ”์ดํŠธ) + ๋ฐ์ดํ„ฐ 1๋ฐ”์ดํŠธ = 21๋ฐ”์ดํŠธ
  • ๋ชฉ์ : ์ˆ˜์‹ ์ž์˜ ์œˆ๋„์šฐ ์ƒํƒœ ํ™•์ธ

์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ ์ตœ์ ํ™”

์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ์˜ ๋”œ๋ ˆ๋งˆ

ํฐ ์„ธ๊ทธ๋จผํŠธ์˜ ์žฅ์ :

  • ์ ์€ ์„ธ๊ทธ๋จผํŠธ ์ˆ˜๋กœ ํšจ์œจ์  ์ „์†ก
  • ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋‹น ์˜ค๋ฒ„ํ—ค๋“œ ์ตœ์†Œํ™”

ํฐ ์„ธ๊ทธ๋จผํŠธ์˜ ๋‹จ์ :

  • ์œ ์‹ค ์‹œ ์žฌ์ „์†ก ๋น„์šฉ ์ฆ๊ฐ€
  • ์ž‘์€ ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ ์ง€์—ฐ ๋ฐœ์ƒ

๋„ค์ด๊ธ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Nagle Algorithm)

์ „์†ก ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งŒ์กฑ๋  ๋•Œ๊นŒ์ง€ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ ์ถ•์ :

  1. ์ตœ๋Œ€ ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ(MSS) ๋งŒํผ ๋ฐ์ดํ„ฐ ์ถ•์ 
  2. ์ด์ „ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ACK ์ˆ˜์‹ 
  3. ํƒ€์ด๋จธ ๋งŒ๋ฃŒ

๋™์ž‘ ์˜ˆ์‹œ: ๋ฐ์ดํ„ฐ [0,1,2,3,4]๊ฐ€ ์žˆ์„ ๋•Œ:

  • ์ฒ˜์Œ 0๋ฒˆ ์„ธ๊ทธ๋จผํŠธ ์ „์†ก
  • ACK ์ˆ˜์‹  ์‹œ: ์ถ•์ ๋œ ๋ฐ์ดํ„ฐ(์˜ˆ: [1,2]) ์ฆ‰์‹œ ์ „์†ก
  • ACK ๋ฏธ์ˆ˜์‹  ์‹œ: ํƒ€์ด๋จธ ๋งŒ๋ฃŒ ํ›„ 0๋ฒˆ ์„ธ๊ทธ๋จผํŠธ ์žฌ์ „์†ก
  • MSS ๋„๋‹ฌ ์‹œ: ACK์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ „์†ก

์—ฐ๊ฒฐ ๊ด€๋ฆฌ(Connection Management)

3-Way Handshake (์—ฐ๊ฒฐ ์„ค์ •)

1๋‹จ๊ณ„: ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„ (SYN)

  • SYN bit = 1
  • ์‹œํ€€์Šค ๋ฒˆํ˜ธ = x (์ž„์˜๊ฐ’)

2๋‹จ๊ณ„: ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ (SYN-ACK)

  • SYN bit = 1
  • ์‹œํ€€์Šค ๋ฒˆํ˜ธ = y (์ž„์˜๊ฐ’)
  • ACK ๋ฒˆํ˜ธ = x + 1

3๋‹จ๊ณ„: ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„ (ACK)

  • SYN bit = 0
  • ACK ๋ฒˆํ˜ธ = y + 1
  • ์ด ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ

์—ฐ๊ฒฐ ์ข…๋ฃŒ (Connection Termination)

1๋‹จ๊ณ„: ํ”„๋กœ์„ธ์Šค close() ํ˜ธ์ถœ โ†’ FIN ๋ฉ”์‹œ์ง€ ์ „์†ก

2๋‹จ๊ณ„: ์ƒ๋Œ€๋ฐฉ์˜ FIN์— ๋Œ€ํ•œ ACK ์‘๋‹ต + ์ƒ๋Œ€๋ฐฉ๋„ FIN ์ „์†ก

3๋‹จ๊ณ„: ๋งˆ์ง€๋ง‰ ACK ์ „์†ก

์ค‘์š”: FIN ๊ตํ™˜์ด ์™„๋ฃŒ๋˜์–ด๋„ TCP ์—ฐ๊ฒฐ์ด ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š”๋‹ค. ์—ฐ๊ฒฐ ์„ค์ •๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–‘๋ฐฉํ–ฅ ํ™•์ธ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.