Skip to content

Instantly share code, notes, and snippets.

@jinny-l
Last active February 16, 2023 14:35
Show Gist options
  • Save jinny-l/3a2b3866e8c80ca6b9bebc40852bbd28 to your computer and use it in GitHub Desktop.
Save jinny-l/3a2b3866e8c80ca6b9bebc40852bbd28 to your computer and use it in GitHub Desktop.
Jinny - CS13

๐ŸŒ CS13 - HTTP ํด๋ผ์ด์–ธํŠธ: Part.1 HTTP ์š”์ฒญ

๐Ÿ” ๋ฏธ์…˜ ์„ค๋ช…

ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ HTTP๋ฅผ ๋ณด๋‚ด๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฏธ์…˜

  • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋™์ž‘์„ ๋‹จ์ˆœํ™”ํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค.
  • URL ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ HTTP Request ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , Request ๋ฉ”์‹œ์ง€๋ฅผ TCP ์„ธ์…˜์— ์ „์†ก(send)ํ•œ๋‹ค.
  • ์†Œ์ผ“์„ ์ƒ์„ฑํ•ด์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์ž‘์„ ๊ตฌํ˜„ํ•œ๋‹ค.

ํ•™์Šต ํ‚ค์›Œ๋“œ

#DNS #Socket #HTTP #Request #TCP/IP #OSI 7 Layers

์ฐธ๊ณ 

  • ์ •์ƒ์ ์œผ๋กœ ์ „์†ก๋˜์—ˆ๋Š”์ง€ WireShark ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๋ถ„์„ ๋„๊ตฌ์—์„œ ํ™•์ธ
  • http://example.com ์ฃผ์†Œ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ ํ™•์ธ
  • example.com ์ด์™ธ์— ๋™์ž‘ ํ…Œ์ŠคํŠธ ์‚ฌ์ดํŠธ ์ถ”์ฒœ

์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

URL http://m.naver.com
(DNS Lookup...)
TCP Connection : 125.209.218.87 80
HTTP Request
URL www.disney.co.kr
(DNS Lookup...)
TCP Connection : 52.68.152.109 80
HTTP Request

โœ… ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ

HTTP Request

โ€ป HTTP Request ๊ทœ๊ฒฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ ๋ถˆ๊ฐ€
(์˜ˆ: HTTPRequest, URLRequest, URLSession ๋“ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๋ถˆ๊ฐ€)

  • ์ž…๋ ฅํ•œ URL ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„์„ํ•ด์„œ, URL์— ํฌํ•จ๋œ host ์ฃผ์†Œ๋ฅผ DNS Server์—์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ
    (์ž๋ฐ” API java.net.InetAddress ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ)
  • host ์ •๋ณด๋กœ ์ฐพ์€ IP ์ฃผ์†Œ ์ค‘์— ์ฒซ๋ฒˆ์งธ ๊ฐ’๊ณผ port ์ •๋ณด๋กœ TCP Socket์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ
    (java.net.Socket ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ)
    • port๊ฐ€ ์—†์œผ๋ฉด 80๋ฒˆ์„ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์„œ๋ฒ„๊ฐ€ HTTP Reqeust๋ฅผ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ํ—ค๋”๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ

Request ๊ฐ์ฒด

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ URL๋ฅผ ๊ฐ–๋Š” ์ƒ์„ฑ์ž ๊ตฌํ˜„
  • ์š”์ฒญ ๋ฐฉ์‹ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด method๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ
    • default: Get method
  • ์š”์ฒญ์— ํ•„์š”ํ•œ Header๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ
  • Request Message๋ฅผ ๋ฌธ์ž์—ด๋กœ returnํ•˜๋Š” ๊ธฐ๋Šฅ

๐Ÿ“ ๊ฐœ๋… ๊ณต๋ถ€

๐ŸŒ 1. HTTP(HyperText Transfer Protocol)

1.1 HTTP๋ž€?

  • HTTP๋Š” ์›”๋“œ ์™€์ด๋“œ ์›น(WWWW)์— ๋‚ด์žฌ๋œ ํ”„๋กœํ† ์ฝœ๋กœ ์ธํ„ฐ๋„ท์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„ ์†Œํ†ต์„ ์œ„ํ•ด ๋””์ž์ธ๋˜์—ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ*(Application Layer Protocol)๋กœ HTML๊ณผ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ’ก ํ”„๋กœํ† ์ฝœ์ด๋ž€?

  • ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™์„ ๋œปํ•œ๋‹ค.
  • ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ์ด๋Ÿฌํ•œ ๊ทœ์น™์— ๋งž๊ฒŒ ๊ฐœ๋ฐœํ•˜์—ฌ ์„œ๋กœ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • HTTP ๋ฉ”์‹œ์ง€๋„ ์ •ํ•ด์ง ๊ทœ์น™์ด ์žˆ๋‹ค.
  • ์›น ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋Š” HTTP, ํŒŒ์ผ์„ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋Š” FTP, ๋ฉ”์ผ์€ SMTP, POP ๋“ฑ ์ „์†ก ๊ณ„์ธต๊ณผ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•˜๋‹ค.

1.2 HTTP์˜ ํŠน์ง•

  1. ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ
  2. ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ(Stateless)
  3. ๋น„ ์—ฐ๊ฒฐ์„ฑ(Connectionless)

