๊ฐœ๋ฐœ ์ง€์‹/Network ์ง€์‹

๐ŸŒ ์•„์ง๋„ ๋ชจํ˜ธํ•œ TCP / UDP ๊ฐœ๋… โ“ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜์ž

์ธํŒŒ_ 2022. 12. 15. 08:51

tcp-udp

HTTP / IP / TCP / UDP ๋Š” ๋ชจ๋‘ ํ”„๋กœํ† ์ฝœ

ํ”„๋กœํ† ์ฝœ์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ˜•์‹ ๋Œ€ํ•œ ๊ทœ์น™ ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์ˆ˜์‹  ํ˜ธ์ŠคํŠธ๊ฐ€ ์ „์†ก ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์„ค๊ณ„๋œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ž‘์„ฑ๋œ ๋ฐ์ดํ„ฐ ํ˜•์‹์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด HTTP ๋ฉ”์„ธ์ง€ ํ—ค๋”๋„ ๊ฒฐ๊ตญ ์ผ์ข…์˜ ๊ทœ์น™์ด๋ฉฐ, IP์˜ ์ˆซ์ž๋„ ๊ทœ์น™์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์ผ ๊ทœ์น™์„ ๊นจ๋Š” 256.256.256.256 ์™€ ๊ฐ™์€ ํ˜•์‹์€ ์กด์žฌํ•˜์ง€๋„ ์•Š๋Š” ์•„์ดํ”ผ์ด๋ฉฐ ์ž‘๋™ํ•˜์ง€๋„ ์•Š๋Š”๋‹ค.

HTTP์™€ IP ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šฐ๊ฒŒ๋˜๋ฉด ๋ฐ”๋กœ ๊ทธ๋‹ค์Œ ์ ‘ํ•ด๋ณด๋Š” ํ”„๋กœํ† ์ฝœ ์Œ๋‘ฅ์ด๊ฐ€ ๋ฐ”๋กœ TCP / UDP ์ผ ๊ฒƒ์ด๋‹ค.

๋‹ค๋งŒ ์ด TCP์™€ UDP์— ๋Œ€ํ•ด์„œ ๊ท€๊ฐ€ ์•„ํ”Œ์ •๋„๋กœ ๋“ค์–ด๋ดค๊ฒ ์ง€๋งŒ ์•„๋ฌด๋ฆฌ ๋“ค์–ด๋„ ๊ฐœ๋…์ด ์• ๋งคํ•˜๊ฒŒ ๋Š๊ปด์ง„๋‹ค.

์™œ๋ƒํ•˜๋ฉด HTTP ๊ฐ™์€ ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ ๋„คํŠธ์›Œํฌ ํƒญ์—์„œ HTTP ๋ฉ”์„ธ์ง€์˜ ํ—ค๋”(header)๋กœ ์–ด๋– ํ•œ ๊ตฌ์กฐ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”์ง€ ๋ˆˆ์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋˜ํ•œ IP ๊ฐ™์€ ๊ฒฝ์šฐ 192.168.10.1 ๊ฐ™์ด ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ๋ฌด์–ธ๊ฐ€ ์ฃผ์†Œ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž„์„ ์•Œ์ˆ˜ ์žˆ๊ณ , ๋ธŒ๋ผ์šฐ์ €์— ์•„์ดํ”ผ๋กœ ์ ‘์†ํ•˜๋ฉด ํ•ด๋‹น ํ™ˆํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด ์–ด๋– ํ•œ ๋„คํŠธ์›Œํ‚น ๋™์ž‘์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Œ์„ ์ง๊ฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

http-ip

 

 

๊ทธ๋Ÿฌ๋‚˜ TCP / UDP๋Š” 3 HandShake๋‹ˆ ์‹ ๋ขฐ์„ฑ๋‹ˆ ๋ญ๋‹ˆ ์ง€๊ฒน๊ฒŒ ๊ฐœ๋… ๋‹จ์–ด์™€ ํ‘œ, ๊ทธ๋ฆผ์€ ๋ด์™”์ง€๋งŒ, ์‹ค์งˆ์ ์ธ ํ†ต์‹  ๊ฒฐ๊ณผ์™€ ๊ฐ™์€ ๋ˆˆ์œผ๋กœ ๋ณด์ด๋Š”๊ฒŒ ์—†์–ด ์ˆœ ์ด๋ก  ๋ฉ์–ด๋ฆฌ๋กœ ๋Š๊ปด ๋ฐฑ๋‚ ๋ฐฑ๋ฒˆ ๋“ค์–ด๋„ ์ž˜ ์™€๋‹ฟ์ง€ ์•Š๋Š”๊ฒŒ ํ˜„์‹ค์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์™€์ด์–ด์ƒคํฌ(Wireshark) ๊ฐ™์€ ์ „๋ฌธ ํˆด์„ ์“ฐ๊ธฐ์—๋Š” ๋ฉ”๋‰ด๋„ ๋ณต์žกํ•˜๊ณ  ์›ํ•˜๋Š” ํŒจํ‚ท์„ ํ•„ํ„ฐ๋งํ•˜๊ธฐ๋„ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊บผ๋ ค์ง€๋Š” ๊ฒƒ๋„ ์‚ฌ์‹ค์ด๋‹ค.

์‚ฌ์‹ค TCP๋งŒ ํ•ด๋„ ๊ต‰์žฅํžˆ ์˜ค๋ž˜๋œ ์—ญ์‚ฌ๋ฅผ ์ง€๋‹Œ ํ”„๋กœํ† ์ฝœ์ด๋ผ ์ด์— ๋Œ€ํ•œ ์ด๋ก ๋„ ๋ช‡๋ฐฑ์žฅ์ด ๋„˜์–ด๊ฐˆ์ •๋„๋กœ ๊ต‰์žฅํžˆ ๋ฐฉ๋Œ€ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” TCP์™€ UDP์— ๋Œ€ํ•œ ์ด๋ก ๋ฉ์–ด๋ฆฌ ๊ฐœ๋…์„ ์นœ์ˆ™ํ•˜๊ฒŒ ์ ‘๊ทผํ•˜์—ฌ ์‚ดํŽด๋ณด๊ณ , ์‹œ๊ฐ์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋…์„ ๋‹ค์ง€๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ ๋นˆ์•ฝํ•˜๊ฒŒ ๋ฐฐ์šฐ๋Š” UDP์— ๋Œ€ํ•ด์„œ ์ตœ์‹  ๊ธฐ์ˆ ์ธ HTTP 3.0๋ฅผ ์†Œ๊ฐœํ•˜๋ฉฐ ์™œ ๊ฐ๊ด‘์„ ๋ฐ›์•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ข€๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ๊ฒƒ์ด๋‹ค.


TCP - ์ „์†ก ์ œ์–ด ํ”„๋กœํ† ์ฝœ

IP(Internet Protocol)๊ฐ€ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ๋กœ์„œ ๋ณต์žกํ•œ ์ธํ„ฐ๋„ท ๋ง ์†์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ IP ์ฃผ์†Œ์™€ ํŒจํ‚ท๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ํ†ตํ•ด ํ†ต์‹ ์„ ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด,

