# TCP 3-way handshake์™€ 4-way-handshake

written by sohyeon, hyemin ๐Ÿ’ก


# 1. TCP๋ž€?

TCP(Transmission Control Protocol)๋Š” ๋„คํŠธ์›Œํฌ ๊ณ„์ธต ์ค‘ ์ „์†ก ๊ณ„์ธต์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ, ํŠธ๋žœ์ŠคํฌํŠธ ๊ณ„์ธต์˜ ํ”„๋กœํ† ์ฝœ์˜ ํ•˜๋‚˜๋กœ ์›น์ด๋‚˜ ์ด๋ฉ”์ผ, FTP์™€ ๊ฐ™์ด ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ํ•„์š”ํ•œ ํ†ต์‹ ์— ์‚ฌ์šฉ๋œ๋‹ค.
TCP๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์— ์‹ ๋ขฐ์„ฑ์„ ๋”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ๊ทธ๋จผํŠธ(segment)๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜๊ณ , ์ „์†ก ์†๋„๋ฅผ ์กฐ์ ˆํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๋Œ€๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ์žฌ์ „์†ก์„ ํ•˜๊ฒŒ ๋œ๋‹ค.


# 2. TCP์˜ ํŠน์ง•

  • ์ธํ„ฐ๋„ท ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”์‹œ์ง€์˜ ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด IP์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
    • TCP์™€ IP๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, IP๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ๋ฐฐ๋‹ฌ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด TCP๋Š” ํŒจํ‚ท์„ ์ถ”์  ๋ฐ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋†’์€ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • UDP์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.
  • ํ๋ฆ„์ œ์–ด ๋ฐ ํ˜ผ์žก์ œ์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    • ํ๋ฆ„์ œ์–ด
      • ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹ ํ•˜๋Š” ๊ณณ๊ณผ ์ˆ˜์‹ ํ•˜๋Š” ๊ณณ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ์ˆ˜์‹ ์ž์˜ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.
    • ํ˜ผ์žก์ œ์–ด
      • ์ •๋ณด์˜ ์†Œํ†ต๋Ÿ‰์ด ๋งŽ์„ ๊ฒฝ์šฐ ํŒจํ‚ท์„ ์กฐ๊ธˆ๋งŒ ์ „์†กํ•˜์—ฌ ํ˜ผ์žก ํ˜„์ƒ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.

# 3. TCP์˜ ์—ฐ๊ฒฐ ์„ค์ • ๋ฐ ํ•ด์ œ ๊ณผ์ •

# 3-way handshake

TCP ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์„ค์ •(Connection Establish) ํ•˜๋Š” ๊ณผ์ •

  • ์ฆ‰, TCP/IP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ํ†ต์‹ ์„ ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ •ํ™•ํ•œ ์ „์†ก์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋Œ€๋ฐฉ ์ปดํ“จํ„ฐ์™€ ์‚ฌ์ „์— ์„ธ์…˜์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.
  1. Client -> Server: SYN

    • Client๊ฐ€ ์—ฐ๊ฒฐ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ „์†ก(SYN)ํ•œ๋‹ค.
    • Client๊ฐ€ ์ตœ์ดˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ Sequence Number๋ฅผ ์ž„์˜์˜ ๋žœ๋ค ์ˆซ์ž๋กœ ์ง€์ •ํ•˜๊ณ , SYN ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†กํ•œ๋‹ค.
  2. Server -> Client: SYN + ACK

    • ์ ‘์† ์š”์ฒญ์„ ๋ฐ›์€ Server๊ฐ€ ์š”์ฒญ์„ ์ˆ˜๋ฝํ–ˆ์œผ๋ฉฐ, Client๋„ ํฌํŠธ๋ฅผ ์—ด์–ด๋‹ฌ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก(SYN + ACK)ํ•œ๋‹ค.
    • Server๋Š” Acknowledgement Number ํ•„๋“œ๋ฅผ Sequence Number + 1๋กœ ์ง€์ •ํ•˜๊ณ , SYN๊ณผ ACK ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†กํ•œ๋‹ค.
  3. Client -> Server: ACK

    • ๋งˆ์ง€๋ง‰์œผ๋กœ Client๊ฐ€ ์ˆ˜๋ฝ ํ™•์ธ(ACK)์„ ๋ณด๋‚ด ์—ฐ๊ฒฐ์„ ๋งบ๋Š”๋‹ค.
    • ์ด๋•Œ, ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์ด ๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

# 4-way handshake

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

  1. Client -> Server: FIN

    • Client๊ฐ€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ฒ ๋‹ค๋Š” FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•œ๋‹ค.
    • Server๊ฐ€ FIN ํ”Œ๋ž˜๊ทธ๋กœ ์‘๋‹ตํ•˜๊ธฐ ์ „๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•œ๋‹ค.
  2. Server -> Client: ACK

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

    • Server๊ฐ€ ํ†ต์‹ ์ด ๋๋‚ฌ๋‹ค๋ฉด ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์š”์ฒญ์— ํ•ฉ์˜ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ Client์—๊ฒŒ FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•œ๋‹ค.
  4. Client -> Server: ACK

    • Client๋Š” ํ™•์ธํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€(ACK)๋ฅผ ์ „์†กํ•œ๋‹ค.

# ์ƒํƒœ ์ •๋ณด

  • CLOSED: ํฌํŠธ๊ฐ€ ๋‹ซํžŒ ์ƒํƒœ๋‹ค.
  • LISTEN: ํฌํŠธ๊ฐ€ ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ ๋Œ€๊ธฐ ์ค‘์ด๋‹ค.
  • SYN-RECEIVED: SYN ์š”์ฒญ์„ ๋ฐ›๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘์ด๋‹ค.
  • ESTABLISHED: ํฌํŠธ ์—ฐ๊ฒฐ ์ƒํƒœ๋‹ค.
  • TIME_WAIT: ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ FIN์„ ์ˆ˜์‹ ํ•˜๋”๋ผ๋„ ์ผ์ •์‹œ๊ฐ„ ๋™์•ˆ ์„ธ์…˜์„ ๋‚จ๊ฒจ๋†“๊ณ  ๋ฐ›์ง€ ๋ชปํ•œ ํŒจํ‚ท์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

# Reference & Additional Resources

Last Updated: 12/5/2020, 11:36:44 AM