Suhee Coding Archive

[๋„คํŠธ์›Œํฌ] TCP์˜ 3 way handshake์™€ 4 way handshake ๋ณธ๋ฌธ

CS

[๋„คํŠธ์›Œํฌ] TCP์˜ 3 way handshake์™€ 4 way handshake

sueee_y 2022. 12. 20. 22:39

๐Ÿ‘‰TCP ๋™์ž‘ ๋ฐฉ์‹

์†Œ์ผ“ ์ƒ์„ฑ -> 3- way handshake(์—ฐ๊ฒฐ) -> ๋ฐ์ดํ„ฐ ์†ก์‹ , ์ˆ˜์‹  -> 4-way handshake(์—ฐ๊ฒฐ ๋Š๊ธฐ)

 

TCP ๋Š” ๋‘ ํ˜ธ์ŠคํŠธ๊ฐ€ ๊ตํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ์Šน์ธ ๋ฉ”์„ธ์ง€์˜ ํ˜•์‹์„ ์ •์˜ํ•ด , ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐ์„ฑ์žˆ๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ค€ ๊ทœ์•ฝ์ด๋‹ค. 

๋„คํŠธ์›Œํฌ ์„ ๋กœ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ์ด ๋˜๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ทธ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค์ด ๋˜์–ด ์ „๋‹ฌ ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ TCP๋Š” ๋ฐ์ดํ„ฐ ํŒจํ‚ท์— ์ผ๋ จ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ, ๋ฐ์ดํ„ฐ ์†์‹ค์„ ์ฐพ์•„๋‚ด ๊ต์ •ํ•˜๊ณ , ์ˆœ์„œ๋ฅผ ์žฌ์กฐํ•ฉํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณด์ฆ, ์ˆœ์„œ๋ฅผ ๋ณด์žฅ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” 3-way handshake ๊ณผ์ •์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ‘‰3-way handshake

์ •ํ™•ํ•œ ์ „์†ก์„ ๋ณด์žฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ํ•˜๊ธฐ ์ „ ๋…ผ๋ฆฌ์ ์ธ ์ ‘์†์„ ์„ฑ๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด 3-way handshake ๊ณผ์ •์„ ์ง„ํ–‰ํ•œ๋‹ค. 

CLOSED -> ์—ฐ๊ฒฐ ์š”์ฒญ์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋Ÿฐ ์—ฐ๊ฒฐ๋„ ์—†๋Š” ์ƒํƒœ

LISTEN -> ํฌํŠธ๊ฐ€ ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ ๋Œ€๊ธฐ ์ค‘์ธ ์ƒํƒœ

a -> Sequence Number   b-> Acknowledgment Number

ACK -> ๋™๊ธฐํ™” ์š”์ฒญ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์€ Sequence Number์— +1์„ ํ•ด ACK๋กœ ๋Œ๋ ค์ค€๋‹ค.

 

(1) Client์—์„œ Server์—๊ฒŒ SYN(a) ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค. ์ด ๋•Œ Client์˜ ์ƒํƒœ๋Š” SYN์„ ๋ณด๋ƒˆ๋‹ค๋Š” SYN_SENT ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

 

(2) Server์—์„œ๋Š” SYN์„ ๋ฐ›์•˜๋‹ค๋Š” SYN_RECEIVED ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค. ๊ทธ ํ›„ Client์—๊ฒŒ ์ž˜ ๋ฐ›์•˜๋‹ค๋Š” ์‘๋‹ต์˜ ACK(a+1)๊ณผ SYN(b)๋ฅผ ๋ณด๋‚ธ๋‹ค.

 

(3) Client์—์„œ๋Š” ์ƒํ˜ธ ์—ฐ๊ฒฐ์ด ๋œ ์ƒํƒœ์˜ ESTABLISHED๋กœ ๋ฐ”๋€๋‹ค. ๊ทธ ํ›„ Server์—๊ฒŒ ACK(b+1)์„ ๋ณด๋‚ธ๋‹ค. Server์—์„œ๋Š” ACK๋ฅผ ๋ฐ›์€ ํ›„์— ESTABLISHED ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๊ฒŒ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ 3๋ฒˆ์˜ ํ†ต์‹ ์ด ์™„๋ฃŒ๋˜๋ฉด ์—ฐ๊ฒฐ์ด ์„ฑ๋ฆฝ๋œ๋‹ค.

 

๐Ÿ‘‰4-way handshake

(1)์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ TCP ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†์„ ๋Š๊ธฐ ์œ„ํ•ด close( )๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ close( )๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์„œ๋ฒ„์—๊ฒŒ FIN ํŒจํ‚ท์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ FIN ํŒจํ‚ท์— ์‹ค์งˆ์ ์œผ๋กœ๋Š” ACK๋„ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ํด๋ผ์ด์–ธํŠธ๋Š” FIN_WAIT_1 ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

FIN์— ACK๋ฅผ ํฌํ•จํ•˜๋Š” ์ด์œ ๋Š” Half-Close ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์™„์ „ํžˆ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜๋งŒ ์ข…๋ฃŒํ•œ๋‹ค. Half-Close ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข…๋ฃŒ ์š”์ฒญ์ž๊ฐ€ ์ฒ˜์Œ ๋ณด๋‚ด๋Š” FIN ํŒจํ‚ท์— ์Šน์ธ ๋ฒˆํ˜ธ๋ฅผ ํ•จ๊ป˜ ๋‹ด์•„์„œ ๋ณด๋‚ด๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ ์Šน์ธ ๋ฒˆํ˜ธ์˜ ์˜๋ฏธ๋Š” "์ผ๋‹จ ์—ฐ๊ฒฐ์€ ์ข…๋ฃŒํ• ๊ฑด๋ฐ ๊ท€๋Š” ์—ด์–ด๋‘˜๊ฒŒ. ์ด ์Šน์ธ ๋ฒˆํ˜ธ๊นŒ์ง€ ์ฒ˜๋ฆฌํ–ˆ์œผ๋‹ˆ๊นŒ ๋” ๋ณด๋‚ผ ๊ฑฐ ์žˆ์œผ๋ฉด ๋ณด๋‚ด" ๊ฐ€ ๋œ๋‹ค.์ดํ›„ ์ˆ˜์‹ ์ž๊ฐ€ ๋‚จ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณด๋‚ด๊ณ  ๋‚˜๋ฉด ๋‹ค์‹œ ์š”์ฒญ์ž์—๊ฒŒ FIN ํŒจํ‚ท์„ ๋ณด๋ƒ„์œผ๋กœ์จ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๋Š” ์‹ ํ˜ธ FIN๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์š”์ฒญ์ž๋Š” ๊ทธ๋•Œ ๋‚˜๋จธ์ง€ ๋ฐ˜์„ ๋‹ซ์œผ๋ฉด์„œ ์ข€ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

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

 

(3) ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์„œ๋ฒ„์—์„œ ACK๋ฅผ ๋ฐ›์€ ํ›„์— ์„œ๋ฒ„๊ฐ€ ๋‚จ์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋๋‚ด๊ณ  FIN ํŒจํ‚ท์„ ๋ณด๋‚ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค.

 

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

 

(5) ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—์„œ FIN ํŒจํ‚ท์„ ๋ฐ›๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ์„œ๋ฒ„์—๊ฒŒ ACK ์‘๋‹ต์„ ๋ณด๋‚ธ ํ›„์— TIME_WAIT ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€๋ฉฐ ์‹ค์งˆ์ ์ธ ์ข…๋ฃŒ ๊ณผ์ •(CLOSED)์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ TIME_WAIT ์ƒํƒœ๋Š” ์˜๋„์น˜ ์•Š์€ ์—๋Ÿฌ๋กœ ์ธํ•ด ์—ฐ๊ฒฐ์ด ๋ฐ๋“œ๋ฝ์œผ๋กœ ๋น ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ์—๋Ÿฌ๋กœ ์ธํ•ด ์ข…๋ฃŒ๊ฐ€ ์ง€์—ฐ๋˜๋‹ค๊ฐ€ ํƒ€์ž„์ด ์ดˆ๊ณผ๋˜๋ฉด CLOSED๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

 

(6) ์„œ๋ฒ„๋Š” ACK๋ฅผ ๋ฐ›๊ณ  CLOSED ์ƒํƒœ๋กœ  ๋“ค์–ด๊ฐ€ ์ข…๋ฃŒํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ 4๋ฒˆ์˜ ํ†ต์‹ ์ด ์™„๋ฃŒ๋˜๋ฉด ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋œ๋‹ค.

 

๐Ÿ‘‰์ฐธ๊ณ 

  • ํฌํŠธ(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
      • ์—ฐ๊ฒฐ ํ•ด์ œ. ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋” ์ด์ƒ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
Comments