Post

[CS] Computer Networking - Transport layer(4): TCP flow control, handshake

[CS] Computer Networking - Transport layer(4): TCP flow control, handshake

๐Ÿ“š์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ์ „๊ณต ์ˆ˜์—… ์ •๋ฆฌ

TCP flow control


๐Ÿ“sender๊ฐ€ receiver buffer์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋„๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ??

โ†’ receiver buffer์—์„œ overflow๊ฐ€ ๋ฐœ์ƒํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค!!

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด flow control์„ ์‚ฌ์šฉ

  • Receive Window(rwnd): receiver buffer์— ๋‚จ์•„์žˆ๋Š” ์—ฌ์œ  ๊ณต๊ฐ„์„ ๊ธฐ๋กํ•˜์—ฌ TCP ํ—ค๋”์— ํฌํ•จ๋จ
  • sender๋Š” receiver์˜ rwnd ๊ฐ’์— ๋”ฐ๋ผ window size๋ฅผ ์กฐ์ ˆํ•˜์—ฌ overflow๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค

  • ๋งŒ์•ฝ rwnd=0 ์ฆ‰, receiver buf๊ฐ€ ๋‹ค ์ฐผ๋‹ค๋ฉด sender์—์„œ๋Š” ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ์˜ 1byte๋งŒ ๋–ผ์–ด์„œ ์ง€์†์ ์œผ๋กœ sendํ•œ๋‹ค.
    • ๋Œ์•„์˜ค๋Š” ACK์— ๋”ฐ๋ผ wnd size ์กฐ์ ˆ!!

TCP Connection Management


TCP๋Š” Connection-oriented์ด๋ฏ€๋กœ sender์™€ receiver๊ฐ„์— handshake๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ๋‹ค.

TCP 3-way handshake

alt text

  1. SYN:
    • client: ์ดˆ๊ธฐ seq #x ์„ ํƒ
    • SYN message๋ฅผ ๋ณด๋ƒ„(SYNbit=1, Seq=x)
    • ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ: CLOSED โ†’ SYN_SENT
  2. SYN-ACK:
    • server: ์ดˆ๊ธฐ ์ดˆ๊ธฐ seq #y ์„ ํƒ
    • SYNACK message๋ฅผ ๋ณด๋ƒ„ (SYNbit=1, Seq=y, ACKbit=1, ACKnum=x+1)
    • ACKnum=x+1: โ€œx๊นŒ์ง€ ๋ฐ›์•˜๊ณ  ๋‹ค์Œ์—๋Š” x+1์„ ๊ธฐ๋Œ€ํ•œ๋‹คโ€๋Š” ์˜๋ฏธ
    • ์„œ๋ฒ„ ์ƒํƒœ: LISTEN โ†’ SYN_RCVD
  3. ACK:
    • client: SYNACK๋ฅผ ๋ฐ›๊ณ  ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑ ์ƒํƒœ์ž„์„ ํ™•์ธ
    • ACK ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก(ACKbit=1, ACKnum=y+1)
    • ์ด๋•Œ๋ถ€ํ„ฐ data๋ฅผ ํ•จ๊ป˜ ์ „์†ก ๊ฐ€๋Šฅ!(์œ„ 2๋‹จ๊ณ„๋Š” header๋งŒ ์ „์†ก)

TCP closing connection(4-way_handshake)

alt text

  1. FIN from Client:
    • client๊ฐ€ ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘: close()
    • FIN ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก(FINbit=1, seq=x)
    • client ์ƒํƒœ: ESTABLISHED โ†’ FIN_WAIT_1
    • ์ด ์ƒํƒœ์—์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์—†์ง€๋งŒ ๋ฐ›์„ ์ˆ˜๋Š” ์žˆ๋‹ค
  2. ACK from Server:
    • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ FIN์— ACK๋กœ ์‘๋‹ต(ACKbit=1, ACKnum=x+1)
    • ์„œ๋ฒ„ ์ƒํƒœ: ESTABLISHED โ†’ CLOSE_WAIT
    • ์ด ์ƒํƒœ์—์„œ ์„œ๋ฒ„๋Š” ์—ฌ์ „ํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค
  3. FIN from Server:
    • ์„œ๋ฒ„๋„ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ค€๋น„๊ฐ€ ๋˜๋ฉด FIN ๋ฉ”์‹œ์ง€ ์ „์†ก(FINbit=1, seq=y)
    • ์„œ๋ฒ„ ์ƒํƒœ: CLOSE_WAIT โ†’ LAST_ACK
    • ์ด ์ƒํƒœ์—์„œ ์„œ๋ฒ„๋Š” ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค
  4. ACK from Client:
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ FIN์— ACK๋กœ ์‘๋‹ต(ACKbit=1, ACKnum=y+1)
    • ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ: FIN_WAIT_2 โ†’ TIME_WAIT โ†’ CLOSED
    • ์„œ๋ฒ„ ์ƒํƒœ: LAST_ACK โ†’ CLOSED (client ACK ์ˆ˜์‹  ํ›„)

โœ…TIME_WAIT ์ƒํƒœ์˜ ์ค‘์š”์„ฑ:
client๊ฐ€ ๋ฐ”๋กœ CLOSED ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ, ๋งŒ์•ฝ server์— FIN์— ๋Œ€ํ•œ ACK๊ฐ€ ์•ˆ์™”๋‹ค๋ฉด ๊ณ„์† FIN์„ ์žฌ์ „์†กํ•˜์ง€๋งŒ ๋ฐ›์„ client๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฌดํ•œ์œผ๋กœ FIN์„ ์žฌ์ „์†กํ•˜๊ฒŒ ๋จ

This post is licensed under CC BY 4.0 by the author.