Skip to content

Latest commit

ย 

History

History
41 lines (31 loc) ยท 5.02 KB

File metadata and controls

41 lines (31 loc) ยท 5.02 KB

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

์›น ์„œ๋น„์Šค ๋™์ž‘ ๋ฐฉ์‹์„ ๋ณด๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ url์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜์—ฌ DNS์—์„œ IP ์ฃผ์†Œ๋ฅผ ์–ป์–ด์˜ค๊ณ , ๊ทธ๋ ‡๊ฒŒ ์–ป์–ด์˜จ IP ์ฃผ์†Œ๋ฅผ ์›น ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ๋ณ€ํ•˜์—ฌ TCP ํ†ต์‹ ์„ ํ†ตํ•ด ์›น ์„œ๋ฒ„์™€ ์ฃผ๊ณ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ TCP ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด 3-way handshake๋กœ ์ ‘์†์„, 4-way handshake๋กœ ์ ‘์† ํ•ด์ œ๋ฅผ ํ•ด์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ TCP ๋™์ž‘ ๋ฐฉ์‹์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด 3-way, 4-way handshake ๊ณผ์ •์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Socket ์ƒ์„ฑ

Client๋Š” ์šด์˜์ฒด์ œ์— socket( ) ์‹œ์Šคํ…œ ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ์†Œ์ผ“์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ๋Š” ์†Œ์ผ“์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹นํ•˜๊ณ , ์†Œ์ผ“ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

3-way handshake

  • Client๋Š” Server์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 3-way handshake๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” Client์™€ Server๋Š” ๋ชจ๋‘ ์„œ๋กœ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋จผ์ € ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋จผ์ € ์‹œ๋„ํ•œ ์š”์ฒญ์ž๋ฅผ Client๋กœ, ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ฐ›์€ ์ˆ˜์‹ ์ž๋ฅผ Server์ชฝ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ๋ณด์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์ด๋•Œ ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ a๋Š” Sequence Number, b๋Š” Acknowledgment Number๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ACK : ๋™๊ธฐํ™” ์š”์ฒญ์— ๋Œ€ํ•œ ๋‹ต๋ณ€ - Client์˜ Sequence Number์— +1์„ ํ•˜์—ฌ ACK๋กœ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

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

4-way handshake

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

  1. FIN (+ACK) ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ TCP ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†์„ ๋Š๊ธฐ ์œ„ํ•ด close( )๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ close( )๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์„œ๋ฒ„์—๊ฒŒ FIN ํŒจํ‚ท์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ FIN ํŒจํ‚ท์— ์‹ค์งˆ์ ์œผ๋กœ๋Š” ACK๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ํด๋ผ์ด์–ธํŠธ๋Š” FIN_WAIT_1 ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
  2. ACK ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ๋ณด๋‚ด๊ณ  CLOSE_WAIT ์ƒํƒœ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„์ง ๋‚จ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋งˆ์ € ์ „์†ก์„ ๋งˆ์นœ ํ›„์— close( )๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. FIN_WAIT_2 ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์„œ๋ฒ„์—์„œ ACK๋ฅผ ๋ฐ›์€ ํ›„์— ์„œ๋ฒ„๊ฐ€ ๋‚จ์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋๋‚ด๊ณ  FIN ํŒจํ‚ท์„ ๋ณด๋‚ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  4. FIN ์„œ๋ฒ„๋Š” ์ด์ œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚ฌ๋‹ค๊ณ  ์ข…๋ฃŒ์— ํ•ฉ์˜ ํ•œ๋‹ค๋Š” ๋œป์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ FIN ํŒจํ‚ท์„ ๋ณด๋‚ธ ํ›„์— ์Šน์ธ ๋ฒˆํ˜ธ๋ฅผ ๋ณด๋‚ด์ค„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” LAST_ACK ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
  5. ACK ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—์„œ FIN ํŒจํ‚ท์„ ๋ฐ›๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ์„œ๋ฒ„์—๊ฒŒ ACK ์‘๋‹ต์„ ๋ณด๋‚ธ ํ›„์— TIME_WAIT ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€๋ฉฐ ์‹ค์งˆ์ ์ธ ์ข…๋ฃŒ ๊ณผ์ •(CLOSED)์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ TIME_WAIT ์ƒํƒœ๋Š” ์˜๋„์น˜ ์•Š์€ ์—๋Ÿฌ๋กœ ์ธํ•ด ์—ฐ๊ฒฐ์ด ๋ฐ๋“œ๋ฝ์œผ๋กœ ๋น ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ์—๋Ÿฌ๋กœ ์ธํ•ด ์ข…๋ฃŒ๊ฐ€ ์ง€์—ฐ๋˜๋‹ค๊ฐ€ ํƒ€์ž„์ด ์ดˆ๊ณผ๋˜๋ฉด CLOSED๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
  6. CLOSED ์„œ๋ฒ„๋Š” ACK๋ฅผ ๋ฐ›๊ณ  CLOSED ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€ ์ข…๋ฃŒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Reference