๋ฐ์ํ
์คํฐ๋๋ฅผ ์ด์ํ๊ณ ์์ต๋๋ค. ํด๋น repository์ ๊ฐ๋ฉด ๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ณด์ค ์ ์์ต๋๋ค!
https://github.com/JulSaMo/CS-start
๐ ์ ์ก๊ณ์ธต (Transport Layer)
- TCP์ UDP ๋ OSI ํ์ค๋ชจ๋ธ๊ณผ TCP/IP ๋ชจ๋ธ์ ์ ์ก๊ณ์ธต(transport layer)์์ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ด๋ค.
- Endpoint ๊ฐ ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ด๋นํ๋ ๊ณ์ธต
- ์ ๋ขฐ์ฑ: ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ , ์์ ์ ์ผ๋ก ์ ๋ฌํ๊ฒ๋ ํด์ค๋ค.
- ์ ์ก: ํฌํธ ๋ฒํธ์ ํด๋นํ๋ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ฒ ํด์ค๋ค.
- TCP์ UDP๋ ํฌํธ๋ฒํธ๋ผ๋ ์ซ์๋ฅผ ์ด์ฉํ์ฌ ์ปดํจํฐ ์์ ์ด๋ค์๋น์ค(Application)์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด ์ข์์ง ์๋ณ
- ํฌํธ ๋ฒํธ๋ 0~65535(16๋นํธ ๋ถ)๊น์ง์ ์ซ์๋ก ๋์ด์์
- ๋ฒ์์ ๋ฐ๋ผ์ฉ๋๊ฐ ์ ํด์ง
- 0~1023์ ์ ์๋ ค์ง ํฌํธ (well-known port) : ์น์๋ฒ๋ ๋ฉ์ผ์๋ฒ๋ฑ ์ผ๋ฐ์ ์ธ ์๋ฒ ์ํํธ์จ์ด๊ฐ ํด๋ผ์ด์ธํธ ์๋น์ค์ ์์ฒญ์ ๋๊ธฐํ ๋ ์ฌ์ฉ
- 1024~49151์ ๋ฑ๋ก๋ ํฌํธ (registered port) : ์ ์กฐ์ ์ฒด์ ๋ ์์ ์ธ ์๋ฒ ์ํํธ์จ์ด๊ฐ ํด๋ผ์ด์ธํธ์ ์๋น์ค ์์ฒญ์ ๋๊ธฐํ ๋ ์ฌ์ฉ
- 49512~65535๋ ๋์ ํฌํธ (dynamic port) : ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉ
๐ ๋ง์ฝ, trnasport layer๊ฐ ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? (์ค์์ฑ)
- ๋ฐ์ดํฐ์ ์์ฐจ ์ ์ก์ด ์ํํ๊ฒ ๋์ง ์์ ๊ฒ์ด๋ค.
- 1,2,3 ๋ฐ์ดํฐ ์ ์ก → 2,3,1 ๋ก ์ ์ก๋์ด๋ฒ๋ฆผ
- ์ก์ ์๊ฐ ์๋ํ ๋ฐ์ดํฐ ์ ์ก์ด ๋์ง ์์
- ์ก์์ ์ ๊ฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋ ์ฐจ์ด๋ก ์ธํด ๋ฐ์ํ๋ Flow (ํ๋ฆ) ๋ฌธ์ ๋ฐ์
- ์๋ฅผ๋ค์ด, ์ก์ ์๊ฐ ์์ ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋๋๋ฐ, ์์ ์ ์ชฝ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋๊ฐ ๋๋ฆด ์ ์์ ๊ฒ.
- ์ด๋ ๊ฒ ๋๊ฒ ๋๋ฉด์ ์์ ์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ์์ ์ด๊ณผํ๊ฒ ๋๋ค๋ฉด '๋ฐ์ดํฐ์ ๋๋ฝ'์ด ๋ฐ์ํ๊ฒ ๋จ
- ๋คํธ์ํฌ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋(๋ผ์ฐํฐ)๋ก ๋ฐ์ํ๋ Congestion ๋ฌธ์ ๋ฐ์
- ์ก์ ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๋ณด๋๋๋ฐ, ๋คํธ์ํฌ์์ ์ก์ ์ด ๋์ง ์๋๋ค๋ฉด ๋ฐ์ดํฐ์ ์์ค์ด ๋ฐ์ํจ
์ด ๋ชจ๋ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ๊ฒ ๋๋ฉด ๊ฒฐ๊ตญ, ๋ฐ์ดํฐ์ ์์ค์ด ๋ฐ์ํ๊ฒ ๋ ๊ฒ์ด๋ค. ์๋์๊ฐ์ด!
(https://www.youtube.com/watch?v=ikDVGYp5dhg)
๊ทธ๋์ ์ด๋ฐ ๊ฒ๋ค์ ๋ง๊ธฐ ์ํด์ ํต์ ๊ท์ฝ์ ์ ์ํ๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก TCP , UDP์ ๊ฐ์ ํ๋กํ ์ฝ์ด๋ค.
๐ TCP (Transmission Control Protocol)
- ์ฐ๊ฒฐ ์งํฅ์ ํ๋กํ ์ฝ์ด๋ค. ์ฆ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฐ๊ฒฐ๋ ์ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ์ด๋ค.
- ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํ๋กํ ์ฝ
- ๋ฐ์ดํฐ๋ฅผ ํ์คํ๊ฒ ์ฃผ๊ณ ๋ฐ๊ณ ์ถ์๋ TCP ์ฌ์ฉ
- TCP๋ ํต์ ํ ์ปดํจํฐ๋ผ๋ฆฌ '๋ณด๋์', '๋์ฐฉํ์'์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ๋ก์จ ํต์ ์ ์ ๋ขฐ์ฑ์ ๋์.
- ์น์ด๋ ๋ฉ์ผ, ํ์ผ๊ณต์ ๋ฑ ๋ฐ์ดํฐ๋ฅผ ๋๋ฝ์ํค๊ณ ์ถ์ง ์์ ์๋น์ค์ ๊ฒฝ์ฐ TCP ์ฌ์ฉ
- ๋ฐ์ดํฐ์ ์์ฐจ ์ ์ก์ ๋ณด์ฅํ๋ค
- ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ ์ดํ๊ณ , ํผ์ก์ ์ ์ดํ๋ค. (์์์ ๋งํ ๋ฌธ์ ์ ๋ค์ ์ ์ดํด์, ๋ฐ์ดํฐ์ ์์ค์ ๋ง๋๋ค๋ ๋ป์ด๋ค.)
- Error detection : check sum ํด์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์๋ค.
- ์ธ๊ทธ๋จผํธ ๋จ์๋ก ์ ์ก๊ณ์ธต ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋์ํ๋ค.
- ์ ์ก๊ณ์ธต ์์ ์๋ layer์์ ๋ด๋ ค์จ ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์
- ๊ฐ๊ฐ TCP header๋ฅผ ๋ถ์ฌ์ ๋์! → ์ด ํ ๋ฉ์ด๋ฆฌ๊ฐ segment
๐ธ TCP์ ๋จ์
- ๋ฐ์ดํฐ๋ก ๋ณด๋ด๊ธฐ ์ ์ ๋ฐ๋์ ์ฐ๊ฒฐ์ด ํ์ฑ๋์ด์ผ ํ๋ค. (์ฐ๊ฒฐ์งํฅ)
- 1:1ํต์ ๋ง ๊ฐ๋ฅํ๋ค
- UDP๋ณด๋ค ๋ฐ์ดํฐ ์ ์ก ์๋๊ฐ ๋๋ฆฌ๋ค.
- ๋งค๋ฒ connection(3way handshake)์ ์ฐ๊ฒฐํด์ ์๊ฐ์์ค์ด ๋ฐ์ํ ์ ๋ฐ์ ์๋ค.
- ํจํท์ ์กฐ๊ธ๋ง ์์คํด๋ ์ฌ์ ์ก์ ๋ค์ ํด์ผํ๋ค. (์ ์ฌ์ง์์๋ ๋ณด๋ฉด, ACK๋ฅผ ๋ฐ์ง ๋ชปํ๋ฉด ์ฌ์ ์กํ๋ ๊ณผ์ )
๐ ๋ฉ์ผ, ํ์ผ ์ก์์ ๊ณผ ๊ฐ์ด ์กฐ๊ธ๋ง ์์ค๋์ด๋ ์ฌ์ ์กํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ์ ๋งค์ฐ ํฉ๋ฆฌ์ ์ด๋ค.
ํ์ง๋ง, ๋ณ๋ก ํฐ๊ฐ ๋์ง ์๋๋ฐ๋ ์๊ด์๋ ์๋น์ค๋ผ๋ฉด, ๊ตณ์ด ์ด๋ ๊ฒ๊น์ง ํ ํ์๊ฐ ์๋ค. ์์์คํธ๋ฆฌ๋ฐ๊ฐ์๊ฒฝ์ฐ!
์ด๋ด๋๋ ๋นํฉ๋ฆฌ์ ์ผ ์ ์๋ค. ๊ทธ๋์ ๋์จ ๊ฐ๋ ์ด UDP ํ๋กํ ์ฝ์ด๋ค
๐ UDP (User Datagram Protocol)
- TCP๋ณด๋ค ์ ๋ขฐ์ฑ์ด ๋จ์ด์ง์ง๋ง, ์ ์ก์๋๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๋น ๋ฅธ ํ๋กํ ์ฝ
- ์์ฐจ์ ์ก x, ํ๋ฆ์ ์ด x, ํผ์ก์ ์ด x
- Connectionless : TCP์ ๋ค๋ฅด๊ฒ Connection์ ๋์ ์ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.
- ์์ฐจ์ ์ก x, ํ๋ฆ์ ์ด x, ํผ์ก์ ์ด x ํ์ง ์๊ณ , ๊ทธ๋ฅ check sum ํด์ ์๋ฌ๋ง ๊ฒ์ถํด์ค๋ค.
- ๋น๊ต์ ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ์ด ์ค์ํ์ง ์์ ๋ ์ฌ์ฉํ๋ค. (ex.์์์คํธ๋ฆฌ๋ฐ ๋ฑ)
- ํจํท ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค.
- ์๋ ๊ทธ๋ฆผ์ฒ๋ผ TCP์ ๋ฌ๋ฆฌ datagram ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- datagram์ด๋ ? ๋ ๋ฆฝ์ ์ธ ๊ด๊ณ๋ฅผ ๊ฐ๋ ํจํท ๋จ์
- Data๋ฅผ ์ชผ๊ฐ์ง ์๊ณ UDP ํค๋๋ฅผ ๋ถ์ฌ์ ๋ง๋ค์ด์ง๋ ๊ฒ User Datagram์ด๋ค.
- (TCP์์ ์ฐจ์ด์ ) ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๋์ค์ application ๋จ์์ data๋ฅผ ์ชผ๊ฐ์ฃผ๋ ์์ ์ด ํ ๋ฒ ๋ ํ์ํ๋ค.
- ๊ถ๊ธ์ฆ) ๊ทธ๋์ ์ผ์ผํ ํจํท ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค๋๊ฑด๊ฐ?? ๋ง๋๋ฏ!!?!?
- ์๋ ๊ทธ๋ฆผ์ฒ๋ผ TCP์ ๋ฌ๋ฆฌ datagram ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
๐ธ UDP์ ๋จ์
- ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ์ด ์๋ค.
- ์๋ฏธ์๋ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์๋ ์ผ์ผํ ํจํท์ ๊ด๋ฆฌํด์ฃผ์ด์ผํ๋ค. (์ ์ฌ์ง!!)
โ ๋ฉด์ ์ ์ํ ์ค๋น! TCP์ UDP์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ดํด๋ณด๊ธฐ
https://coding-factory.tistory.com/614#recentComments
๐ Reference
https://www.youtube.com/watch?v=ikDVGYp5dhg
https://coding-factory.tistory.com/614#recentComments
https://mangkyu.tistory.com/15
https://github.com/JulSaMo/CS-start/pull/38
๋ฐ์ํ