1. TCP์ ๋ํ์ฌ
1.1. TCP๋?
1.2. ๋น ์ ๋ขฐ์ ์ธ ๋ฌธ์ ์
1.3. TCP ๋ฐ์ดํฐ ์ ์ก ๊ณผ์
2. ํ๋ฆ์ ์ด (Flow Control)
2.1. ํ๋ฆ์ ์ด๋?
2.2. Stop and Wait
2.3. Sliding Window(Go Back N ARQ)
3. ํผ์ก ์ ์ด (Congestion Control)
3.1. ํผ์ก์ ์ด๋?
3.2. AIMD(Additive Increase / Multicative Decrease)
3.3. Slow Start
3.4. Fast Retransmit (๋น ๋ฅธ ์ฌ์ ์ก)
3.5. Fast Recovery (๋น ๋ฅธ ํ๋ณต)
1. TCP์ ๋ํ์ฌ
1.1. TCP๋?
๋คํธ์ํฌ ํต์ ๋ฐฉ์ ์ค ์ ๋ขฐ์ ์ธ ์ฐ๊ฒฐ๋ฐฉ์
TCP๋ ์ ๋ขฐํ ์ ์๋ ๋คํธ์ํฌ์์ ์ ๋ขฐํ ์ ์๋ ๋คํธ์ํฌ๋ฅผ ๋ณด์ฅํ ์ ์๋๋ก ํ๋ ํ๋กํ ์ฝ
TCP๋ ํผ์ก ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํจ
1.2. ๋น ์ ๋ขฐ์ ์ธ ๋ฌธ์ ์
- ์์ค : ํจํท์ ์์ค
- ์์ ๋ฐ๋ : ์ ์ก๋ ํจํท์ ์์๊ฐ ์์ ํ ๋ ๋ฐ๋๋ ๋ฌธ์
- Congestion : ๋คํธ์ํฌ๊ฐ ํผ์กํ ๋ฌธ์
- Overload : ์์ ์ธก์ด ์ด๊ณผ๋๋ ๋ฌธ์
1.3. TCP ๋ฐ์ดํฐ ์ ์ก ๊ณผ์
- TCP๋ ์ ์ด์ค ๋ฐฉ์์ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ์ฌ ์๋ฐฉํฅ ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅ
- TCP๋ ์ฐ๊ฒฐํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์ฐ๊ฒฐ ์ค์ , ๋ฐ์ดํฐ ์ ์ก, ์ฐ๊ฒฐ ํด์ 3๋จ๊ณ๋ฅผ ์์ฐจ์ ์ผ๋ก ์งํํ๊ฒ๋จ
๋ฐ์ดํฐ ์ ์ก ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์
- Application layer : ์ ์ก์ธก application layer๊ฐ socket์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์
- Transport layer : ๋ฐ์ดํฐ๋ฅผ ์ธ๊ทธ๋จผํธ๋ก ๊ฐ์ธ๊ณ , network layer์๊ฒ ๋๊ฒจ์ค
- ์๋ซ๋จ์์ send buffer์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ ์กํจ
- ์์ ์ธก์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํจ
- application์ ๋๊ฐ ๋๋ฉด ๋ฒํผ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ์์ํจ
- ์ฌ๊ธฐ์ ํ๋ฆ์ ์ด๋ฅผ ํตํด ์ด ์์ ์ธก ๋ฒํผ๊ฐ ๋์น์ง ์๋๋ก ํด์ผํจ
- ๋ฐ๋ผ์ ์์ ์ธก์ RWND(Receive WiNDow)์ ๋จ์ ๊ณต๊ฐ์ ํ๋ณดํจ
2. ํ๋ฆ์ ์ด (Flow Control)
2.1. ํ๋ฆ์ ์ด๋?
์ก์ ์ธก๊ณผ ์์ ์ธก์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋ ์ฐจ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ๋ฒ
์์ ์ธก์ด ๋์น์ง ์๋๋ก ์ ์ก๋๋ ํจํท์ ์กฐ์ ํ๋ ๊ฒ
์์ ์ธก์ด ์ ์ก์ธก์๊ฒ ์์ ์ Buffer ์ํ๋ฅผ ๊ณ์์ ์ผ๋ก ํผ๋๋ฐฑํจ
2.2. Stop and Wait
๋งค๋ฒ ์ ์กํ ํจํท์ ๋ํด ํ์ธ ์๋ต์ ๋ฐ์์ผ๋ง ๊ทธ ๋ค์ ํจํท์ ์ ์ก
2.3. Sliding Window(Go Back N ARQ)
- ์์ ์ธก์์ ์ค์ ํ ์๋์ฐ ํฌ๊ธฐ๋งํผ ์ก์ ์ธก์์ ํ์ธ์๋ต์์ด ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์กํ ์ ์๊ฒ ํ์ฌ ๋ฐ์ดํฐ ํ๋ฆ์ ๋์ ์ผ๋ก ์กฐ์ ํ๋ ์ ์ด ๊ธฐ๋ฒ
- ์ ์ก์ ๋์์ง๋ง, Acked๋ฅผ ๋ฐ์ง ๋ชปํ byte์ ์ซ์๋ฅผ ํ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ protocol
- LastByteSent - LastByteAcked <= ReceivedWindowAdvertised (๋ง์ง๋ง์ผ๋ก ๋ณด๋ธ ๋ฐ์ดํธ - ๋ง์ง๋ง์ ํ์ธ๋ ๋ฐ์ดํธ <= ๋จ์ ๊ณต๊ฐ)
- ํ์ฌ ์ ์ก๋๊ณ ์๋ ํจํท ์ <= sliding window
Sliding WIndow ๋์ ๋ฐฉ์
- ๋จผ์ ์๋์ฐ์ ํฌํจ๋๋ ๋ชจ๋ ํจํท์ ์ ์ก
- ํจํท๋ค์ ์ ๋ฌ์ด ํ์ธ๋๋ ๋๋ก ์๋์ฐ๋ฅผ ์์ผ๋ก ์ฎ๊ฒจ ๋ฒ์์ ํด๋น๋๋ ํจํท๋ค์ ์ ์ก