1.2.1 ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP messages ์–‘์‹์— ๋งž์ถฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๋„ HTTP messages ์–‘์‹์— ๋งž์ถฐ ์‘๋‹ตํ•œ๋‹ค.

  • Request Response ๊ตฌ์กฐ

image

1.2.2 ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ

HTTP์—์„œ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ:

  • ๋ฌด์ƒํƒœ: ๋กœ๊ทธ์ธ์ด ํ•„์š”์—†๋Š” ๋‹จ์ˆœํ•œ ์„œ๋น„์Šค ์†Œ๊ฐœ ํ™”๋ฉด
  • ์ƒํƒœ ์œ ์ง€: ๋กœ๊ทธ์ธ ํ›„ ๋กœ๊ทธ์ธ ํ•œ ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์—

1.2.3 ๋น„ ์—ฐ๊ฒฐ์„ฑ

HTTP 1.0 ๊ธฐ์ค€์œผ๋กœ HTTP๋Š” ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์ด๋‹ค.
HTTP๋Š” ์‹ค์ œ๋กœ ์š”์ฒญ์„ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋งŒ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ณ  ์‘๋‹ต์„ ์ฃผ๊ณ ๋‚˜๋ฉด ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ๋Š๋Š”๋‹ค.

2. HTTP ๋ฉ”์‹œ์ง€

HTTP messages๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตํ™˜๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

2.1 HTTP messages ์œ ํ˜•

  • ์š”์ฒญ(Requests)
  • ์‘๋‹ต(Responses)

๐Ÿชœ OSI ์ฐธ์กฐ ๋ชจ๋ธ(OSI 7๊ณ„์ธต)

๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

OSI 7๊ณ„์ธต์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ„๋žตํžˆ ์–ธ๊ธ‰ํ•˜์ž๋ฉด
60~70๋…„๋Œ€์—๋Š” ํ†ต์‹  ๊ทœ๊ฒฉ์ด ํ†ต์ผ๋˜์ง€ ์•Š์•„ ๋‹ค๋ฅธ ํšŒ์‚ฌ์™€ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด์— ISO๋ผ๋Š” ๋‹จ์ฒด๊ฐ€ ํ†ต์‹  ๊ทœ๊ฒฉ๊ณผ ํ”„๋กœํ† ์ฝœ์„ ํ‘œ์ค€ํ™”ํ•˜๋ ค๊ณ  ํ•˜์˜€๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด OSI ์ฐธ์กฐ ๋ชจ๋ธ์ด๋‹ค.

OSI ์ฐธ์กฐ ๋ชจ๋ธ์„ ํ†ตํ•ด ํ†ต์‹ ์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ˆœ์„œ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ 
๋‹จ๊ณ„์— ๋”ฐ๋ผ ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•ด์„œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ํ•œ ๊ฒƒ์ด๋‹ค.

OSI ์ฐธ์กฐ ๋ชจ๋ธ์ด๋ž€?

  • OSI ์ฐธ์กฐ ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์˜ ์„ค๊ณ„๋„์ด๋‹ค.
  • OSI ์ฐธ์กฐ ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ 7๊ฐœ์˜ ๊ณ„์ธต(Layer)์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. (ํ•˜๋‹จ ์ด๋ฏธ์ง€ ์ฐธ๊ณ )
  • ๊ฐ ๊ณ„์ธต๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ์—ญํ• ๊ณผ ๊ทœ์น™์ด ์žˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ์— ์˜ํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์€ ๋‹จ๊ณ„๋งˆ๋‹ค ๋ณต์ˆ˜์˜ ํ”„๋กœํ† ์ฝœ๋กœ ์‹คํ˜„๋œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•  ๋•Œ 7๊ณ„์ธต์—์„œ 1๊ณ„์ธต์œผ๋กœ ๊ฐ๊ฐ์˜ ์ˆœ์„œ๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
  • OSI ์ฐธ์กฐ ๋ชจ๋ธ์˜ ์žฅ์ ์€ ๊ณ„์ธต์ด ๊ฐ๊ฐ ๋…๋ฆฝํ•ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ํŠน์ • ๊ณ„์ธต์˜ ํ”„๋กœํ† ์ฝœ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋‹ค๋ฅธ ๊ณ„์ธต์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ•˜์œ„ ๊ณ„์ธต(13)์€ ์ƒ์œ„ ๊ณ„์ธต(47)์„ ์œ„ํ•ด์„œ ์ผํ•˜๊ณ  ์ƒ์œ„ ๊ณ„์ธต์€ ํ•˜์œ„ ๊ณ„์ธต์— ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

image
(์ด๋ฏธ์ง€ ์ถœ์ฒ˜: [๋„คํŠธ์›Œํฌ/๊ธฐ๋ณธ] ํ”„๋กœํ† ์ฝœ(Protocol)์ด๋ž€? โ€“ OSI 7 ๊ณ„์ธต ๋ณ„ ํ”„๋กœํ† ์ฝœ)

  • OSI 7๊ณ„์ธต

  • TCP

  • UDP

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์†Œ์ผ“

  • 4-way handshake

  • 3-way handshake


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment