4. Connection Management
Last updated
Last updated
[ํ์ต๋ชฉํ]
HTTP๋ ์ด๋ป๊ฒ TCP ์ปค๋ฅ์ ์ ์ฌ์ฉํ๋๊ฐ
HTTP ์ปค๋ฅ์ ์ด ๋ฌด์์ด๊ณ , ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ดํดํ๋ค.
TCP์ปค๋ฅ์ ์ ์ง์ฐ, ๋ณ๋ชฉ, ๋งํํ์
๋ณ๋ ฌ์ปค๋ฅ์ , keep-alive์ปค๋ฅ์ , ์ปค๋ฅ์ ํ์ดํ๋ผ์ธ์ ํ์ฉํ HTTP ์ต์ ํ
์ปค๋ฅ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ท์น
HTTP ํต์ ์ TCP/IP ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
TCP/IP : ์ง๊ตฌ์์ ์ปดํจํฐ์ ๋คํธ์ํฌ ์ฅ๋น์์ ๋๋ฆฌ ์ฐ์ด๋ ํจํท ๊ตํ ๋คํธ์ํฌ ํ๋กํ ์ฝ๋ค์ ๊ณ์ธตํ ์งํฉ.
์ธ๊ณ ์ด๋์๋ TCP/IP ์ปค๋ฅ์ ์ ๋งบ์ ์ ์๋ค.
์ผ๋จ ์ปค๋ฅ์ ์ด ๋งบ์ด์ง๋ฉด, ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ปดํจํฐ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋ ๋ฉ์์ง๋ค์ ์์ค๋๊ฑฐ๋, ์์๊ฐ ๋ฐ๋์ง ์๊ณ ์์ ํ ์ ๋ฌ์ด ๋๋ค.
์์์ ๋ง๊ฒ, ์์ค ์์ด, ์์ ์์ด, ์์ ์ด๊ณ ์ ํํ๊ฒ ํต์
Segment: Transport ๊ณ์ธต [์:TCP] - ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฐ๊ฒฐ(port)
Packet: Network ๊ณ์ธต [์: IP] - ํด๋น์ปดํจํฐ์ ์ฐ๊ฒฐ(host or ip address)
์ปดํจํฐ๋ ํญ์ TCP ์ปค๋ฅ์ ์ ์ฌ๋ฌ๊ฐ ๊ฐ์ง๊ณ ์๋ค. ํฌํธ๋ฒํธ๋ฅผ ํตํด ์ปค๋ฅ์ ์ ์ ์งํ๋ค.
TCP ์ปค๋ฅ์ ์๋ณ์ ๋ค๊ฐ์ง ๊ฐ์ผ๋ก ํ๋ค.
<๋ฐ์ ์ง IP ์ฃผ์, ๋ฐ์ ์ง port๋ฒํธ, ์์ ์ง IP์ฃผ์, ์์ ์ง IP๋ฒํธ>
์ ๋ค๊ฐ์ง ๊ฐ์ผ๋ก ์ ์ผํ ์ปค๋ฅ์ ์ ์์ฑํ๋ค. [๋ค๊ฐ์ง ๊ฐ์ด ๋ชจ๋ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ๊ตฌ์ฑ ์์์ค ์ผ๋ถ๋ ๊ฐ์ ์ ์๋ค.]
์ด์์ฒด์ ๋ TCP ์ปค๋ฅ์ ์์ฑ๊ณผ ๊ด๋ จ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. [์์ผ API]
์ฒ์์๋ ์ ๋์ค ์ด์์ฒด์ ์ฉ์ผ๋ก ๊ฐ๋ฐ๋์๊ณ , ํ์ฌ๋ ๋๋ถ๋ถ์ ์ด์์ฒด์ , ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๊ฐ๋ฅ.
(์์ผ์ด๋? ์ฐธ์กฐ): https://medium.com/@yeon22/term-socket์ด๋-7ca7963617ff
ํด๋ผ์ด์ธํธ-์๋ฒ TCP ์์ผ ํ๋ก๊ทธ๋๋ฐ ์ํธ์์ฉ ํ๋ก์ธ์ค
HTTP๋ TCP ๋ฐ๋ก ์์ ์๋ ๊ณ์ธต์ด๊ธฐ ๋๋ฌธ์ TCP ์ฑ๋ฅ์ HTTP ํธ๋์ญ์ ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ค.
๋๋ถ๋ถ์ HTTP์ง์ฐ์ TCP ๋คํธ์ํฌ ์ง์ฐ๋๋ฌธ์ ๋ฐ์ํ๋ค. HTTP ํธ๋์ญ์ ์ง์ฐ ์์ธ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค.
ํด๋ผ์ด์ธํธ๋ URI์์ ์น ์๋ฒ์ IP์ฃผ์์ ํฌํธ๋ฒํธ๋ฅผ ์์์ผํ๊ณ , ์ต๊ทผ์ ๋ฐฉ๋ฌธํ์ ์๋ URI๋ผ๋ฉด, DNS๋ก ํธ์คํธ๋ช ์ IP์ฃผ์๋ก ๋ณํํ๋๋ฐ ์์ญ์ด์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
[ํ์ฌ๋ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๋ถ์์ด ๋๋๋ค. host google.com
์ terminal ์ ์
๋ ฅํด์ ํ์ธํด๋ณผ๊ฒ]
ํด๋ผ์ด์ธํธ๋ TCP ์ปค๋ฅ์ ์์ฒญ์ ์๋ฒ์ ๋ณด๋ด๊ณ ์๋ฒ๊ฐ ํ๊ฐ ์๋ต์ ํ์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
์๋ก์ด ์ปค๋ฅ์ ์ ํญ์ ๋ฐ์ํ๋ ์๊ฐ์ผ๋ก, ํ์ฌ๋ 1์ด ๋ฏธ๋ง์ผ๋ก ๋๋๋ค.
์์ฒญ๋ฉ์ธ์ง๊ฐ ์ธํฐ๋ท์ ํตํด ์ ๋ฌ๋๊ณ , ์๋ฒ์ ์ํด ์ฒ๋ฆฌ๋๋๋ฐ๊น์ง ์์๋๋ ์๊ฐ.
๋ฐ๋๋ก ์น์๋ฒ๊ฐ HTTP์๋ต์ ๋ณด๋ด๋๋ฐ ์์๋๋ ์๊ฐ.
TCP ์ปค๋ฅ์ ํธ๋์ ฐ์ดํฌ ์ค์
์ธํฐ๋ท ํผ์ก์ ์ ์ดํ๊ธฐ์ํ TCP์ ๋๋ฆฐ์์(slow-start)
๋ฐ์ดํฐ๋ฅผ ํ๋ฐ ๋ชจ์ ํ๋ฒ์ ์ ์กํ๊ธฐ ์ํ ๋ค์ด๊ธ(nagle) ์๊ณ ๋ฆฌ์ฆ
TCP์ ํธ์น(piggyback) ํ์ธ์๋ต(acknowledgement) ์ ์ํ ํ์ธ์๋ต ์ง์ฐ ์๊ณ ๋ฆฌ์ฆ
TIME_WAIT ์ง์ฐ๊ณผ ํฌํธ ๊ณ ๊ฐ
์ปค๋ฅ์ ํค๋๋ 3๊ฐ์ง ์ข ๋ฅ์ ํ ํฐ์ ์ ๋ฌ ํ ์ ์๋ค.
HTTP ํค๋ ํ๋๋ช ์ ์ด ์ปค๋ฅ์ ์๋ง ํด๋น๋๋ ํค๋๋ค์ ๋์ดํ๋ค.
์์์ ์ธ ํ ํฐ๊ฐ์ ๋นํ์ค ์ต์ ์ ์๋ฏธํ๋ค.
close ๊ฐ์ ์ปค๋ฅ์ ์ด ์์ ์๋ฃ๋๋ฉด ์ข ๋ฃ๋์ผํจ์ ์๋ฏธํ๋ค.
HTTP ํค๋ ํ๋๋ช ์ ํ์ฌ ์ปค๋ฅ์ ๋ง์ ์ํ ์ ๋ณด์ด๋ฏ๋ก ๋ค์ ์ปค๋ฅ์ ์ ์ ๋ฌํ๋ฉด ์๋๊ณ , ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ๋ฌํ๋ ์์ ์ ์ญ์ ํด์ผํ๋ค.
HTTP ๋ด ์ปค๋ฅ์ ๊ด๋ฆฌ๋ end-to-end๊ฐ ์๋ hop-by-hop์ธ ๋๊ฐ์ ์ฐ์๋ ๋ ธ๋ ์ฌ์ด์ ์ปค๋ฅ์ ์ ์ ์ฉ
(='ํค๋ ๋ณดํธํ๊ธฐ')
์๋ฅผ๋ค์ด 3๊ฐ์ ์ด๋ฏธ์ง๊ฐ ์๋ ์นํ์ด์ง๋ฅผ ๋ณด๋ ค๋ฉด, ํด๋น HTML ๊ณผ ์ด๋ฏธ์งํ์ผ 3๊ฐ๋ฅผ ๋ฐ์์์ผํ๋๋ฐ, ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ๋๋์ ๋น ํ๋ฉด๋ง์ ๋ด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. HTTP ์ปค๋ฅ์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์ฌ๋ฌ ์ต์ ๊ธฐ์ 4๊ฐ์ง๋ฅผ ์ดํด๋ณธ๋ค.
๋ณ๋ ฌ(Parallel) ์ปค๋ฅ์ : ์ฌ๋ฌ๊ฐ์ TCP ์ปค๋ฅ์ ์ ํตํ HTTP ์์ฒญ
์ฌ๋ฌ๊ฐ์ ์ปค๋ฅ์ ์ ๋งบ์ด ์ฌ๋ฌ๊ฐ์ HTTP ํธ๋์ญ์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ
๋ณ๋ ฌ์ปค๋ฅ์ ์ ํ์ด์ง๋ฅผ ๋ ๋น ๋ฅด๊ฒ ๋ด๋ ค๋ฐ๋๋ค.
ํญ์ ๋ ๋น ๋ฅธ ๊ฒ์ ์๋๋ค. ์ค์ ๋ก ์ ์์์ ๋ณ๋ ฌ์ปค๋ฅ์ ๋ง ํ์ฉํ๋ค.(ํ์ฌ ๋๋ถ๋ถ 6~8๊ฐ ํ์ฉ)
[๋คํธ์ํฌ ๋์ญํญ์ด ์ข์๊ฒฝ์ฐ, ๋๋ถ๋ถ์ ์๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์๋ง ์ฐ๊ฒ๋จ.]
[๋ค์์ ์ปค๋ฅ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์๋ชจํด์ ์ฑ๋ฅ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์.]
๋ ๋น ๋ฅด๊ฒ '๋๊ปด์ง ์' ์๋ค. ์ฌ๋ฌ๊ฐ์ ๊ฐ์ฒด๊ฐ ๋์์ ๋ณด์ด๋ฉด์ ๋ด๋ ค๋ฐ๋๊ฑธ ๋ณด๊ธฐ๋๋ฌธ์ ์์ ์ด ์ผ์ด๋๋ ์ค์์ ์ฌ์ฉ์๊ฐ ๋์ผ๋ก ํ์ธ์ด ๊ฐ๋ฅํด์ ๋ ๋น ๋ฅด๋ค๊ณ ๋๋๋ค.
์ง์(Persistent) ์ปค๋ฅ์ : ์ปค๋ฅ์ ์ ๋งบ๊ณ ๋๋๋ฐ ๋ฐ์ํ๋ ์ง์ฐ ์ ๊ฑฐ๋ฅผ ์ํ TCP ์ปค๋ฅ์ ์ฌํ์ฉ
์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ํ์๋ TCP ์ปค๋ฅ์ ์ ์ ์งํ์ฌ ์์ผ๋ก ์์ HTTP ์์ฒญ์ ์ฌ์ฌ์ฉํ๋ค.
๋ณ๋ ฌ ์ปค๋ฅ์ ๊ณผ ํจ๊ป ์ฌ์ฉํจ์ผ๋ก์จ ์ํธ๋ณด์ํ ์ ์๋ค. (4.5.1 ์ฐธ์กฐ)
2๊ฐ์ง ํ์ :
HTTP/1.0+ ์ keep-alive
connection(4.5.2~4.5.7 ์ฐธ์กฐ)
HTTP/1.1 ๋ช ์ธ์์๋ ์ฌ์ฉํ์ง ์์ง๋ง, ๋๋ฆฌ ์ฌ์ฉ๋์์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌํ ์ ์์ด์ผํ๋ค.
์ปค๋ฅ์
์ ์ง๋ฅผ ์ํด์ Connection: Keep-Alive
ํค๋๋ฅผ ํฌํจํ๋ค.
ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ชจ๋ ์ธ์ ๋ keep-alive ์์ฒญ์ ๋๊ฑฐ๋ ์ฒ๋ฆฌ๋๋ ํธ๋์ ์ ์ ์ ํ์ด ๊ฐ๋ฅ
ํ๋ฝ์์์ Connection ํค๋๋ฅผ ์ดํดํ์ง ๋ชปํ๊ณ ๋ฌด์กฐ๊ฑด ์ ๋ฌํ๋ฉด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ Proxy-Connection ์ ํตํด ๋จ์ผ ๋ฌด์กฐ๊ฑด ์ ๋ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค๋ค.(์ฐจ์ ์ฑ )
ํ์ง๋ง ํ๋ก์๊ฐ ๋ง์ ๊ตฌ์กฐ์์๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
HTTP/1.1 persistent
connection
keep-alive๋ฅผ ์ง์ํ์ง ์๋ ๋์ ์ค๊ณ๊ฐ ๋ ๊ฐ์ ๋ ์ง์ ์ปค๋ฅ์ ์ ์ง์ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๊ฐ ๋์ด์๊ณ , ๋ณ๋ ์ค์ ์ด ์๋ค๋ฉด ์ง์์ปค๋ฅ์ ์ผ๋ก ์ทจ๊ธํ๋ค.
์๋ต์ Connection:close
ํค๋๊ฐ ์๋ค๋ฉด, ์๋ตํ์๋ ์ปค๋ฅ์
์ ์ ์งํ๋๊ฒ์ผ๋ก ์ถ์ ํ๋ค.
์ธ์ ๋ ์ง ์๋ฒ,ํด๋ผ์ด์ธํธ๋ ์ปค๋ฅ์
์ ๋์ ์ ์๊ณ , Connection:close
์ ๋ณด๋๋ค๊ณ ์ปค๋ฅ์
์ ์์ํ ์ ์งํ๊ฒ ๋ค๋ ์๋ฏธ๋ ์๋๋ค.
ํ์ดํ๋ผ์ธ(pipelined) ์ปค๋ฅ์ : ๊ณต์ TCP ์ปค๋ฅ์ ์ ํตํ ๋ณ๋ ฌ HTTP ์์ฒญ
keep-alive ์ปค๋ฅ์ ์ ์ฑ๋ฅ์ ๋์ฌ์ค๋ค.
์ฌ๋ฌ๊ฐ์ ์์ฒญ์ ๋ํด ์๋ต์ด ๋์ฐฉํ๊ธฐ์ ๊น์ง ํ์ ์์ฌ์๋ค.
์ง์์ปค๋ฅ์ ์ธ ๊ฒฝ์ฐ์๋ง ํด๋ผ์ด์ธํธ๋ ํ์ดํ๋ผ์ธ์ ์ด์์์๋ค.
์๋ต์ ์์ฒญ ์์์ ๊ฐ๊ฒ ์์ผํ๋ค.
์ปค๋ฅ์ ์ด ๋์ด์ง๋๋ผ๋ ์ธ์ ๋ ๋ค์ ์์ฒญ์ ๋ณด๋ผ ์ค๋น๊ฐ ๋์ด์์ด์ผํ๋ค.
post๊ฐ์ ์์ฒญ์ ์์ฒญ ์ค ์ด๋ค๊ฒ์ด ์ฒ๋ฆฌ๋ฌ๋์ง ์๊ธธ์ด ์๊ธฐ ๋๋ฌธ์ post๋ณด๋ด๋ฉด์๋๋ค.
๋ค์ค(Multiplexed) ์ปค๋ฅ์ : ์์ฒญ๊ณผ ์๋ต๋ค์ ๋ํ ์ค์ฌ
ํด๋ผ์ด์ธํธ, ์๋ฒ, ํ๋ก์ ์ธ์ ๋ ์ง TCP ์ ์ก ์ปค๋ฅ์ ์ ๋์ ์ ์๋ค.
์ค์ ์ ๋ฌ๋ ์ํฐํฐ ๋ณธ๋ฌธ์ ๊ธธ์ด์, content-length๊ฐ์ด ์ผ์นํ์ง ์๊ฑฐ๋ Content-Length ์์ฒด๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ ์๋ ๋ฐ์ดํฐ์ ์ ํํ๊ธธ์ด๋ฅผ ์๋ฒ์ ๋ฌผ์ด๋ด์ผํ๋ค.
์๋ฌ๊ฐ ์๋๋ผ๋ ์ปค๋ฅ์ ์ ์ธ์ ๋ ์ง ๋์ ์ ์๋ค.
์์์น ๋ชปํ๊ฒ ์ปค๋ฅ์ ์ด ๋๊ฒผ์๋ ์ ์ ํ ๋์ํ ์ ์์ด์ผ ํ๋ค. ํ๋ฒ ํน์ ์ฌ๋ฌ๋ฒ ์คํ ๋์๋์ง์ ์๊ด์์ด ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ ๋ ํธ๋์ญ์ ์ ๋ฉฑ๋ฑ(idempotent)ํ๋ค๊ณ ํํ.
์ ์ฒด๋๊ธฐ(a)์ ์ ๋ฐ ๋๊ธฐ(b,c)
[์ฐธ์กฐ๋งํฌ]
OSI 7 layers (segment,pakets,..): https://krylon.tistory.com/114
์์ผํต์ ๊ทธ๋ฆผ: http://jkkang.net/unix/netprg/chap2/net2_1.html