- ์ด์ ์๊ฐ ์ ๋ฆฌ
- ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด : ๋ฉ์ธ์ง (Message)
- ํธ๋์คํฌํธ ๋ ์ด์ด : ์ธ๊ทธ๋จผํธ (Segment)
- ๋คํธ์ํฌ ๋ ์ด์ด : ํจํท (Packet)
์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ํ๋ก์ธ์ค ๊ณ์ธต๋ค์ด reliable ํ๊ฒ ํต์ ํ ์ ์๋๋ก ํ๋ ํต์ ์ ? TCP
TCP ๋ผ๋ ๊ฒ์ ํน์ ์ผ๋ ํน์ ๋ฆฌ์๋ฒ๊ฐ ์๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๊ฐ์ ์๋ํฌ์ธํธ๋ค์ ์ผ๋๋ฉด์ ๋ฆฌ์๋ฒ์ด๋ค. ์๋ํ๋ฉด HTTP request ์ response ๊ฐ ๊ฐ์ด ์์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ฒํผ๋ ๊ฐ TCP ๋ง๋ค ๋ ๊ฐ์ฉ ์กด์ฌํ๋ค. (Send Buffer / Receive Buffer)
- Send Buffer
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋ ค์จ ๋ฉ์ธ์ง๊ฐ ๋ด๊ธด๋ค.
- ์ธ๊ทธ๋จผํธ๋ฅผ ํตํด์ ๋ณด๋ธ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์์ ๊ฒฝ์ฐ์ ์ฌ์ ์ก์ ํ๊ธฐ์ํด์ ๋ณด๊ดํ๋ค.
- ์ดํ์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์ ์ก๋๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
- ํ์ง๋ง TCP ์์ฒด๋ ํ๋์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ์ ๋นํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ํ์ดํ๋ผ์ด๋ ํต์ ์ ํ๋ค.
- ๊ทธ๋ ๊ฒ ํ ๋ฒ์ ๋ณด๋ผ ์ ์๋ ๊ฐ๋ ์์ฒด๋ฅผ window size ๋ผ๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ์ฌ์ด์ฆ ๋งํผ์ ๋ฐ์ดํฐ๋ ํผ๋๋ฐฑ ์์ด ํ๋ฒ์ ์ ์กํ๋ค.
- Receive Buffer
- TCP ๋ Reliable ํต์ ๋ ๊ฐ๋ฅํ์ง๋ง, In-order delivery ๋ ๊ฐ๋ฅ์ผ ํ๋ค.
- ๋ฐ๋ผ์ SendBuffer ์์ ๋ฐ์ ๋ฐ์ดํฐ์ ์์๋ฅผ ๋ง์ถ๊ธฐ ์ํ ์ฉ๋๋ก ๋ฒํผ๊ฐ ํ์ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ํด๋น ์์๋ฅผ ๋ง์ถ๊ธฐ ์ํด์ sequence number ๋ฅผ ์ฌ์ฉํ๋ค. (Send Buffer ์ ํด๋น ๋ฐ์ดํธ ๋ฐ์ดํฐ์ ๋ํ ์ํ์ค ๋ฒํธ๊ฐ ๋ถ์ฌ๋์ด ์๋ค.)
- ๊ทธ๋ฆฌ๊ณ Receive Buffer ์์์ ์ํ์ค ๋ฒํธ๋ ์๋๋ฐฉ์ ์ํ์ค ๋ฒํธ์ด๋ค. ์ด๋๊น์ง ์์ ๋์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํจ
- ํจํท์ ์ ์ค ์ ๋ฌด๋ ํ์ด๋จธ๋ฅผ ํตํด์ ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ด๋จธ์ ๋ง๋ฃ์๊ฐ์ด ๋๋ ๋๊น์ง ํผ๋๋ฐฑ์ด ์ค์ง ์์ผ๋ฉด ์ ์ค์ด๋ผ๊ณ ํ๋จํ๋ค.
- ์ฌ๊ธฐ์ ํ์ด๋จธ์ ๋ง๋ฃ์๊ฐ์ ๊ธฐ๋ค๋ฆด๋๊น์ง ํจ์จ์ฑ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ ACKs ์ ์ํ์ค ๋ฒํธ๋ฅผ ์ค๋ณตํด์ ์ธ ๋ฒ ๋ฐ์ผ๋ฉด ๋ค์ ์ฌ์ ์ก์ ํ๋ค. ์ํ์ค ๋ฒํธ๋ฅผ ์ค๋ณตํด์ ์ธ ๋ฒ ๋ฐ๋ ๊ฒ์ 3-duplicate ACKs ๋ผ ํ๋ฉฐ ์ฌ์ ์ก ํ๋ ๊ฒ์ Fast Re-Transmit ์ด๋ผ๊ณ ํ๋ค.
-
TCP ๊ฐ ์ ๊ณตํ๋ ์ธ๊ฐ์ง ์ค์ํ ๊ธฐ๋ฅ
-
Reliable data transfer
-
Flow control
-
Congestion control
-
Flow control
-
์ผ๋ง๋ ๋น ๋ฅธ ์๋๋ก ๋ณด๋ผ ๊ฒ์ธ์ง์ ๋ํ ๊ฒฐ์ ์์ ๋๊ฐ์ง ์กด์ฌ
-
๋ฆฌ์๋ฒ๊ฐ ์ผ๋ง๋ ๋ฐ์๋ค์ผ ์ค๋น๊ฐ ๋์ด์๋์ง => ๋ฆฌ์๋ฒ์ ๋ฅ๋ ฅ => Flow control
-
์ค๊ฐ ๋คํธ์ํฌ ์ํ์ ํผ์ก์ ๋ฌด => Congestion control
- ๋ฆฌ์๋ฒ๊ฐ ์์ ์ ์ํ๋ฅผ ๊ณ์ ํผ๋๋ฐฑ์ ์ฃผ๋ฉด ํด๊ฒฐ์ด ๊ฐ๋ฅํ๊ฐ?
- TCP ํค๋์ ๋ฆฌ์๋ธ ์๋์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ฌ์ด์ฆ๋งํผ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋ฉด ํด๊ฒฐ ๊ฐ๋ฅ
- Corner case ) ๋ฆฌ์๋ธ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ
- TCP ํค๋ ํ๋์ 0์ ์จ์ ์ผ๋ ์ธก์ ๋ณด๋ธ๋ค.
- ๋ฆฌ์๋ธ ๋ฒํผ์ ๊ณต๊ฐ์ด ์๊ธฐ๊ธฐ ์ ๊น์ง ๋ณด๋ด์ง ์๋๋ค.
- ...
- ์ดํ ๋ฆฌ์๋ธ ์ธก์ ์ผ๋ ๋ฒํผ์ ๋ณด๋ผ ACKs ๊ฐ ์์ด์ ๊ต์ฐฉ ์ํ์ ๋น ์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ํ์ง๋ง ์ผ๋ ์ธก์์๋ ์ฃผ๊ธฐ์ ์ผ๋ก 1Byte ํฌ๊ธฐ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ ๋ฆฌ๋ ํ์๋ฅผ ํตํด์ ์ด๋ฅผ ํด๊ฒฐํ๋ค.
- Silly Window Syndorme
- ์ค๋ช
- ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ์์ฑํด์ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๋ด๋ ค๋ณด๋ด๋ฉด ์๊ด์์
- ์ผ๋ ๋ฒํผ๋ ํญ์ ๊ฐ๋ํ๊ธฐ ๋๋ฌธ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ง๋ค์ด ๋ณด๋ด๋ ๊ฒฝ์ฐ,
- ์ธ๊ทธ๋จผํธ(๋ฐ์ดํฐ ์์ญ + ํค๋ ์์ญ) ๋ฅผ ๊ฐ๋ ์ฑ์์ ๋ณด๋ด๋ฉด ์ข๋ค. (์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์)
- ์ ์ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฆ๊ฒ ์์ฑํ๋ค๋ฉด ?
- ์ธ๊ทธ๋จผํธ๋ฅผ ์ผ๋ง๋ ์์ฃผ ๋ง๋ค์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ผํ๋๊ฐ์ ๋ํ ๋ฌธ์ ์ ๊ธฐ๋ฅผ ํ ์ ์๋ค.
- ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๋ ์ด๋์ ๋์ ๊ธฐ์ค์ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋ค.
- ๋ฐ์ดํฐ ์์ฑํ๋ ์ฆ์ ๋ฐ๋ก๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค๋ฉด ์ค๋ฒํค๋, ๋ญ๋น๊ฐ ๋๋ค.
- ๋ฐ์ดํฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ์๋ ๋ถ์์ ํ ์ํฉ์ด๋ค.
- Nagle's Algorithm ์ด ๋ฑ์ฅ
- ์ฒ์ TCP ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด 1 Byte ๋ผ๋ ๋ณด๋ธ๋ค.
- ๊ทธ ์ดํ๋ถํฐ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๋ฉด์ ๋ณด๋ผ ์ค๋น๋ฅผ ํ๋ค.
- Maximum Size ๊ฐ ์ฐจ๋ ๊ฒฝ์ฐ ๋๋ ๋ฐฉ๊ธ ๋ณด๋ธ ์ธ๊ทธ๋จผํธ์ ACKs๋ฅผ ๋ฐ์ ๊ฒฝ์ฐ ๋ณด๋ธ๋ค.
- ์ธ๊ทธ๋จผํธ๊ฐ ๋ค ์ฑ์์ง๊ธฐ ์ด์ ์ ACKs ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธ : ๋คํธ์ํฌ ์ํ, ์ฆ ์๋๊ฐ ์ข๋ค.
- ์ธ๊ทธ๋จผํธ๊ฐ ๋ค ์ฑ์์ง๋๊น์ง ACKs ๊ฐ ์ค์ง ์์๋ค๋ ๊ฒ ์๋ฏธ : ํด๋น ์ธ๊ทธ๋จผํธ๋ฅผ ๊ฐ๋ ์ฑ์ ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ก์
- ์ธ๊ทธ๋จผํธ ์ฌ์ด์ฆ๋ฅผ ์ด๋ป๊ฒ ํด์ ๋ณด๋ผ ๊ฒ์ธ๊ฐ์ ๋ํ ์ด์
- Maximum Size ๋ก ๋ณด๋ผ ๊ฒ์ธ๊ฐ
- ๋ ์ฑ์์ ๋ณด๋ผ ๊ฒ์ธ๊ฐ
-
Connection Management
-
TCP Connection ์ ๋งบ์ด๋๊ณ Sequence Number ํธ๋ํนํ๋ฉฐ Reliable ๊ณผ Flow Control ์ด์ ์ ์ด์ผ๊ธฐ
-
์ผ๋ ์ธก๊ณผ ๋ฆฌ์๋ฒ ์ธก์์๋ ์ต์ด์ ์ด๋ป๊ฒ ์๋ก๊ฐ์ Sequence Number ๋ฅผ ์๋ ๊ฒ์ธ๊ฐ?
-
์ด๋ค ๊ณผ์ ์ ๊ฑฐ์น๋๊ฐ? => ์์ฌ๊ฒฐ์ => ์๋ก ๊ฐ์ ํ์
-
2-way handshake
-
A์ B ์๋ก๊ฐ์ ์์ฒญ๊ณผ ์๋ต์ ๋ํด์ ํ ์ชฝ๋ง ์์ฒญ์ ๋ํ ์๋ต์ ์ป์์ ๋ฟ, ์๋๋ฐฉ์ ์ป์ง ๋ชปํ๋ค.
- 3-way handshake (Transport Layer ์์ ์ด๋ฃจ์ด์ง)
- A์ B ์๋ก๊ฐ์ ์์ฒญ๊ณผ ์๋ต์ ๋ํ ์ํธ๊ฐ์ ์ฐ๊ฒฐ์ ํ๊ธฐ ์ํจ
- 1) Client -> Server : SYNbit = 1, Seq = x
์ฌ์ฉํ ์ํ์ค ๋ฒํธ๋ฅผ ์ ์ ํ๊ณ ํด๋น ์ํ์ค ๋ฒํธ๋ฅผ TCP ํค๋์ ๋ด์์ ์ ์ก (SYN 1๋นํธ ๋ฐ์ดํฐ), ๋ฐ์ดํฐ๊ฐ ๋ถ์ง ์์ TCP ํค๋ ์์ฒด์ ํจํท์ ๋ณด๋ด๋ ๊ฒ์ด๋ค. 40Byte SYN ํจํท์ ์ ์กํ๋ ๊ฒ์ด๋ค. (์ธ๊ทธ๋จผํธ๊ฐ IP ํจํท์ ๋ด๊ธด๋ค) ๋ชจ๋ IP ํจํท์๋ ์ค๋ฒํค๋๊ฐ 40Byte ๊ฐ ๋ถ๋๋ค. (ํจํท ํค๋ : 20Byte + ์ธ๊ทธ๋จผํธ ํค๋ : 20Byte) - 2) Server -> Client : SYNbit = 1, Seq = y, ACKbit = 1, ACKnum = x+1
SYNACK ๋ฅผ ๋ณด๋ธ๋ค. - 3) Client -> Server : ACKbit = 1, ACKnum = y + 1
SYN์ ๋ํ ACK ์ด๊ธฐ๋ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ ๋ณด๋ด๋ ๋๋ ์ธ๊ทธ๋จผํธ์ด๋ค.
- TCP : Closing a Connection
- ํต์ ์ ๋๋๊ณ ์ดํ์ ๋คํธ์ํฌ๋ฅผ ๋๊ธฐ ์ํจ
- Client -> Server : FINbit = 1, Seq = x
์ปค๋ฅ์ ์ ๋๋ด๊ธฐ ์ํ FIN ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์กํ๋ค. - Server -> Client : ACKbit = 1, ACKnum = x + 1
- Server -> Client : FINbit = 1, Seq = y
- Client -> Server : ACKbit = 1, ACKnum = y + 1
-
Congestion control
-
window size ๋ผ๋ ๊ฒ์ ํ๊บผ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ ์์ด๋ค.
-
Flow control ์ ๋ฆฌ์๋ฒ๊ฐ ๊ฐ์ง ์ ์ฅ๊ณต๊ฐ์ ๋ง๊ฒ ์ ์กํ๋ ๊ฒ์ด๋ค.
-
window size ๋ ์๋๋ฐฉ์ buffer size ์ ๋ฐ๋ผ ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
-
ํ์ง๋ง window size ๋ ๋๊ฐ์ง ์์ธ์ ๋์์ ๊ณ ๋ คํด์ผ ํ๋ค.
-
Network ์ ์ํฉ
-
Receiver Buffer ์ ์ํฉ
- window size ๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ด ์๋๋ฅผ ์กฐ์ ํ๋ ๊ฒ, ๋ฐ๋ผ์ Network ์ํฉ๊ณผ Receiver Buffer ์ ๋ํ ๋ ๊ฐ์ ๊ฐ ์ค์์ ์ต์๊ฐ์ ๊ฐ์ง๊ณ window size ๋ฅผ ๊ฒฐ์ ํ๋ค. ํ์ง๋ง ํ๋์จ์ด ์คํ์ด ๋์์ง๋ฉด์ window size ๋ ๋๋ถ๋ถ Network ์ํฉ์ ๋ฐ์๋ฐ๋๋ค.
์ ๋ฆฌ )
- ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด, ๋ฐ์ดํฐ์ ๋จ์
- ํธ๋์คํฌํธ ๋ ์ด์ด, ๋ฐ์ดํฐ ๋จ์
- ๋คํธ์ํฌ ๋ ์ด์ด, ๋ฐ์ดํฐ ๋จ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ํ๋ก์ธ์ค ๊ณ์ธต๋ค์ด reliable ํ๊ฒ ํต์ ํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋กํ ์ฝ์
- TCP๋ ๊ฐ๊ฐ์ด ์ผ๋์ด๋ฉด์ ๋ฆฌ์๋ฒ (์ํธ ๊ฐ์ ์๋ํฌ์ธํธ)
- TCP SendBuffer ์ Receive Buffer ์ค๋ช
- TCP ์์ ์ ๊ณตํ๋ ์ธ๊ฐ์ง ์ค์ ๊ธฐ๋ฅ
- Nagle's Algorithm ์ด๋
- ์ผ๋ ์ธก์์ ์ ์กํด์ผํ ๋ฐ์ดํฐ๊ฐ ์์์๋ ๋ถ๊ตฌํ๊ณ , ์๋๋ฐฉ์ ์๋์ฐ ์ฌ์ด์ฆ๊ฐ ๋งค์ฐ ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ณด๋ผ ์ ์๋ ํจํท์ ํฌ๊ธฐ ์์ฒด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ ํฌ๊ธฐ์ ํจํท์ ๋ง๋ค์ง ์๊ณ ์๋ ๋ณด๋ด์ง ๋ชปํ๋ค. ๋ณด๋ผ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํจํท์ผ๋ก ๋ง๋ค์ง ์๊ณ , ๊ฐ๋ฅํ ๋ชจ์์ ๋ ํฐ ํจํท์ผ๋ก ๋ง๋ค์ด ํ๋ฒ์ ๋ณด๋ด๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์์ ๊ฒ. ๊ทธ ๋ฌธ์ ์ ๋ฐ๋ผ์ ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- Connection Management : 3-way handshaking ์ค๋ช
- TCP Closing a Connection ์ค๋ช
'๋คํธ์ํฌ > ๋คํธ์ํฌ ๊ฐ์ ๋ค์ ๊ฒ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
20180421 9 : (1) ~ (8) ๊น์ง ์ ์ฒด ์ค๋ช ํ๋ ๋๋ (0) | 2018.04.21 |
---|---|
20180418 8 : TCP, Congestion control (0) | 2018.04.18 |
20180415 6 : TCP, sender & receiver (0) | 2018.04.15 |
20180414 5 : Transport Layer, ๋ฉํฐ ํ๋ ์ฑ & ๋๋ฉํฐ ํ๋ ์ฑ (0) | 2018.04.14 |
20180412 4 : DNS (0) | 2018.04.12 |