TCP(Transmission Control Protocol)๋Š” IP ๊ทœ์น™์œผ๋กœ๋งŒ ํ†ต์‹ ํ•˜๊ธฐ์— ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ๋ถˆ์•ˆ์ •ํ•˜๋˜ ์—ฌ๋Ÿฌ ๋‹จ์ ๋“ค(ํŒจํ‚ท ์ˆœ์„œ๊ฐ€ ์ด์ƒํ•˜๊ฑฐ๋‚˜ ํŒจํ‚ท์ด ์œ ์‹ค)์„ ์ปค๋ฒ„ํ•ด, ํŒจํ‚ท ์ „์†ก์„ ์ œ์–ดํ•˜์—ฌ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์ฆํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.

 

IP์™€ TCP ๋‘˜๋‹ค ํ”„๋กœํ† ์ฝœ์ด์ง€๋งŒ ์ด ๋‘˜์„ ๋™์ผ์‹œ๋กœ ๋ณด๋ฉด ์•ˆ๋œ๋‹ค. ์ด ๋‘˜์€ ๋ณ„๊ฐœ์˜ ๊ทœ์น™์ด๋‹ค.

IP ๊ทœ์น™์— ์จ์žˆ๋Š”๋Œ€๋กœ ๋ชฉ์ ์ง€๊นŒ์ง€ ๋‹ค๋‹ค๋ž์œผ๋ฉด, TCP ๊ทœ์น™์— ์จ์žˆ๋Š”๋Œ€๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋„์ฐฉํ–ˆ๋Š”์ง€ ์ •ํ™•ํžˆ ๋ˆ„๊ตฌ์—๊ฒŒ ์ „๋‹ฌ๋˜์•ผํ•˜๋Š”์ง€ ํ•˜๋‚˜ํ•˜๋‚˜ ๋”ฐ์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์€ํ–‰ ์—…๋ฌด๋‚˜ ๋ฉ”์ผ๊ณผ ๊ฐ™์€ ๋ฐ˜๋“œ์‹œ ์ˆ˜์‹ ์ž๊ฐ€ ์ •๋ณด๋ฅผ ๋ฐ›์•„์•ผํ•˜๋Š” ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ํ†ต์‹ ์ด ํ•„์š”ํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

tcp-udp


๐Ÿ“ฆ TCP์˜ ์•ˆ์ „ ํฌ์žฅ

์•„์ง๋„ TCP์— ๋Œ€ํ•ด ์ž˜ ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ ์ ‘๊ทผํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค.

์ธํ„ฐ๋„ท ํ†ต์‹ ์„ ํƒ๋ฐฐ ์ˆ˜ํ•˜๋ฌผ๋กœ ๋น„์œ ํ•˜์ž๋ฉด, IP๋Š” ๋‹จ์ˆœํžˆ ๋ฐฐ๋‹ฌ ์ฃผ์†Œ์ง€๋ผ๊ณ  ํ•˜๋ฉด TCP๋Š” ์ด ๋ฐฐ๋‹ฌ์ง€๋กœ ๋ฌธ์ œ์—†์ด ์ „์†ก๋˜๋„๋ก ํƒ๋ฐฐ ์Šคํ‹ฐ์ปค์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ถ€๊ฐ€ ์ •๋ณด๋“ค์„ ๊ฐ€๋ฏธํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ๋‹จ์ˆœํžˆ ๋ชฉ์ ์ง€ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆœ์„œ, ๊ฒ€์ฆ, ์ „์†ก ์ œ์–ด ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์–ด IP ์ฃผ์†Œ์ง€๋กœ๋งŒ ๋ฌผํ’ˆ์„ ๋ฐฐ๋‹ฌํ•˜๊ธฐ์—” ๋ถˆ์•ˆ์ •ํ•œ ๋ถ€๋ถ„๋“ค์„ ํ™•์‹คํ•˜๊ฒŒ ์ปค๋ฒ„ํ•˜์—ฌ ๋ฐฐ๋‹ฌํ’ˆ์ด ๋ชฉ์ ์ง€๊นŒ์ง€ ์•ˆ์ „ํ•˜๊ฒŒ ๋„์ฐฉํ•˜๋„๋ก ๋ณด์ฆํ•œ๋‹ค.

TCP0data

 

์ „์†ก ๋ฐ์ดํ„ฐ๊ฐ€ ํฌ์žฅ๋˜๋Š” ๊ณผ์ •์„ ๋‚˜์—ดํ•ด๋ณด๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

๋‹ค๋งŒ ์ด๋ถ€๋ถ„์€ OSI 7 Layer์™€ ๋”๋ถˆ์–ด TCP/IP 4๊ณ„์ธต ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ด ํฌ์ŠคํŒ…์—์„œ ๋„คํŠธ์›Œํ‚น ๊นŒ์ง€ ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์–ด ๊ทธ๋ฆผ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์˜€๋‹ค.

  1. ์ „์†ก๋ฐ์ดํ„ฐ๋ฅผ TCP ํฌ์žฅํ•œ๋‹ค.
  2. ํฌ์žฅํ•œ ์ „์†ก๋ฐ์ดํ„ฐ๋ฅผ IP ํฌ์žฅํ•œ๋‹ค
  3. ํฌ์žฅํ•œ ์ „์†ก๋ฐ์ดํ„ฐ๋ฅผ ์ด๋”๋„ท ํฌ์žฅํ•œ๋‹ค
  4. ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์ƒ๋Œ€ ์ปดํ“จํ„ฐ ์„œ๋ฒ„์— ๋„๋‹ฌํ•˜์—ฌ ํฌ์žฅ๋œ๊ฑธ ํ•˜๋‚˜์”ฉ ํ’€๋ฉฐ ์ „์†ก๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค

TCP
https://medium.com/@i01029407043/http-%EC%9B%B9-%EA%B8%B0%EB%B3%B8-%EC%A7%80%EC%8B%9D-1-37000d83705b


โœ… TCP์˜ ๊ผผ๊ผผํ•œ ํ†ต์‹  ํ™•์ธ

TCP๋Š” ์‹ ๋ขฐ์„ฑ ํ”„๋กœํ† ์ฝœ ๋‹ต๊ฒŒ, ๋ฐฐ๋‹ฌ ํ•˜๊ธฐ์ „์— ๋ชฉ์ ์ง€๊ฐ€ ๋ฌด์‚ฌํ•œ์ง€ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ณ  ๋ฐฐ๋‹ฌ ๋๋‚˜๊ณ ๋„ ๋˜ ํ™•์ธ๋„ ํ•ด์ฃผ๋Š” ๊ต‰์žฅํžˆ ์นœ์ ˆํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ํ†ต์‹ ์„ ์‹œ์ž‘ํ•  ๋•Œ์™€ ์ข…๋ฃŒํ•  ๋•Œ ์„œ๋กœ ์ค€๋น„๊ฐ€ ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ฏธ๋ฆฌ ๋จผ์ € ๋ฌผ์–ด๋ณด๊ณ  ํŒจํ‚ท์„ ์ „์†กํ•  ์ˆœ์„œ๋ฅผ ์ •ํ•˜๊ณ  ๋‚˜์„œ์•ผ ๋ณธ๊ฒฉ์ ์ธ ํ†ต์‹ ์„ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ฒน๋„๋ก ๋“ค์€ 3 Way Handshake ์™€ 4 Way Handshake ๊ณผ์ •์ด๋‹ค.

