๐Ÿ’ก์—ฐ๊ฒฐ ์ง€ํ–ฅํ˜• TCP ํ”„๋กœํ† ์ฝœ / NAT, Port Forwarding

1 minute read

  1. TCP ํ”„๋กœํ† ์ฝœ
  2. TCP ํ”Œ๋ž˜๊ทธ
  3. TCP๋ฅผ ์ด์šฉํ•œ ํ†ต์‹ ๊ณผ์ •
  4. TCP ์ƒํƒœ ์ „์ด๋„

๐Ÿ“š TCP ํ”„๋กœํ† ์ฝœ

  • ์ „์†ก ์ œ์–ด ํ”„๋กœํ† ์ฝœ(Transmission Control protocol, TCP)์€ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ํ†ต์‹ ์„ ์•ˆ์ •์ ์œผ๋กœ, ์ˆœ์„œ๋Œ€๋กœ, ์—๋Ÿฌ์—†์ด ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • TCP์˜ ์•ˆ์ •์„ฑ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ TCP ๋Œ€์‹  ๋น„์ ‘์†ํ˜• ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ”„๋กœํ† ์ฝœ(User Datagram Protocol)์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • TCP๋Š” UDP๋ณด๋‹ค ์•ˆ์ „ํ•˜์ง€๋งŒ ๋А๋ฆฌ๋‹ค.

TCP ํ”„๋กœํ† ์ฝœ ๊ตฌ์กฐ

Source Port + Destination Port + Sequence Number + Acknowledgement Number + Offset + Reserved + TCP Flags + window + Checksum + Urgent Pointer + TCP Options

Reserved: ์˜ˆ์•ฝ๋œ ํ•„๋“œ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ

window: ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋งŒํผ ๋ณด๋‚ด์•ผํ•˜๋Š”์ง€ ์•Œ๋ ค์คŒ

Urgent Pointer:

๐Ÿฌ TCP ํ”Œ๋ž˜๊ทธ | C E U A P R S F

TCP์˜ ์ฃผ๋œ ๊ธฐ๋Šฅ์ด ์ด ํ”Œ๋ž˜๊ทธ์—์„œ ๋‚˜๋ˆ ์ง

Urgent: urgent flag ๊ธด๊ธ‰ ๋น„ํŠธ (์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Œ) 1์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๋†’์Œ โ†’ urgent Pointer์™€ ์„ธํŠธ์ž„

Ack: ์—ํฌ ๋น„ํŠธ (์Šน์ธํ•ด์คŒ)

Push: Push ๋น„ํŠธ (์ƒ๊ด€์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด์คŒ)

Reset: ์ดˆ๊ธฐํ™” ๋น„ํŠธ (๋ฆฌ์…‹ํ•˜์ž!)

Syn: ์‹ฑํฌ ๋น„ํŠธ (์—ฐ๊ฒฐ ํ”Œ๋ž˜๊ทธ)

Fin: ์ข…๋ฃŒ ๋น„ํŠธ (์—ฐ๊ฒฐ์„ ๋Š๋Š” ํ”Œ๋ ˆ๊ทธ)

โšก๏ธ TCP๋ฅผ ์ด์šฉํ•œ ํ†ต์‹ ๊ณผ์ •

TCP๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•  ๋–„ ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋จผ์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ  (SYN)
  2. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๋Š” ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ  (SYN + ACK)
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์ˆ˜๋ฝํ•˜๋Š” ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค. (ACK)

์ด ๊ณผ์ •์„ 3Way Handshake๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

