๋ฆฌ๋ ์ค ์๋ฒ์ TCP ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ด์ผ๊ธฐ - 1ํธ
๋ฆฌ๋ ์ค ์๋ฒ์ TCP ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ด์ผ๊ธฐ - 1ํธ ๊ด๋ จ
1. ๋ค์ด๊ฐ๊ธฐ ์ ์
์๋ ํ์ธ์. NHN์ํฐํ ์ธ๋จผํธ ์ ์ฑํ ์ ๋๋ค. ์ธ์ ๊ฐ ๊ผญ ํ๋ฒ ์ ๋ฆฌํ๊ฒ ๋ค๊ณ ๋ง์ ๋จน์๋๋ฐ, ์ด์ ์์ผ ์ ๋ฆฌํ๊ฒ ๋์์ต๋๋ค.
๋จผ์ , "TCP ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋..." ์ด๋ผ๋ ์์์ด๋ ์ฌ์ค ์กฐ๊ธ ๋ ์๊ทน์ ์ธ ์ ๋ชฉ์ ๋ฝ์๋ด๊ธฐ ์ํ ๊ณผ์์ ๋๋ค. ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฐ์ฅ ์ค์ํ ์์๋ ๊ฒฐ๊ตญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ค๋ ์ ์ ๊ฐ์กฐํ๊ณ ์ถ์ต๋๋ค.
๋ค๋ง, ์ํฌ๋ก๋ ํน์ฑ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ์ค์ ๋ TCP ์ปค๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ ์ฝ์ด ๋์ด ์ ์ฑ๋ฅ์ ๋ฐํํ ์ ์์๋๋ ์๋๋ฐ์. ๋ณธ๋ฌธ์์๋ ์ด๋ฌํ ๋ด์ฉ๋ค์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
๋งค์ฐ ๋ง์ ์ปค๋ ํ๋ผ๋ฏธํฐ๊ฐ ์๊ฒ ์ง๋ง, ๋ณธ๋ฌธ์์๋ ๋คํธ์ํฌ ๋์ญํญ(bandwidth)์ ๋ํ ์ปค๋ ํ๋ผ๋ฏธํฐ, ๋คํธ์ํฌ ์์ฉ๋(capacity)์ ๋ํ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฃผ๋ก ๋ค๋ฃน๋๋ค.
2. ์ค๋น
๋ฆฌ๋
์ค๋ sysctl
๋ช
๋ น์ด๋ก ์์ฝ๊ฒ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐํ์ ์ค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ค์ ๊ฐ ์ ์ฒด๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
sysctl -a
๋ณธ ๋ฌธ์์์๋ ๋คํธ์ํฌ, ํนํ TCP์ capacity์ bandwidth ๋ฑ์ ์กฐ์ (tuning)ํ ์ ์๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ค ์์ฃผ ์ผ๋ถ ๋ง์ ๋ค๋ฃน๋๋ค. ๋๊ฐ, TCP์ ๊ด๋ จ๋ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ net.core, net.ipv4, net.ipv6 ๋ฑ์ ์ ๋์ฌ๋ฅผ ๋ถ์ด๊ณ ์์ต๋๋ค.
๋, ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ก ํ์ฌ ์ค์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด net.core.wmem_max ๋ผ๋ ์ค์ ๊ฐ์ 16777216์ด๋ผ๊ณ ๋ณ๊ฒฝํ๋ ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
sysctl -w net.core.wmem_max="16777216"
์์คํ ๋ถํ ์ ์ค์ ๋๋๋ก ํ๋ ค๋ฉด, /etc/sysctl.conf ํ์ผ์ ํด๋น ์ค์ ๊ฐ์ ๊ธฐ์ ํ๋ฉด ๋ฉ๋๋ค.
3. TCP ๋์ญํญ(bandwidth) ๊ด๋ จ ํ๋ผ๋ฏธํฐ
3.1 BDP
TCP์ ๋์ญํญ์ ์ดํดํ๋ ค๋ฉด ๋จผ์ BDP(Bandwidth Delay Product)
๋ฅผ ์ดํดํ ํ์๊ฐ ์์ต๋๋ค.
๋จผ์ , 100Mbps์ ๋์ญํญ์ ๊ฐ์ง๋ ๋คํธ์ํฌ์์ ์ด๋ค ๋ host A, B ์ฌ์ด RTT(Round-trip time)๊ฐ 2์ด์ธ ๋คํธ์ํฌ ๊ฒฝ๋ก๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ์๋ค. A์์ B๊น์ง ๋ฐ์ดํฐ๊ฐ ๊ณ์ ์ ์ก๋๊ณ ์์๋, A์์ ์ถ๋ฐํ์์ผ๋ ์์ง B์ ๋์ฐฉํ์ง ์์ ๋ฐ์ดํฐ ์(bits in flight)์ ์ผ๋ง์ผ๊น์?
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์กฐ๊ธ ์ดํด๊ฐ ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋์ญํญ์ ๋๋น๋ก, ์ง์ฐ์๊ฐ RTT๋ฅผ ๊ธธ์ด๋ก ์๊ฐํ๋ฉด, ์ด ๋์ ๊ณฑ์ด ๋คํธ์ํฌ ๊ฒฝ๋ก์ ๋ ๋ค๋๋ ๋ฐ์ดํฐ ์์ ์ต๋์น๋ฅผ ๋ํ๋ผ ๊ฒ์ ๋๋ค. ์ฆ, ๋์ญํญ๊ณผ ์ง์ฐ์๊ฐ์ ๊ณฑ, ๋ค์ ๋งํด BDP๋ ์ด๋ ๋คํธ์ํฌ ๊ฒฝ๋ก์ ์ ๋ฌ์ค์ธ ๋ฐ์ดํฐ(ํจํท)์ ์์ ๋ํ๋ ๋๋ค.
์ด ์์ ์์ BDP๋ ์ ๋์ ๋๋ค.
๋ค๋ฅธ ์๋ฅผ ๋ค์ด๋ณด์๋ฉด, ์ด๋ ์๋ฒ์ LTE ๋คํธ์ํฌ(40Mbps, 40ms RTT)๋ก ์ฐ๊ฒฐ๋ ๋จ๋ง์ด ์๋ค๊ณ ๊ฐ์ ํฉ์๋ค. ์ด๋ BDP๋
์ ๋์ผ ๊ฒ ์ ๋๋ค.
BDP์ ์์์ ์ด์ฉํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ ์์ ๋์ถํ ์ ์์ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ ๋๋ค. ์ค์ ์ธํฐ๋ท์์ BDP๋ ๋งค์ฐ ์ถฉ๋ถํ ํฝ๋๋ค. ์ฉ๋์ด ํฐ ๋ฐฑ๋ณธ๋ง์ ๋น๋กํ ๋ฌผ๋ฆฌ์ ์ธ ๋คํธ์ํฌ ํ๊ฒฝ์ด ์์ ๊ณผ ๋ค๋ฅด๊ฒ ๋น์ฝ์ ์ผ๋ก ์ข๊ธฐ ๋๋ฌธ์ด์ฃ . BDP๊ฐ ์ด๋ ์ ๋๋ก ํฌ๋๋ฉด receiver์ receiver window size๋ฅผ ์จ๋นํ ๊ฐ๋นํ ๋งํผ ํฌ๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ฆ, ์ธํฐ๋ท์ ๊ฒฝ์ฐ ๊ด๊ณ๋ ์ฑ๋ฆฝํ๋ค๋ ์ด์ผ๊ธฐ์ด์ฃ .
๋ค์ ์ ๋ฆฌํ์๋ฉด, ์ธํฐ๋ท์ ๊ฒฝ์ฐ ๋์ญํญ์ ๋์ด๊ธฐ ์ํด์๋ RTT๋ฅผ ๋ฎ์ถ๊ฑฐ๋ receiver window size๋ฅผ ํค์ฐ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ RTT๋ peer๊ฐ ๋ฌผ๋ฆฌ์ ์ธ ๊ฑฐ๋ฆฌ์ ์ข ์์ ์ด์ด์ ๋ฎ์ถ๊ธฐ ํ๋ญ๋๋ค. ์ฆ, ๋์ญํญ์ ๋์ด๋ ค๋ฉด receiver window size๋ฅผ ์ฆ๊ฐ์์ผ์ผ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, receiver window size๋ฅผ ์ฆ๊ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
3.2 TCP window scaling
๊ธฐ๋ณธ์ ์ผ๋ก TCP ์ฐ๊ฒฐ์ ๋งบ์ ๋, SYN ํจํท์๋ receiver window size๋ฅผ ๊ณต๊ณ (advertising) ํ๋๋ก ๋์ด ์์ต๋๋ค. ์ด ๊ฐ์ ๋ฒ์๋ 0~65,535๊น์ง์ธ๋ฐ์. ์ฆ, ๊น์ง ์ง์ ํ ์ ์์ต๋๋ค. ์ธํฐ๋ท์ด ์ฒ์ ๋์ฌ์ ์ ์์ ์ด๋ผ๋ฉด ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ง๊ธ ์ธ์์์ ๋ ๊ฝค๋ ์์ ๋ฐ์ดํฐ์์ด๊ฒ ์ง์.
RFC 1323์์๋ TCP window scaling์ด๋ผ๋ ์ต์ ์ ์ ์ํ๊ณ ์์ต๋๋ค. TCP ํค๋์ ์ต์ ํ๋์ window scale๋ผ๋ ํ๋๋ฅผ ์ ์ํ์ฌ advertiseํ ์ ์๋ receiver window size๋ฅผ ํค์ธ ์ ์๋๋ก ํฉ๋๋ค.
์ด ๊ฐ์ 0~14๊น์ง ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ์ ์ด๋ผ ํ๋ค๋ฉด, ๊ฐ์ window scaling factor๋ผ๊ณ ํฉ๋๋ค. TCP window scaling์ ์ค์ ํ๋ฉด, ์ค์ receiver window size๋ ๊ธฐ์กด์ window size ๊ฐ๊ณผ ์ด window scaling factor์ ๊ณฑ์ผ๋ก ๊ตฌํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, window size ๊ฐ์ด ์ด๊ณ window scale ๊ฐ์ด ์ด๋ผ๋ฉด ์ค์ receiver window size๋ ๋ฐ์ดํธ๊ฐ ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ก, TCP window scaling์ ์ฌ์ฉํ ๋ ์ต๋ receiver window size๋ ๋ฐ์ดํธ()์ ๋๋ค.
TCP window scaling์ ํ์ฑํํ๋ ค๋ฉด, ์ปค๋ ํ๋ผ๋ฏธํฐ 'net.ipv4.tcp_window_scaling
' ๊ฐ์ด '1
'๋ก ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฑํ ํ ์ ์์ต๋๋ค.
sysctl -w net.ipv4.tcp_window_scaling="1"
์ฐธ๊ณ ๋ก, ํต์ ํ๋ ๋ host ์ ์ธก ๋ชจ๋ TCP window scaling ์ต์ ์ ํ์ฑํํด์ผ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ OS(Windows, MAC OS X, iOS, Android)๋ค์ ์ด ์ต์ ์ด ํ์ฑํ๋์ด ์์ต๋๋ค.
3.3 TCP socket buffer size
TCP window scaling์ ์ด์ฉํ์ฌ receiver window size์ ํ๊ณ์น๋ฅผ ์ฆ๊ฐํ๋๋ผ๋, ์ค์ ์ปค๋์ ์ค์ ๋ ์์ผ ๋ฒํผ ํฌ๊ธฐ๋ณด๋ค ์ปค์ง ์๋ ์์ ๊ฒ ์ ๋๋ค. ๊ฒฐ๊ตญ receiver window size๋ฅผ ์ฆ๊ฐํ๊ธฐ ์ํด์๋, ์์ผ๋น ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์์ผ์ผ ํฉ๋๋ค.
์ด์ ๊ด๋ จ๋ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- net.core.rmem_default
- net.core.wmem_default
- net.core.rmem_max
- net.core.wmem_max
- net.ipv4.tcp_rmem
- net.ipv4.tcp_wmem
์ฌ๊ธฐ์ rmem์ receive(read) buffer์ ํฌ๊ธฐ, wmem์ send(write) buffer์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. ์ง์ ๋๋ ๊ฐ๋ค์ ๋จ์๋ ๋ฐ์ดํธ(bytes) ์ ๋๋ค.
๋จผ์ net.core
์ ๋์ฌ๊ฐ ๋ถ์ ์ปค๋ ํ๋ผ๋ฏธํฐ ๋ถํฐ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ TCP๋ฅผ ํฌํจํ ๋ชจ๋ ์ข
๋ฅ์ ์์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋๋ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ๋ํ๋
๋๋ค. ์ ๋ฏธ์ฌ default๋ ๊ทธ ๊ธฐ๋ณธ๊ฐ์ด๊ณ , max๋ ์์ผ์ด ๊ฐ์ง ์ ์๋ ์ต๋ ํฌ๊ธฐ๋ฅผ ๋ํ๋
๋๋ค.
net.ipv4
์ ๋์ฌ๊ฐ ๋ถ์ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ TCP ์์ผ์ ๋ํ ๋ถ๋ถ์ ์ค์ ํฉ๋๋ค. ์ฐธ๊ณ ๋ก, ์ด ์ค์ ๊ฐ์ ipv6์์๋ ์ ์ฉ๋๋๋ฐ, ๋ฆฌ๋
์ค์์๋ ์ผ๋ถ ipv4 ์ปค๋ ํ๋ผ๋ฏธํฐ๊ฐ ipv6๊น์ง ์ ์ฉ ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
ipv6์๋ ์ ์ฉ๋๋ ์ปค๋ ํ๋ผ๋ฏธํฐ
- net.ipv4.ip_
- net.ipv4.ip_local_portrange
- net.ipv4.tcp
- net.ipv4.icmp_*
๊ฐ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ min / default / max๋ก ์ธ ์ ์ ๊ฐ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. min์ TCP memory pressure ์ํ์ผ ๋ ์์ผ์ ํ ๋น๋๋ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๊ณ ์, max๋ TCP ์์ผ์ด ๊ฐ์ง ์ ์๋ ์ต๋ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. TCP memory pressure ์ํ์ ๋ํด์๋ ์กฐ๊ธ ๋ ์๋์์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค. ์ค๊ฐ๊ฐ์ default๋ก net.core์์ ์ค์ ๋ default ๊ฐ์ TCP ์์ผ์ ํ์ ํ์ฌ ๋ฎ์ด ์์๋๋ค. ํนํ, default ๊ฐ์ TCP receive window ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ ๋ ๊ฐ์ฅ ์ฃผ์ํ๊ฒ ์ฐธ์กฐ๋๋ ๊ฐ์ ๋๋ค.
์ด ์ปค๋ ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ๊ฐ์ ๋ฆฌ๋ ์ค ์ปค๋์ ์ํ์ฌ ์๋์ผ๋ก ์ค์ (auto-tuned)๋๋, ๋๊ฐ default ๊ฐ์ด 128KB ์ ๋๋ก ์ค์ ๋์ด ์๋๋ฐ์. ๋น๊ต์ ๋ฉ๋ชจ๋ฆฌ ์์ด ์ ๊ณ , ๋๊ท๋ชจ/๋์ฉ๋ ํจํท์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋ ๋ฐ์คํฌํ์์๋ ์ ํฉํ ์ค์ ์ ๋๋ค. ์๋ฒ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ด ํฌ๊ธฐ์ ์ ์ ํ ํฌ๊ธฐ๋ฅผ ๋๋ ค์ค๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. (๋คํธ์ํฌ ๋์ญํญ - ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ trade-off)
TCP receive window size๋ฅผ ์ฆ๊ฐ์ํค๋ ค๋ฉด, ์์์ ๋์ดํ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋นํ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๋ค ์ํฌ๋ก๋์์๋ ์ ์ฉ ๊ฐ๋ฅํ ์๋ฒฝํ ์ปค๋ ํ๋ฆฌ๋ฏธํฐ๋ ์์ต๋๋ค. ๋ค๋ง ์ด ๊ฒฝ์ฐ trade-off ๊ด๊ณ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ์ ์๊ธฐ์, ์๋์ ๊ฐ์ ์ค์ ๊ฐ์ ์กฐ์ฌ์ค๋ ์ ์ํฉ๋๋ค. (์ ๋นํ ๋ณด์์ ์ผ๋ก ์ํฅ๋ ์ค์ ๊ฐ์ ๋๋ค.)
sysctl -w net.core.rmem_default="253952"
sysctl -w net.core.wmem_default="253952"
sysctl -w net.core.rmem_max="16777216"
sysctl -w net.core.wmem_max="16777216"
sysctl -w net.ipv4.tcp_rmem="253952 253952 16777216"
sysctl -w net.ipv4.tcp_wmem="253952 253952 16777216"
์ด ์ธ์ 'net.ipv4.tcp_mem
'์ด๋ผ๋ ์ปค๋ ํ๋ผ๋ฏธํฐ๊ฐ ์์ต๋๋ค. ์ด ์ปค๋ ํ๋ผ๋ฏธํฐ๋ ์ปค๋์์ TCP๋ฅผ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ง์ ํฉ๋๋ค. ์์์ ์๊ฐํ ํ๋ผ๋ฏธํฐ๋ค์ ๊ฐ๋ณ TCP ์์ผ๋น ์ง์ ๋๋ ๊ฐ์ด๋ผ๋ฉด, ์ด ๊ฐ์ TCP ์์ผ ์ ์ฒด์ ๋ํ ๊ฐ์
๋๋ค.
์ด ์ค์ ๊ฐ์ ์์์ ์๊ฐํ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ค๊ณผ ์ ์ฌํ๊ฒ min / pressure / max ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด ์ค pressure๋ net.ipv4.tcp_rmem
, net.ipv4.tcp_wmem
์์ ์ ๊น ์ธ๊ธํ memory pressure์ threshold ๊ฐ ์
๋๋ค. ์ฆ, TCP ์์ผ ์ ์ฒด์์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด ๊ฐ์ ์ด๊ณผํ๋ฉด, TCP memory pressure ์ํ๊ฐ ๋์ด ์ดํ ์์ผ์ ์ง์ ๋ min ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ ๊ฒ์ด์ฃ .
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ก ํ์ฌ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ค์ ๊ฐ์ ํ์ธ ํ ์ ์์ต๋๋ค.
sysctl net.ipv4.tcp_mem
#
# net.ipv4.tcp_mem = 185688 247584 371376
์ ๊ฐ์ ๋ถํ ์ ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ถ์ด ์๋์ผ๋ก(auto-tuned) ์ค์ ๋ฉ๋๋ค. ํ๊ฐ์ง ์ ์ํ ์ ์, ๋๋๋ก ์ด ์ปค๋ ํ๋ผ๋ฏธํฐ ์ค์ ๊ฐ์ ์์ ํ์ง ๋ง์์ผ ํ๋ค๋ ์ ์ ๋๋ค. ์๋ํ๋ฉด, ์ด๋ฏธ ์ปค๋์ ์ํด ์์คํ ๋ฉ๋ชจ๋ฆฌ์ ๋ง๊ฒ ์ต์ ํ๋ ๊ฐ์ด ์ค์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ตฌ๊ธ ๊ฒ์ ๋ฑ์ผ๋ก ์ฐพ์ ์ ์๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ค์ ๊ด๋ จ ๋ฌธ์ ์ค ์ผ๋ถ๋ฅผ ์ดํด๋ณด๋ฉด, ์ด ๊ฐ์ ๋ํญ ์ฌ๋ฆฌ๋๋ก ๊ฐ์ด๋ ํ๊ธฐ๋ ํ๋๋ฐ์. ์ฝ์ฌ๋ฆฌ ์ฐพ์ ์ ์๋ ์ด๋ค ๋ฌธ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ด๋ ํฉ๋๋ค.
sysctl -w net.ipv4.tcp_mem="8388608 8388608 8388608"
์ด ์ค์ ๊ฐ์ด ์ ๋ง์ด ์๋๋ ์ค์ ๊ฐ์ด๋๋ฉด, ๊ทธ ๋จ์๊ฐ ๋ฐ์ดํธ(byte)๊ฐ ์๋๋ผ ํ์ด์ง(page)์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฆฌ๋ ์ค์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก 1 ํ์ด์ง๋ ๋ฐ์ดํธ์ ๋๋ค. ์ฆ, ์ ์ค์ ๊ฐ๋๋ก ๋ผ๋ฉด ์ 32๊ธฐ๊ฐ๋ฐ์ดํธ๋ฅผ ๋ป ํฉ๋๋ค. (์ปค๋ ๋๋ฌด ํฌ์ฃ .)
3.4 congestion window size
๊ทธ๋ผ receiver๊ฐ ๊ณต๊ณ (advertising)ํ receive window size ๋งํผ sender๋ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ก ํจํท์ ๋ณด๋ผ ์ ์์๊น์? ๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, ๊ทธ๋ ์ง ์์ต๋๋ค.
๋คํธ์ํฌ๋ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ค๊ฐ ๊ณต์ ํ๋ ๊ณต์ ์์์ ๋๋ค. ๊ฐ๊ฐ ๋ ธ๋๊ฐ ์ด๋ฅผ ํ์์ ์ผ๋ก ์ฌ์ฉํ๋ฉด, ๋คํธ์ํฌ ์ ์ฒด๊ฐ ๋ง๋น๋ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๊ฐ ๋ ธ๋๋ค์ ์ ๋นํ congestion avoidance algorithm์ ์ฌ์ฉํ์ฌ ๋ณด๋ด๋ ๋ฐ์ดํฐ ์์ ์์ฒด์ ์ผ๋ก ์กฐ์ ํ๊ณ ์์ต๋๋ค.
์ด congestion avoidance algorithm์ receiver์๋ ์๊ด์์ด (receiver window size ๋ฑ peer๊ฐ ์๋ ค์ฃผ๋ ์ ๋ณด์๋ ๋ฌด๊ดํ๊ฒ) ๋ ์์ ์ผ๋ก ๋คํธ์ํฌ์ ๋ณด๋ผ ๋ฐ์ดํฐ ์์ ์ ํฉ๋๋ค. ๋ฆฌ๋ ์ค์์๋ reno, vegas, new reno, bic, cubic ๋ฑ์ congestion avoidance algorithm์ ์ฌ์ฉํ ์ ์๋๋ฐ, ์์ฆ์์ ์ผ๋ฐ์ ์ธ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ์์๋ cubic๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋์ด ์์ต๋๋ค.
congestion avoidance algorithm์ ๋ช ๊ฐ์ง ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐธ์กฐ(RTT๊ฐ ๊ฐ์ฅ ์ฃผ์ํ ํ๋ผ๋ฏธํฐ๊ฐ ๋ ๊ฒ์ ๋๋ค.)ํ์ฌ congestion window ํฌ๊ธฐ๋ฅผ ์ค์ ํ๊ฒ ๋๋๋ฐ์. ์ด ํฌ๊ธฐ๊ฐ ํ๋ฒ์ ๋ณด๋ผ ์ ์๋ ๋ฐ์ดํฐ ์์ ์ต๋์น๊ฐ ๋ ๊ฒ์ ๋๋ค. congestion window ํฌ๊ธฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์ปค๋ ํ๋ผ๋ฏธํฐ๋ก ์ค์ ๋ ์ ์๋ ๊ฐ์ ์๋๋๋ค.
๋ฆฌ๋
์ค์์๋ ss
์ ๊ฐ์ ์ ํธ๋ฆฌํฐ๋ฅผ ํตํด ๊ฐ ์์ผ๋ณ ํ์ฌ congestion window ํฌ๊ธฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
ss -n -i
#
# Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
# tcp ESTAB 0 0 10.77.57.57:33000 10.77.57.57:47142
# cubic wscale:7,7 rto:208 rtt:5.236/10.107 ato:40 mss:65483 cwnd:10 send 1000.5Mbps rcv_rtt:4 rcv_space:43690
์ด ์์ผ์ congestion avoidance algorithm์ผ๋ก cubic์ ์ฌ์ฉํ๊ณ , ํ์ฌ congestion window size๊ฐ 10์์ ์ ์ ์์ต๋๋ค. ์ฆ, ํ๋ฒ์ ๋ณด๋ผ ์ ์๋ ํจํท ๊ฐ์๋ 10๊ฐ์ด๋ฉฐ ์ฝ 15KB ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ณด๋ผ ์ ์์ ๊ฒ์ ๋๋ค.
์ด congestion window size๋ TCP์ ํผ์ก ์ ์ด ์ ๋ต์ ๋ฐ๋ผ slow start ๋ฐฉ๋ฒ์ผ๋ก ์ต์ด ์ฐ๊ฒฐ์ ์ ํด์ง 'initial congestion window size(CWND)'๋ถํฐ ์ด๋ ์ ๋ ์ ๊น์ง ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํต์ ์ด ์ง์์ ์ผ๋ก ์งํ๋๋ฉด์ receiver๋ก ๋ถํฐ ACK ํจํท์ ๋ฐ์ผ๋ฉด, congestion window size๋ฅผ ํ์ฌ ํฌ๊ธฐ์ 2๋ฐฐ ๋งํผ์ฉ ์ฆ๊ฐ ์ํต๋๋ค. (๊ทธ ์์ค์ ํจํท์ด ์ ์ค๋๊ฑฐ๋ ํ๋ค๋ฉด congestion window size๋ฅผ ๊ฐ์์ํฌํ ๋ฐ์. ์ด๋ congestion avoidance algorithm์ ๋ฐ๋ผ ์ผ๋ง๋งํผ ๊ฒฝ๊ฐํ ์ง ๋ฌ๋ผ์ง๋๋ค.)
๊ทธ๋ฐ๋ฐ, ์ด๋ฌํ ํน์ฑ ๋๋ฌธ์ RTT๊ฐ ๋น๊ต์ ๋์ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ทจ์ฝํ ๋ฉด์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, receive window size๊ฐ ์ธ receiver๊ฐ ์๋ค๊ณ ํฉ์๋ค. sender์ initial congestion window๊ฐ 1์ด๋ผ๋ฉด, congestion window size๊ฐ ์ ๋๋ฌํ๊ธฐ ์ํด์๋ peer๋ก ๋ถํฐ 6๋ฒ์ ACK์ ๋ฐ์์ผ ํฉ๋๋ค. ์ด ๋ RTT๊ฐ 500ms๋ผ๋ฉด 3์ด ์ดํ์์ผ receive window size๋งํผ congestion window size๊ฐ ์ฆ๊ฐ๋ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ์ด์ ๋๋ฌธ์ ๊ตฌ๊ธ์์๋ 2010๋ ๊ฒฝ TCP initial congestion window size๋ฅผ ์ผ๋ก ์ํฅ(์ผ๋ฐ์ ์ผ๋ก 1 ํน์ 2๋ก ์ค์ ) ํ์๋ ์๊ฒฌ์ ๋ด๋๊ธฐ๋ ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค์ ํ๋ฒ ์ด์ผ๊ธฐ ํ์๋ฉด, ๋ชจ๋ ์ํฌ๋ก๋์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ค์ ๊ฐ์ ์์ต๋๋ค. ๋คํธ์ํฌ ์ ๋ชจ๋ peer๋ค์ด initial congestion window size๋ฅผ 10์ผ๋ก ์ฆ๊ฐ ์ค์ ํ๊ณ , ํญ์ ์ด ํจํท์๋ณด๋ค ๋ง์ ํต์ ์ ๋น๋ฒํ ํ๊ฒ ๋๋ค๋ฉด ์ ์ฒด ๋คํธ์ํฌ๊ฐ ํผ์กํ ์ํฉ์ด ๋๋ ์ฌ์์ด ๋ฐ์ํ ์๋ ์์ ๊ฒ์ ๋๋ค. ๋, ํ๋ฒ์ ์ฃผ๊ณ ๋ฐ๋ ํจํท ํฌ๊ธฐ๊ฐ ์๋์ ์ผ๋ก ์๋ค๋ฉด initial congestion window size๋ฅผ ์กฐ์ ํด๋ ํฌ๊ฒ ์ด๋์ด ์์ ์ ์์ต๋๋ค.
initial congestion window size๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋, ์ปค๋ ํ๋ผ๋ฏธํฐ๊ฐ ์๋๋ผ ip route
๋ช
๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋จผ์ , ํ์ฌ์ ๋ผ์ฐํ
์ ๋ณด๋ฅผ ํ์ธํ๋ ค๋ฉด ์๋์ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ip route show
#
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 1
# 169.254.0.0/16 dev eth0 scope link metric 1000
# default via 192.168.1.1 dev eth0 proto static
์ฌ๊ธฐ์๋ default ๋ผ์ฐํ ์ค์ ์ ๋ณ๊ฒฝํ ํ ๋ฐ์. ์์ ์ค์ ๊ฐ์ ํ ๋๋ก ์๋์ ๊ฐ์ด ์ ๋ ฅํ์ฌ initial congestion window size๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
ip route change default via 192.168.1.1 dev eth0 proto static initcwnd 10
์ ์ฉ๋์์์ ํ์ธํ๋ ค๋ฉด, ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ip route show
#
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 1
# 169.254.0.0/16 dev eth0 scope link metric 1000
# default via 192.168.1.1 dev eth0 proto static initcwnd 10
์ฐธ๊ณ ๋ก ํน์ ์ปค๋ ๋ฒ์ (2.6.18)์์๋ ethernet ์ค์ ์์ TSO๋ฅผ ํ์ฑํํ๋ฉด ์ด ์์น๊ฐ ๋ฌด์๋๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. (๋น๊ต์ ์ค๋๋ ์ปค๋์ด๋ผ ์ต๊ทผ ๋ฐฐํฌํ์์๋ ๊ด๊ณ๊ฐ ์์ง๋ง, Redhat/CentOS 5 ๋ฒ์ ์ด ์ด ์ปค๋์ ์ฌ์ฉํฉ๋๋ค.)
๋ ์ดํด๋ณผ ๋งํ slow start์ ๊ด๋ จ๋ ๋ฆฌ๋
์ค ์ปค๋ ํ๋ผ๋ฏธํฐ๋ 'net.ipv4.tcp_slow_start_after_idle
' ์
๋๋ค. ์ด ํ๋ผ๋ฏธํฐ๋ 0 ํน์ 1๋ก ์ค์ ํ ์ ์๋๋ฐ์. 1๋ก ์ค์ ๋์ด ์์ผ๋ฉด congestion window size๊ฐ ์ฆ๊ฐ๋ ์์ผ์ด๋ผ๋ ํน์ ์๊ฐ ๋์์ idle(ํต์ ์ด ์๋) ์ํ์ ์ง์๋๋ฉด, ๋ค์ slow start๋ฅผ ํตํด initial congestion window size์์ ๋ถํฐ congestion window size๋ฅผ ์ฆ๊ฐํด์ผ ํฉ๋๋ค. ๋ฐ๋๋ก 0์ผ๋ก ์ค์ ๋์ด ์์ผ๋ฉด, ์ผ์ ์๊ฐ ํต์ ์ด ์๋๋ผ๋ congestion window size๊ฐ ์ ์ง ๋ฉ๋๋ค.