์•Œ์•„๋ณผ ๋‚ด์šฉ

  1. TCP ํŒจํ‚ท ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ
  2. TCP ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ๋ฐ ์ข…๋ฃŒ ๊ณผ์ •
  3. UDP ํŒจํ‚ท ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ

TCP ํ†ต์‹  ๋‹จ๊ณ„์™€ ์„ธ๊ทธ๋จผํŠธ ๊ตฌ์กฐ

  • TCP ํ†ต์‹ ์˜ ์„ธ ๋‹จ๊ณ„
    1. ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ
    2. ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  โ† ์žฌ์ „์†ก์„ ํ†ตํ•œ ์˜ค๋ฅ˜ ์ œ์–ด, ํ๋ฆ„ ์ œ์–ด, ํ˜ผ์žก ์ œ์–ด
    3. ์—ฐ๊ฒฐ ์ข…๋ฃŒ
๋„คํŠธ์›Œํฌ ์ฐธ์กฐ ๋ชจ๋ธ ๋ณต์Šต

MSS์™€ TCP ์„ธ๊ทธ๋จผํŠธ1 ๊ตฌ์กฐ
MSS (maximum segment size) : TCP๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŽ˜์ด๋กœ๋“œ ํฌ๊ธฐ
  • MSS ํฌ๊ธฐ ๊ณ ๋ คํ•  ๋•Œ TCP ํ—ค๋” ํฌ๊ธฐ๋Š” ์ œ์™ธ (MTU์™€์˜ ์ฐจ์ด)
TCP ์„ธ๊ทธ๋จผํŠธ ํ—ค๋”
  • ์†ก์‹ ์ง€/์ˆ˜์‹ ์ง€ ํฌํŠธ
  • ์ˆœ์„œ ๋ฒˆํ˜ธ : ์†ก์ˆ˜์‹  ๋˜๋Š” ์„ธ๊ทธ๋จผํŠธ์˜ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๊ทธ๋จผํŠธ ๋ฐ์ดํ„ฐ์˜ ์ฒซ ๋ฐ”์ดํŠธ์— ๋ถ€์—ฌ๋˜๋Š” ๋ฒˆํ˜ธ
  • ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ : ์ƒ๋Œ€ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ณด๋‚ธ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋‹ค์Œ์œผ๋กœ ์ˆ˜์‹ ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ์ˆœ์„œ ๋ฒˆํ˜ธ ๋ช…์‹œ
  • ์ œ์–ด ๋น„ํŠธ : ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ. ํ˜„์žฌ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€ ์ •๋ณด ๋‚˜ํƒ€๋ƒ„
  • ์œˆ๋„์šฐ : ์ˆ˜์‹  ์œˆ๋„์šฐ2์˜ ํฌ๊ธฐ

์ œ์–ด ๋น„ํŠธ
  • 8๋น„ํŠธ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๊ฐ ์ž๋ฆฌ ๋น„ํŠธ๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์˜๋ฏธ
  • ๋Œ€ํ‘œ์ ์ธ 3๊ฐœ์˜ ์ œ์–ด ๋น„ํŠธ
    • ACK : ์„ธ๊ทธ๋จผํŠธ์˜ ์Šน์ธ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋น„ํŠธ
    • SYN : ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฆฝํ•˜๊ธฐ ์œ„ํ•œ ๋น„ํŠธ
    • FIN : ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•œ ๋น„ํŠธ
  • ๊ฐ ๋น„ํŠธ๊ฐ€ 1๋กœ ์„ค์ •๋œ ๋น„ํŠธ๋ฅผ ํ•ด๋‹น ๋น„ํŠธ ์ด๋ฆ„์„ ๋ถ™์—ฌ์„œ โ€˜ACK ์„ธ๊ทธ๋จผํŠธโ€™, โ€˜SYN ์„ธ๊ทธ๋จผํŠธโ€™ , โ€˜FIN ์„ธ๊ทธ๋จผํŠธโ€™๋ผ๊ณ  ํ•จ
