๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
5๏ธโƒฃ CS/Network

[Network] TCP์˜ 3-Way HandShake์™€ 4-Way HandShake

by seolhee2750 2022. 10. 13.

์˜ค๋Š˜์€ TCP์˜ ์—ฐ๊ฒฐ ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ํ•ด์ œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋™์ž‘์— ๋Œ€ํ•˜์—ฌ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

๊ฐ ๋™์ž‘์˜ ์ง„ํ–‰ ๊ณผ์ •๊ณผ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

 

๐Ÿ“Ž TCP์˜ 3-Way HandShake

๊ฐœ๋…

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

 

๋™์ž‘ ๋ฐฉ์‹

[ Step 1 ]

  • Client๋Š” Server์™€ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด SYN(x)์„ ๋ณด๋‚ธ๋‹ค.
  • ์ด ๋•Œ Client๋Š” CLOSED์—์„œ SYN_SENT๋กœ ๋ณ€ํ•˜๊ณ , Server๋Š” LISTEN ์ƒํƒœ์ด๋‹ค.

 

[ Step 2 ]

  • Server๊ฐ€ SYN(x)์„ ๋ฐ›๊ณ , Client์—๊ฒŒ ๋ฐ›์•˜๋‹ค๋Š” ์‹ ํ˜ธ๋กœ ACK(x+1)์™€ SYN(y)ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค.
  • ์š”์ฒญ์„ ์ˆ˜๋ฝํ–ˆ์œผ๋ฉฐ, ํฌํŠธ๋ฅผ ์—ด์–ด๋‹ฌ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ ํ›„, ํด๋ผ์ด์–ธํŠธ์˜ ACK ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ์ด ๋•Œ Client๋Š” CLOSED์ด๋ฉฐ Server๋Š” SYN_REVEIVED ์ƒํƒœ์ด๋‹ค.

 

[ Step 3 ]

  • Client๋Š” Server์˜ ACK(x+1)์™€ SYN(y)ํŒจํ‚ท์œผ๋กœ ์‘๋‹ต์„ ๋ฐ›๊ณ , ACK(y+1)๋ฅผ Server์— ๋ณด๋‚ธ๋‹ค.
  • ์ด ๋•Œ, Client๋Š” ESTABLISHED ์ƒํƒœ์ด๋ฉฐ,
    Server๋Š” ACK์‘๋‹ต์„ ํ†ตํ•ด SYN_RECEIVED์—์„œ ESTABLISHED๋กœ ๋ฐ”๋€๋‹ค.

๐Ÿ‘‰ ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ง€๊ณ , ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


๐Ÿ“Ž TCP์˜ 4-Way HandShake

๊ฐœ๋…

  • TCP ํ†ต์‹ ์—์„œ ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์™„๋ฃŒํ•˜๊ณ , FIN ํ”Œ๋ž˜๊ทธ์™€ ACK๋ฅผ ํ†ตํ•ด ์„œ๋กœ์˜ ์•ˆ์ „ํ•œ ์ข…๋ฃŒ๋ฅผ ํ™•์ธํ•œ๋‹ค.

 

๋™์ž‘ ๋ฐฉ์‹

[ Step 1 ]

  • Client๊ฐ€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ฒ ๋‹ค๋Š” FIN ํ”Œ๋ž˜๊ทธ(ACK๋„ ํฌํ•จ)๋ฅผ ์ „์†กํ•œ๋‹ค. (Client๊ฐ€ close() ํ˜ธ์ถœ)
  • ์ด ๋•Œ Client๋Š” FIN_WAIT ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

 

[ Step 2 ]

  • Server๋Š” FIN์„ ๋ฐ›๊ณ , ํ™•์ธํ–ˆ๋‹ค๋Š” ACK๋ฅผ Client์— ๋ณด๋‚ธ๋‹ค.
  • ์ด ๋•Œ Server๋Š” CLOSE_WAIT ์ƒํƒœ๊ฐ€ ๋˜๊ณ , ๋‚จ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋งˆ์ € ์ „์†ก์„ ๋งˆ์นœ ํ›„์— close()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • Client๋Š” Server์—์„œ ACK๋ฅผ ๋ฐ›์€ ํ›„์— ์„œ๋ฒ„๊ฐ€ ๋‚จ์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋๋‚ด๊ณ  FIN์„ ๋ณด๋‚ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. (FIN_WAIT2)

 

[ Step 3 ]

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด, ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ ์ข…๋ฃŒ์— ํ•ฉ์˜ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ FIN ํŒจํ‚ท์„ Client์— ๋ณด๋‚ธ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด ๋•Œ Server๋Š” ์Šน์ธ ๋ฒˆํ˜ธ๋ฅผ ๋ณด๋‚ด์ค„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” LAST_ACK ์ƒํƒœ์— ๋“ค์–ด๊ฐ„๋‹ค.

 

[ Step 4 ]

  • Client๋Š” FIN์„ ๋ฐ›๊ณ , ํ™•์ธํ–ˆ๋‹ค๋Š” ACK๋ฅผ Server์— ๋ณด๋‚ธ๋‹ค.
  • ์ด ๋•Œ Client๋Š” ์•„์ง ๋ฐ›์ง€ ๋ชปํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ TIME_WAIT์„ ํ†ตํ•ด ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    ๐Ÿ‘‰ TIME_WAIT ์ƒํƒœ๋ฅผ ํ†ตํ•ด, ์˜๋„์น˜ ์•Š์€ ์—๋Ÿฌ๋กœ ์ธํ•˜์—ฌ ์—ฐ๊ฒฐ์ด ๋ฐ๋“œ๋ฝ์œผ๋กœ ๋น ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.
    (๋งŒ์•ฝ ์—๋Ÿฌ๋กœ ์ธํ•ด ์ข…๋ฃŒ๊ฐ€ ์ง€์—ฐ๋˜๊ฑฐ๋‚˜ ํƒ€์ž„์ด ์ดˆ๊ณผ๋˜๋ฉด CLOSED๋กœ ๋“ค์–ด๊ฐ„๋‹ค.)
  • Server๋Š” ACK๋ฅผ ๋ฐ›์€ ํ›„ ์†Œ์ผ“์„ ๋‹ซ๊ณ  CLOSED ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • TIME_WAIT ์‹œ๊ฐ„์ด ๋๋‚˜๋ฉด Client๋„ CLOSED ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

๐Ÿ“ TCP์˜ ์—ฐ๊ฒฐ ์„ค์ • ๊ณผ์ •๊ณผ ํ•ด์ œ ๊ณผ์ •์˜ ๋‹จ๊ณ„๊ฐ€ ๋‹ค๋ฅธ ์ด์œ 

Client๊ฐ€ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋งˆ์ณค๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, Server๋Š” ์•„์ง ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ FIN์— ๋Œ€ํ•œ ACK๋งŒ ๋ณด๋‚ด๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ „์†กํ•œ ํ›„์— ์ž์‹ ๋„ FIN ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


์ฐธ๊ณ 

 

'5๏ธโƒฃ CS > Network' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Network] Sync/Async์™€ Blocking/Non-blocking  (0) 2022.10.21
[Network] SSL/TLS  (0) 2022.10.13

๋Œ“๊ธ€