[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
- SYN:
- client: ์ด๊ธฐ seq #x ์ ํ
- SYN message๋ฅผ ๋ณด๋(
SYNbit=1,Seq=x) - ํด๋ผ์ด์ธํธ ์ํ:
CLOSEDโSYN_SENT
- 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
- ACK:
- client:
SYNACK๋ฅผ ๋ฐ๊ณ ์๋ฒ๊ฐ ํ์ฑ ์ํ์์ ํ์ธ - ACK ๋ฉ์์ง๋ฅผ ์ ์ก(
ACKbit=1,ACKnum=y+1) - ์ด๋๋ถํฐ data๋ฅผ ํจ๊ป ์ ์ก ๊ฐ๋ฅ!(์ 2๋จ๊ณ๋ header๋ง ์ ์ก)
- client:
TCP closing connection(4-way_handshake)
- FIN from Client:
- client๊ฐ ์ฐ๊ฒฐ ์ข
๋ฃ๋ฅผ ์์:
close() - FIN ๋ฉ์์ง๋ฅผ ์ ์ก(
FINbit=1,seq=x) - client ์ํ:
ESTABLISHED โ FIN_WAIT_1 - ์ด ์ํ์์ ํด๋ผ์ด์ธํธ๋ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์์ง๋ง ๋ฐ์ ์๋ ์๋ค
- client๊ฐ ์ฐ๊ฒฐ ์ข
๋ฃ๋ฅผ ์์:
- ACK from Server:
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ FIN์ ACK๋ก ์๋ต(
ACKbit=1,ACKnum=x+1) - ์๋ฒ ์ํ:
ESTABLISHED โ CLOSE_WAIT - ์ด ์ํ์์ ์๋ฒ๋ ์ฌ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ค
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ FIN์ ACK๋ก ์๋ต(
- FIN from Server:
- ์๋ฒ๋ ์ฐ๊ฒฐ์ ์ข
๋ฃํ ์ค๋น๊ฐ ๋๋ฉด FIN ๋ฉ์์ง ์ ์ก(
FINbit=1,seq=y) - ์๋ฒ ์ํ:
CLOSE_WAIT โ LAST_ACK - ์ด ์ํ์์ ์๋ฒ๋ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ค
- ์๋ฒ๋ ์ฐ๊ฒฐ์ ์ข
๋ฃํ ์ค๋น๊ฐ ๋๋ฉด FIN ๋ฉ์์ง ์ ์ก(
- ACK from Client:
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ FIN์ ACK๋ก ์๋ต(
ACKbit=1,ACKnum=y+1) - ํด๋ผ์ด์ธํธ ์ํ: FIN_WAIT_2 โ TIME_WAIT โ CLOSED
- ์๋ฒ ์ํ: LAST_ACK โ CLOSED (client ACK ์์ ํ)
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ FIN์ ACK๋ก ์๋ต(
โ
TIME_WAIT ์ํ์ ์ค์์ฑ:
client๊ฐ ๋ฐ๋ก CLOSED ์ํ๊ฐ ๋์์ ๋, ๋ง์ฝ server์ FIN์ ๋ํ ACK๊ฐ ์์๋ค๋ฉด ๊ณ์ FIN์ ์ฌ์ ์กํ์ง๋ง ๋ฐ์ client๊ฐ ์๋ค. ๊ทธ๋ฌ๋ฉด ๋ฌดํ์ผ๋ก FIN์ ์ฌ์ ์กํ๊ฒ ๋จ

