TCP 3 way handshake & 4 way handshake
Last updated
Last updated
Table of Contents
์ ๊ทธ๋ฅ ๋ณด๋ด๋ ๊ฒ ์๋๊ณ handshake ๊ณผ์ ์ ๊ฑฐ์น ๊น์?
๊ทธ๋ผ ์ฐ์ TCP ํต์ ์ด๋ ๋ญ๊น์?
TCP๋ unreliable network์์ reliableํ ์ ์ก์ ๋ณด์ฅํ ์ ์๊ฒ ํ๋ ํ๋กํ ์ฝ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด handshake๋ reliableํ ์ ์ก์ ์ํด ํ์ํ๋ค๊ณ ์๊ฐํด๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ตณ์ด reliableํ ์ ์ก์ด ํ์๊ฐ ์๋ค๋ฉด, handshake๋ฅผ ํตํด ์ฐ๊ฒฐ ์ฑ๋ฆฝ์ ํด์ผํ ๊น์?
UDP์ ๊ฒฝ์ฐ๋ reliableํ ์ ์ก์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ UDP๋ ํต์ ์ ํ๋ ค๋ ์๋๋ฐฉ์ด ์ง๊ธ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ ์ ์๋ ์ง ์๋ ์ง๋ฅผ ํ์ธํ์ง ์๊ณ ๊ทธ๋ฅ ๋ณด๋ ๋๋ค. ๊ทธ๋์ handshake ๊ณผ์ ์ ํตํด ์๋๋ฐฉ์ ์ํฉ์ด ์ด๋ค ์ง, ์ค๋น๊ฐ ๋์ด ์๋ ์ง ํ์ธํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์, handshake๋ฅผ ๊ฑฐ์น์ง ์์ต๋๋ค.
Transmission Control Protocol
๊ทธ๋ ๋ค๋ฉด handshake๊ฐ ๋ญ๊ธธ๋ TCP๋ reliableํ ์ ์ก์ ๋ณด์ฅํ ์ ์๋ ๊ฑธ๊น์?
์ฐ์ handshake๋ ์ฐ๊ฒฐ์ ์ฑ๋ฆฝํ ๋, ํด์ ํ ๋ ๋ชจ๋ ์ผ์ด๋ฉ๋๋ค.
์ฑ๋ฆฝํ ๋๋ ์ธ๋ฒ, ํด์ ํ ๋๋ ๋ค๋ฒ ํจํท์ ์ฃผ๊ณ ๋ฐ์ต๋๋ค. ๊ทธ๋์ ์ฑ๋ฆฝํ ๋๋ 3-way handshake
, ํด์ ํ ๋๋ 4-way handshake
๊ฐ ์ผ์ด๋๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ผ ์ผ๋จ ์ฐ๊ฒฐ์ ์ฑ๋ฆฝํ๊ธฐ ์ํ 3 way handshake ๊ณผ์ ์ ๋จผ์ ์ดํด๋ด ์๋ค.
3 way handshake์ ํต์ฌ์ ์๋ก sequence number๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ์ํ๋ฅผ ๋๊ธฐํํ๋ ๊ฒ
์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ์ถ์ด ํ๋ ํธ์คํธ(ํด๋ผ์ด์ธํธ) application์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋ ๋ค๋ฅธ ํธ์คํธ(์๋ฒ)์ ์ฐ๊ฒฐ์ ํ๊ณ ์ถ๋ค๊ณ TCP์ ์๋ฆด ๊ฒ์ ๋๋ค.
๊ทธ๋ผ ์ด์ client์ TCP๊ฐ ์๋ฒ์ TCP์ connection์ ์ฑ๋ฆฝํ๊ธฐ ์ํด 3-way handshake๋ฅผ ์งํํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ชฝ TCP๊ฐ ์๋ฒ ์ชฝ TCP์๊ฒ SYN segment
๋ฅผ ๋ณด๋
๋๋ค.
segment๋?transport layer์์์ ๋ฐ์ดํฐ ์ ์ก ๋จ์
SYN(synchronize) segment?TCP ํค๋ ์ค์
SYN bit
๋ฅผ 1๋ก ์ธํ ํ ์ธ๊ทธ๋จผํธ ๋ผ์ SYN segement๋ผ๊ณ ํฉ๋๋ค.
์ด ๋ segment์๋, ์ฐ๊ฒฐ์ ์์ฒญํ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ํํ ๋๋ค sequence number๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์๋ฒ๋ SYN segment
๋ฅผ ๋ฐ๊ณ , TCP ๋ฒํผ์ ์ฐ๊ฒฐ์ ์ํ ๋ณ์๋ค์ ํ ๋นํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ SYN segment๋ฅผ ์ ๋ฐ์๋ค๋ ์๋ฏธ๋ก TCP ํค๋์ ACK(acknowledgment) ๋ถ๋ถ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ seq # +1๋ก ์ธํ
ํฉ๋๋ค.
๋, ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ SYN segment๋ฅผ ๋ณด๋ธ ๊ฒ์ฒ๋ผ ์ญ์ ์๋ฒ ์์ ์ด ์ ํํ ๋๋ค seq #๋ฅผ ๋ด์์ SYN segment๋ก์์ ์ญํ ๋ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด SYN bit๋ 1๋ก ์ธํ ๋๊ฒ ์ฃ ?
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ SYN ACK segment
๋ฅผ ๋ฐ๊ณ , ์ฐ๊ฒฐ์ ์ํ ๋ฒํผ์ ๋ณ์๋ฅผ ์ญ์ ํ ๋นํฉ๋๋ค. ๋ ์๋ฒ์ seq #๋ฅผ ์ ๋ฐ์๋ค๋ ์๋ฏธ์์ ACK segment
๋ฅผ ๋ณด๋
๋๋ค.
TCP๋ ์๋ฐฉํฅ ์ฐ๊ฒฐ์ด๋ฏ๋ก, ๊ฐ์ seq #๋ฅผ ๋ณด๋ด๊ณ ์๋ก ์ ๋ฐ์๋์ง ํ์ธํ๊ธฐ ์ํด SYN ACK segment๋ฅผ ์๋ก ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ๋๋ค. ๊ทผ๋ฐ ์๋ฒ๊ฐ SYN, ACK๋ฅผ ํ๊บผ๋ฒ์ ๋ณด๋ด๋ฏ๋ก 3 way๋ก handshake๊ฐ ์งํ๋ฉ๋๋ค.
์ ๊ทธ๋ฆผ์ ์๋์์์ง๋ง, ์ด์ธ์๋ 3 way handshake๋ฅผ ํตํด ๊ฒฐ์ ๋๋ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.
์ค๋๋ ์ TCP๋ ๋๋ถ๋ถ flow control์ ์ํด Stop and Wait ๋ฐฉ์ ๋์ Sliding Window
์ฌ์ฉํฉ๋๋ค. ์ด ๋ ์ฌ์ฉํ๋ sliding window์ ํฌ๊ธฐ๋ three way handsake๋ฅผ ํตํด ๊ฐ์ ์ ํ ์๋์ฐ ์ฌ์ด์ฆ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๊ทธ ์ธ์ ๋คํธ์ํฌ ์ํฉ(RTT)์ ๊ณ ๋ คํด์ ๊ฒฐ์ ๋ฉ๋๋ค. ๋คํธ์ํฌ๊ฐ ์ข์ง ์์ ์๋ก ์๋์ฐ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฒ ๋ฉ๋๋ค.
์ด ๋ ์ ํ ์๋์ฐ ํฌ๊ธฐ๋ ๊ณ์ํด์ ์ํฉ์ ๋ง๊ฒ ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ฐ๊ฒฐ ๋ ํ์๋ ์๋ก segment๋ฅผ ๋ณด๋ด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
ํ์ ์ฐ๊ฒฐ์ ํด์ ํ๊ณ ์ถ์ ๋, ์ฐ๊ฒฐ๋ ๋ ํธ์คํธ ์ด๋์๋ ์ฐ๊ฒฐ์ ํด์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ์ ํด์ ํ๊ธฐ ์ํด 4 way handshake ๊ณผ์ ์ด ์งํ๋ฉ๋๋ค.
์ฐ๊ฒฐ์ ์ข ๋ฃํ๊ณ ์ถ์ ์ชฝ(์ ์์์ ํด๋ผ์ด์ธํธ)์์ header์ FIN bit๋ฅผ 1๋ก ์ธํ ํด์ ๋ณด๋ ๋๋ค.
์๋ฒ๋ ์ segment๋ฅผ ๋ฐ๊ณ , ๋ฐ์๋ค๋ ์๋ฏธ๋ก ACK๋ฅผ ๋ณด๋ ๋๋ค. (์ด ๋ ๋ณด๋ด์ผ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋จ์ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด ์ฐ๊ฒฐ์ ๋ฐ๋ก ์ข ๋ฃํ์ง ์์ต๋๋ค.)
์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณด๋ธ ํ ์ฐ๊ฒฐ์ ์ข ๋ฃํ ์ค๋น๊ฐ ๋์ผ๋ฏ๋ก FIN bit๋ฅผ 1๋ก ์ธํ ํด์ ๋ณด๋ ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๊ฐ ์ข ๋ฃํ๋ค๋ ๊ฑธ ํ์ธํ๋ค๋ ์๋ฏธ๋ก ACK๋ฅผ ๋ณด๋ ๋๋ค. ์ด ๋, ํด๋ผ์ด์ธํธ๋ ์์ง ์๋ฒ๋ก๋ถํฐ ๋ฐ์ง ๋ชปํ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ์ ์ ๊ธฐ๋ค๋ฆฐ ํ์ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค. ์ด ๋ ๋ ํธ์คํธ๋ ์ฐ๊ฒฐ์ ์ํด ์ฌ์ฉํ๋ resoure๋ฅผ ํด์ ํฉ๋๋ค.
์๋ฒ๊ฐ ๋จผ์ ์ข ๋ฃ๋ฅผ ํ๋ คํจ
์๋ฒ -> ํด๋ผ: FIN ACK
ํด๋ผ -> ์๋ฒ: ACK
ํด๋ผ -> ์๋ฒ: FIN ACK
์๋ฒ -> ํด๋ผ: ACK
์ฐธ๊ณ
https://asfirstalways.tistory.com/356
https://www.youtube.com/watch?v=DC9FfKSgisg