๋‘˜๋‹ค ๋˜‘๊ฐ™์€ ํ•ธ๋“œ์‰์ดํฌ(Handshake)์ง€๋งŒ, 3 Way๋Š” ํ†ต์‹ ์„ ์‹œ์ž‘ํ• ๋•Œ, 4 Way๋Š” ํ†ต์‹ ์„ ๋งˆ์น ๋•Œ ๊ฑฐ์น˜๋Š” ๊ณผ์ •์ด๋ผ๋Š” ์ฐจ์ด๋งŒ ์žˆ์„ ๋ฟ์ด๋‹ค.

ํ•œ๋งˆ๋””๋กœ ํ•œ๋ฒˆ ํ†ต์‹ ํ•˜๋Š”๋ฐ Handshake๋ฅผ ๋‘๋ฒˆ ํ•ด์„œ ์‹ ๋ขฐ๊ฐ€ ๋‘ํ…๋‹ค ๋ชปํ•ด ๊ณผํ•˜๊ฒŒ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒ˜์Œ ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด TCP ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•  ๋•Œ SYN์™€ ACK์ด๋ผ๋Š” ํŒจํ‚ท์„ ์ฃผ๊ณ  ๋ฐ›๊ณ , ํ†ต์‹ ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ณผ์ •์—์„  FIN์ด๋ผ๋Š” ํŒจํ‚ท์„ ์ฃผ๊ณ  ๋ฐ›๊ณ  ์žˆ๋Š” ๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์–ด๊ฐ€ ์ƒ์†Œํ•˜๋‹ค๊ณ  ํ•ด์„œ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€๋ง๊ณ  ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ๋„ˆ ํ•œํ…Œ ์ „์†กํ•˜์˜€๋‹ค๋Š” ์ธ์ฆ ๋„์žฅ ์ •๋„๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ฆ‰, ํŒจํ‚ท ๋‚ด๋ถ€์— ๋“ค์–ด์žˆ๋Š” ์ธ์ฆ ํ”Œ๋ž˜๊ทธ ๊ฐ’๋“ค์„ ํ™•์ธํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋ณด๋‚ธ ํŒจํ‚ท์˜ ์ˆœ์„œ์™€ ํŒจํ‚ท์„ ์ œ๋Œ€๋กœ ๋ฐ›์•˜๋Š” ์ง€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

TCP-handshake

 

๐Ÿšฉ Flag ์ข…๋ฅ˜

FLAG ์„ค๋ช…
SYN ์ ‘์†์š”์ฒญ์„ ํ•  ๋•Œ ๋ณด๋‚ด๋Š” ํŒจํ‚ท์„ ๋งํ•œ๋‹ค.
TCP์ ‘์†์‹œ์— ๊ฐ€์žฅ๋จผ์ € ๋ณด๋‚ด๋Š” ํŒจํ‚ท์ด๋‹ค.
ACK ์ƒ๋Œ€๋ฐฉ์œผ๋กœ๋ถ€ํ„ฐ ํŒจํ‚ท์„ ๋ฐ›์€ ๋’ค์—, ์ž˜ ๋ฐ›์•˜๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๋Š” ํŒจํ‚ท์„ ๋งํ•œ๋‹ค.
๋‹ค๋ฅธ ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.
PSH ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ๋ชฉ์ ์ง€๋กœ ๋ณด๋‚ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
FIN ์ ‘์†์ข…๋ฃŒ๋ฅผ ์œ„ํ•œ ํ”Œ๋ž˜๊ทธ
์ด ํŒจํ‚ท์„ ๋ณด๋‚ด๋Š” ๊ณณ์ด ํ˜„์žฌ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” ๊ณณ๊ณผ ์ ‘์†์„ ๋Š๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿค 3-way handshake ๊ณผ์ •

TCP-handshake

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์ ‘์†์„ ์š”์ฒญํ•˜๋Š” SYN ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค.
    ์ด๋•Œ ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ์œ„ํ•ด SYN_SENT ์ƒํƒœ๋กœ ๋ณ€ํ•œ๋‹ค.
  2. LISTEN ์ƒํƒœ์˜€๋˜ ์„œ๋ฒ„๋Š” SYN ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๋Š” ACK ํŒจํ‚ท๊ณผ SYN ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค. (์„œ๋ฒ„๋„ ํด๋ผ์ด์–ธํŠธ์— ์ ‘์†ํ•ด์•ผ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—)
    ๊ทธ๋ฆฌ๊ณ  SYN_RCVD(SYN_RECEIVED)์ƒํƒœ๋กœ ๋ณ€ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ACK ํŒจํ‚ท์„ ๋ณด๋‚ผ ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์‹œ ์„œ๋ฒ„์— ACK ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ , ์ด ํ›„ ESTABLISHED ์ƒํƒœ๊ฐ€ ๋˜์–ด ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

 

โœ‰๏ธ ๋ฐ์ดํ„ฐ ํ†ต์‹  ๊ณผ์ •

TCP-handshake

  1. Established ๋œ ์ƒํƒœ์—์„œ ์„œ๋ฒ„์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์ž˜ ์ „์†ก๋ฐ›์•˜๋‹ค๊ณ  ACK ํ”Œ๋ž˜๊ทธ๋ฅผ ๋„ฃ์–ด ์‘๋‹ตํ•œ๋‹ค.
  3. ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ACK๋ฅผ ๋ชป๋ฐ›์•˜์œผ๋ฉด ์ œ๋Œ€๋กœ ์†ก์‹ ํ•˜์ง€ ๋ชปํ•œ๊ฑธ๋กœ ํŒ๋‹จํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์ „์†ก์„ ํ•œ๋‹ค.

 

๐Ÿค 4-way handshake ๊ณผ์ •

TCP-handshake

  1. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ TCP ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†์„ ๋Š๊ธฐ ์œ„ํ•ด CLOSE() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    ๊ทธ๋Ÿฌ๋ฉด FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” FIN_WAIT1 ์ƒํƒœ๋กœ ๋ณ€ํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ CLOSE() ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜๊ณ  CLOSE_WAIT ์ƒํƒœ๋กœ ๋ฐ”๊พผ ํ›„ ACK ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•œ๋‹ค.
    ๋งŒ์ผ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ผ ๋‚จ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ด๋•Œ ๋‚˜๋จธ์ง€๋ฅผ ๋ชจ๋‘ ์ „์†ก์‹œํ‚จ๋‹ค.
  3. ACK๋ฅผ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” FIN_WAIT2๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์ด๋•Œ ์„œ๋ฒ„๋Š” CLOSE() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.
  4. ์„œ๋ฒ„๋„ ์—ฐ๊ฒฐ์„ ๋‹ซ์•˜๋‹ค๋Š” ์‹ ํ˜ธ๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜์‹ ํ•˜๋ฉด ACK ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณด๋‚ธ ํ›„ TIME_WAIT ์ƒํƒœ๋กœ ์ „ํ™˜๋œ๋‹ค.
    ์ด ํ›„ ๋ชจ๋“ ๊ฒƒ์ด ๋๋‚˜๋ฉด CLOSED ์ƒํƒœ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. 

๐Ÿ‘€ TCP ํ†ต์‹  ๊ณผ์ • ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด๊ธฐ

๋ฐฑ๋‚  ๊ทธ๋ฆผ์œผ๋กœ ๋ด๋„ ์‹ค์ œ ํ†ต์‹  ๊ณผ์ •์„ ์ง์ ‘ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๊ธˆ์„ธ ๊นŒ๋จน๊ฒŒ ๋œ๋‹ค. ์ตœ๊ณ ์˜ ๊ธฐ์–ต์€ ์ง์ ‘ ๊ณ ์ƒํ•ด์„œ ๊ฒฝํ—˜ํ•˜๋Š” ๋ฒ•์ด๋‹ค.

TCP ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” Linux์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™•์ธํ•  ์˜ˆ์ •์ด๋‹ค. ๋ฌผ๋ก  ์™€์ด์–ด์ƒคํฌ(WireShark)๋ผ๋Š” ํ›Œ๋ฅญํ•œ ๋ฌด๋ฃŒ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์žˆ์ง€๋งŒ, ๋ฉ”๋‰ด๋„ ๋ณต์žกํ•˜๊ณ  ์›ํ•˜๋Š” ํŒจํ‚ท์„ ํ•„ํ„ฐ๋งํ•˜๊ธฐ๋„ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ฌธ์ด ์‰ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ๋ˆ…์Šค ํ„ฐ๋ฏธ๋„์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ–ˆ๋‹ค.

 

๐Ÿง ๋ฆฌ๋ˆ…์Šค tcpdump ๋ช…๋ น์–ด

tcpdump๋Š” Linux ํ™˜๊ฒฝ์—์„œ Client์™€ Server๊ฐ€ ์ฃผ๊ณ ๋ฐ›๋Š” ๋„คํŠธ์›Œํฌ ํŒจํ‚ท์„ TCP Layer์—์„œ ์บก์ณํ•˜์—ฌ ๋ฉ”์„ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์ด๋‹ค. UDP๋„ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋จผ์ € tcpdump ๋ช…๋ น์–ด๋ฅผ ๋ฆฌ๋ˆ…์Šค์— ์„ค์น˜ํ•ด์ค€๋‹ค.

# ์šฐ๋ถ„ํˆฌ ์„ค์น˜
$ apt install tcpdump

# CentOS ์„ค์น˜
$ yum install tcpdump

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

# ์ธํ„ฐ๋„ท ํ†ต์‹ ์„ ํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ์„ ๊ฐ์ง€
$ tcpdump -i any -nn port 80

TCP-handshake

๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ์ธํ„ฐ๋„ท ํ†ต์‹ ์„ ๊ฐ์ง€ํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

 

์ด๋ฒˆ์—๋Š” ์ƒˆ๋กœ์šด ํ„ฐ๋ฏธ๋„์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฆฌ๋ˆ…์Šค์˜ netcat(nc) ๋ช…๋ น์–ด๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ–‰ํ•œ๋‹ค.

# "Hello World" ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ TCP๋กœ naver.com ์— 80๋ฒˆ ํฌํŠธ๋กœ ์ „์†ก
$ echo "Hello World" | nc naver.com 80

TCP-handshake
ํ„ฐ๋ฏธ๋„ 2์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก

 

์ƒˆ๋กœ์šด ํ„ฐ๋ฏธ๋„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ฒŒ๋˜๋ฉด, ๊ธฐ์กด tcpdump ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜ Listen ์ƒํƒœ์˜€๋˜ ํ„ฐ๋ฏธ๋„์—์„œ ํ†ต์‹ ์„ ๋ฐ›์•„ ๋กœ๊ทธ๋ฅผ ๋„์šฐ๊ฒŒ ๋œ๋‹ค.

TCP-handshake
ํ„ฐ๋ฏธ๋„ 1์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹  ๊ฐ์ง€

๋จผ์ € 10.0.2.15:57744์€ ํด๋ผ์ด์–ธํŠธ ์•„์ดํ”ผ ์ด๊ณ , 223.130.200.104:80๋Š” ์„œ๋ฒ„ ์•„์ดํ”ผ ์ด๋‹ค.

๊ฐ ๋ผ์ธ์˜ ์ฒซ๋ฒˆ์งธ ํ•„๋“œ๋Š” ๋ณด๋‚ธ ๋†ˆ > ๋ฐ›์€ ๋†ˆ์„ ์˜๋ฏธํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜†์— Flags [S] ๋ผ๋Š” ๊ฒƒ์ด ๋ถ™์–ด์žˆ๋Š”๋ฐ, ๋Œ€๊ด„ํ˜ธ ์•ˆ์˜ ๋Œ€๋ฌธ์ž๋Š” ์œ„์—์„œ ์‚ดํŽด๋ณธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Flag ์ด๋ฆ„
S SYN
S. SYN-ACK
. ACK
P PSH
F FIN

์ง€๊ธˆ ์œ„์˜ ์ƒํƒœ๋Š” ํ•˜๋‚˜์˜ TCP ์—ฐ๊ฒฐ ๋ฐ ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ์ข…๋ฃŒ ์ „์ฒด์˜ ํ†ต์‹  ๊ณผ์ •์„ ํ–‰ํ•œ ์ƒํƒœ์ด๋‹ค.

์ด์ œ ๊ฐ๊ฐ ๋ช…๋ น์–ด ๋กœ๊ทธ ์–ด๋Š ๋ถ€๋ถ„์ด ์–ด๋Š ํ•ธ๋“œ์‰์ดํฌ์ธ์ง€ ์‚ดํŽด๋ณด์ž.

 

๐Ÿค 3-way handshake ๊ณผ์ •

TCP-handshake
TCP-handshake

  1. ํด๋ผ์ด์–ธํŠธ(10.0.2.15) → ์„œ๋ฒ„(223.130.200.104) : SYN
  2. ์„œ๋ฒ„(223.130.200.104) → ํด๋ผ์ด์–ธํŠธ(10.0.2.15) : SYN ACK
  3. ํด๋ผ์ด์–ธํŠธ(10.0.2.15) → ์„œ๋ฒ„(223.130.200.104) : ACK
seq ๋ฒˆํ˜ธ๋Š” ์ˆœ์„œ ๋ฒˆํ˜ธ๋กœ์„œ ํŒจํ‚ท์˜ ์ „๋‹ฌ ์ˆœ์„œ๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ด๋‹ค.
์šด์˜์ฒด์ œ์˜ ์˜ํ•ด์„œ ๋žœ๋คํ•˜๊ฒŒ ์ƒ์„ฑ๋˜์„œ SYN ํŒจํ‚ท์— ๋‹ด๊ฒจ ๋ณด๋‚ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋ฐ›์€ ์„œ๋ฒ„์—๋Š” ๋™๊ธฐํ™”์— ๋Œ€ํ•œ ๋‹ต์‹ ์œผ๋กœ seq ๋ฒˆํ˜ธ๋ฅผ +1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ack์— ๋‹ด์•„ ์‘๋‹ตํ•œ๋‹ค.

 

