3-way handshake / 4-way handshake

๋ฐ•์ƒ์šฐยท2023๋…„ 5์›” 29์ผ
0
post-thumbnail

์ด๊ฑฐ ๋จผ์ €..!

๐Ÿ’ก ํฌํŠธ์˜ ์ƒํƒœ ์ •๋ณด

  • CLOSED: ํฌํŠธ๊ฐ€ ๋‹ซํžŒ ์ƒํƒœ
  • LISTEN: ํฌํŠธ๊ฐ€ ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ ๋Œ€๊ธฐ ์ค‘
  • SYN_RCV: SYNC ์š”์ฒญ์„ ๋ฐ›๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘
  • ESTABLISHED: ํฌํŠธ ์—ฐ๊ฒฐ ์ƒํƒœ
  • FIN_WAIT_1: close()๋ฅผ ์ง„ํ–‰ํ•œ ์†Œ์ผ“์ด ์ง„์ž…ํ•˜๋Š” ์ƒํƒœ
  • FIN_WAIT_2: ACK์‹ ํ˜ธ๋ฅผ ๋ฐ›์€ FIN_WAIT_1์†Œ์ผ“์ด FIN_WAIT_2๋กœ๋ณ€๊ฒฝ
  • CLOSE_WAIT: ์ƒ๋Œ€๋ฐฉ์˜ FIN์„ ๋ฐ›์€ ์ƒํƒœ. ์ƒ๋Œ€๋ฐฉ FIN์— ๋Œ€ํ•œ ACK๋ฅผ ๋ณด๋‚ด๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ข…๋ฃŒ๋ฅผ ์•Œ๋ฆฐ๋‹ค
  • TIME_WAIT: FIN์— ๋Œ€ํ•œ ACK๋ฅผ ๋ฐ›๊ณ  ์—ฐ๊ฒฐ ์ข…๋ฃŒ๊ฐ€ ์™„๋ฃŒ๋œ ์ƒํƒœ. ์ผ์ • ์‹œ๊ฐ„ ๊ธฐ๋‹ค๋ฆฐ ํ›„ CLOSED๋กœ ์ „์ด๋œ๋‹ค.
  • LAST_ACK: CLOSE-WAIT ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌ ํ›„ ์ž์‹ ์˜ FIN์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„ FIN์— ๋Œ€ํ•œ ACK๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ

๐Ÿ’ก ํ”Œ๋ž˜๊ทธ ์ •๋ณด

  • TCPํ—ค๋”๋Š” ๊ฐ 1 bit์”ฉ ์ฐจ์ง€ํ•˜๋Š” 6๊ฐœ์˜ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๊ณ , ๊ฐ ํ”Œ๋ž˜๊ทธ๋Š” ์ดˆ๊ธฐ๊ฐ’ 0์„ ๊ฐ€์ง„๋‹ค.
  • ํŒจํ‚ท์€ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ์˜ ๋น„ํŠธ๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ํ•ด๋‹น ํŒจํ‚ท์ด ์–ด๋–ค ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค.
  • SYN - Synchronize sequence numbers
    ์—ฐ๊ฒฐ ์„ค์ •, ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ๋žœ๋ค์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์„ธ์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ. Client์™€ Server์˜ Connection์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Flag
  • ACK - Acknowledgment
    ์‘๋‹ต ํ™•์ธ. ์‘๋‹ต์„ ํ™•์ธํ–ˆ์Œ์„ ์•Œ๋ ค์ค€๋‹ค.
  • FIN - Finish
    ์—ฐ๊ฒฐ ํ•ด์ œ. Client/Server๊ฐ„ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. ๋” ์ด์ƒ ์ „๋‹ฌํ•  ์˜๋ฏธ๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ 3-Way Handshake

  • TCP ํ†ต์‹ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ๊ณผ์ •
  • ์–‘์ชฝ(Client/Server) ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก/์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•˜๊ณ , ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฐ˜๋Œ€ ์ชฝ์ด ์ค€๋น„๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • Client์™€ Server๋Š” ํ†ต์‹  ์ค‘์— 3๋ฒˆ์˜ ํŒจํ‚ท์ด ๊ตํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์—, 3-Way Handshake๋ผ๊ณ  ํ•œ๋‹ค.

