TCP 3 way handshake & 4 way handshake

Table of Contents

๐Ÿค TCP Handshake

  • ์™œ ๊ทธ๋ƒฅ ๋ณด๋‚ด๋Š” ๊ฒŒ ์•„๋‹ˆ๊ณ  handshake ๊ณผ์ •์„ ๊ฑฐ์น ๊นŒ์š”?

  • ๊ทธ๋Ÿผ ์šฐ์„  TCP ํ†ต์‹ ์ด๋ž€ ๋ญ˜๊นŒ์š”?

  • TCP๋Š” unreliable network์—์„œ reliableํ•œ ์ „์†ก์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

  • ๊ทธ๋ ‡๋‹ค๋ฉด handshake๋Š” reliableํ•œ ์ „์†ก์„ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ทธ๋ ‡๋‹ค๋ฉด ๊ตณ์ด reliableํ•œ ์ „์†ก์ด ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด, handshake๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ์„ฑ๋ฆฝ์„ ํ•ด์•ผํ• ๊นŒ์š”?

๐Ÿ“Œ UDP

  • UDP์˜ ๊ฒฝ์šฐ๋Š” reliableํ•œ ์ „์†ก์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ UDP๋Š” ํ†ต์‹ ์„ ํ•˜๋ ค๋Š” ์ƒ๋Œ€๋ฐฉ์ด ์ง€๊ธˆ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ง€ ์—†๋Š” ์ง€๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ handshake ๊ณผ์ •์„ ํ†ตํ•ด ์ƒ๋Œ€๋ฐฉ์˜ ์ƒํ™ฉ์ด ์–ด๋–ค ์ง€, ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๋Š” ์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, handshake๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ TCP: Transmission Control Protocol

  • ๊ทธ๋ ‡๋‹ค๋ฉด handshake๊ฐ€ ๋ญ๊ธธ๋ž˜ TCP๋Š” reliableํ•œ ์ „์†ก์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ์š”?

  • ์šฐ์„  handshake๋Š” ์—ฐ๊ฒฐ์„ ์„ฑ๋ฆฝํ•  ๋•Œ, ํ•ด์ œํ•  ๋•Œ ๋ชจ๋‘ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

  • ์„ฑ๋ฆฝํ•  ๋•Œ๋Š” ์„ธ๋ฒˆ, ํ•ด์ œํ•  ๋•Œ๋Š” ๋„ค๋ฒˆ ํŒจํ‚ท์„ ์ฃผ๊ณ  ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„ฑ๋ฆฝํ•  ๋•Œ๋Š” 3-way handshake, ํ•ด์ œํ•  ๋•Œ๋Š” 4-way handshake๊ฐ€ ์ผ์–ด๋‚œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿผ ์ผ๋‹จ ์—ฐ๊ฒฐ์„ ์„ฑ๋ฆฝํ•˜๊ธฐ ์œ„ํ•œ 3 way handshake ๊ณผ์ •์„ ๋จผ์ € ์‚ดํŽด๋ด…์‹œ๋‹ค.

3๏ธโƒฃ 3 way handshake: ์—ฐ๊ฒฐ ์„ฑ๋ฆฝ(Connection Establishment)

  • 3 way handshake์˜ ํ•ต์‹ฌ์€ ์„œ๋กœ sequence number๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉด์„œ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ

image-20220921154256651

  • ์šฐ์„  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  ์‹ถ์–ด ํ•˜๋Š” ํ˜ธ์ŠคํŠธ(ํด๋ผ์ด์–ธํŠธ) application์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ(์„œ๋ฒ„)์™€ ์—ฐ๊ฒฐ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  TCP์— ์•Œ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿผ ์ด์ œ client์˜ TCP๊ฐ€ ์„œ๋ฒ„์˜ TCP์™€ connection์„ ์„ฑ๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด 3-way handshake๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. ํด๋ผ์ด์–ธํŠธ ์ชฝ TCP๊ฐ€ ์„œ๋ฒ„ ์ชฝ TCP์—๊ฒŒ SYN segment๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

      segment๋ž€?

      transport layer์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๋‹จ์œ„

      SYN(synchronize) segment?

      TCP ํ—ค๋” ์ค‘์— SYN bit๋ฅผ 1๋กœ ์„ธํŒ…ํ•œ ์„ธ๊ทธ๋จผํŠธ ๋ผ์„œ SYN segement๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

      IMG_9C552B99CBBC-1

      ์ด ๋•Œ segment์—๋Š”, ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํƒํ•œ ๋žœ๋ค sequence number๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

    2. ์„œ๋ฒ„๋Š” SYN segment๋ฅผ ๋ฐ›๊ณ , TCP ๋ฒ„ํผ์™€ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ๋ณ€์ˆ˜๋“ค์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ SYN segment๋ฅผ ์ž˜ ๋ฐ›์•˜๋‹ค๋Š” ์˜๋ฏธ๋กœ TCP ํ—ค๋”์˜ ACK(acknowledgment) ๋ถ€๋ถ„์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ seq # +1๋กœ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.

      ๋˜, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ SYN segment๋ฅผ ๋ณด๋‚ธ ๊ฒƒ์ฒ˜๋Ÿผ ์—ญ์‹œ ์„œ๋ฒ„ ์ž์‹ ์ด ์„ ํƒํ•œ ๋žœ๋ค seq #๋ฅผ ๋‹ด์•„์„œ SYN segment๋กœ์„œ์˜ ์—ญํ• ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด SYN bit๋„ 1๋กœ ์„ธํŒ…๋˜๊ฒ ์ฃ ?

    3. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ SYN ACK segment๋ฅผ ๋ฐ›๊ณ , ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ๋ฒ„ํผ์™€ ๋ณ€์ˆ˜๋ฅผ ์—ญ์‹œ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋˜ ์„œ๋ฒ„์˜ seq #๋ฅผ ์ž˜ ๋ฐ›์•˜๋‹ค๋Š” ์˜๋ฏธ์—์„œ ACK segment๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  • TCP๋Š” ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ์ด๋ฏ€๋กœ, ๊ฐ์ž seq #๋ฅผ ๋ณด๋‚ด๊ณ  ์„œ๋กœ ์ž˜ ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด SYN ACK segment๋ฅผ ์„œ๋กœ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์„œ๋ฒ„๊ฐ€ SYN, ACK๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋ณด๋‚ด๋ฏ€๋กœ 3 way๋กœ handshake๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  • ์œ„ ๊ทธ๋ฆผ์—” ์•ˆ๋‚˜์™€์žˆ์ง€๋งŒ, ์ด์™ธ์—๋„ 3 way handshake๋ฅผ ํ†ตํ•ด ๊ฒฐ์ •๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์˜ค๋Š˜๋‚ ์˜ TCP๋Š” ๋Œ€๋ถ€๋ถ„ flow control์„ ์œ„ํ•ด Stop and Wait ๋ฐฉ์‹ ๋Œ€์‹  Sliding Window ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” sliding window์˜ ํฌ๊ธฐ๋Š” three way handsake๋ฅผ ํ†ตํ•ด ๊ฐ์ž ์ •ํ•œ ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ณ , ๊ทธ ์™ธ์— ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ(RTT)์„ ๊ณ ๋ คํ•ด์„œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๊ฐ€ ์ข‹์ง€ ์•Š์„ ์ˆ˜๋ก ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

      • ์ด ๋•Œ ์ •ํ•œ ์œˆ๋„์šฐ ํฌ๊ธฐ๋Š” ๊ณ„์†ํ•ด์„œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

        # tcpdump ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
        localhost.initiator > localhost.receiver: Flags [S], seq 1487079775, win 65535
        localhost.receiver > localhost.initiator: Flags [S.], seq 3886578796, ack 1487079776, win 65535
        localhost.initiator > localhost.receiver: Flags [.], ack 1, win 6379

4๏ธโƒฃ 4 way handshake: ์—ฐ๊ฒฐ ํ•ด์ œ(Connection Termination)

  • ์—ฐ๊ฒฐ ๋œ ํ›„์—๋Š” ์„œ๋กœ segment๋ฅผ ๋ณด๋‚ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ›„์— ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์—ฐ๊ฒฐ๋œ ๋‘ ํ˜ธ์ŠคํŠธ ์–ด๋””์„œ๋“  ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด 4 way handshake ๊ณผ์ •์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

image-20220921174946086 4way.png

  1. ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ์€ ์ชฝ(์œ„ ์˜ˆ์—์„  ํด๋ผ์ด์–ธํŠธ)์—์„œ header์˜ FIN bit๋ฅผ 1๋กœ ์„ธํŒ…ํ•ด์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  2. ์„œ๋ฒ„๋Š” ์œ„ segment๋ฅผ ๋ฐ›๊ณ , ๋ฐ›์•˜๋‹ค๋Š” ์˜๋ฏธ๋กœ ACK๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. (์ด ๋•Œ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„ ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ์„ ๋ฐ”๋กœ ์ข…๋ฃŒํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค.)

  3. ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณด๋‚ธ ํ›„ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ค€๋น„๊ฐ€ ๋์œผ๋ฏ€๋กœ FIN bit๋ฅผ 1๋กœ ์„ธํŒ…ํ•ด์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  4. ๋งˆ์ง€๋ง‰์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒํ–ˆ๋‹ค๋Š” ๊ฑธ ํ™•์ธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ ACK๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ์•„์ง ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์ง€ ๋ชปํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ๋‘ ํ˜ธ์ŠคํŠธ๋Š” ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋˜ resoure๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

  • wireshark๋กœ ํ™•์ธ

    • ์„œ๋ฒ„๊ฐ€ ๋จผ์ € ์ข…๋ฃŒ๋ฅผ ํ•˜๋ คํ•จ

      ์„œ๋ฒ„ -> ํด๋ผ: FIN ACK

      ํด๋ผ -> ์„œ๋ฒ„: ACK

      ํด๋ผ -> ์„œ๋ฒ„: FIN ACK

      ์„œ๋ฒ„ -> ํด๋ผ: ACK

      img

  • ์ฐธ๊ณ 

    • https://asfirstalways.tistory.com/356

    • https://www.youtube.com/watch?v=DC9FfKSgisg

Last updated