Window
- TCP/IP๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํธ์คํธ๋ค์ ์ก์ ํ๊ธฐ ์ํ ๊ฒ, ์์ ํ๊ธฐ ์ํ 2๊ฐ์ Window๋ฅผ ๊ฐ์ง๊ณ ์์
- ํธ์คํธ๋ค์ ๋ฐ์ดํฐ ์ ์ก ์ ์ '3 way handshaking'์ ํตํด ์์ ํธ์คํธ์ window size์ ์์ ์ window size๋ฅผ ๋ง์ถค
์ก์ ๋ฒํผ

- 200 ์ด์ ์ ๋ฐ์ดํธ๋ ์ด๋ฏธ ์ ์ก๋์๊ณ , ํ์ธ ์๋ต์ ๋ฐ์
- 200~ 202 ๋ฐ์ดํธ๋ ์ ์ก๋์๊ณ , ํ์ธ ์๋ต์ ๋ฐ์ง ๋ชปํจ
- 203 ~ 211 ๋ฐ์ดํธ๋ ์์ง ์ ์ก์ด ์๋จ
์์ ์๋์ฐ

์ก์ ์๋์ฐ

- ์์ ์๋์ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ํฌ๊ธฐ๋ก ์ก์ ์๋์ฐ๋ฅผ ์ง์ ํด์ผ ํ๋ฆ์ ์ด๊ฐ ๊ฐ๋ฅ
์ก์ ์๋์ฐ์ ์ด๋