โœ‰๏ธ ๋ฐ์ดํ„ฐ ํ†ต์‹  ๊ณผ์ •

TCP-handshake
TCP-handshake

  1. ํด๋ผ์ด์–ธํŠธ(10.0.2.15) → ์„œ๋ฒ„(223.130.200.104) : PSH ACK
  2. ์„œ๋ฒ„(223.130.200.104) → ํด๋ผ์ด์–ธํŠธ(10.0.2.15) : ACK

 

๐Ÿค 4-way handshake ๊ณผ์ •

TCP-handshake
TCP-handshake

๊ทธ๋ฆผ์ƒ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋จผ์ € ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ๋ณด๋ƒˆ์ง€๋งŒ, ๋ฆฌ๋ˆ…์Šค ์ƒ์—์„œ๋Š” ์„œ๋ฒ„๊ฐ€ ๋จผ์ € ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ ๊ฑฐ๊พธ๋กœ๋œ ์ƒํ™ฉ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์— FIN ACK๊ฐ€ ๊ฐ™์ด ์‘๋‹ตํ•ด์™”๊ณ , ๋˜ํ•œ ACK์™€ FIN์„ ๋ณด๋‚ด๋Š” ๊ณผ์ •์ด ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์กŒ๋‹ค.

  1. ์„œ๋ฒ„(223.130.200.104) → ํด๋ผ์ด์–ธํŠธ(10.0.2.15) : FIN ACK
  2. ํด๋ผ์ด์–ธํŠธ(10.0.2.15) → ์„œ๋ฒ„(223.130.200.104) : FIN ACK
  3. ์„œ๋ฒ„(223.130.200.104) → ํด๋ผ์ด์–ธํŠธ(10.0.2.15) : ACK

๐Ÿ•น๏ธ TCP์˜ ์ „์†ก ์ œ์–ด ๊ธฐ๋ฒ•

TCP(Transmission Control Protocol)๋Š” ๋‹จ์–ด ๊ทธ๋Œ€๋กœ ์›ํ™œํ•œ ํ†ต์‹ ์„ ์œ„ํ•ด ์ „์†ก ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ”„๋กœํ† ์ฝœ ์ž์ฒด์— ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ๋งŒ์•ฝ TCP๊ฐ€ ์—†์—ˆ๋”๋ผ๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ์ผํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ๋‹จ์œ„๋กœ ๋ณด๋‚ผ ๊ฒƒ์ธ์ง€ ์ •์˜ํ•ด์•ผํ•˜๊ณ , ํŒจํ‚ท์ด ์œ ์‹ค๋˜๋ฉด ์–ด๋–ค ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ง€๊นŒ์ง€ ์‹ ๊ฒฝ์จ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋•๋ถ„์— ์šฐ๋ฆฌ๋Š” ์˜จ์ „ํžˆ ์ƒ์œ„์˜ ๋™์ž‘์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๋ณดํ†ต TCP์˜ ์ „์†ก ์ œ์–ด ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ 3๊ฐ€์ง€๋กœ ์ •๋ฆฌ ๋œ๋‹ค.

์ด TCP ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ต‰์žฅํžˆ ์–‘๋„ ๋งŽ๊ณ  ๋‚œ๋„๋„ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์‹œ๊ฐ„์ด ์žˆ์„๋•Œ ํŒŒ๋ณด๊ธธ ๊ถŒํ•˜๋ฉฐ, ๊ฐœ๋…์„ ์žก๋Š” ์ง€๊ธˆ์€ TCP๋Š” ์ด๋Ÿฌํ•œ ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์— ๋Œ€ํ•ด์„œ ์ž˜ ์•Œ์•„์„œ ๋Œ€์ฒ˜ํ•œ๋‹ค ์ •๋„๋กœ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜์ž.

 

๐Ÿ“ต ํ๋ฆ„ ์ œ์–ด(Flow Control)

  • ์ˆ˜์‹ ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์†๋„๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์†ก์‹  ์ธก์€ ์ˆ˜์‹  ์ธก์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์–ด๋Š ์ •๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ง€ ์ œ์–ด
  • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ(Sliding Window) ๋ฐฉ์‹์„ ์‚ฌ์šฉ
    • Window ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ณต๊ฐ„์„ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋Ÿ‰์„ ์กฐ์ ˆ

ํ๋ฆ„ ์ œ์–ด(Flow Control)

 

๐Ÿ“ต ์˜ค๋ฅ˜ ์ œ์–ด(Error Control)

  • ํ†ต์‹  ๋„์ค‘์— ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์‹ ๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋Œ€์ฒ˜
  • Go Bank N ๊ธฐ๋ฒ•๊ณผ Selective Repeat(์„ ํƒ์ ์ธ ์žฌ์ „์†ก) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ
    • Go Bank N ๊ธฐ๋ฒ• : ์–ด๋Š ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํŒŒ์•…ํ•˜์—ฌ, ๊ทธ ๋ถ€๋ถ„๋งŒ ๋‹ค์‹œ ์ˆœ์„œ๋Œ€๋กœ ๋ณด๋‚ด ์ œ์–ดํ•œ๋‹ค.
    • Selective Repeat ๊ธฐ๋ฒ• : ์—๋Ÿฌ๋‚œ ๋ฐ์ดํ„ฐ๋งŒ ์žฌ์ „์†กํ•˜๊ณ  ๊ทธ์ „์— ๋ฐ›์•˜๋˜ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ์žฌ์ •๋ ฌํ•˜์—ฌ ์ œ์–ดํ•œ๋‹ค.

์˜ค๋ฅ˜ ์ œ์–ด(Error Control)

 

๐Ÿ“ต ํ˜ผ์žก ์ œ์–ด(Congestion Control)

  • ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์›ํ™œํžˆ ํ†ต์‹ ์ด ์•ˆ๋˜๋ฉด ์ œ์–ด๋ฅผ ํ†ตํ•ด ์žฌ์ „์†ก์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์žฌ์ „์†ก ์ž‘์—…์ด ๋ฐ˜๋ณต๋˜๋ฉด ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ถ•๊ดด๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„คํŠธ์›Œํฌ ํ˜ผ์žก ์ƒํƒœ๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ์†ก์‹ ์ธก์˜ ์ „์†ก ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ์ „์†ก๋Ÿ‰์„ ์กฐ์ ˆํ•œ๋‹ค.
  • TCP์—๋Š” Tahoe, Reno, New Reno, Cubic, Elastic-TCP ..๋“ฑ ๋‹ค์–‘ํ•œ ํ˜ผ์žก ์ œ์–ด ๊ธฐ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

ํ˜ผ์žก ์ œ์–ด(Congestion Control)


UDP - ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ”„๋กœํ† ์ฝœ

๋ณดํ†ต UDP ์™€ TCP๋ฅผ ๋น„๊ตํ•˜๋Š”๋ฐ ์žˆ์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ‘œ๋ฅผ ๋งŽ์ด ์ธ์šฉํ•ด์™”์„ ๊ฒƒ์ด๋‹ค.

