๋“ค์–ด๊ฐ€๋ฉฐ

๊ณผ๊ฑฐ ๋ฉด์ ‘ ๊ณผ์ •์—์„œ ๋ฐ›์•˜๋˜ TCP ์งˆ๋ฌธ์— ๋Œ€ํ•ด ๋‹ค์‹œ ํšŒ๊ณ ํ•˜๊ณ  ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

TCP(Transmission Control Protocol)๋ž€?

  • ์ „์†ก ๊ณ„์ธต(Transport Layer)์—์„œ ์‚ฌ์šฉํ•˜๋Š” Protocol.

TCP๋Š” ๋ฌด์Šจ ๊ธฐ๋Šฅ์ด ์žˆ์„๊นŒ์š”?

์‹ ๋ขฐ์„ฑ์ด ๋†’์€ ์ „์†ก(Reliable transmission)

  • Dupack-based retransmission
    • ์ •์ƒ์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” ACK ๊ฐ’์ด ์—ฐ์†์ ์œผ๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ ACK๊ฐ’์ด ์ค‘๋ณต์œผ๋กœ ์˜ฌ ๊ฒฝ์šฐ ํŒจํ‚ท ์ด์ƒ์„ ๊ฐ์ง€ํ•˜๊ณ  ์žฌ์ „์†ก์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • Timeout-based retransmission
    • ์ผ์ •์‹œ๊ฐ„๋™์•ˆ ACK ๊ฐ’์ด ์ˆ˜์‹ ์„ ๋ชปํ•  ๊ฒฝ์šฐ ์žฌ์ „์†ก์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

ํ๋ฆ„ ์ œ์–ด(Flow control)

  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ์ˆ˜์‹ ์ž์˜ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ
  • ์ˆ˜์‹ ์ž๊ฐ€ ์œˆ๋„์šฐ ๊ฐ’์„ ํ†ตํ•ด ์ˆ˜์‹ ๋Ÿ‰์„ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—๋Ÿฌ ๊ฐ์ง€(Error detection)

  • ๋ฐ์ดํ„ฐ ๋ณ€ํ˜•, ๋ถ„์‹ค ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€
  • Checksum์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณ€ํ˜• ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํ˜ผ์žก ์ œ์–ด(Congestion control)

  • ๋„คํŠธ์›Œํฌ ๋‚ด์˜ ํŒจํ‚ท ์ˆ˜๊ฐ€ ๋„˜์น˜๊ฒŒ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ
  • ์ •๋ณด์˜ ์†Œํ†ต๋Ÿ‰์ด ๊ณผ๋‹คํ•˜๋ฉด ํŒจํ‚ท์„ ์กฐ๊ธˆ๋งŒ ์ „์†กํ•˜์—ฌ ํ˜ผ์žก ๋ถ•๊ดด ํ˜„์ƒ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.

TCP Header์—๋Š” ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?

  • Source port / Destination port
  • Sequence number
    • SYN = 1 : ์ดˆ๊ธฐ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๊ฐ€ ๋œ๋‹ค. ACK ๋ฒˆํ˜ธ๋Š” ์ด ๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’
    • SYN = 0 : ํ˜„์žฌ ์„ธ์…˜์˜ ์ด ์„ธ๊ทธ๋จผํŠธ ๋ฐ์ดํ„ฐ์˜ ์ตœ์ดˆ ๋ฐ”์ดํŠธ ๊ฐ’์˜ ๋ˆ„์  ์‹œํ€€์Šค ๋ฒˆํ˜ธ
  • Acknowledgment number
    • ACK = 1 : ํ•„๋“œ์˜ ๊ฐ’์€ ์ˆ˜์‹ ์ž๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ๋‹ค์Œ ์‹œํ€€์Šค ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
  • Header Length
    • 32-bit ์›Œ๋“œ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ TCP ํ—ค๋” ํฌ๊ธฐ๊ฐ’์ด๋‹ค.
  • Reserved
    • ๋ฏธ๋ž˜์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚จ๊ฒจ๋‘” ์˜ˆ๋น„ ํ•„๋“œ์ด๋ฉฐ 0์œผ๋กœ ์ฑ„์›Œ์ ธ์•ผ ํ•œ๋‹ค.
  • Flags
    • NS : ECN-nonce ์€ํ ๋ณดํ˜ธ
    • CWR : ํ˜ธ์ŠคํŠธ๊ฐ€ ECE ํ”Œ๋ž˜๊ทธ๊ฐ€ ํฌํ•จ๋œ TCP ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ˆ˜์‹ ํ–ˆ์œผ๋ฉฐ ํ˜ผ์žก ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์‘๋‹ตํ–ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ์—ญํ• .
    • ECE : ECN-Echo๋Š” ๋‹ค์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
      • SYN = 1 : TCP ์ƒ๋Œ€๊ฐ€ ๋ช…์‹œ์  ํ˜ผ์žก ํ†ต์ง€(Explicit Congestion Notification, ECN)๊ฐ€ ๊ฐ€๋Šฅํ•จ์„ ์˜๋ฏธ.
      • SYN = 0 : IP ํ—ค๋” ์…‹์— ํ˜ผ์žก ๊ฒฝํ—˜(Congestion Experienced) ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํŒจํ‚ท์ด ์ •์ƒ์ ์ธ ์ „์†ก ์ค‘์— ์ˆ˜์‹ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ.
    • URG : Urgent pointer ํ•„๋“œ์˜ ๊ฐ’์ด ์œ ํšจํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ACK : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์ตœ์ดˆ์˜ SYN ํŒจํ‚ท ์ดํ›„์— ์ „์†ก๋˜๋Š” ๋ชจ๋“  ํŒจํ‚ท์€ ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • PSH : ์ˆ˜์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฒ„ํผ๋ง๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘ธ์‹œํ•ด ์ค„์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค.
    • RST : Connection Reset
    • SYN : ๋™๊ธฐํ™” ์‹œํ€€์Šค ๋ฒˆํ˜ธ. ์–‘์ชฝ์ด ๋ณด๋‚ธ ์ตœ์ดˆ์˜ ํŒจํ‚ท์—๋งŒ ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • FIN : ๋‚จ์€ ์†ก์‹ ์ธก ๋ฐ์ดํ„ฐ ์—†์Œ
  • Window size
    • ์ˆ˜์‹  ์œˆ๋„์˜ ํฌ๊ธฐ.
    • 0์ด๋ฉด ์†ก์‹  ํ”„๋กœ์„ธ์Šค์˜ ์ „์†ก ์ค‘์ง€.
  • Checksum
    • ํ—ค๋” ๋ฐ ๋ฐ์ดํ„ฐ์˜ ์—๋Ÿฌ ํ™•์ธ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” 16 ๋น„ํŠธ
  • Urgent pointer
    • URG ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ, ์ด 16 ๋น„ํŠธ ํ•„๋“œ๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋กœ๋ถ€ํ„ฐ์˜ ์˜คํ”„์…‹์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ์˜คํ”„์…‹์ด ๋งˆ์ง€๋ง‰ ๊ธด๊ธ‰ ๋ฐ์ดํ„ฐ ๋ฐ”์ดํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • Options

TCP Connection(3-way handshake) - Disconnection(4-way handshake)

TCP Connection(3-way handshake)

  1. ๋จผ์ € open()์„ ์‹คํ–‰ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ SYN์„ ๋ณด๋‚ด๊ณ  SYN_SENT ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” SYN_RCVD ์ƒํƒœ๋กœ ๋ฐ”๊พธ๊ณ  SYN๊ณผ ์‘๋‹ต ACK๋ฅผ ๋ณด๋‚ธ๋‹ค.
  3. SYN๊ณผ ์‘๋‹ต ACK์„ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” ESTABLISHED ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์„œ๋ฒ„์—๊ฒŒ ์‘๋‹ต ACK๋ฅผ ๋ณด๋‚ธ๋‹ค.
  4. ์‘๋‹ต ACK๋ฅผ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ESTABLISHED ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

TCP Disconnection(4-way handshake)

  1. ๋จผ์ € close()๋ฅผ ์‹คํ–‰ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ FIN์„ ๋ณด๋‚ด๊ณ  FIN_WAIT1 ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” CLOSE_WAIT์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‘๋‹ต ACK๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๋™์‹œ์— ํ•ด๋‹น ํฌํŠธ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—๊ฒŒ close()๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  3. ACK๋ฅผ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒํƒœ๋ฅผ FIN_WAIT2๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  4. close() ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ข…๋ฃŒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  FIN์„ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด LAST_ACK ์ƒํƒœ๋กœ ๋ฐ”๊พผ๋‹ค.
  5. FIN์„ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” ACK๋ฅผ ์„œ๋ฒ„์— ๋‹ค์‹œ ์ „์†กํ•˜๊ณ  TIME_WAIT์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ฐ”๊พผ๋‹ค. TIME_WAIT์—์„œ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด CLOSED๋œ๋‹ค. ACK๋ฅผ ๋ฐ›์€ ์„œ๋ฒ„๋„ ํฌํŠธ๋ฅผ CLOSED๋กœ ๋‹ซ๋Š”๋‹ค.

์ฃผ์˜ํ•ด์•ผ ํ•  ์ .

  • ๋ฐ˜๋“œ์‹œ ์„œ๋ฒ„๋งŒ CLOSE_WAIT ์ƒํƒœ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ๋จผ์ € ์ข…๋ฃŒํ•˜๊ฒ ๋‹ค๊ณ  FIN์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฐ ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ FIN_WAIT1 ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ˆ„๊ฐ€ ๋จผ์ € close๋ฅผ ์š”์ฒญํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์ƒํƒœ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

TCP Question

ํ•œ ๊ฐœ์˜ Server Socket์—์„œ ์—ด ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋™์‹œ ์—ฐ๊ฒฐ ๊ฐฏ์ˆ˜๋Š” 65536๊ฐœ์ด๋‹ค?

  • ์ •๋‹ต์€ X์ž…๋‹ˆ๋‹ค.
  • ์†Œ์ผ“์€ protocol, source addr, source port, destination addr, destination port๋กœ uniqueํ•˜๊ฒŒ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์†Œ์ผ“์˜ ์ˆ˜๋Š” ์„ค์ •๋œ ๋ฆฌ๋ˆ…์Šค ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋งŒํผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TCP๋Š” ๋ฐ์ดํ„ฐ ์ˆœ์„œ ๋ณด์žฅ์„ ์œ„ํ•ด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ Packet๋งŒ ์ „์†กํ• ๊นŒ?

  • ์ •๋‹ต์€ X์ž…๋‹ˆ๋‹ค.
  • ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ACK๋ฅผ ๋ฐ›๊ณ  ๋ณด๋‚ด๊ธฐ์—” ๋„ˆ๋ฌด ๋งŽ์€ Cost๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Window๋ผ๋Š” ๋…ผ๋ฆฌ์ ์ธ ํŒจํ‚ท ๋ฌถ์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ตœ์†Œํ•œ์˜ ACK๋กœ ๋ฐ์ดํ„ฐ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ฉฐ ์ „์†ก์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tcp packet์˜ port number byte order๋Š” big endian์ด๋‹ค?

  • ์ •๋‹ต์€ O์ž…๋‹ˆ๋‹ค.

  • ๊ฐ๊ฐ์˜ PC์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด Big endian, Little endian ๋‘ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ €์žฅ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ํ•ด์„ ๋˜ํ•œ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— Network byte order์˜ ํ‘œ์ค€์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

    • Network byte order์˜ ํ‘œ์ค€์€ big endian์ž…๋‹ˆ๋‹ค.
  • Little endian์„ ์‚ฌ์šฉํ•˜๋Š” ๋จธ์‹ ์—์„œ๋Š” Big endian์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • IBM์˜ Network byte order

  • Understanding Big and Little Endian Byte Order

Reference