TCP๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•  ๋•Œ ๋‹จ์ˆœํžˆ TCP ํŒจํ‚ท๋งŒ์„ ์บก์Аํ™”ํ•ด์„œ ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ํฌํ•จํ•œ ํŒจํ‚ท์„ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ์˜ ์ผ์ •ํ•œ ๊ทœ์น™

  1. ๋ณด๋‚ธ ์ชฝ์—์„œ ๋˜ ๋ณด๋‚ผ ๋•Œ๋Š” SEQ ๋ฒˆํ˜ธ์™€ ACK ๋ฒˆํ˜ธ๊ฐ€ ๊ทธ๋Œ€๋กœ๋‹ค.
  2. ๋ฐ›๋Š” ์ชฝ์—์„œ SEQ๋ฒˆํ˜ธ๋Š” ๋ฐ›์€ ACK ๋ฒˆํ˜ธ๊ฐ€ ๋œ๋‹ค.
  3. ๋ฐ›๋Š” ์ชฝ์—์„œ ACK ๋ฒˆํ˜ธ๋Š” ๋ฐ›์€ SEQ๋ฒˆํ˜ธ + ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ

์—ฐ๊ฒฐ ํ•  ๋•Œ๋Š” 3ํ•ธ๋“œ ์ข…๋ฃŒ ํ•  ๋•Œ๋Š” 4ํ•ธ๋“œ

โšก๏ธ TCP ์ƒํƒœ์ „์ด๋„

TCP์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํƒœ ๋ณ€ํ™”

CLOSED

LISTEN: ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉ ์ค‘ (ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋“ฃ๊ณ  ์žˆ๋Š” ์ƒํƒœ)

SYN_SENT

SYN_RCVD

ESTABLISHED (์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋œ ์ƒํƒœ)

FIN_WAIT_1

FIN_WAIT_2

CLOSING

TIME_WAIT

CLOSE_WAIT

LAST_ACK

๐Ÿ”— NAT์™€ ํฌํŠธํฌ์›Œ๋”ฉ

  1. NAT๋ž€?
  2. ํฌํŠธํฌ์›Œ๋”ฉ์ด๋ž€?

NAT

NAT(Network Address Translation, ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ณ€ํ™˜)์€ IP ํŒจํ‚ท์˜ TCP/UDP ํฌํŠธ ์ˆซ์ž์™€ ์†Œ์Šค ๋ฐ ๋ชฉ์ ์ง€์˜ IP ์ฃผ์†Œ ๋“ฑ์„ ์žฌ๊ธฐ๋กํ•˜๋ฉด์„œ ๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ธฐ์ˆ ์„ ๋งํ•œ๋‹ค.

ํŒจํ‚ท์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— IP๋‚˜ TCP/UDP์˜ ์ฒดํฌ์„ฌ(checksum)๋„ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์–ด ์žฌ๊ธฐ๋ก ํ•ด์•ผํ•œ๋‹ค.

NAT๋ฅผ ์ด์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋Œ€๊ฐœ ์‚ฌ์„ค ๋„คํŠธ์›Œํฌ์— ์†ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ˜ธ์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ๊ณต์ธ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋„ท์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๊ผญ ์‚ฌ์„ค IP๋ฅผ ๊ณต์ธ IP๋กœ ๋ณ€ํ™˜ ํ•˜๋Š” ๋ฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์€ ์•„๋‹ˆ๋‹ค.

ํฌํŠธํฌ์›Œ๋”ฉ

ํฌํŠธ ํฌ์›Œ๋”ฉ ๋˜๋Š” ํฌํŠธ ๋งคํ•‘(port mapping)์€ ํŒจํ‚ท์ด ๋ผ์šฐํ„ฐ๋‚˜ ๋ฐฉํ™”๋ฒฝ๊ณผ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์žฅ๋น„๋ฅผ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ๋™์•ˆ ํŠน์ • IP์ฃผ์†Œ์™€ ํฌํŠธ ๋ฒˆํ˜ธ์˜ ํ†ต์‹  ์š”์ฒญ์„ ๋‹ค๋ฅธ IP์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ณ€ํ™˜(NAT)์˜ ์‘์šฉ์ด๋‹ค.

์ด ๊ธฐ๋ฒ•์€ ๊ฒŒ์ดํŠธ์›จ์ด(์™ธ๋ถ€๋ง)์˜ ๋ฐ˜๋Œ€์ชฝ์— ์œ„์น˜ํ•œ ์‚ฌ์„ค๋„คํŠธ์›Œํฌ์— ์ƒ์ฃผํ•˜๋Š” ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ”ํžˆ ์‚ฌ์šฉ๋œ๋‹ค.