[CS] TCP 3 way handshake & 4 way handshake

giggleยท2023๋…„ 8์›” 6์ผ
0
post-custom-banner

๐Ÿ“Œ 3 way handshake & 4 way handshake

ํ•ด๋‹น ๊ณผ์ •์€ TCP ์—ฐ๊ฒฐ์„ ์„ฑ๋ฆฝํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 3 way handshake๋Š” ์—ฐ๊ฒฐ์„ ์„ฑ๋ฆฝ, 4 way handshake๋Š” ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

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

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

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

  • TCP Header์—๋Š” CONTROL BIT(ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ, 6bit)๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ bit๋Š” URG-ACK-PSH-RST-SYN-FIN์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.

์ฆ‰, ํ•ด๋‹น ์œ„์น˜์˜ bit๊ฐ€ 1์ด๋ฉด ํ•ด๋‹น ํŒจํ‚ท์ด ์–ด๋– ํ•œ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋Š” ํŒจํ‚ท์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • SYN(Synchronize Sequence Number) / 000010

์—ฐ๊ฒฐ ์„ค์ •. Sequence Number๋ฅผ ๋žœ๋ค์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์„ธ์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ดˆ๊ธฐ์— Sequence Number๋ฅผ ์ „์†กํ•œ๋‹ค.

  • ACK(Acknowledgement) / 010000

์‘๋‹ต ํ™•์ธ. ํŒจํ‚ท์„ ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
Acknowledgement Number ํ•„๋“œ๊ฐ€ ์œ ํšจํ•œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
์–‘๋‹จ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‰ฌ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ตœ์ดˆ ์—ฐ๊ฒฐ ์„ค์ • ๊ณผ์ •์—์„œ ์ „์†ก๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์„ธ๊ทธ๋จผํŠธ์˜ ACK ๋น„ํŠธ๋Š” 1๋กœ ์ง€์ •๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • FIN(Finish) / 000001

์—ฐ๊ฒฐ ํ•ด์ œ. ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋” ์ด์ƒ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ‘‹๐Ÿป 3 way handshake

3 way handshake๋ž€?

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

์–‘์ชฝ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ณ , ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ƒ๋Œ€๊ฐ€ ์ค€๋น„๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

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

3 way handshake ๊ณผ์ •

  1. A(Client) -> B(Server) : SYN
  • ์ ‘์† ์š”์ฒญ ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์—ฐ๊ฒฐ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ „์†ก(SYN)
  • ์†ก์‹ ์ž๊ฐ€ ์ตœ์ดˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ Sequence Number๋ฅผ ์ž„์˜๋กœ ๋žœ๋ค ์ˆซ์ž๋กœ ์ง€์ •ํ•˜๊ณ , SYN ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†ก
  • PORT ์ƒํƒœ - A : CLOSED, B : LISTEN
  1. B(Server) -> A(Client) : SYN + ACK
  • ์ ‘์† ์š”์ฒญ์„ ๋ฐ›์€ ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์š”์ฒญ์„ ์ˆ˜๋ฝํ–ˆ์œผ๋ฉฐ, ์ ‘์† ์š”์ฒญ ํ”„๋กœ์„ธ์Šค์ธ A๋„ ํฌํŠธ๋ฅผ ์—ด์–ด ๋‹ฌ๋ผ๋Š” ๋ฉ”์‹œ์ง€ ์ „์†ก (SYN + ACK)
  • ์ˆ˜์‹ ์ž๋Š” Acknowledgement Number ํ•„๋“œ๋ฅผ (Sequence Number + 1)๋กœ ์ง€์ •ํ•˜๊ณ , SYN๊ณผ ACK ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†ก
  • PORT ์ƒํƒœ - A : CLOSED, B : SYN_RCV
  1. A(Client) -> B(Server) : ACK
  • PORT ์ƒํƒœ - A : ESTABLISHED, B : SYN_RCV
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ‘์† ์š”์ฒญ ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์ˆ˜๋ฝ ํ™•์ธ์„ ๋ณด๋‚ด ์—ฐ๊ฒฐ์„ ๋งบ์Œ(ACK)
  • ์ด๋•Œ, ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์ด ๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก ๊ฐ€๋Šฅ
  • PORT ์ƒํƒœ - A : ESTABLISHED, B : ESTABLISHED

๐Ÿ‘‹๐Ÿป 4 way handshake

4 way handshake๋ž€?

TCP์˜ ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๋Š” ๊ณผ์ •

4 way handshake ๊ณผ์ •

  1. A(Client) -> B(Server) : FIN
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ A๊ฐ€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ฒ ๋‹ค๋Š” FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†ก
  • ํ”„๋กœ์„ธ์Šค B๊ฐ€ FIN ํ”Œ๋ž˜๊ทธ๋กœ ์‘๋‹ตํ•˜๊ธฐ ์ „๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€
  1. B(Server) -> A(Client) : ACK
  • ํ”„๋กœ์„ธ์Šค B๋Š” ์ผ๋‹จ ํ™•์ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ž์‹ ์˜ ํ†ต์‹ ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ -> TIME_WAIT ์ƒํƒœ
  • ์ˆ˜์‹ ์ž๋Š” Acknowledgement Number ํ•„๋“œ๋ฅผ (Sequence Number + 1)๋กœ ์ง€์ •ํ•˜๊ณ , ACK ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ 1๋กœ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†ก
  • ์ž์‹ ์ด ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด ์ด์–ด์„œ ๊ณ„์† ์ „์†ก
  1. B(Server) -> A(Client) : FIN
  • ํ†ต์‹ ์ด ๋๋‚œ ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์ข…๋ฃŒ ์š”์ฒญ์— ๋™์˜ํ•œ๋‹ค๋Š ์˜๋ฏธ -> A์—๊ฒŒ FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†ก
  1. A(Client) -> B(Server) : ACK
  • ํ”„๋กœ์„ธ์Šค A๋Š” ํ™•์ธํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก

์ฐธ๊ณ 


ํ”ผ๋“œ๋ฐฑ ๋ฐ ๊ฐœ์„ ์ ์€ ๋Œ“๊ธ€์„ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”๐Ÿ˜Š

profile
๋ฐฐ์›€์„ ๊ธ€๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€