TCP 3 way handshake & 4 way handshake
์ฐ๊ฒฐ์ ์ฑ๋ฆฝํ๊ณ ํด์ ํ๋ ๊ณผ์ ์ ๋งํ๋ค.
3 way handshake
TCP๋ ์ฅ์น๋ค ์ฌ์ด์ ๋ ผ๋ฆฌ์ ์ธ ์ ์์ ์ฑ๋ฆฝ์ํค๊ธฐ ์ํด 3 way handshake๋ฅผ ์ฌ์ฉํ๋ค.
TCP 3 way handshake(์ดํ 3way)๋ TCP/IP ํ๋กํ ์ฝ์ ์ด์ฉํด์ ํต์ ์ ํ๋ ์์ฉํ๋ก๊ทธ๋จ์ด
๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์ ๋จผ์ ์ ํํ ์ ์ก์ ๋ณด์ฅํ๊ธฐ ์ํด ์๋๋ฐฉ ์ปดํจํฐ์ ์ฌ์ ์ ์ธ์
์ ์๋ฆฝํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
TCP ํต์ ์ PAR(Positive Acknowledgement with Re-transmission)์ ํตํด ์ ๋ขฐ์ ์ธ ํต์ ์ ์ ๊ณตํ๋ค.
PAR์ ์ฌ์ฉํ๋ ๊ธฐ๊ธฐ๋ ack์ ๋ฐ์ ๋๊น์ง ๋ฐ์ดํฐ ์ ๋์ ์ฌ์ ์กํ๋ค.
์์ ์๊ฐ ๋ฐ์ดํฐ ์ ๋(์ธ๊ทธ๋จผํธ)์ด ์์๋ ๊ฒ์ ํ์ธํ๋ฉด ํด๋น ์ธ๊ทธ๋จผํธ๋ฅผ ์์ค๋ค.
๊ทธ๋ฌ๋ฉด sender๋ positive ack์ด ์ค์ง ์์ ๋ฐ์ดํฐ ์ ๋์ ๋ค์ ๋ณด๋ด์ผ ํ๋ค.
์๋๋ฐฉ์
HOST P์ HOST Q๊ฐ ์์ ๋, HOST P๊ฐ ํด๋ผ์ด์ธํธ, HOST Q๊ฐ ์๋ฒ ๋ผ๊ณ ๊ฐ์ ํด๋ณด์.
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ SYN ํจํท์ ๋ณด๋.Client > Server : TCP SYN
์๋ฒ๊ฐ SYN(x)์ ๋ฐ๊ณ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์๋ค๋ ์ ํธ ACK(x + 1)์ SYN(y)ํจํท์ ๋ณด๋.Server > Client : TCP SYN, ACK
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์๋ต(ACK(x+1), SYN(y))์ ๋ฐ๊ณ , ACK(y+1)๋ฅผ ์๋ฒ๋ก ๋ณด๋.Client > Server : TCP ACK
SYN : 'Synchronize sequence numbers', ์ฐ๊ฒฐ ์์ฒญ. ์ธ์ ์ ์ค์ ํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ ์ด๊ธฐ์ ์ํ์ค ๋ฒํธ๋ฅผ ๋ณด๋.
ACK : 'Acknowledgement', ๋ณด๋ธ ์ํ์ค ๋ฒํธ์ TCP ๊ณ์ธต์์์ ๊ธธ์ด ๋๋ ์์ ๋ํ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ์ ACK์ ํฌํจํ์ฌ ์ ์ก.
๋๊ธฐํ ์์ฒญ์ ๋ํ ๋ต๋ณ:
Client์ Sequence Number + 1์ ํ์ฌ ACK๋ก ๋๋ ค์ค๋ค.
์ด๋ ๊ฒ 3๋ฒ์ ํต์ ์ด ์๋ฃ๋๋ฉด ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋๋ค.
SYN์ ๋ณด๋ด๋ฉด ACK๋ฅผ ๋ฐ์ ๋ ๊น์ง ์ฌ์ ์กํ๋ค. ACK๊ฐ ์์ผ ์๋ฃ๋๋ค๋ ๋ป์ด๋ค.
์ด๋ฌํ ํ์๋ก ์์ชฝ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ค๋น๊ฐ ๋์๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ณ ,
์ค์ ๋ก ๋ฐ์ดํฐ ์ ๋ฌ์ด ์์ํ๊ธฐ ์ ์ ํ์ชฝ์ด ๋ค๋ฅธ ์ชฝ์ด ์ค๋น๋์๋ค๋ ๊ฒ์ ์ ์ ์๋๋ก ํ๋ค.
4 way handshake
4 way handshake๋ ์ฐ๊ฒฐ์ ํด์ ํ๋ ๊ณผ์ ์ด๋ค. ์ฌ๊ธฐ์๋ FIN ํ๋๊ทธ๋ฅผ ์ด์ฉํ๋ค.
FIN : ์ธ์ ์ ์ข ๋ฃ์ํค๋๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ ์ด์ ๋ณด๋ธ ๋ฐ์ดํฐ๊ฐ ์์์ ๋ํ๋ธ๋ค.
Termination์ ์ข
๋ฅ
TCP๋ ๋ ๊ฐ์ง ์ฐ๊ฒฐ ํด์ ๋ฐฉ์์ด ์๋ค.
Graceful connection release(์ ์์ ์ธ ์ฐ๊ฒฐ ํด์ )
์ ์์ ์ธ ์ฐ๊ฒฐ ํด์ ์์๋ ์์ชฝ์ด ์ปค๋ฅ์ ์ ๋ชจ๋ ๋ซ์ ๋๊น์ง ์ฐ๊ฒฐ๋์ด ์๋ค.
Abrupt connection release(๊ฐ์์ค๋ฐ ์ฐ๊ฒฐ ํด์ )
๊ฐ์๊ธฐ ํ TCP ์ํฐํฐ๊ฐ ์ฐ๊ฒฐ์ ๊ฐ์ ๋ก ๋ซ๋ ๊ฒฝ์ฐ
ํ ์ฌ์ฉ์๊ฐ ๋ ๋ฐ์ดํฐ ์ ์ก ๋ฐฉํฅ์ ๋ชจ๋ ๋ซ๋ ๊ฒฝ์ฐ
Abrupt
RST(TCP reset) ์ธ๊ทธ๋จผํธ๊ฐ ์ ์ก๋๋ฉด ๊ฐ์์ค๋ฌ์ด ์ฐ๊ฒฐ ํด์ ๊ฐ ์ํ๋๋๋ฐ, RST ์ธ๊ทธ๋จผํธ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ก๋๋ค.
์กด์ฌํ์ง ์๋ TCP ์ฐ๊ฒฐ์ ๋ํด ๋น SYN ์ธ๊ทธ๋จผํธ๊ฐ ์์ ๋ ๊ฒฝ์ฐ
์ด๋ฆฐ ์ปค๋ฅ์ ์์ ์ผ๋ถ TCP ๊ตฌํ์ด ์๋ชป๋ ํค๋๊ฐ ์๋ ์ธ๊ทธ๋จผํธ๊ฐ ์์ ๋ ๊ฒฝ์ฐ
RST ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๋ด, ํด๋น ์ปค๋ฅ์ ์ ๋ซ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค.
์ผ๋ถ ๊ตฌํ์์ ๊ธฐ์กด TCP ์ฐ๊ฒฐ์ ์ข ๋ฃํด์ผ ํ๋ ๊ฒฝ์ฐ
Graceful
์ฐ๊ฒฐ ์ข ๋ฃ ์์ฒญ ์ญ์, ์์ฒญ์ ๋จผ์ ์๋ํ ์์ฒญ์๋ฅผ Client๋ก, ์์ฒญ์ ๋ฐ์ ์์ ์๋ฅผ Server ์ชฝ์ผ๋ก ์๊ฐํ๋ฉด ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์๊ฒ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ค๋ FIN ํ๋๊ทธ ๋ณด๋.
์๋ฒ๋ FIN์ ๋ฐ๊ณ , ํ์ธํ๋ค๋ ACK๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค. ์ด ๋, ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด CLOSE_WAIT ์ํ๊ฐ ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณด๋๋ค๋ฉด, ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋์๋ค๋ FIN ํ๋๊ทธ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค.
ํด๋ผ์ด์ธํธ๋ FIN์ ๋ฐ๊ณ , ํ์ธํ๋ค๋ ACK๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ธ๋ค. ์ด ๋ ์์ง ์๋ฒ๋ก๋ถํฐ ๋ฐ์ง ๋ชปํ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก TIME_WAIT์ ํตํด ๊ธฐ๋ค๋ฆฐ๋ค.
์๋ฒ๋ ACK๋ฅผ ๋ฐ๊ณ , ์์ผ์ ๋ซ๋๋ค(Closed)
TIME_WAIT ์๊ฐ์ด ๋๋๋ฉด ํด๋ผ์ด์ธํธ๋ ๋ซ๋๋ค (Closed) => ์๋์น ์์ ์๋ฌ๋ก ์ฐ๊ฒฐ์ด ๋ฐ๋๋ฝ์ผ๋ก ๋น ์ง๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
์ด๋ ๊ฒ 4๋ฒ์ ํต์ ์ด ์๋ฃ๋๋ฉด ์ฐ๊ฒฐ์ด ํด์ ๋๋ค.
Last updated