3-Way HandShake์˜ ๊ณผ์ •

  1. Client๋Š” Server์— ์ ‘์†์„ ์š”์ฒญํ•˜๋Š” SYN์„ ๋ณด๋‚ธ๋‹ค.

    Client โ†’ SYN-SENT / Server โ†’ Wait For Client

  2. Server๋Š” Client๋กœ ๋ถ€ํ„ฐ SYN์„ ๋ฐ›๊ณ , ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๋Š” ACK์™€ SYN Flag๊ฐ€ ์„ค์ •๋œ ํŒจํ‚ท์„ ๋ฐœ์†กํ•œ๋‹ค.

    Client โ†’ SYN-SENT / Server โ†’ SYN-RECEIVED

  3. Client๋Š” Server์—๊ฒŒ ACK๋ณด๋‚ด๊ณ , ์ดํ›„ Client์™€ Server๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

    Client โ†’ ESTABLISHED / Server โ†’ ESTABLISHED


๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ 4-Way HandShake

  • 4-Way HandShake๋Š” ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ์—ฌ๊ธฐ์„œ FIN ํ”Œ๋ž˜๊ทธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

4-Way HandShake์˜ ๊ณผ์ •

  1. Client๊ฐ€ ์—ฐ๊ฒฐ์„ ๋Š๋Š”๋‹ค. ์ด๋•Œ ์„œ๋ฒ„์— FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณด๋‚ธ๋‹ค.

    Client โ†’ FIN_WAIT_1 / Server โ†’ ESTABLISHED

  2. Server๋Š” FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฐ›๊ณ , ํ™•์ธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ ACK๋ฅผ ๋ณด๋‚ด๊ณ  Client์—๊ฒŒ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ CLOSE_WAIT์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ฏธ์ฒ˜ ๋ณด๋‚ด์ง€ ๋ชปํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งˆ์ € ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„์—์„œ close()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

    Client โ†’ FIN_WAIT_2 / Server โ†’ CLOSE_WAIT

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

    Client โ†’ TIME_WAIT / Server โ†’ LAST_ACK

  4. Client๋Š” ํ™•์ธ์˜ ์˜๋ฏธ๋กœ Server์—๊ฒŒ ACK ํŒจํ‚ท์„ ๋ณด๋‚ด์ฃผ๊ณ  CLOSED ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€๋ฉฐ, ACK ํŒจํ‚ท์„ ์ „๋‹ฌ๋ฐ›์€ Server ๋˜ํ•œ CLOSED ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

    Client โ†’ CLOSED / Server โ†’ CLOSED


โ“ Question

3 way handshake ์™€ 4 way handshake์—์„œ ๋‹จ๊ฒŒ์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

Client๊ฐ€ ์ข…๋ฃŒ๋ฅผ ํฌ๋งํ•ด๋„, Server ์ชฝ์—์„œ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ์„ ๊ฒฝ์šฐ, Client์™€ Server์˜ ์ข…๋ฃŒ ์‹œ์ ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Client์—์„œ FIN ํŒจํ‚ท์„ ๋ณด๋ƒˆ์„ ๋•Œ, Server์—์„œ ์ผ๋‹จ ํ™•์ธํ–ˆ์Œ์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ACK ํŒจํ‚ท์„ ์ „๋‹ฌํ•˜๊ณ , ์ดํ›„ Server๊ฐ€ ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋ฅผ ํฌ๋งํ•  ๋•Œ FIN ํŒจํ‚ท์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐํ•  ๋•Œ์™€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ๋•Œ ๋‹จ๊ณ„์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ดˆ๊ธฐ Sequence Number์ธ ISN์„ 0 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด์„œ ์„ค์ •ํ•˜๋Š” ์ด์œ ๋Š” ?

์—ฐ๊ฒฐ์— ์‚ฌ์šฉ๋˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ๋Š” ์œ ํ•œํ•œ ๋ฒ”์œ„ ๋‚ด์• ์„œ ์‚ฌ์šฉ๋˜๊ณ , ์žฌ์‚ฌ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ Client์™€ Server๊ฐ€ ๊ณผ๊ฑฐ์— ์‚ฌ์šฉํ•œ ํฌํŠธ๋ฒˆํ˜ธ๋Š” ์Œ์œผ๋กœ ์กด์žฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. Server ์ชฝ์—์„œ๋Š” ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์ „๋‹ฌ๋ฐ›๋Š” SYN์„ ๋ณด๊ณ  ํŒจํ‚ท์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ๊ณผ๊ฑฐ์— ์žฌ์‚ฌ์šฉ๋œ ํฌํŠธ๋ฒˆํ˜ธ๋กœ ์ธ์ง€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋‚œ์ˆ˜๋กœ ์„ค์ •ํ•œ๋‹ค.

profile
๋‚˜๋„ ์ž˜ํ•˜๊ณ  ์‹ถ๋‹ค..!

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