์ˆœ์„œ ๋ฒˆํ˜ธ์™€ ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ
์ˆœ์„œ ๋ฒˆํ˜ธ
  • ์ดˆ๊ธฐ ์ˆœ์„œ ๋ฒˆํ˜ธ (ISN, Initial Sequence Number) : ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ๋‹จ๊ณ„, ์ฆ‰ SYN ํ”Œ๋ž˜๊ทธ๊ฐ€ 1๋กœ ์„ค์ •๋œ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๊ฐ–๋Š” ๋ฌด์ž‘์œ„๋กœ ์„ค์ •๋œ ์ˆœ์„œ ๋ฒˆํ˜ธ

  • ์ „์†ก ๊ณ„์ธต์ด ์‘์šฉ ๊ณ„์ธต์œผ๋กœ๋ถ€ํ„ฐ 1900 ๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ  ์ด๋•Œ MSS๋Š” 500๋ฐ”์ดํŠธ๋ผ๊ณ  ํ•˜์ž

    • ๊ทธ๋Ÿฌ๋ฉด 500/500/500/400 ๊ฐ™์ด 4๊ฐœ์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ์ชผ๊ฐค ์ˆ˜ ์žˆ์Œ
    • ์ฒซ๋ฒˆ์งธ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ โ€˜์ดˆ๊ธฐ ์ˆœ์„œ ๋ฒˆํ˜ธ (ISN)โ€˜์„ ๋ถ€์—ฌ๋ฐ›๊ณ  ๊ทธ ๋‹ค์Œ ์„ธ๊ทธ๋จผํŠธ ๋“ค์€ โ€˜์ดˆ๊ธฐ ์ˆœ์„œ ๋ฒˆํ˜ธ + ์†ก์‹ ํ•œ ๋ฐ”์ดํŠธ ์ˆ˜โ€™ ํฌ๊ธฐ์˜ ์ˆœ์„œ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๊ฒŒ ๋จ

ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ
  • ์ˆ˜์‹ ์ž๊ฐ€ ๋‹ค์Œ์œผ๋กœ ๋ฐ›๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ โ€˜์ˆ˜์‹ ํ•œ ์ˆœ์„œ ๋ฒˆํ˜ธ + 1โ€™
  • ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ ๊ฐ’์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ACK ํ”Œ๋ž˜๊ทธ๋ฅผ 1๋กœ ์„ค์ •ํ•ด์•ผ ํ•จ
    • ํ˜ธ์ŠคํŠธ B๊ฐ€ ํ˜ธ์ŠคํŠธ A๋กœ๋ถ€ํ„ฐ ์ˆœ์„œ ๋ฒˆํ˜ธ 8000์ธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ˆ˜์‹ 
    • ํ˜ธ์ŠคํŠธ B๋Š” ํ˜ธ์ŠคํŠธ ACK๋ฅผ 1๋กœ ๋ช…์‹œํ•˜๊ณ  ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ๋กœ 8001์„ ๋ช…์‹œํ•œ ์„ธ๊ทธ๋จผํŠธ ์ „์†ก

TCP ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ๊ณผ ์ข…๋ฃŒ

์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ : Three-way handshake
  • ํ˜ธ์ŠคํŠธ A, B๊ฐ€ ์†ก์ˆ˜์‹  ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฆฝํ•ด์•ผ ํ•จ
    1. Aโ†’B : SYN ์„ธ๊ทธ๋จผํŠธ ์†ก์‹ 
      • 1๋กœ ์„ค์ •๋œ SYN ๋น„ํŠธ + ํ˜ธ์ŠคํŠธ A์˜ ์ดˆ๊ธฐ ์ˆœ์„œ ๋ฒˆํ˜ธ
      • Active open ๋‹จ๊ณ„ : ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ
    2. Bโ†’A : SYN, ACK ์„ธ๊ทธ๋จผํŠธ ์†ก์‹ 
      • 1๋กœ ์„ค์ •๋œ SYN, ACK ๋น„ํŠธ + ํ˜ธ์ŠคํŠธ B์˜ ์ดˆ๊ธฐ ์ˆœ์„œ ๋ฒˆํ˜ธ + A๊ฐ€ ์ „์†กํ•œ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ
      • Passive open ๋‹จ๊ณ„ : A์˜ ์š”์ฒญ์„ ํ™•์ธํ–ˆ๊ณ  ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•˜๋ผ๋Š” ์˜๋ฏธ
    3. Aโ†’B : ACK ์„ธ๊ทธ๋จผํŠธ ์†ก์‹ 
      • 1๋กœ ์„ค์ •๋œ ACK ๋น„ํŠธ + ํ˜ธ์ŠคํŠธ A์˜ ๋‹ค์Œ ์ˆœ์„œ ๋ฒˆํ˜ธ + B๊ฐ€ ์ „์†กํ•œ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ
์—ฐ๊ฒฐ ์ข…๋ฃŒ : Four-way handshake
  • ๋‘ ํ˜ธ์ŠคํŠธ๊ฐ€ ๊ฐ์ž ํ•œ ๋ฒˆ์”ฉ FIN, ACK ์„ธ๊ทธ๋จผํŠธ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ์ข…๋ฃŒ
    1. Aโ†’B : FIN ์„ธ๊ทธ๋จผํŠธ ์†ก์‹ 
      • Active close ๋‹จ๊ณ„ : ์—ฐ๊ฒฐ ๋Š๋Š”๋‹ค๋Š” ์˜๋ฏธ
    2. Bโ†’A : ACK ์„ธ๊ทธ๋จผํŠธ ์†ก์‹ 
      • A๊ฐ€ ์ „์†กํ•œ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ
      • Passive close ๋‹จ๊ณ„ : ํ™•์ธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ
    3. Bโ†’A : FIN ์„ธ๊ทธ๋จผํŠธ ์†ก์‹ 
      • ์ด์ œ ์—ฐ๊ฒฐ ๋Š๋Š”๋‹ค๋Š” ์˜๋ฏธ
    4. Aโ†’B : ACK ์„ธ๊ทธ๋จผํŠธ ์†ก์‹ 
      • B๊ฐ€ ์ „์†กํ•œ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ
      • ํ™•์ธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ

TCP ์ƒํƒœ

  • Stateful ํ”„๋กœํ† ์ฝœ : TCP๋Š” โ€˜์—ฐ๊ฒฐํ˜• ํ†ต์‹ โ€™๊ณผ โ€˜์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹ โ€™์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ โ€˜์ƒํƒœโ€™ ์œ ์ง€
    • ํฌ๊ฒŒ 3์ข…๋ฅ˜์˜ ์ƒํƒœ๋กœ ๋ถ„๋ฅ˜
    • ์ƒํƒœ ํ™•์ธ : netstat in macOS
์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋˜์ง€ ์•Š์€ ์ƒํƒœ
  • CLOSED : ์•„๋ฌด๋Ÿฐ ์—ฐ๊ฒฐ ์—†์Œ
  • LISTEN : ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ์ƒํƒœ
    • ์ผ๋ฐ˜์ ์ธ Passive open ํ˜ธ์ŠคํŠธ (์„œ๋ฒ„)๋Š” LISTEN ์ƒํƒœ ์œ ์ง€ํ•˜๋ฉฐ SYN ์„ธ๊ทธ๋จผํŠธ ๋Œ€๊ธฐ
์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ์ƒํƒœ
  • SYN-SENT : ์•กํ‹ฐํ”„ ์˜คํ”ˆ ํ˜ธ์ŠคํŠธ๊ฐ€ SYN+ACK ์„ธ๊ทธ๋จผํŠธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • SYN-RECEIVED : ํŒจ์‹œ๋ธŒ ์˜คํ”ˆ ํ˜ธ์ŠคํŠธ๊ฐ€ SYN+ACK ์„ธ๊ทธ๋จผํŠธ ๋ณด๋‚ด๊ณ  ACK ์„ธ๊ทธ๋จผํŠธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • ESTABLISHED : ์—ฐ๊ฒฐ ํ™•๋ฆฝ. ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
