[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์ ์ฌ์ ์กํ๊ฒ ๋จ
This post is licensed under CC BY 4.0 by the author.