[์ปดํ“จํ„ฐ๋„คํŠธ์›Œํฌ] TCP์˜ 3-way/4-way handshake

๐Ÿงช Computer Science/Computer Network

3-way handshake

  • TCP ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์„ค์ •(Connection Establish)ํ•˜๋Š” ๊ณผ์ •
  • ์–‘ ์ชฝ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ณ , ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํ•œ ์ชฝ์—์„œ ๋‹ค๋ฅธ ์ชฝ์ด ์ค€๋น„๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์ฆ‰, TCP/IP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด์„œ ํ†ต์‹ ์„ ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ •ํ™•ํ•œ ์ „์†ก์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋Œ€๋ฐฉ ์ปดํ“จํ„ฐ์™€ ์‚ฌ์ „์— ์„ธ์…˜์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.

A ํ”„๋กœ์„ธ์Šค(Client)๊ฐ€ B ํ”„๋กœ์„ธ์Šค(Server)์— ์—ฐ๊ฒฐ์„ ์š”์ฒญ

1) A โ†’ B: SYN

  • ์ ‘์† ์š”์ฒญ ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์—ฐ๊ฒฐ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ „์†ก(SYN)
  • ์†ก์‹ ์ž๊ฐ€ ์ตœ์ดˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ Sequence Number๋ฅผ ์ž„์˜์˜ ๋žœ๋ค ์ˆซ์ž๋กœ ์ง€์ •ํ•˜๊ณ , SYN ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†กํ•œ๋‹ค.
  • PORT ์ƒํƒœ - B: LISTEN, A: CLOSED

2) B โ†’ A: SYN + ACK

  • ์ ‘์† ์š”์ฒญ์„ ๋ฐ›์€ ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์š”์ฒญ์„ ์ˆ˜๋ฝํ–ˆ์œผ๋ฉฐ, ์ ‘์† ์šซใ…‡ ํ”„๋กœ์„ธ์Šค์ธ A๋„ ํฌํŠธ๋ฅผ ์—ด์–ด ๋‹ฌ๋ผ๋Š” ๋ฉ”์‹œ์ง€ ์ „์†ก(SYN+ACK)
  • ์ˆ˜์‹ ์ž๋Š” Acknowledgdn
  • PORT ์ƒํƒœ - B: SYN_RCV, A: CLOSED

3) A โ†’ B: ACK

  • PORT ์ƒํƒœ - B: SYN_RCV, A: ESTABLISHED
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ‘์† ์š”์ฒญ ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์ˆ˜๋ฝ ํ™•์ธ์„ ๋ณด๋‚ด ์—ฐ๊ฒฐ์„ ๋งบ์Œ(ACK)
  • ์ด ๋•Œ, ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์ด ๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • PORT ์ƒํƒœ - B: ESTABLISHED, A: ESTABLISHED

4-way handshake

  • TCP์˜ ์—ฐ๊ฒฐ์„ ํ•ด์ œ(Connection Termination)ํ•˜๋Š” ๊ณผ์ •

A ํ”„๋กœ์„ธ์Šค(Client)๊ฐ€ B ํ”„๋กœ์„ธ์Šค(Server)์— ์—ฐ๊ฒฐ ํ•ด์ œ๋ฅผ ์š”์ฒญ

1) A โ†’ B: FIN

  • ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ฒ ๋‹ค๋Š” FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†ก
  • ํ”„๋กœ์„ธ์Šค B๊ฐ€ FIN ํ”Œ๋ž˜๊ทธ๋กœ ์‘๋‹ตํ•˜๊ธฐ ์ „๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€

2) B โ†’ A: ACK

  • ํ”„๋กœ์„ธ์Šค B๋Š” ์ผ๋‹จ ํ™•์ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ž์‹ ์˜ ํ†ต์‹ ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.(์ด ์ƒํƒœ๊ฐ€ TIME_WAIT ์ƒํƒœ)
  • ์ˆ˜์‹ ์ž๋Š” Acknowledgement Number ํ•„๋“œ๋ฅผ (Sequence Number + 1)๋กœ ์ง€์ •ํ•˜๊ณ , ACK ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†กํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ์ด ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด ์ด์–ด์„œ ๊ณ„์† ์ „์†กํ•œ๋‹ค.

3) B โ†’ A: FIN

  • ํ”„๋กœ์„ธ์Šค B๊ฐ€ ํ†ต์‹ ์ด ๋๋‚ฌ์œผ๋ฉด ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์š”์ฒญ์— ํ•ฉ์˜ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ”„๋กœ์„ธ์Šค A์—๊ฒŒ FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†ก

4) A โ†’ B: ACK

  • ํ”„๋กœ์„ธ์Šค A๋Š” ํ™•์ธํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก

ํฌํŠธ(PORT) ์ƒํƒœ ์ •๋ณด

  • CLOSED: ํฌํŠธ๊ฐ€ ๋‹ซํžŒ ์ƒํƒœ
  • LISTEN: ํฌํŠธ๊ฐ€ ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ ๋Œ€๊ธฐ ์ค‘
  • SYN_RCV: SYNC ์š”์ฒญ์„ ๋ฐ›๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘
  • ESTABLISHED: ํฌํŠธ ์—ฐ๊ฒฐ ์ƒํƒœ

ํ”Œ๋ž˜๊ทธ ์ •๋ณด

  • TCP Header์—๋Š” CONTROL BIT(ํ”Œ๋ž˜๊ทธ๋น„ํŠธ, 6bit)๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ bit๋Š” "URG-ACK-PSH-RST-SYN-FIN"์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ์ฆ‰, ํ•ด๋‹น ์œ„์น˜์˜ bit๊ฐ€ 1์ด๋ฉด ํ•ด๋‹น ํŒจํ‚ท์ด ์–ด๋– ํ•œ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋Š” ํŒจํ‚ท์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • SYN(Synchrosize Sequence Number) / 000010
    • ์—ฐ๊ฒฐ ์„ค์ •. Sequence Number๋ฅผ ๋žœ๋ค์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์„ธ์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ดˆ๊ธฐ์— Sequence Number๋ฅผ ์ „์†กํ•œ๋‹ค.
  • ACK(Acknowledgement) / 010000
    • ์‘๋‹ต ํ™•์ธ. ํŒจํ‚ท์„ ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
    • Acknowledgement Number ํ•„๋“œ๊ฐ€ ์œ ํšจํ•œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ์–‘๋‹จ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‰ฌ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ตœ์ดˆ ์—ฐ๊ฒฐ ์„ค์ • ๊ณผ์ •์—์„œ ์ „์†ก๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์„ธ๊ทธ๋จผํŠธ์˜ ACK ๋น„ํŠธ๋Š” 1๋กœ ์ง€์ •๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • FIN(Finish) / 000001
    • ์—ฐ๊ฒฐ ํ•ด์ œ. ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋” ์ด์ƒ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.