ํ‘œ๋ฅผ ๋ณด๋ฉด ๋Œ€๋žต TCP๋Š” ์‹ ๋ขฐ์„ฑ์ด ๋†’๊ณ  ๋Š๋ฆฌ๋‹ค ์™€ UDP๋Š” ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ๊ณ  ๋น ๋ฅด๋‹ค ์ •๋„๋กœ ์ •๋ฆฌ๊ฐ€ ๋œ๋‹ค.

  TCP UDP
์—ฐ๊ฒฐ ๋ฐฉ์‹ ์—ฐ๊ฒฐํ˜• ์„œ๋น„์Šค ๋น„์—ฐ๊ฒฐํ˜• ์„œ๋น„์Šค
ํŒจํ‚ท ๊ตํ™˜ ๊ฐ€์ƒ ํšŒ์„  ๋ฐฉ์‹ ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๋ฐฉ์‹
์ „์†ก ์ˆœ์„œ ๋ณด์žฅ ๋ณด์žฅํ•จ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
์‹ ๋ขฐ์„ฑ ๋†’์Œ ๋‚ฎ์Œ
์ „์†ก ์†๋„ ๋Š๋ฆผ ๋น ๋ฆ„

์•„๋ฌด๋ž˜๋„ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก TCP๋Š” ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š”๋ฐ, ์œ„์—์„œ ์‚ดํŽด๋ณธ๊ฒƒ ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ‘์ž‘์—…๋“ค์ด ๋งŽ์•˜์—ˆ๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ์ธํ„ฐ๋„ท ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•˜๋ฉด์„œ ์ „์†กํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋„ ๋‹จ์ˆœ ํ…์ŠคํŠธ๋ฅผ ๋„˜์–ด์„œ ๋™์˜์ƒ์ด๋‚˜ ์Œ์•…๊ณผ ๊ฐ™์€ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด๋„ ์ „์†กํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ ์  ์ปค์ ธ๊ฐ€๋ฉฐ ๋™์‹œ์— ๋น ๋ฅธ ํ†ต์‹ ์ด ํ•„์š”ํ•ด ์กŒ๋‹ค. ๊ทธ๋ž˜์„œ HTTP 2.0 ์—์„œ๋Š” ํ•œ๋ฒˆ ์—ฐ๊ฒฐ๋œ TCP ํšŒ์„ ์„ ๊ธธ๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋„ ์ŠคํŠธ๋ฆผ์ด๋ผ๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๋Š” ์‹์œผ๋กœ ๊ทน๋ณต์„ ํ–ˆ์ง€๋งŒ, TCP ์ž์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ๊ทผ๋ณธ์ ์ธ ํŠน์ง•๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ์ ์œผ๋กœ ์†๋„ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ๋‹ค. (์ฆ‰, ๋„ˆ๋ฌด ํ—ค๋น„ํ•ด์„œ ๋”์ด์ƒ ์†๋„๋ฅผ ๋ฝ‘์•„ ๋‚ผ์ˆ˜๊ฐ€ ์—†์Œ)

 

๋ฐ˜๋ฉด, UDP(User Datagram Protocol)๋Š” ๋‹จ์–ด์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฐ์ดํ„ฐ๊ทธ๋žจ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์• ์ดˆ์— ๊ฐ๊ฐ์˜ ํŒจํ‚ท ๊ฐ„์˜ ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…๋ฆฝ์ ์ธ ํŒจํ‚ท์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๊ทธ๋žจ ๋ฐฉ์‹์€ ํŒจํ‚ท์˜ ๋ชฉ์ ์ง€๋งŒ ์ •ํ•ด์ ธ์žˆ๋‹ค๋ฉด ์ค‘๊ฐ„ ๊ฒฝ๋กœ๋Š” ์–ด๋”œ ํƒ€๋“  ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ • ๊ฐ™์€ ์—ฐ๊ฒฐ ์„ค์ •์ด ํ•„์š” ์—†๊ฒŒ ๋œ๋‹ค. ์ฆ‰, UDP๋Š” ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์น˜๋˜ TCP์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋” ๋น ๋ฅผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ UDP๋Š” ์‹ค์‹œ๊ฐ„ ์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๊ฐ™์€ ๊ณ ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ณณ์— ์ด์šฉ๋œ๋‹ค.

UDP(User Datagram Protocol)


๐Ÿ‘€ UDP ํ†ต์‹  ๊ณผ์ • ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด๊ธฐ

UDP๊ฐ€ ์™œ TCP ๋ณด๋‹ค ๋น ๋ฅธ์ง€๋Š” ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ๋„ ํ•œ๋ˆˆ์— ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์กด netcat ๋ช…๋ น์–ด์— -u ์˜ต์…˜์„ ์ฃผ๊ฒŒ ๋˜๋ฉด UDP๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹  ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ˆ˜์‹ ์ธก ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ์ง„์งœ ๋”ธ๋ž‘ ํ•œ์ค„์ด ๋์ด๋‹ค. ์ž˜๋ฐ›์•˜๋‹ค๋Š” ์‘๋‹ต ํŒจํ‚ท ์—†์ด ๋ฌด์ง€์„ฑ์œผ๋กœ ๋ณด๋‚ด๊ธฐ๋งŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

UDP(User Datagram Protocol)

# "Hello World" ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ -u ์˜ต์…˜(UDP๋กœ) naver.com ์— 80๋ฒˆ ํฌํŠธ๋กœ ์ „์†ก
$ echo "Hello World" | nc -u naver.com 80

UDP


๐Ÿ” TCP ํ—ค๋”์™€ UDP ํ—ค๋” ํฌ๊ธฐ ์ฐจ์ด

TCP๊ฐ€ ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ์—ฐ๊ฒฐ๊ณผ ํ˜ผ์žก ์ œ์–ด ๋“ฑ์„ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ง€๋Š” TCP์™€ UDP์˜ ํ—ค๋”๋ฅผ ๋น„๊ต ํ•ด๋ณด๋ฉด ๋Œ€๊ฐ์ด ๋‚˜์˜จ๋‹ค.

 

๐Ÿ“„ TCP ํ—ค๋” ๊ตฌ์„ฑ

TCP ํ—ค๋”