์—ฐ๊ฒฐ ์ข…๋ฃŒ ์ƒํƒœ
  • FIN-WAIT-1 : FIN ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ธ ์•กํ‹ฐ๋ธŒ ํด๋กœ์ฆˆ ํ˜ธ์ŠคํŠธ ์ƒํƒœ
  • CLOSE-WAIT : ACK ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ธ ํŒจ์‹œ๋ธŒ ํด๋กœ์ฆˆ ํ˜ธ์ŠคํŠธ ์ƒํƒœ
  • FIN-WAIT-2 : FIN-WAIT-1 ์ƒํƒœ์—์„œ ACK ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฐ›์€ ์•กํ‹ฐ๋ธŒ ํด๋กœ์ฆˆ ํ˜ธ์ŠคํŠธ ์ƒํƒœ
  • LAST-ACK : CLOSE-WAIT ์ƒํƒœ์—์„œ FIN ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ด๊ณ  ACK ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • TIME-WAIT : ๋งˆ์ง€๋ง‰ ACK ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ „์†กํ•œ ๋’ค ์•กํ‹ฐ๋ธŒ ํด๋กœ์ฆˆ ํ˜ธ์ŠคํŠธ ์ƒํƒœ
    • ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„ CLOSED
    • ํŒจ์‹œ๋ธŒ ํด๋กœ์ฆˆ ํ˜ธ์ŠคํŠธ๋Š” ํ•ด๋‹น ACK ์„ธ๊ทธ๋จผํŠธ ๋ฐ›์œผ๋ฉด CLOSED
  • CLOSING : ๋™์‹œ์— ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋ ค ํ•  ๋•Œ ์ „์ด๋˜๋Š” ์ƒํƒœ
    • ์–‘์ชฝ ๋‹ค FIN ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฐ›๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ACK ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
    • ACK ์„ธ๊ทธ๋จผํŠธ ์ˆ˜์‹ ํ•˜๋ฉด ๊ฐ์ž TIME-WAIT ๋˜๊ณ  ์ข…๋ฃŒ


UDP ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๊ตฌ์กฐ

  • ํŠน์ง•

    • ๋น„์—ฐ๊ฒฐ์„ฑ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ํ”„๋กœํ† ์ฝœ
    • ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ๋ฐ ํ•ด์ œ, ์žฌ์ „์†ก์„ ํ†ตํ•œ ์˜ค๋ฅ˜ ์ œ์–ด, ํ˜ผ์žก ์ œ์–ด, ํ๋ฆ„ ์ œ์–ด X
    • Stateless ํ”„๋กœํ† ์ฝœ
    • ์ ์€ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ํŒจํ‚ท ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์‹ค์‹œ๊ฐ„์„ฑ ๊ฐ•์กฐ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ
  • ๊ตฌ์กฐ

    • ์†ก์‹ ์ง€/์ˆ˜์‹ ์ง€ ํฌํŠธ
    • ๊ธธ์ด : ํ—ค๋”๋ฅผ ํฌํ•จํ•œ UDP ๋ฐ์ดํ„ฐ๊ทธ๋žจ์˜ ๋ฐ”์ดํŠธ
    • ์ฒดํฌ์„ฌ : ๋ฐ์ดํ„ฐ๊ทธ๋žจ ์ „์†ก ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฒ€์‚ฌ
      • ์ˆ˜์‹ ์ง€๊ฐ€ ๊ฒ€์‚ฌํ–ˆ์„ ๋•Œ ์ด ํ•„๋“œ ๊ฐ’์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ๊ธฐ
      • ์‹ ๋ขฐ์„ฑ/๋น„์‹ ๋ขฐ์„ฑ์€ โ€˜์ˆ˜์‹ ์ง€๊นŒ์ง€ ์ž˜ ๋„์ฐฉํ–ˆ๋Š”์ง€โ€™๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ด๊ฒƒ๊ณผ๋Š” ๋ฌด๊ด€

  • ์ „์†ก๋ฐฉ์‹

    • ์ˆ˜์‹ ์ง€์— ํŒจํ‚ท๋“ค์„ ๋น ๋ฅด๊ฒŒ ๋˜์ง€๋Š” ๊ฒƒ
    • ํŒจํ‚ท ์†์‹ค ๋ฐ ์ˆœ์„œ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ

Footnotes

  1. ์ „์†ก ๊ณ„์ธต์—์„œ์˜ PDU (Protocol Data Unit) โ†ฉ

  2. ํ•œ ๋ฒˆ์— ์ˆ˜์‹ ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘ โ†ฉ