๐Ÿ“‚ ๋„คํŠธ์›Œํฌ/๊ฐœ๋…

TCP 3-Way Handshake & 4-Way Handshake

Amenable 2023. 6. 16. 12:53

๐Ÿ“™ 1. ๊ฐœ๋…

  TCP๋Š” ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•  ๋•Œ 3-Way Handshake๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  ์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด TCP๊ฐ€ ์—ฐ๊ฒฐ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” 3-Way HandShake์™€ ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” 4-Way Handshake์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

  ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ 3-Way HandShake๋ฅผ ๊ฐ„๋‹จํ•œ ๋น„์œ ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž. ๋งŒ์•ฝ A์™€ B๊ฐ€ ์˜์‚ฌ์†Œํ†ต์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋  ๊ฒƒ์ด๋‹ค.

  1. B๋‹˜. ์ œ ๋ง ๋“ค๋ฆฌ์‹œ๋‚˜์š”?
  2. ์ž˜ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. A๋‹˜์€ ์ œ ๋ง ๋“ค๋ฆฌ์‹œ๋‚˜์š”?
  3. ์ž˜ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

  ์ด๋ ‡๊ฒŒ A์™€ B๊ฐ€ ๋Œ€ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ์— ์•ž์„œ ์„œ๋กœ ์—ฐ๊ฒฐ์ด ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ 3-Way Handshake๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“™ 2. ์‚ฌ์ „ ์ง€์‹

  3-Way Handshake์—์„œ๋Š” 3๋ฒˆ์˜ ์„ธ๊ทธ๋จผํŠธ(TCP์—์„œ ํŒจํ‚ท์„ ์„ธ๊ทธ๋จผํŠธ๋ผ๊ณ  ๋ถ€๋ฆ„)๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉด์„œ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

  ์ด๋•Œ, ์–ด๋–ค ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ ์‹œ๋„์ธ์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๊ธฐ์กด ํ†ต์‹ ์— ๋Œ€ํ•œ ์‘๋‹ต์ธ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ TCP Header์— ์žˆ๋Š” Flag๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค. (๊ธฐ์กด์—๋Š” 6๊ฐœ์˜ Flag๋งŒ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ํ˜ผ์žก ์ œ์–ด ๊ธฐ๋Šฅ์˜ ํ–ฅ์ƒ์„ ์œ„ํ•ด Reserved ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NS, CWR, ECE ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.)

 

  ์ด๋ฒˆ ๊ธ€์—์„œ ์‚ฌ์šฉํ•  Flag๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • SYN (SYNchronization)
    ์—ฐ๊ฒฐ ์š”์ฒญ ํ”Œ๋ž˜๊ทธ
  • ACK (ACKnowledgement)
    ์‘๋‹ต ํ”Œ๋ž˜๊ทธ
  • FIN (Finish)
    ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์š”์ฒญ ํ”Œ๋ž˜๊ทธ
    ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ ๋” ์ด์ƒ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ„

 

 

๐Ÿ“™ 3. 3-Way Handshake

  TCP๊ฐ€ ์—ฐ๊ฒฐํ•  ๋•Œ 3-Way Handshake ๊ณผ์ •์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

 

[STEP 1]

  •   ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ํด๋ผ์ด์–ธํŠธ์˜ ISN์„ ๋‹ด์•„ SYN๋ฅผ ๋ณด๋‚ธ๋‹ค. (ISN์€ ์ƒˆ๋กœ์šด TCP ์—ฐ๊ฒฐ์˜ ์ฒซ ๋ฒˆ์งธ ์„ธ๊ทธ๋จผํŠธ์— ํ• ๋‹น๋œ ์ž„์˜์˜ ์‹œํ€€์Šค ๋ฒˆํ˜ธ(์˜ˆ์‹œ๋กœ๋Š” 12010)๋ฅผ ๋งํ•˜๋ฉฐ ์ด๋Š” ์žฅ์น˜๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.)

[STEP 2]

  •   ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ SYN๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์„œ๋ฒ„์˜ ISN์„ ๋ณด๋‚ด๋ฉฐ ์Šน์ธ๋ฒˆํ˜ธ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ 'ISN + 1'์„ ๋ณด๋‚ธ๋‹ค.

[STEP 3]

  •   ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ 'ISN+1'ํ•œ ๊ฐ’์ธ ์Šน์ธ๋ฒˆํ˜ธ๋ฅผ ๋‹ด์•„ ACK๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.

 

  ์œ„์˜ 3๊ฐ€์ง€ ๊ณผ์ •์ด 3-Way HandShake์ด๋‹ค. ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์ƒํƒœ ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์„œ๋ฒ„์—์„œ๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” LISTEN ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.
  2. ํด๋ผ์ด์–ธํŠธ๋Š” ํ†ต์‹ ์„ ์‹œ๋„ํ•  ๋•Œ SYN ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ด๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์ด ์ƒํƒœ๋ฅผ SYN_SENT๋ผ๊ณ  ํ•œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ์˜ SYN๋ฅผ ๋ฐ›์€ ์„œ๋ฒ„๋Š” SYN-RECEIVE ์ƒํƒœ๊ฐ€ ๋˜๊ณ , SYN+ACK๋กœ ์‘๋‹ตํ•œ๋‹ค.
  4. SYN+ACK ์‘๋‹ต์„ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” ESTABLISHED ์ƒํƒœ๊ฐ€ ๋˜๊ณ , ๊ทธ์— ๋Œ€ํ•ญ ์‘๋‹ต์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.
  5. ์„œ๋ฒ„์—์„œ๋„ ํด๋ผ์ด์–ธํŠธ์˜ ์‘๋‹ต์„ ๋ฐ›๊ณ  ESTABLISHED ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

 

 

๐Ÿ“™ 4. 4-Way Handshake

  TCP๊ฐ€ ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•  ๋•Œ 4-Way Handshake ๊ณผ์ •์ด ๋ฐœ์ƒํ•œ๋‹ค.

[STEP 1]

  • ๋จผ์ € ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ซ์œผ๋ ค๊ณ  ํ•  ๋•Œ FIN์œผ๋กœ ์„ค์ •๋œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ธ€๋ผ์ด์–ธํŠธ๋Š” FIN_WAIT_1 ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€๊ณ  ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

[STEP 2]

  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ACK๋ผ๋Š” ์Šน์ธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  CLOSE_WAIT ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฐ›์œผ๋ฉด FIN_WAIN_2 ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

[STEP 3]

  • ์„œ๋ฒ„๋Š” ACK๋ฅผ ๋ณด๋‚ด๊ณ  ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„์— ํด๋ผ์ด์–ธํŠธ์— FIN์ด๋ผ๋Š” ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค.

[STEP 4]

  • ํด๋ผ์ด์–ธํŠธ๋Š” TIME_WAIT ์ƒํƒœ๊ฐ€ ๋˜๊ณ  ๋‹ค์‹œ ์„œ๋ฒ„๋กœ ACK๋ฅผ ๋ณด๋‚ด์„œ ์„œ๋ฒ„๋Š” CLOSED ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • ์ดํ›„ ํด๋ผ์ด์–ธํŠธ๋Š” ์–ด๋А ์ •๋„์˜ ์‹œ๊ฐ„์„ ๋Œ€๊ธฐํ•œ ํ›„ ์—ฐ๊ฒฐ์ด ๋‹ซํžˆ๊ณ  ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋ชจ๋“  ์ž์›์˜ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋œ๋‹ค.

 

 

๐Ÿ“™ 5. TIME_WAIT

  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ FIN(์—ฐ๊ฒฐ ์ข…๋ฃŒ ์š”์ฒญ ํ”Œ๋ž˜๊ทธ)๋ฅผ ๋ฐ›๊ณ  ๊ทธ๋ƒฅ ์—ฐ๊ฒฐ์„ ๋‹ซ์œผ๋ฉด ๋˜์ง€ ์™œ ๊ตณ์ด ์ผ์ • ์‹œ๊ฐ„ ๋’ค์— ๋‹ซ์„๊นŒ?

๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„ธ์…˜์„ ์ข…๋ฃŒ์‹œํ‚จ ํ›„ ๋’ค๋Šฆ๊ฒŒ ๋„์ฐฉํ•œ ํŒจํ‚ท ์žˆ๊ณ  ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ์ง€์—ฐ ํŒจํ‚ท์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ FIN์„ ์ˆ˜์‹ ํ•˜๋”๋ผ๋„ ์ผ์ • ์‹œ๊ฐ„ ์„ธ์…˜์„ ๋‚จ๊ฒจ๋†“๊ณ  ํ˜น์‹œ๋‚˜ ํ•˜๋Š” ๋งˆ์Œ์— ๋‚˜๋จธ์ง€ ํŒจํ‚ท์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

  ์ด ๊ณผ์ •์„ TIME_WAIT๋ผ ํ•˜๊ณ , 'CeotOS6, ์šฐ๋ถ„ํˆฌ'์—์„œ๋Š” 60์ดˆ๋กœ '์œˆ๋„์šฐ'๋Š” 4๋ถ„์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€
resilient ๋‹˜์˜ '[๋„คํŠธ์›Œํฌ network] TCP 3-way HandShake & 4-way HandShake',
Evan Moon ๋‹˜์˜ 'TCP์˜ ํ—ค๋”์—๋Š” ์–ด๋–ค ์ •๋ณด๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š”๊ฑธ๊นŒ?',
kim.svadoz ๋‹˜์˜ '[Network] 07. ํ•ธ๋“œ์„ธ์ดํฌ(Handshake)',
์ฃผํ™์ฒ  ๋‹˜์˜ '๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ'
๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.