- 200, 201, 202 ์๋ต Acked๋ฅผ ์์ง ๋ฐ์ง ๋ชปํจ
- 200, 201, 202 ์๋ต Acked๋ฅผ ๋ฐ์ผ๋ฉด ์ก์ ์ธก์ ์์ ์๋์ฐ๋ฅผ 203 ~ 209๋ก ์ด๋
3. ํผ์ก ์ ์ด (Congestion Control)
3.1. ํผ์ก์ ์ด๋?
์ก์ ์ธก์ ๋ฐ์ดํฐ ์ ๋ฌ๊ณผ ๋คํธ์ํฌ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋ ์ฐจ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ๋ฒ
ํ ๋ผ์ฐํฐ์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์ง ์์ ํธ์คํธ๋ค์ ๋ค์ ์ฌ์ ์กํ๋ ์ ์ํ ๋ฐ์
์ด๋ฌํ ํผ์ก์ ํผํ๊ธฐ ์ํด ์ก์ ์ธก์ ๋ฐ์ดํฐ ์ ์ก ์๋๋ฅผ ๊ฐ์ ๋ก ์กฐ์ ํ๋ ์์ ์ ํผ์ก์ ์ด๋ผ๊ณ ํจ
๋คํธ์ํฌ ๋ด์ ํจํท์ ์๊ฐ ๊ณผ๋ํ๊ฒ ๋ง์์ง๋ ๊ฒ์ ํผ์ก์ด๋ผ ํจ
ํผ์ก ์ ์ด๋ ํ๋ฆ์ ์ด์ ๋ค๋ฅด๊ฒ ํธ์คํธ์ ๋ผ์ฐํฐ๋ฅผ ํฌํจํ ๋ณด๋ค ๋์ ๊ด์ ์์์ ์ ์ก ๋ฌธ์ ๋ฅผ ๋ค๋ฃธ
3.2. AIMD(Additive Increase / Multicative Decrease)
- ์ฒ์์ ํจํท์ ํ๋์ฉ ์ ์ก, ๋ฌธ์ ๊ฐ ์๋ค๋ฉด window ํฌ๊ธฐ๋ฅผ 1์ฉ ์ฆ๊ฐ
- ํจํท ์ ์ก์ ์คํจํ๊ฑฐ๋ Timeout์ด๋ฉด ํจํท ์ ์ก ์๋๋ฅผ ๋ฐ์ผ๋ก ์ค์
- ๊ณตํํ ๋ฐฉ์, ์ฌ๋ฌ ํธ์คํธ๊ฐ ํ ๋คํธ์ํฌ๋ฅผ ๊ณต์ ํ๋ฉด ๋์ค์ ์ง์ ํ๋ ์ชฝ์ด ๋ถ๋ฆฌํ์ง๋ง ๊ฒฐ๊ตญ์ ํํ ์ํ๊ฐ ๋จ
- ์ด๋ฐ์ ์ ์ก๋๋ ํจํท์ด ์ ๋ค๋ณด๋ ํ๊ณ ๋์ญํญ์ ์ ๋ถ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋์ญํญ์ ๋ชจ๋ ์ฌ์ฉํ๋ ค๋ฉด ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆผ
- ๋คํธ์ํฌ ํผ์ก์ ๋ฏธ๋ฆฌ ๊ฐ์งํ์ง ๋ชปํจ
3.3. Slow Start
- AIMD ๋ฐฉ์์ด ์ ์ก ์๋๋ฅผ ์ฌ๋ฆฌ๋๋ฐ ์ค๋์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ ์ฐฉ์
- ์ฒ์์๋ ๋๊ฐ์ด ํจํท ํ๋๋ก ์์ํ๋ฉฐ, ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋์ฐฉํ๋ ACK ํจํท๋ง๋ค window size 1์ฉ ์ฆ๊ฐ. ์ฆ ํ ์ฃผ๊ธฐ๋ง๋ค window size๊ฐ 2๋ฐฐ ์ฆ๊ฐํจ
- ์ ์ก ์๋๋ ์ง์ ํจ์ ๊ผด๋ก ์ฆ๊ฐํ๋ฉฐ, ํผ์ก ํ์ ๋ฐ์์ window size๋ฅผ 1๋ก ๋จ์ด๋จ๋ฆผ
- ํ๋ฒ ํผ์ก ํ์์ด ๋ฐ์ํ๋ฉด ๋คํธ์ํฌ์ ์์ฉ๋ ์์ ๊ฐ๋ฅ
- ๋ฐ๋ผ์ ํ๋ฒ ํผ์ก ํ์์ด ๋ฐ์ํ๋ window size์ ์ ๋ฐ๊น์ง๋ ์ง์ ํจ์ ๊ผด๋ก ์ฆ๊ฐ์ํค๋ค๊ฐ ๊ทธ ์ดํ๋ก๋ 1์ฉ ์ฆ๊ฐ ์ํด
3.4. Fast Retransmit (๋น ๋ฅธ ์ฌ์ ์ก)
- ์์ ์ธก์์ ์์ ํจํท์ด ๋์ฐฉํ์ง ์๊ณ ๊ทธ ์ดํ์ ํจํท์ด ์๋ ACK ํจํท์ ๋ณด๋
- ์์๋๋ก ์ ๋์ฐฉํ ๋ง์ง๋ง ํจํท์ ๋ค์ ํจํท ๋ฒํธ๋ฅผ ACK ํจํท์ ์ค์ด ๋ณด๋ด๋ฏ๋ก, ์ค๊ฐ์ ์์ค๋๋ฉด ์ก์ ์ธก์์๋ ์ค๋ณต๋ ACK๋ฅผ ๋ฐ๊ฒ ๋จ => ์ฌ์ ์ก!
- ์ค๋ณต๋ ์๋ฒ์ ํจํท์ 3๊ฐ ๋ฐ์ผ๋ฉด ์ฌ์ ์กํจ, ํผ์ก์ ์์ํ๊ณ window size ๊ฐ์
3.5. Fast Recovery (๋น ๋ฅธ ํ๋ณต)
- ํผ์กํ ์ํ๊ฐ ๋๋ฉด window size๋ฅผ 1๋ก ์ค์ด๋ ๊ฒ์ด ์๋, ๋ฐ์ผ๋ก ์ค์ด๊ณ ์ ํ ์ฆ๊ฐ์ํด
- ์ด ์ ์ฑ ์ ์ ์ฉํ๋ฉด ํผ์ก ์ํฉ์ ํ๋ฒ ๊ฒช๊ณ ๋์๋ถํฐ๋ ์์ํ AIMD ๋ฐฉ์์ผ๋ก ๋์
Reference
https://www.brianstorti.com/tcp-flow-control/
TCP Flow Control
TCP Flow Control
www.brianstorti.com
https://github.com/gyoogle/tech-interview-for-developer
gyoogle/tech-interview-for-developer
๐ถ๐ป ์ ์ ๊ฐ๋ฐ์ ์ ๊ณต ์ง์ & ๊ธฐ์ ๋ฉด์ ๋ฐฑ๊ณผ์ฌ์ ๐. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.
github.com