TCP์˜ ๊ฒฝ์šฐ ์›Œ๋‚™ ์˜ค๋ž˜ ์ „์— ์„ค๊ณ„๋˜๊ธฐ๋„ ํ–ˆ๊ณ , ์ด๋Ÿฐ ์ €๋Ÿฐ ๊ธฐ๋Šฅ์ด ์›Œ๋‚™ ๋งŽ์ด ํฌํ•จ๋œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค๋ณด๋‹ˆ ์ด๋ฏธ ํ—ค๋”๊ฐ€ ๊ฑฐ์˜ ํ’€๋ฐฉ์ด๋‹ค.

  • Source Port : ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ
  • Destination Port : ๋ชฉ์ ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ ๋ฒˆํ˜ธ
  • Sequence Number ํ•„๋“œ : ์„ธ๊ทธ๋จผํŠธ ์ˆœ์„œ๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ํ•„๋“œ
  • Acknowledgement Number ํ•„๋“œ : ๋‹ค์Œ ์„ธ๊ทธ๋จผํŠธ ์ˆ˜์‹  ์ค€๋น„ ๋ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ˆ˜์‹  ํ™•์ธ ์—ญํ• 
  • Data Offset ํ•„๋“œ : TCP ํ—ค๋”์˜ ํฌ๊ธฐ ( 5~15 : 5*32<160bit> ~ 15*32<480bit> )
  • Reserved ํ•„๋“œ : ์ฐจํ›„์˜ ์‚ฌ์šฉ์„ ์œ„ํ•œ ์˜ˆ์•ฝ๋œ ํ•„๋“œ
  • Control Flags (SYN, ACK, FIN ...๋“ฑ) : ๊ธด๊ธ‰, ํ˜ผ์žก, ํ™•์ธ, ์ˆ˜์‹  ๊ฑฐ๋ถ€ ๋“ฑ์˜ ๊ธฐ๋Šฅ
  • Window size ํ•„๋“œ : ์ˆ˜์‹ ์ž๊ฐ€ ํ•œ๋ฒˆ์— ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘. ์†ก์‹ ์ž๋Š” Window size๋งŒํผ ACK๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก. ACK๊ฐ€ ๊ณ„์† ์™”๋‹ค๊ฐ”๋‹ค ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค
  • Checksum : ์„ธ๊ทธ๋จผํŠธ ๋‚ด์šฉ์˜ ์œ ํšจ์„ฑ๊ณผ ์†์ƒ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ

 

๐Ÿ“„ UDP ํ—ค๋” ๊ตฌ์„ฑ

UDP ํ—ค๋”

๋ฐ˜๋ฉด UDP๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ์ž์ฒด์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ—ค๋”์— ๋“ค์–ด์žˆ๋Š”๊ฒŒ ์—†๋‹ค. (๊ทธ๋ž˜์„œ ํ•˜์–€ ๋„ํ™”์ง€ ๊ฐ™๋‹ค๋Š” ๋น„์œ ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๋‹ค)

UDP์˜ ํ—ค๋”์—๋Š” ์ถœ๋ฐœ์ง€์™€ ๋„์ฐฉ์ง€, ํŒจํ‚ท์˜ ๊ธธ์ด, ์ฒดํฌ์„ฌ ๋ฐ–์— ์—†๋‹ค.

  • Source Port : ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ
  • Destination Port : ๋ชฉ์ ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ ๋ฒˆํ˜ธ
  • checksum : ์ค‘๋ณต ๊ฒ€์‚ฌ์˜ ํ•œ ํ˜•ํƒœ๋กœ, ์˜ค๋ฅ˜ ์ •์ •์„ ํ†ตํ•ด ๊ณต๊ฐ„(์ „์ž ํ†ต์‹ )์ด๋‚˜ ์‹œ๊ฐ„(๊ธฐ์–ต ์žฅ์น˜) ์†์—์„œ ์†ก์‹ ๋œ ์ž๋ฃŒ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณดํ˜ธํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•. (TCP์˜ ์ฒดํฌ์„ฌ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ UDP์˜ ์ฒดํฌ์„ฌ์€ ์‚ฌ์šฉํ•ด๋„ ๋˜๊ณ  ์•ˆํ•ด๋„ ๋˜๋Š” ์˜ต์…˜)

TCP๋ฅผ ๋ฒ„๋ฆฌ๊ณ  UDP๋ฅผ ์„ ํƒํ•œ HTTP 3.0

ํ•™๋ถ€์—์„œ๋Š” ์•„๋ฌด๋ž˜๋„ TCP๋Š” ์ธํ„ฐ๋„ท ํ†ต์‹ ์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์“ฐ์ด๋Š” ๋…€์„์ด๋ผ ์ž์„ธํžˆ ๋ฐฐ์šฐ๊ณ , UDP๋Š” ๋น ๋ฅด๋‹ค ์ •๋„๋กœ ๊ฐ„๋‹จํžˆ ๋ฐฐ์šฐ๊ณ  ํœ™ ๋„˜์–ด๊ฐ€๋ฒ„๋ฆฌ๋Š” ๋ชจ์–‘์ธ๋ฐ, ์ด์ œ๋Š” ๊ทธ๋Ÿด์ˆ˜๊ฐ€ ์—†๋‹ค. ์œ„์˜ ์ œ๋ชฉ์—์„œ์™€ ๊ฐ™์ด HTTP/3 ์—์„œ๋Š” TCP๋ฅผ ๋ฒ„๋ฆฌ๊ณ  UDP๋ฅผ ์ฑ„ํƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

[WEB] ๐ŸŒ HTTP 3.0 ํ†ต์‹  ๊ธฐ์ˆ  - ์ž์‹ ์žˆ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

HTTP / 3.0 HTTP 2.0 ์˜ ๋“ฑ์žฅ๊ณผ ํ•จ๊ป˜ ๊ธฐ์กด์˜ ํ”„๋กœํ† ์ฝœ ๋ฐ์ดํ„ฐ ์ฒด๊ณ„๋ฅผ ํ”„๋ ˆ์ž„๊ณผ ์ŠคํŠธ๋ฆผ ๊ฐœ๋…์œผ๋กœ ์žฌ๊ตฌ์ถ•ํ•œ ๊ฒฐ๊ณผ ๊ธฐ์กด ๋ณด๋‹ค ํ˜์‹ ์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ HTTP๋Š” TCP ๊ธฐ๋ฐ˜ ์œ„์—์„œ ๋™

inpa.tistory.com

 

2022๋…„ 11์›” 15์ผ ํ•œ๊ตญ ์ตœ์ดˆ๋กœ ๋„ค์ด๋ฒ„๋„ HTTP/3์„ ๋„์ž…ํ•˜์˜€๋‹ค๊ณ  ํ•œ๋‹ค.

http-udp
https://n.news.naver.com/mnews/article/022/0003754517?sid=101


๐Ÿ’ฌ TCP๋Š” ๊ตฌ์กฐ์ƒ ํ•œ๊ณ„๋กœ ๊ฐœ์„ ํ•ด๋„ ์—ฌ์ „ํžˆ ๋Š๋ฆฌ๋‹ค

์‚ฌ์‹ค TCP๋Š” ์ธ๋ฅ˜๊ฐ€ ์ง€๊ธˆ๊ณผ ๊ฐ™์ด ์—„์ฒญ๋‚œ ์†๋„๋กœ ๋ฐœ์ „ํ•  ๊ฒƒ์ด๋ผ๊ณค ์ƒ์ƒ ํ•  ์ˆ˜ ์—†๋Š” ์‹œ๊ธฐ์— ๋งŒ๋“ค์–ด์กŒ๋‹ค. TCP๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋˜ ์‹œ์ ˆ์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ ๋‹ค๋ฐœ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์„ ๊ตํ™˜ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์™€ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๋ฐ”๊พธ์–ด๊ฐ€๋ฉด์„œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ ๋•Œ๋ฌธ์— ์™€์ดํŒŒ์ด๋ฅผ ๋ฐ”๊พธ๋ฉด ๋‹ค์‹œ ์ƒˆ๋กœ์šด ์ปค๋„ฅ์…˜์„ ๋งบ์–ด์•ผ ๋˜์„œ ๋Š๊น€ ํ˜„์ƒ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋˜ํ•œ TCP๋ฅผ ์‚ฌ์šฉํ•œ ํ†ต์‹ ์—์„  ํŒจํ‚ท์€ ์‹ ๋ขฐ์„ฑ์„ ์œ„ํ•ด ๋ฌด์กฐ๊ฑด ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ํŒจํ‚ท์ด ์ฒ˜๋ฆฌ๋˜๋Š” ์ˆœ์„œ ๋˜ํ•œ ์ •ํ•ด์ ธ์žˆ์œผ๋ฏ€๋กœ ์ด์ „์— ๋ฐ›์€ ํŒจํ‚ท์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹ค์Œ ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์—†๋‹ค. ๋งŒ์ผ ์ค‘๊ฐ„์— ํŒจํ‚ท์ด ์†์‹ค๋˜์–ด ์ˆ˜์‹  ์ธก์ด ํŒจํ‚ท์„ ์ œ๋Œ€๋กœ ๋ฐ›์ง€ ๋ชปํ–ˆ์œผ๋ฉด ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํŒจํ‚ท์ด ์ค‘๊ฐ„์— ์œ ์‹ค๋˜๊ฑฐ๋‚˜ ์ˆ˜์‹  ์ธก์˜ ํŒจํ‚ท ํŒŒ์‹ฑ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋ฉด ํ†ต์‹ ์— ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„HOLB(Head of line Blocking)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ด HOLB๋Š” TCP ์„ค๊ณ„๋„์ƒ ์–ด์ฉ”์ˆ˜ ์—†์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— HTTP/1.1 ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ HTTP/2๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์•„์ฃผ ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์˜€๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HTTP/3๋Š” TCP๋ฅผ ๋ฒ„๋ฆฌ๊ณ  UDP๋ฅผ ์„ ํƒํ•˜์˜€๋‹ค. 


๐Ÿ’ฌ UDP๋Š” ์‹ ๋ขฐ์„ฑ์ด ์—†๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํƒ‘์žฌ๋ฅผ ์•ˆํ–ˆ์„ ๋ฟ์ด๋‹ค

์•ž์„œ ์‹ ๋ขฐ์„ฑ ๋Œ€์‹  ์†๋„๋ฅผ ํƒํ•œ UDP๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์†Œ๊ฐœํ•œ ๋ฐ”๊ฐ€ ์žˆ๋‹ค. ๋ฐฉ์†ก์ด๋‚˜ ๋™์˜์ƒ์€ ์ค‘๊ฐ„์— ๋Š๊ธธ์ง€์–ธ์ • ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์†ก์ถœํ•˜๋Š”๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐ๋„ท์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ •ํ™•ํ•œ ํŒจํ‚ท ํ†ต์‹ ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๋ขฐ์„ฑ์ด ๋ณด์žฅ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์™œ HTTP๊ฐ€ TCP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ๋Š”์ง€ ๊ทธ ์ด์œ ์ด๋‹ค.

๋งŽ์ด๋“ค ์ฐฉ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅธ๊ฑด ์•Œ๊ฒ ๋Š”๋ฐ UDP๋Š” ์‹ ๋ขฐ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์„ฑ์ด ์ ๋‹ค๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค.

UDP๋Š” ์‹ ๋ขฐ์„ฑ์ด ์—†๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํƒ‘์žฌ๋ฅผ ์•ˆํ–ˆ์„ ๋ฟ์ด๋‹ค. UDP์˜ ์ง„์งœ ์žฅ์ ์€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.

์ฆ‰, UDP ์ž์ฒด๋Š” ํ—ค๋”์— ๋“ค์€๊ฒŒ ์—†์–ด ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ๊ณ  ์ œ์–ด ๊ธฐ๋Šฅ๋„ ์—†์ง€๋งŒ, ์ดํ›„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ตฌํ˜„์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ์— ๋”ฐ๋ผ์„œ TCP์™€ ๋น„์Šทํ•œ ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค.


๐Ÿ’ฌ UDP๋ฅผ ๊ฐœ์กฐํ•œ QUIC ํ”„๋กœํ† ์ฝœ

QUIC(Quick UDP Internet Connections)๋Š” UDP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ TCP + TLS + HTTP ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ๋”ฐ๋ผ์„œ HTTP 3.0์ด UDP๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค๋ผ๋Š” ๋ง์€ ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด UDP ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ QUIC ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜์˜€๋‹ค๋ผ๋Š” ๋œป์ด๋‹ค.

QUIC

QUIC์€ TCP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ์„ ์‹œ์ž‘ํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กœ์šด 3 Way Handshake ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์„ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•œ ํ›„ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ตํ•ด์ฃผ๋Š” ์‚ฌ์ดํด์„ RTT(Round Trip Time)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, TCP๋Š” ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ 1 RTT๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์—ฌ๊ธฐ์— TLS๋ฅผ ์‚ฌ์šฉํ•œ ์•”ํ˜ธํ™”๊นŒ์ง€ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด TLS์˜ ์ž์ฒด ํ•ธ๋“œ์‰์ดํฌ๊นŒ์ง€ ๋”ํ•ด์ ธ ์ด 3 RTT๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

http-udp

๋ฐ˜๋ฉด QUIC์€ ์ฒซ ์—ฐ๊ฒฐ ์„ค์ •์— 1 RTT๋งŒ ์†Œ์š”๋œ๋‹ค.

TCP ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š์œผ๋ฉฐ TLS ์ž์ฒด๋ฅผ ๋‚ดํฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ๊ฒฐ ์„ค์ •์— ํ•„์š”ํ•œ ์ •๋ณด์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ๋„ ๋ณด๋‚ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ๋ฒˆ ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ๊ทธ ์„ค์ •์„ ์บ์‹ฑํ•ด๋†“๊ณ  ์žˆ๋‹ค๊ฐ€, ๋‹ค์Œ ์—ฐ๊ฒฐ ๋•Œ๋Š” ์บ์‹ฑํ•ด๋†“์€ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”๋กœ ์—ฐ๊ฒฐ์„ ์„ฑ๋ฆฝ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— 0 RTT๋งŒ์œผ๋กœ ๋ฐ”๋กœ ํ†ต์‹ ์„ ์‹œ์ž‘ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

์ด๋ฐ–์—๋„ ํŒจํ‚ท ์†์‹ค ๊ฐ์ง€์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ๋‹จ์ถ•๋˜์—ˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์˜ IP๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜์–ด ๋ชจ๋ฐ”์ผ์—์„œ ์™€์ดํŒŒ์ด๋ฅผ ๋ฐ”๊พธ์–ด๋„ ๋Š๊น€์ด ์—†์–ด์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.


# ์ฐธ๊ณ ์ž๋ฃŒ

https://www.crocus.co.kr/1362

https://evan-moon.github.io/2019/11/22/tcp-flow-control-error-control/

https://evan-moon.github.io/2019/10/08/what-is-http3/ 

https://evan-moon.github.io/2019/11/10/header-of-tcp/#%ED%8C%A8%ED%82%B7-%EA%B5%90%ED%99%98-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EB%AC%B8%EC%A0%9C%EC%A0%90 

https://blog.cloudflare.com/ko-kr/http3-the-past-present-and-future-ko-kr/ 

https://devopedia.org/quic