Network

OSI 7계측

✨ OSI 7 계측을 λ‚˜λˆ„λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

μ€‘μš”ν•œ λͺ©μ μ€ ν‘œμ€€κ³Ό ν•™μŠ΅ 도ꡬ라 ν•  수 μžˆλ‹€.

ν‘œμ€€ν™”λ₯Ό 톡해 이질적인 포트 λ¬Έμ œλ‚˜ ν”„λ‘œν† μ½œ λ“±μœΌλ‘œ μΈν•œ 문제λ₯Ό ν•΄κ²°ν•˜μ—¬ λΉ„μš©μ„ μ ˆκ°ν–ˆλ‹€.

λ˜ν•œ, κ³„μΈ΅λ³„μ˜ κΈ°λŠ₯κ³Ό 톡신 과정을 λ‹¨κ³„λ³„λ‘œ λ‚˜λˆ„μ–΄μ„œ μ‰½κ²Œ μ•Œ 수 있고, νŠΉμ •ν•œ 곳에 이상이 생기면 κ·Έ λ‹¨κ³„λ§Œ μˆ˜μ •ν•  수 있기 λ•Œλ¬Έμ— νŽΈλ¦¬ν•˜λ‹€.

✨ 1) 물리(Physical)

리피터, 케이블, ν—ˆλΈŒ λ“±

주둜 전기적, 기계적, κΈ°λŠ₯적인 νŠΉμ„±μ„ μ΄μš©ν•΄μ„œ 톡신 μΌ€μ΄λΈ”λ‘œ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” 역할을 ν•œλ‹€.

✨ 3) λ„€νŠΈμ›Œν¬(Network)

λΌμš°ν„°, IP

μ—¬λŸ¬ 개의 λ…Έλ“œλ₯Ό κ±°μΉ  λ•Œλ§ˆλ‹€ 경둜λ₯Ό μ°Ύμ•„μ£ΌλŠ” 역할을 ν•˜λ©°, λ‹€μ–‘ν•œ 길이의 데이터λ₯Ό λͺ©μ μ§€κΉŒμ§€ κ°€μž₯ μ•ˆμ „ν•˜κ³  λΉ λ₯΄κ²Œ μ „λ‹¬ν•˜λŠ” κΈ°λŠ₯을 λ‹΄λ‹Ήν•œλ‹€. (전솑 계측이 μš”κ΅¬ν•˜λŠ” μ„œλΉ„μŠ€ ν’ˆμ§ˆμ„ μ œκ³΅ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯적, 절차적 μˆ˜λ‹¨μ„ μ œκ³΅ν•œλ‹€.)

λΌμš°ν„°λ₯Ό 톡해 이동할 경둜λ₯Ό μ„ νƒν•˜μ—¬ IP μ£Όμ†Œλ₯Ό μ§€μ •ν•˜κ³ , ν•΄λ‹Ή κ²½λ‘œμ— 따라 νŒ¨ν‚·μ„ 전달해쀀닀.

λΌμš°νŒ…, 흐름 μ œμ–΄, 였λ₯˜ μ œμ–΄, μ„Έκ·Έλ¨Όν…Œμ΄μ…˜ 등을 μˆ˜ν–‰ν•œλ‹€.

✨ 4) 전솑 계측(Transport)

TCP, UDP

TCP, UDP ν”„λ‘œν† μ½œμ„ 톡해 톡신을 ν™œμ„±ν™” ν•œλ‹€. 포트λ₯Ό 열어두고, ν”„λ‘œκ·Έλž¨λ“€μ΄ 전솑을 ν•  수 μžˆλ„λ‘ μ œκ³΅ν•΄μ€€λ‹€. 이λ₯Ό 톡해 μ–‘ 끝 λ‹¨μ˜ μ‚¬μš©μžλ“€μ΄ 데이터λ₯Ό μ£Όκ³  받을 수 μžˆλ‹€.

  • TCP : μ‹ λ’°μ„±, μ—°κ²° 지ν–₯적

  • UDP : λΉ„μ‹ λ’°μ„±, λΉ„μ—°κ²°μ„±, μ‹€μ‹œκ°„

✨ 5)μ„Έμ…˜(Session)

API, Socket

μ–‘ 끝 λ‹¨μ˜ μ‘μš© ν”„λ‘œμ„ΈμŠ€κ°€ 톡신을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 방법을 μ œκ³΅ν•œλ‹€.

데이터가 ν†΅μ‹ ν•˜κΈ° μœ„ν•œ 논리적 연결을 λ‹΄λ‹Ήν•œλ‹€.

TCP/IP μ„Έμ…˜μ„ λ§Œλ“€κ³  μ—†μ• λŠ” μ±…μž„μ„ μ§€λ‹ˆκ³  μžˆλ‹€.

✨ 6) ν‘œν˜„(Presentation)

JPEG, MPEG λ“±

데이터 ν‘œν˜„μ— λŒ€ν•œ 독립성을 μ œκ³΅ν•˜κ³  μ•”ν˜Έν™”ν•˜λŠ” 역할을 λ‹΄λ‹Ήν•œλ‹€.

μ½”λ“œ κ°„μ˜ λ²ˆμ—­μ„ λ‹΄λ‹Ήν•˜μ—¬ μ‚¬μš©μž μ‹œμŠ€ν…œμ—μ„œ λ°μ΄ν„°μ˜ ν˜•μ‹μƒ 차이λ₯Ό λ‹€λ£¨λŠ” 뢀담을 μ‘μš© κ³„μΈ΅μœΌλ‘œλΆ€ν„° λœμ–΄μ€€λ‹€.

파일 인코딩, λͺ…λ Ήμ–΄λ₯Ό 포μž₯, μ••μΆ•, μ•”ν˜Έν™”ν•œλ‹€.

✨ 7) μ‘μš©(Application)

HTTP, FTP, DNS λ“±

μ΅œμ’… λͺ©μ μ§€λ‘œ μ‘μš© ν”„λ‘œμ„ΈμŠ€μ™€ 직접 κ΄€κ³„ν•˜μ—¬ 일반적인 μ‘μš© μ„œλΉ„μŠ€λ₯Ό μˆ˜ν–‰ν•œλ‹€.

μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€, μ „μžμš°νŽΈ, λ°μ΄ν„°λ² μ΄μŠ€ 관리 λ“±μ˜ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

TCP/IP : νλ¦„μ œμ–΄, ν˜Όμž‘μ œμ–΄

✨ TCP

  • 일반적으둜 TCP와 IPλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ”λ°, IPκ°€ λ°μ΄ν„°μ˜ 배달을 μ²˜λ¦¬ν•œλ‹€λ©΄ TCPλŠ” νŒ¨ν‚·μ„ 좔적 및 κ΄€λ¦¬ν•œλ‹€.

  • μ‹ λ’°μ„± μžˆλŠ” 데이터 전솑을 μ§€μ›ν•˜λŠ” μ—°κ²° 지ν–₯ν˜• ν”„λ‘œν† μ½œμ΄λ‹€.

  • 사전에 3-way handshakeλΌλŠ” 과정을 톡해 연결을 μ„€μ •ν•˜κ³  톡신을 μ‹œμž‘ν•œλ‹€.

  • 4-way handshake 과정을 톡해 연결을 ν•΄μ œ(가상 νšŒμ„  방식)ν•œλ‹€.

  • 흐름 μ œμ–΄, 혼작 μ œμ–΄, 였λ₯˜ μ œμ–΄λ₯Ό 톡해 신뒰성을 보μž₯ν•œλ‹€. κ·ΈλŸ¬λ‚˜ 이 λ•Œλ¬Έμ— UDP보닀 전솑 속도가 λŠλ¦¬λ‹€λŠ” 단점이 μžˆλ‹€.

  • λ°μ΄ν„°μ˜ 전솑 μˆœμ„œλ₯Ό 보μž₯ν•˜λ©° μˆ˜μ‹  μ—¬λΆ€λ₯Ό 확인할 수 μžˆλ‹€.

  • TCPλ₯Ό μ‚¬μš©ν•˜λŠ” μ˜ˆλ‘œλŠ” λŒ€λΆ€λΆ„μ˜ μ›Ή HTTP 톡신, 이메일, 파일 전솑에 μ‚¬μš©λœλ‹€.

  • TCPκ°€ κ°€μƒνšŒμ„  방식을 μ œκ³΅ν•œλ‹€λŠ” 것은 솑신츑과 μˆ˜μ‹ μΈ‘μ„ μ—°κ²°ν•˜μ—¬ νŒ¨ν‚·μ„ μ „μ†‘ν•˜κΈ° μœ„ν•œ 논리적 경둜λ₯Ό λ°°μ •ν•œλ‹€λŠ” λœ»μ΄λ‹€.

νŒ¨ν‚·(Packet)?

  • 인터넷 λ‚΄μ—μ„œ 데이터λ₯Ό 보내기 μœ„ν•œ 경둜 λ°°μ •(λΌμš°νŒ…)을 효율적으둜 ν•˜κΈ° μœ„ν•΄μ„œ 데이터λ₯Ό μ—¬λŸ¬ 개의 쑰각으둜 λ‚˜λˆ„μ–΄ 전솑을 ν•˜λŠ”λ°, μ΄λ•Œ 쑰각을 νŒ¨ν‚·μ΄λΌκ³  ν•œλ‹€.

TCPλŠ” νŒ¨ν‚·μ„ μ–΄λ–»κ²Œ 좔적 및 κ΄€λ¦¬ν•˜λŠ”κ°€?

  • λ°μ΄ν„°λŠ” νŒ¨ν‚· λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ 같은 λͺ©μ μ§€(IP 계측)으둜 μ „μ†‘λœλ‹€.

Ex) ν•œ μ€„λ‘œ μ„œμ•Ό ν•˜λŠ” A,B,CλΌλŠ” μ‚¬λžŒ(νŒ¨ν‚·)이 μ„œμšΈ(솑신츑)μ—μ„œ μΆœλ°œν•˜μ—¬ λΆ€μ‚°(μˆ˜μ‹ μΈ‘)으둜 κ°€μ•Όν•œλ‹€κ³  κ°€μ •ν•˜λ‹€.

A,B,Cκ°€ 순차적으둜 κ°€λŠ” μƒν™©μ—μ„œ Bκ°€ 길을 잘λͺ» λ“€μ–΄μ„œ λΆ„μ‹€λ˜μ—ˆλ‹€.

ν•˜μ§€λ§Œ λͺ©μ μ§€μ—μ„œλŠ” A,B,Cκ°€ λͺ¨λ‘ ν•„μš”ν•œμ§€ λͺ¨λ₯΄κ³  A,C만 보고 λ‹€ μ™”λ‹€κ³  착각할 수 μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— A,B,CλΌλŠ” νŒ¨ν‚·μ— 1,2,3μ΄λΌλŠ” 번호λ₯Ό λΆ€μ—¬ν•˜μ—¬ νŒ¨ν‚·μ˜ λΆ„μ‹€ 확인 처리λ₯Ό ν•˜κΈ° μœ„ν•΄ λͺ©μ μ§€μ—μ„œ νŒ¨ν‚·μ„ μž¬μ‘°λ¦½ν•œλ‹€.

이런 λ°©μ‹μœΌλ‘œ TCPλŠ” νŒ¨ν‚·μ„ μΆ”μ ν•˜λ©°, λ‚˜λˆ„μ–΄ 보내진 데이터λ₯Ό λͺ©μ μ§€μ—μ„œ λ°›κ³  μž¬μ‘°λ¦½ν•  수 있게 λœλ‹€.

✨ 흐름 μ œμ–΄

  • 솑신츑과 μˆ˜μ‹ μΈ‘ μ‚¬μ΄μ˜ 데이터 처리 속도 차이(흐름)을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ 기법.

  • λ§Œμ•½, μ†‘μ‹ μΈ‘μ˜ μ „μ†‘λŸ‰ > μˆ˜μ‹ μΈ‘μ˜ μ²˜λ¦¬λŸ‰μΌ 경우 μ „μ†‘λœ νŒ¨ν‚·μ€ μˆ˜μ‹ μΈ‘μ˜ 큐λ₯Ό λ„˜μ–΄μ„œ 손싀될 수 있기 λ•Œλ¬Έμ— μ†‘μ‹ μΈ‘μ˜ νŒ¨ν‚· μ „μ†‘λŸ‰μ„ μ œμ–΄ν•˜κ²Œ λœλ‹€.

  1. Stop and Wait(정지 - λŒ€κΈ°)

  • 맀번 μ „μ†‘ν•œ νŒ¨ν‚·μ— λŒ€ν•œ 확인 응닡을 λ°›μ•„μ•Ό κ·Έ λ‹€μŒ νŒ¨ν‚·μ„ 전솑할 수 μžˆλ‹€.

  • μ΄λŸ¬ν•œ ꡬ쑰 λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μ΄λ‹€. (단점)

  • Give & Take.

  1. Sliding Window(μŠ¬λΌμ΄λ”© μœˆλ„μš°)

  • (솑신츑 = 전솑츑)

  • μˆ˜μ‹ μΈ‘μ—μ„œ μ„€μ •ν•œ μœˆλ„μš° 크기만큼 μ†‘μ‹ μΈ‘μ—μ„œ 확인 응닡 없이 μ„Έκ·Έλ¨ΌνŠΈλ₯Ό 전솑할 수 있게 ν•˜μ—¬ 데이터 흐름을 λ™μ μœΌλ‘œ μ‘°μ ˆν•˜λŠ” 기법이닀.

  • μœˆλ„μš° : 솑신, μˆ˜μ‹  μŠ€ν…Œμ΄μ…˜ μ–‘μͺ½μ—μ„œ λ§Œλ“€μ–΄μ§„ λ²„νΌμ˜ 크기.

  • Stop and Wait의 λΉ„νš¨μœ¨μ„±μ„ κ°œμ„ ν•œ 기법

  • μ†‘μ‹ μΈ‘μ—μ„œλŠ” Ack ν”„λ ˆμž„μ„ μˆ˜μ‹ ν•˜μ§€ μ•Šλ”λΌλ„ μ—¬λŸ¬ 개의 ν”„λ ˆμž„μ„ μ—°μ†μ μœΌλ‘œ 전솑할 수 μžˆλ‹€.

  • μ†‘μ‹ μΈ‘μ—μ„œ 0,1,2,3,4,5,6을 보낼 수 μžˆλŠ” ν”„λ ˆμž„μ„ 가지고 있고 데이터 0,1을 μ „μ†‘ν–ˆλ‹€κ³  κ°€μ •ν•˜λ©΄ μŠ¬λΌμ΄λ”© μœˆλ„μš°μ˜ κ΅¬μ‘°λŠ” 2,3,4,5,6처럼 λ³€ν•˜κ²Œ λœλ‹€.

  • μ΄λ•Œ, λ§Œμ•½ μˆ˜μ‹ μΈ‘μœΌλ‘œλΆ€ν„° ACKλΌλŠ” ν”„λ ˆμž„μ„ λ°›κ²Œ λœλ‹€λ©΄ 솑신츑은 이전에 보낸 데이터 0,1을 μˆ˜μ‹ μΈ‘μ—μ„œ μ •μƒμ μœΌλ‘œ λ°›μ•˜μŒμ„ μ•Œκ²Œ 되고 μ†‘μ‹ μΈ‘μ˜ μŠ¬λΌμ΄λ”© μœˆλ„μš°λŠ” ACK ν”„λ ˆμž„μ— λ”°λ₯Έ ν”„λ ˆμž„μ˜ 수만큼 였λ₯Έμͺ½μœΌλ‘œ 경계가 ν™•μž₯λœλ‹€.

✨였λ₯˜ μ œμ–΄

  • 였λ₯˜ κ²€μΆœκ³Ό μž¬μ „μ†‘μ„ ν¬ν•¨ν•œλ‹€.

  • ARQ(Automatic Repeat Request) 기법을 μ‚¬μš©ν•΄ ν”„λ ˆμž„μ΄ μ†μƒλ˜μ—ˆκ±°λ‚˜ μ†μ‹€λ˜μ—ˆμ„ 경우, μž¬μ „μ†‘μ„ 톡해 였λ₯˜λ₯Ό λ³΅κ΅¬ν•œλ‹€.

  • ARQ 기법은 흐름 μ œμ–΄ 기법과 κ΄€λ ¨λ˜μ–΄ μžˆλ‹€.

  1. Stop and Wait ARQ

  • μ†‘μ‹ μΈ‘μ—μ„œ 1개의 ν”„λ ˆμž„μ„ μ†‘μ‹ ν•˜κ³ , μˆ˜μ‹ μΈ‘μ—μ„œ μˆ˜μ‹ λœ ν”„λ ˆμž„μ˜ μ—λŸ¬ 유무 νŒλ‹¨μ— 따라 ACK or NAKλ₯Ό λ³΄λ‚΄λŠ” 방식이닀.

  • 식별을 μœ„ν•΄ 데이터 ν”„λ ˆμž„κ³Ό ACK ν”„λ ˆμž„μ€ 각가 0,1 번호λ₯Ό λ²ˆκ°ˆμ•„κ°€λ©° λΆ€μ—¬ν•œλ‹€.

  • μˆ˜μ‹ μΈ‘μ΄ 데이터λ₯Ό 받지 λͺ»ν–ˆμ„ 경우, NAKλ₯Ό 보내고 NAKλ₯Ό 받은 솑신츑은 데이터λ₯Ό μž¬μ „μ†‘ν•œλ‹€.

  • λ§Œμ•½, λ°μ΄ν„°λ‚˜ ACKκ°€ λΆ„μ‹€λ˜μ—ˆμ„ 경우 일정 κ°„κ²©μ˜ μ‹œκ°„μ„ 두고 νƒ€μž„μ•„μ›ƒμ΄ 되면, 솑신츑은 데이터λ₯Ό μž¬μ „μ†‘ν•œλ‹€.

  1. Go-Back-n ARQ(μŠ¬λΌμ΄λ”© μœˆλ„μš°)

  • μ „μ†‘λœ ν”„λ ˆμž„μ΄ μ†μƒλ˜κ±°λ‚˜ λΆ„μ‹€λœ 경우 그리고 ACK νŒ¨ν‚·μ˜ μ†μ‹€λ‘œ μΈν•œ TIME_OUT이 λ°œμƒν•œ 경우, ν™•μΈλœ λ§ˆμ§€λ§‰ ν”„λ ˆμž„ μ΄ν›„λ‘œ λͺ¨λ“  ν”„λ ˆμž„μ„ μž¬μ „μ†‘ν•œλ‹€.

  • μŠ¬λΌμ΄λ”© μœˆλ„μš°λŠ” 연속적인 ν”„λ ˆμž„ 전솑 κΈ°λ²•μœΌλ‘œ 전솑츑은 μ „μ†‘λœ λͺ¨λ“  ν”„λ ˆμž„μ˜ 볡사본을 가지고 μžˆμ–΄μ•Ό ν•˜λ©°, ACK와 NAK λͺ¨λ‘ 각각 ꡬ별해야 ν•œλ‹€.

  • ACK : λ‹€μŒ ν”„λ ˆμž„μ„ 전솑.

  • NAK : μ†μƒλœ ν”„λ ˆμž„ 자체 번호λ₯Ό λ°˜ν™˜.

[μž¬μ „μ†‘ λ˜λŠ” 경우]

(1). NAK ν”„λ ˆμž„μ„ λ°›μ•˜μ„ 경우.

  • λ§Œμ•½, μˆ˜μ‹ μΈ‘μœΌλ‘œ 0~5κΉŒμ§€μ˜ 데이터λ₯Ό λ³΄λƒˆλ‹€κ³  κ°€μ •ν•˜μž.

  • μˆ˜μ‹ μΈ‘μ—μ„œ 데이터λ₯Ό λ°›μ•˜μŒμ„ ν™•μΈν•˜λŠ” ACK ν”„λ ˆμž„μ„ 쀑간 쀑간 λ³΄λ‚΄κ²Œ 되며, ACK ν”„λ ˆμž„μ„ ν™•μΈν•œ 전솑츑은 κ³„μ†ν•΄μ„œ 데이터λ₯Ό μ „μ†‘ν•œλ‹€.

  • κ·ΈλŸ¬λ‚˜ λ§Œμ•½ μˆ˜μ‹ μΈ‘μ—μ„œ 데이터 였λ₯˜ ν”„λ ˆμž„ 2λ₯Ό λ°œκ²¬ν•˜κ³  NAK2λ₯Ό 전솑츑에 보낸닀고 ν•΄λ³΄μž.

  • NAK2λ₯Ό 받은 전솑츑은 데이터 ν”„λ ˆμž„ 2κ°€ 잘λͺ»λ˜μ—ˆλ‹€λŠ” 것을 μ•Œκ³  데이터λ₯Ό μž¬μ „μ†‘ν•œλ‹€.

  • GBn ARQ의 νŠΉμ§•μ€ 데이터λ₯Ό μž¬μ „μ†‘ν•˜λŠ” 뢀뢄이닀. NAK(n)λ₯Ό λ°›μ•„ n 데이터 μ΄ν›„μ˜ λͺ¨λ“  데이터λ₯Ό μž¬μ „μ†‘ν•œλ‹€.

(2). 전솑 데이터 ν”„λ ˆμž„μ˜ λΆ„μ‹€

  • GBn ARQ의 νŠΉμ§•μ€ ν™•μΈλœ 데이터 μ΄ν›„μ˜ λͺ¨λ“  데이터 ν”„λ ˆμž„ μž¬μ „μ†‘κ³Ό μˆ˜μ‹ μΈ‘μ˜ 폐기이닀.

  • μˆ˜μ‹ μΈ‘μ—μ„œ 데이터 1을 λ°›κ³  λ‹€μŒ λ°μ΄ν„°λ‘œ 3을 λ°›κ²Œ λœλ‹€λ©΄ 데이터 2λ₯Ό 받지 λͺ»ν–ˆμœΌλ―€λ‘œ μˆ˜μ‹ μΈ‘μ—μ„œλŠ” 데이터 3을 νκΈ°ν•˜κ³  데이터 2λ₯Ό 받지 λͺ»ν–ˆλ‹€λŠ” NAK2λ₯Ό 전솑츑에 보낸닀.

  • NAKλ₯Ό 받은 전솑츑은 (1) κ²½μš°μ™€ 같이 NAK(n) λ°μ΄ν„°λ‘œλΆ€ν„° λͺ¨λ“  데이터λ₯Ό μž¬μ „μ†‘ν•˜λ©° μˆ˜μ‹ μΈ‘μ€ 기쑴에 λ°›μ•˜λ˜ 데이터 쀑 NAK(n)으둜 λ³΄λƒˆλ˜ λŒ€μƒ 데이터 μ΄ν›„μ˜ λͺ¨λ“  데이터λ₯Ό νκΈ°ν•˜κ³  μž¬μ „μ†‘ λ°›λŠ”λ‹€.

https://user-images.githubusercontent.com/33534771/75339152-507e0000-58d3-11ea-876e-e29653f9f99e.png

(3). μ§€μ •λœ νƒ€μž„ 아웃 λ‚΄μ˜ ACK ν”„λ ˆμž„ λΆ„μ‹€(Lost ACK)

  • 전솑츑은 λΆ„μ‹€λœ ACKλ₯Ό 닀루기 μœ„ν•΄ 타이머λ₯Ό 가지고 μžˆλ‹€.

  • μ „μ†‘μΈ‘μ—μ„œλŠ” 이 νƒ€μ΄λ¨Έμ˜ νƒ€μž„ 아웃 λ™μ•ˆ μˆ˜μ‹ μΈ‘μœΌλ‘œλΆ€ν„° ACK 데이터λ₯Ό 받지 λͺ»ν–ˆμ„ 경우, λ§ˆμ§€λ§‰ ACK된 데이터뢀터 μž¬μ „μ†‘ν•œλ‹€.

https://user-images.githubusercontent.com/33534771/75339203-6ab7de00-58d3-11ea-973d-a4db4abf52a5.png
  • 전솑츑은 NAK γ…ν”„λ ˆμž„μ„ λ°›μ•˜μ„ 경우, NAK ν”„λ ˆμž„ λ²ˆν˜ΈλΆ€ν„° 데이터λ₯Ό μž¬μ „μ†‘ν•œλ‹€.

  • μˆ˜μ‹ μΈ‘μ€ μ›ν•˜λŠ” ν”„λ ˆμž„μ΄ 아닐 경우, 데이터λ₯Ό λͺ¨λ‘ 폐기 μ²˜λ¦¬ν•œλ‹€.

  • νƒ€μž„μ•„μ›ƒ(ACK λΆ„μ‹€)의 경우, λ§ˆμ§€λ§‰ ACK된 데이터뢀터 μž¬μ „μ†‘ν•œλ‹€.

  1. SR(Selective-Reject) ARQ

  • GBn ARQ의 ν™•μΈλœ λ§ˆμ§€λ§‰ ν”„λ ˆμž„ μ΄ν›„μ˜ λͺ¨λ“  ν”„λ ˆμž„μ„ μž¬μ „μ†‘ν•˜λŠ” 단점을 λ³΄μ™„ν•œ 기법이닀.

  • SR ARQλŠ” μ†μƒλœ, μ†μ‹€λœ ν”„λ ˆμž„λ§Œ μž¬μ „μ†‘ν•œλ‹€.

  • κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ 데이터 μž¬μ •λ ¬μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜λ©°, λ³„λ„μ˜ 버퍼λ₯Ό ν•„μš”λ‘œ ν•œλ‹€.

  • μˆ˜μ‹ μΈ‘μ— 버퍼λ₯Ό 두어 받은 λ°μ΄ν„°μ˜ 정렬이 ν•„μš”ν•˜λ‹€.

https://user-images.githubusercontent.com/33534771/75339302-963ac880-58d3-11ea-9a7f-fe6e4a7a6f38.png

✨ 혼작 μ œμ–΄

  • μ†‘μ‹ μΈ‘μ˜ 데이터 전달과 λ„€νŠΈμ›Œν¬μ˜ 데이터 처리 속도λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 기법이닀.

  • ν•œ λΌμš°ν„°μ—κ²Œ 데이터가 λͺ°λ € λͺ¨λ“  데이터λ₯Ό μ²˜λ¦¬ν•  수 μ—†λŠ” 경우, ν˜ΈμŠ€νŠΈλ“€μ€ μž¬μ „μ†‘μ„ ν•˜κ²Œ 되고 κ²°κ΅­ 혼작만 κ°€μ€‘μ‹œμΌœ μ˜€λ²„ν”Œλ‘œμš°λ‚˜ 데이터 손싀이 λ°œμƒν•œλ‹€.

  • μ΄λŸ¬ν•œ λ„€νŠΈμ›Œν¬μ˜ ν˜Όμž‘μ„ ν”Όν•˜κΈ° μœ„ν•΄ μ†‘μ‹ μΈ‘μ—μ„œ λ³΄λ‚΄λŠ” λ°μ΄ν„°μ˜ 전솑 속도λ₯Ό μ œμ–΄ν•˜λŠ” 것이 혼작 μ œμ–΄μ˜ κ°œλ…μ΄λ‹€.

  1. AIMD(Additive Increase Multicative Decrease)

  • ν•© 증가 / κ³± κ°μ†Œ μ•Œκ³ λ¦¬μ¦˜μ΄λΌκ³  ν•œλ‹€.

  • μ²˜μŒμ— νŒ¨ν‚· ν•˜λ‚˜λ₯Ό λ³΄λ‚΄λŠ” κ²ƒμœΌλ‘œ μ‹œμž‘ν•˜μ—¬ μ „μ†‘ν•œ νŒ¨ν‚·μ΄ 문제 없이 λ„μ°©ν•œλ‹€λ©΄ Window Sizeλ₯Ό 1μ”© μ¦κ°€μ‹œν‚€λ©° μ „μ†‘ν•˜λŠ” 방법이닀. λ§Œμ•½, νŒ¨ν‚· 전솑을 μ‹€νŒ¨ν•˜κ±°λ‚˜ TIME_OUT이 λ°œμƒν•˜λ©΄ Window Sizeλ₯Ό 절반으둜 κ°μ†Œμ‹œν‚¨λ‹€.

  • 이 방식은 κ³΅ν‰ν•˜λ‹€.

    • μ—¬λŸ¬ ν˜ΈμŠ€νŠΈκ°€ ν•œ λ„€νŠΈμ›Œν¬λ₯Ό κ³΅μœ ν•˜κ³  있으면 λ‚˜μ€‘μ— μ§„μž…ν•˜λŠ” μͺ½μ΄ μ²˜μŒμ—λŠ” λΆˆλ¦¬ν•˜μ§€λ§Œ, μ‹œκ°„μ΄ 흐λ₯΄λ©΄ ν‰ν˜• μƒνƒœλ‘œ μˆ˜λ ΄ν•˜κ²Œ λ˜λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

  • λ¬Έμ œμ μ€ 초기 λ„€νŠΈμ›Œν¬μ˜ 높은 λŒ€μ—­ν­μ„ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κ³  λ„€νŠΈμ›Œν¬κ°€ ν˜Όμž‘ν•΄μ§€λŠ” 상황을 미리 κ°μ§€ν•˜μ§€ λͺ»ν•˜μ—¬ ν˜Όμž‘ν•΄μ§€κ³  λ‚˜μ„œμ•Ό λŒ€μ—­ν­μ„ μ€„μ΄λŠ” 방식이닀.

  1. Slow Start

  • AIMDκ°€ λ„€νŠΈμ›Œν¬μ˜ μˆ˜μš©λŸ‰ μ£Όλ³€μ—μ„œλŠ” 효율적으둜 λ™μž‘ν•˜μ§€λ§Œ, μ²˜μŒμ— 전솑 속도λ₯Ό μ˜¬λ¦¬λŠ” 데 μ‹œκ°„μ΄ λ„ˆλ¬΄ κΈΈλ‹€λŠ” 단점이 μžˆλ‹€.

  • Slow StartλŠ” AIMD와 λ§ˆμ°¬κ°€μ§€λ‘œ νŒ¨ν‚·μ„ ν•˜λ‚˜μ”© λ³΄λ‚΄λŠ” 것뢀터 μ‹œμž‘ν•œλ‹€. 이 방식은 νŒ¨ν‚·μ΄ 문제 없이 λ„μ°©ν•˜λ©΄ 각각의 ACK νŒ¨ν‚·λ§ˆλ‹€ Window Sizeλ₯Ό 1μ”© λŠ˜λ¦°λ‹€. 즉, ν•œ μ£ΌκΈ°κ°€ μ§€λ‚˜λ©΄ Window SizeλŠ” 2λ°°κ°€ λœλ‹€.

  • λ”°λΌμ„œ κ·Έλž˜ν”„μ˜ λͺ¨μ–‘은 μ§€μˆ˜ ν•¨μˆ˜ 꼴이 λœλ‹€.

  • 혼작 ν˜„μƒμ΄ λ°œμƒν•˜λ©΄ Window Sizeλ₯Ό 1둜 λ–¨μ–΄λœ¨λ¦°λ‹€.

  • μ²˜μŒμ—λŠ” λ„€νŠΈμ›Œν¬μ˜ μˆ˜μš©λŸ‰μ„ μ˜ˆμΈ‘ν•  수 μžˆλŠ” 정보가 μ—†μ§€λ§Œ ν•œλ²ˆ 혼작 ν˜„μƒμ΄ λ°œμƒν•˜κ³  λ‚˜λ©΄ λ„€νŠΈμ›Œν¬μ˜ μˆ˜μš©λŸ‰μ„ μ–΄λŠμ •λ„ μ˜ˆμƒν•  수 μžˆμœΌλ―€λ‘œ 혼작 ν˜„μƒμ΄ λ°œμƒν•˜μ˜€λ˜ Window Size의 μ ˆλ°˜κΉŒμ§€λŠ” μ΄μ „μ²˜λŸΌ μ§€μˆ˜ ν•¨μˆ˜ 꼴둜 Window Sizeλ₯Ό μ¦κ°€μ‹œν‚€κ³  κ·Έ μ΄ν›„λΆ€ν„°λŠ” μ™„λ§Œν•˜κ²Œ 1μ”© μ¦κ°€μ‹œν‚€λŠ” 방식이닀.

https://user-images.githubusercontent.com/33534771/75339337-a6eb3e80-58d3-11ea-8ff1-b99bcc992fca.png
  • 미리 정해진 μž„κ³„κ°’(threshold)에 도달할 λ•ŒκΉŒμ§€ μœˆλ„μš°μ˜ 크기λ₯Ό 2λ°°μ”© μ¦κ°€μ‹œν‚¨λ‹€.

  • Slow StartλΌλŠ” 이름을 μ‚¬μš©ν•˜μ§€λ§Œ, 맀 μ „μ†‘λ§ˆλ‹€ 2λ°°μ”© μ¦κ°€ν•˜κΈ° λ•Œλ¬Έμ— μ „μ†‘λ˜μ–΄μ§€λŠ” λ°μ΄ν„°μ˜ ν¬κΈ°λŠ” μ§€μˆ˜ν•¨μˆ˜μ μœΌλ‘œ μ¦κ°€ν•œλ‹€.

  • μ „μ†‘λ˜λŠ” λ°μ΄ν„°μ˜ 크기가 μž„κ³„ 값에 λ„λ‹¬ν•˜λ©΄ 혼작 νšŒν”Ό λ‹¨κ³„λ‘œ λ„˜μ–΄κ°„λ‹€.

https://user-images.githubusercontent.com/33534771/75339370-bb2f3b80-58d3-11ea-9211-af3ca1e5960b.png

[혼작 νšŒν”Ό(Congestion Avoidance)]

  • μœˆλ„μš°μ˜ 크기가 μž„κ³„ 값에 λ„λ‹¬ν•œ μ΄ν›„μ—λŠ” λ°μ΄ν„°μ˜ 손싀이 λ°œμƒν•  ν™•λ₯ μ΄ 높아진닀.

  • λ”°λΌμ„œ 이λ₯Ό νšŒν”Όν•˜κΈ° μœ„ν•΄ μœˆλ„μš° 크기λ₯Ό μ„ ν˜•μ μœΌλ‘œ 1μ”© μ¦κ°€μ‹œν‚€λŠ” 방법이닀.

  • μˆ˜μ‹ μΈ‘μœΌλ‘œλΆ€ν„° 일정 μ‹œκ°„ λ™μ•ˆκΉŒμ§€ ACKλ₯Ό μˆ˜μ‹ ν•˜μ§€ λͺ»ν•˜λŠ” 경우.

    • νƒ€μž„ μ•„μ›ƒμ˜ λ°œμƒ : λ„€νŠΈμ›Œν¬ 혼작이 λ°œμƒν–ˆλ‹€κ³  인식.

    • 혼작 μƒνƒœλ‘œ μΈμ‹λœ 경우

      • μœˆλ„μš°μ˜ 크기λ₯Ό 즉, μ„Έκ·Έλ¨ΌνŠΈμ˜ 수λ₯Ό 1둜 κ°μ†Œμ‹œν‚¨λ‹€.

      • λ™μ‹œμ— μž„κ³„κ°’μ„ νŒ¨ν‚· 손싀이 λ°œμƒν–ˆμ„ λ•Œμ˜ μœˆλ„μš° 크기의 절반으둜 쀄인닀.

[λΉ λ₯Έ 회볡(Fast Recovery)]

  • ν˜Όμž‘ν•œ μƒνƒœκ°€ 되면 Window Sizeλ₯Ό 1둜 쀄이지 μ•Šκ³  절반으둜 쀄이고 μ„ ν˜• μ¦κ°€μ‹œν‚€λŠ” 방법이닀.

  • λΉ λ₯Έ 회볡 μ •μ±…κΉŒμ§€ μ μš©ν•˜λ©΄ 혼작 상황을 ν•œλ²ˆ κ²ͺκ³  λ‚˜μ„œλΆ€ν„°λŠ” μˆœμˆ˜ν•œ AIMD λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜κ²Œ λœλ‹€.

[λΉ λ₯Έ μž¬μ „μ†‘(Fast Retransmit)]

  • μˆ˜μ‹ μΈ‘μ—μ„œ νŒ¨ν‚·μ„ 받을 λ•Œ λ¨Όμ € 도착해야 ν•  νŒ¨ν‚·μ΄ λ„μ°©ν•˜μ§€ μ•Šκ³  λ‹€μŒ νŒ¨ν‚·μ΄ λ„μ°©ν•œ κ²½μš°μ—λ„ ACK νŒ¨ν‚·μ„ 보낸닀. 단, μˆœμ„œλŒ€λ‘œ 잘 λ„μ°©ν•œ λ§ˆμ§€λ§‰ νŒ¨ν‚·μ˜ λ‹€μŒ νŒ¨ν‚·μ˜ μˆœλ²ˆμ„ ACK νŒ¨ν‚·μ— μ‹€μ–΄μ„œ 보낸닀. λ”°λΌμ„œ 쀑간에 νŒ¨ν‚· ν•˜λ‚˜κ°€ μ†μ‹€λ˜λ©΄ μ†‘μ‹ μΈ‘μ—μ„œλŠ” 순번이 μ€‘λ³΅λœ ACK νŒ¨ν‚·μ„ λ°›κ²Œ λœλ‹€. 이것을 κ°μ§€ν•˜λ©΄ λ¬Έμ œκ°€ λ˜λŠ” 순번의 νŒ¨ν‚·μ„ μž¬μ „μ†‘ν•  수 μžˆλ‹€.

  • λΉ λ₯Έ μž¬μ „μ†‘μ€ μ€‘λ³΅λœ 순번의 νŒ¨ν‚·μ„ 3개(3 ACK) λ°›μœΌλ©΄ μž¬μ „μ†‘ν•œλ‹€. 그리고 μ΄λŸ¬ν•œ ν˜„μƒμ΄ μΌμ–΄λ‚˜λŠ” 것은 μ•½κ°„μ˜ 혼작이 λ°œμƒν•œ κ²ƒμœΌλ‘œ κ°„μ£Όν•˜μ—¬ Window Sizeλ₯Ό 절반으둜 쀄인닀.

UDP

✨ UDP

  • User Datagram Protocol의 μ•½μžμ΄λ‹€.

  • 데이터λ₯Ό 데이터 그램 λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œν† μ½œ.

    • 데이터 그램 : 독립적인 관계λ₯Ό μ§€λ‹ˆλŠ” νŒ¨ν‚·

  • λΉ„μ—°κ²°ν˜• ν”„λ‘œν† μ½œλ‘œ 사전에 μ—°κ²° μ„€μ • 없이 데이터λ₯Ό μ „λ‹¬ν•œλ‹€.

  • 사전에 μ—°κ²° 섀정을 ν•˜μ§€ μ•Šμ€ 데이터 그램 방식을 톡해 데이터λ₯Ό μ „λ‹¬ν•˜κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ λ©”μ‹œμ§€μ—μ„œ λΆ„ν• λœ 각각의 νŒ¨ν‚·μ€ μ„œλ‘œ λ‹€λ₯Έ 경둜둜 전솑될 수 μžˆλ‹€.

  • μ†‘μ‹ μΈ‘μ—μ„œ μ „μ†‘ν•œ νŒ¨ν‚·μ˜ μˆœμ„œμ™€ μˆ˜μ‹ μΈ‘μ— λ„μ°©ν•œ νŒ¨ν‚·μ˜ μˆœμ„œκ°€ λ‹€λ₯Ό 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ μ„œλ‘œ λ‹€λ₯Έ 경둜둜 νŒ¨ν‚·μ„ μ²˜λ¦¬ν•¨μ—λ„ λΆˆκ΅¬ν•˜κ³  μˆœμ„œλ₯Ό λΆ€μ—¬ν•˜κ±°λ‚˜ μž¬μ‘°λ¦½ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • 흐름 μ œμ–΄, 혼작 μ œμ–΄, 였λ₯˜ μ œμ–΄λ₯Ό ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μ†μƒλœ μ„Έκ·Έλ¨ΌνŠΈμ— λŒ€ν•œ μž¬μ „μ†‘μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • 이둜 인해 속도가 λΉ λ₯΄λ©° λ„€νŠΈμ›Œν¬ λΆ€ν•˜κ°€ μ λ‹€λŠ” μž₯점이 μžˆμ§€λ§Œ, μ‹ λ’°μ„± μžˆλŠ” 데이터 전솑을 보μž₯ν•˜μ§€ λͺ»ν•œλ‹€.

  • UDPλŠ” RTP(Real Time Protocol), Multicast, DNS λ“±μ—μ„œ μ‚¬μš©λœλ‹€

DNS 같은 경우 λˆ„κ΅°κ°€ DNS μ„œλΉ„μŠ€λ₯Ό μš”μ²­ν•  λ•Œλ§ˆλ‹€ TCP처럼 Session을 λ§Ίκ³  ν†΅μ‹ ν•œλ‹€λ©΄ 속도도 느리고, μ„œλ²„ λ¦¬μ†ŒμŠ€λ„ μ—„μ²­λ‚˜κ²Œ μ†Œλͺ¨λ  것이닀.

κ·ΈλŸ°κ°€ ν•˜λ©΄ NMS(Network Management Server)κ°€ 5뢄에 ν•œλ²ˆμ”© μž₯λΉ„ μƒνƒœλ₯Ό μ κ²€ν•˜κΈ° μœ„ν•΄ 정보λ₯Ό μ½μ–΄μ˜€λŠ”λ° 수백, μˆ˜μ²œλŒ€μ˜ μž₯비와 Session을 λ§Ίμ–΄μ•Ό ν•œλ‹€λ©΄ 이것도 λ§ˆμ°¬κ°€μ§€λ‘œ λ¬Έμ œκ°€ 생긴닀.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— UDPλ₯Ό μ‚¬μš©ν•œλ‹€.

μž¬μ „μ†‘μ„ ν•˜λ©΄ μ•ˆλ˜λŠ” μ„œλΉ„μŠ€κ°€ μžˆλ‹€.

λŒ€ν‘œμ μœΌλ‘œ RTP이닀.

μ „ν™”λ₯Ό ν•˜κ³  μžˆλ‹€ λ‹€κ³  κ°€μ •ν•΄λ³΄μž.

"μ—¬","보","μ„Έ","μš”"λΌλŠ” 4개의 데이터λ₯Ό μ „μ†‘ν–ˆλŠ”λ°, "μ„Έ"λ₯Ό λͺ»λ°›μ•˜λ‹€κ³  λ‹€μ‹œ 보내달라고 ν•˜λ©΄ "μ—¬λ³΄μš”μ„Έ"κ°€ 될 것이닀.

이럴 λ•ŒλŠ” κ·Έλƒ₯ "여보Xμš”"둜 μ „λ‹¬ν•˜λŠ”κ²Œ λ‚˜μ€ 상황이닀.

λ˜ν•œ, Multicast μ„œλΉ„μŠ€κ°€ UDPλ₯Ό μ‚¬μš©ν•œλ‹€.

1:N으둜 ν†΅μ‹ ν•˜λŠ” λ°©μ‹μ—μ„œ ν•œ μ‚¬λžŒμ΄ 데이터λ₯Ό 받지 λͺ»ν–ˆλ‹€κ³  μž¬μ „μ†‘μ„ μš”μ²­ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž. μ œλŒ€λ‘œ 받은 μ‚¬λžŒλ“€λ„ ν•΄λ‹Ή 데이터λ₯Ό λ‹€μ‹œ λ°›μ•„μ„œ μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€λŠ” 문제점이 λ°œμƒν•  수 있기 λ•Œλ¬Έμ— UDPλ₯Ό μ‚¬μš©ν•œλ‹€.

3-Way handshake & 4-Way handshake

✨ 3 way handshake

TCP/IP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•˜μ—¬ 톡신을 진행할 λ•Œ, 두 쒅단 κ°„ μ •ν™•ν•œ 데이터 전솑을 보μž₯ν•˜κΈ° μœ„ν•΄ 연결을 μ„€μ •ν•˜λŠ” 과정이닀.

https://user-images.githubusercontent.com/33534771/75338886-d77ea880-58d2-11ea-84c3-f8b60663f9c6.png

[μ—°κ²° κ³Όμ •]

SYN : Synchronize Sequence Number

ACK : Acknowledgement

  1. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ— 접속을 μš”μ²­ν•˜λŠ” SYN(a) νŒ¨ν‚·μ„ 보낸닀.

  2. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μΈ SYN(a) νŒ¨ν‚·μ— λŒ€ν•œ μš”μ²­ 수락 μ‘λ‹΅μœΌλ‘œ ACK(a+1) νŒ¨ν‚·κ³Ό ν΄λΌμ΄μ–ΈνŠΈλ„ 포트λ₯Ό μ—΄μ–΄λ‹¬λΌλŠ” SYN(b) νŒ¨ν‚·μ„ 보낸닀.

  3. ν΄λΌμ΄μ–ΈνŠΈλŠ” ACK(a+1) νŒ¨ν‚·κ³Ό SYN(b) νŒ¨ν‚·μ„ λ°›κ³  이에 λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ ACK(b+1) νŒ¨ν‚·μ„ 보내며 연결이 μ„±λ¦½λœλ‹€.

[Q. μ™œ 2wayκ°€ μ•„λ‹ˆλΌ 3way일까?]

TCPλŠ” μ–‘λ°©ν–₯μ„± 연결이기 λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„μ—κ²Œ μžμ‹ μ˜ 쑴재λ₯Ό μ•Œλ¦¬κ³  νŒ¨ν‚·μ„ 보낼 수 μžˆλŠ” κ²ƒμ²˜λŸΌ μ„œλ²„μ—μ„œλ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μžμ‹ μ˜ 쑴재λ₯Ό μ•Œλ¦¬κ³  νŒ¨ν‚·μ„ 보낼 수 μžˆλ‹€λŠ” μ‹ ν˜Έλ₯Ό 보내야 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

[μ°Έκ³ ]

μ²˜μŒμ— ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ SYN νŒ¨ν‚·μ„ 보낼 λ•Œ Sequence Numberμ—λŠ” λžœλ€ν•œ μˆ«μžκ°€ 담겨진닀.

Connection을 맺을 λ•Œ, μ‚¬μš©ν•˜λŠ” 포트(port)λŠ” μœ ν•œ λ²”μœ„ λ‚΄μ—μ„œ μ‚¬μš©ν•˜κ³  μ‹œκ°„μ΄ 지남에 따라 μž¬μ‚¬μš©ν•œλ‹€. λ”°λΌμ„œ 이전에 μ‚¬μš©ν•œ 포트 번호λ₯Ό μž¬μ‚¬μš©ν•  κ°€λŠ₯성이 μžˆλ‹€.

Sequence Numberκ°€ 순차적인 숫자둜 μ „μ†‘λœλ‹€λ©΄ μ„œλ²„λŠ” μ΄μ „μ˜ ConnectionμœΌλ‘œλΆ€ν„° μ „μ†‘λ˜λŠ” νŒ¨ν‚·μœΌλ‘œ 인식할 수 μžˆλ‹€. λ”°λΌμ„œ μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚œμˆ˜λ‘œ 초기 Sequence Numberλ₯Ό μ„€μ •ν•œλ‹€.

✨ 4 way handshake

TCP/IP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•œ 톡신 κ³Όμ •μ—μ„œλŠ” μœ„μ—μ„œ μ–ΈκΈ‰ν–ˆλ˜ κ²ƒμ²˜λŸΌ 3 way handshake 과정을 톡해 연결을 μ„€μ •ν•˜κ³  4 way handshake 과정을 톡해 μ—°κ²° 섀정을 ν•΄μ œν•œλ‹€.

[μ—°κ²° κ³Όμ •]

  1. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—κ²Œ 연결을 μ’…λ£Œν•˜κ² λ‹€λŠ” FIN νŒ¨ν‚·μ„ 보낸닀.

  2. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­(FIN)에 λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ ACK νŒ¨ν‚·μ„ 보낸닀.

2-1) μ²˜λ¦¬ν•΄μ•Ό ν•  μžμ‹ μ˜ 톡신이 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦°λ‹€.

  1. μ²˜λ¦¬ν•΄μ•Ό ν•  λͺ¨λ“  톡신을 λλ§ˆμ³€λ‹€λ©΄ 연결을 μ’…λ£Œν•˜κ² λ‹€λŠ” FIN νŒ¨ν‚·μ„ 보낸닀.

  2. ν΄λΌμ΄μ–ΈνŠΈλŠ” FIN νŒ¨ν‚·μ— λŒ€ν•œ 확인 μ‘λ‹΅μœΌλ‘œ ACK νŒ¨ν‚·μ„ 보낸닀.

  3. ν΄λΌμ΄μ–ΈνŠΈμ˜ ACK νŒ¨ν‚·μ„ 받은 μ„œλ²„λŠ” μ†ŒμΌ“ 연결을 close ν•œλ‹€.

  4. ν΄λΌμ΄μ–ΈνŠΈλŠ” 아직 μ„œλ²„λ‘œλΆ€ν„° 받지 λͺ»ν•œ 데이터가 μžˆμ„ 것을 λŒ€λΉ„ν•΄ κΈ°λ‹€λ¦¬λŠ” 과정을 κ±°μΉœλ‹€.(TIME_WAIT)

[μ—λŸ¬ λ°œμƒ]

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ FIN νŒ¨ν‚· 전솑 ν›„ ACK νŒ¨ν‚·μ„ κΈ°λ‹€λ¦¬λŠ” FIN_WAIT1κ³Ό μ„œλ²„μ˜ ACK νŒ¨ν‚·μ„ 받은 ν›„ FIN νŒ¨ν‚·μ„ κΈ°λ‹€λ¦¬λŠ” FIN_WAIT2 μ—λŸ¬ λ°œμƒμœΌλ‘œ 인해 Time out이 되면 슀슀둜 연결을 μ’…λ£Œν•œλ‹€.

κ·ΈλŸ¬λ‚˜, CLOSE_WAIT은 Application이 close()λ₯Ό μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜λ©΄ CLOSE_WAIT μƒνƒœλ‘œ 계속 κΈ°λ‹€λ¦¬κ²Œ λ˜μ–΄ Socket Hang Up μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆλ‹€.

HTTP

Header

Caching

Optimization

HTTP2.0

✨ HTTP

  • μ›Ή μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ λ¬Έμ„œλ₯Ό κ΅ν™˜ν•˜κΈ° μœ„ν•œ 톡신 κ·œμ•½

  • μ›Ήμ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” ν”„λ‘œν† μ½œλ‘œ TCP/IP 기반으둜 μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ μš”μ²­κ³Ό 응닡을 μ „μ†‘ν•œλ‹€.

✨ HTTP의 νŠΉμ§•

  • TCP 기반의 톡신 방식

  • λΉ„μ—°κ²° 지ν–₯

    • λΈŒλΌμš°μ €λ₯Ό 톡해 μ‚¬μš©μžμ˜ μš”μ²­μœΌλ‘œ μ„œλ²„μ™€ μ ‘μ†ν•˜μ—¬ μš”μ²­μ— λŒ€ν•œ μ‘λ‹΅μ˜ 데이터λ₯Ό 전솑후, 연결을 μ’…λ£Œν•œλ‹€.

    • κ°„λ‹¨ν•˜κΈ° λ•Œλ¬Έμ— μžμ›μ΄ μ κ²Œλ“œλŠ” μž₯점이 μžˆλ‹€.

    • ν•˜μ§€λ§Œ, 연결이 지속적이지 μ•ŠκΈ° λ•Œλ¬Έμ— μ‚¬μš©μžμ™€ μ—°κ²° μ’…λ£Œν›„ 좔가적인 μš”μ²­μ‹œ μ–΄λ–€ μ‚¬μš©μžμ˜ μš”μ²­μΈμ§€ λͺ¨λ₯Έλ‹€λŠ” 점이 μ‘΄μž¬ν•œλ‹€.

    • 즉, μ—¬λŸ¬ μ‚¬μš©μžκ°€ μš”μ²­ν•  μ‹œ 각각의 μ‚¬μš©μž μš”μ²­μ„ ꡬ뢄할 수 μ—†μ–΄μ„œ μ œλŒ€λ‘œ 된 응닡 데이터λ₯Ό 전솑할 수 μ—†λ‹€λŠ” 단점이 μžˆλ‹€.

    • ν•΄κ²° λ°©λ²•μœΌλ‘œλŠ” μΏ ν‚€, μ„Έμ…˜, νžˆλ“  폼 ν•„λ“œ 등이 μžˆλ‹€.

  • 단방ν–₯μ„±

    • μ‚¬μš©μžμ˜ μš”μ²­ ν•œκ°œμ— λŒ€ν•΄ ν•œκ°œμ˜ 응닡을 ν•˜λŠ” 방식이기 λ•Œλ¬Έμ— μ„œλ²„κ°€ λ¨Όμ € μ‘λ‹΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

✨ HTTP의 문제점

  • HTTPλŠ” 평문 톡신이기 λ•Œλ¬Έμ— 도청이 κ°€λŠ₯ν•˜λ‹€.

  • 톡신 μƒλŒ€λ₯Ό ν™•μΈν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μœ„μž₯이 κ°€λŠ₯ν•˜λ‹€.

  • 완전성을 증λͺ…ν•  수 μ—†κΈ° λ•Œλ¬Έμ— λ³€μ‘°κ°€ κ°€λŠ₯ν•˜λ‹€.

μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ HTTPSκ°€ λ“±μž₯ν–ˆλ‹€.

✨ HTTPS

  • HTTP ν†΅μ‹ ν•˜λŠ” μ†ŒμΌ“ 뢀뢄을 인터넷 μƒμ—μ„œ 정보λ₯Ό μ•”ν˜Έν™”ν•˜λŠ” SSL(Secure Socket Layer)λΌλŠ” ν”„λ‘œν† μ½œλ‘œ λŒ€μ²΄ν•œ 것이닀.

  • HTTPλŠ” TCP와 ν†΅μ‹ ν–ˆμ§€λ§Œ, HTTPSμ—μ„œ HTTPλŠ” SSLκ³Ό ν†΅μ‹ ν•˜κ³  SSL이 TCP와 ν†΅μ‹ ν•˜κ²Œ λœλ‹€.

  • 즉, ν•˜λ‚˜μ˜ λ ˆμ΄μ–΄λ₯Ό 더 λ‘” 것이닀.

  • HTTPS의 SSLμ—μ„œλŠ” λŒ€μΉ­ν‚€ μ•”ν˜Έν™” 방식과 κ³΅κ°œν‚€ μ•”ν˜Έν™” 방식을 λͺ¨λ‘ μ‚¬μš©ν•œλ‹€.

✨ SSL

SSL ν”„λ‘œν† μ½œμ€ Netscape μ‚¬μ—μ„œ μ›Ή μ„œλ²„μ™€ λΈŒλΌμš°μ € μ‚¬μ΄μ˜ λ³΄μ•ˆμ„ μœ„ν•΄ λ§Œλ“€μ–΄μ‘Œλ‹€. CA(Certificate Authority)라 λΆˆλ¦¬λŠ” μ„œλ“œ νŒŒν‹°λ‘œλΆ€ν„° μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 인증을 ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λ₯Ό μš΄μ˜ν•˜λŠ” 기업은 CAλ₯Ό 톡해 μΈμ¦μ„œλ₯Ό λ§Œλ“ λ‹€.

  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λ₯Ό μš΄μ˜ν•˜λŠ” 기업은 HTTPS μ μš©μ„ μœ„ν•΄ κ³΅κ°œν‚€μ™€ κ°œμΈν‚€λ₯Ό λ§Œλ“ λ‹€.

  2. μ‹ λ’°ν•  수 μžˆλŠ” CA 기업을 μ„ νƒν•˜κ³  μΈμ¦μ„œ 생성을 μš”μ²­ν•œλ‹€.

  3. CAλŠ” μ„œλ²„μ˜ κ³΅κ°œν‚€, μ•”ν˜Έν™” 방법 λ“±μ˜ 정보λ₯Ό 담은 μΈμ¦μ„œλ₯Ό λ§Œλ“€κ³  ν•΄λ‹Ή CA의 κ°œμΈν‚€λ‘œ μ•”ν˜Έν™”ν•˜μ—¬ μ„œλ²„μ— μ œκ³΅ν•œλ‹€.

  4. ν΄λΌμ΄μ–ΈνŠΈκ°€ SSL둜 μ•”ν˜Έν™”λœ νŽ˜μ΄μ§€(https://)λ₯Ό μš”μ²­μ‹œ μ„œλ²„λŠ” μΈμ¦μ„œλ₯Ό μ „μ†‘ν•œλ‹€.

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 톡신 흐름 κ³Όμ •

  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ SSL둜 μ•”ν˜Έν™”λœ νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•œλ‹€.

  2. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μΈμ¦μ„œλ₯Ό μ „μ†‘ν•œλ‹€.

  3. ν΄λΌμ΄μ–ΈνŠΈλŠ” μΈμ¦μ„œκ°€ μ‹ μš©μ΄ μžˆλŠ” CAλ‘œλΆ€ν„° μ„œλͺ…λœ 것인지 νŒλ‹¨ν•œλ‹€. λΈŒλΌμš°μ €λŠ” CA λ¦¬μŠ€νŠΈμ™€ ν•΄λ‹Ή CA의 κ³΅κ°œν‚€λ₯Ό 가지고 μžˆλ‹€. κ³΅κ°œν‚€λ₯Ό ν™œμš©ν•˜μ—¬ μΈμ¦μ„œκ°€ λ³΅ν˜Έν™”κ°€ κ°€λŠ₯ν•˜λ‹€λ©΄ μ ‘μ†ν•œ μ‚¬μ΄νŠΈκ°€ CA에 μ˜ν•΄ κ²€ν† λ˜μ—ˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. λ”°λΌμ„œ μ„œλ²„κ°€ μ‹ μš©μ΄ μžˆλ‹€κ³  νŒλ‹¨ν•œλ‹€. κ³΅κ°œν‚€κ°€ 데이터λ₯Ό μ œκ³΅ν•œ μ‚¬λžŒμ˜ 신원을 보μž₯ν•΄μ£ΌλŠ” κ²ƒμœΌλ‘œ μ΄λŸ¬ν•œ 것을 μ „μž μ„œλͺ… 이라고 ν•œλ‹€.

  4. ν΄λΌμ΄μ–ΈνŠΈλŠ” CA의 κ³΅κ°œν‚€λ₯Ό μ΄μš©ν•΄ μΈμ¦μ„œλ₯Ό λ³΅ν˜Έν™”ν•˜κ³  μ„œλ²„μ˜ κ³΅κ°œν‚€λ₯Ό νšλ“ν•œλ‹€.

  5. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ κ³΅κ°œν‚€λ₯Ό μ‚¬μš©ν•΄ 랜덀 λŒ€μΉ­ μ•”ν˜Έν™”ν‚€, 데이터 등을 μ•”ν˜Έν™”ν•˜μ—¬ μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€.

  6. μ„œλ²„λŠ” μžμ‹ μ˜ κ°œμΈν‚€λ₯Ό μ΄μš©ν•΄ λ³΅ν˜Έν™”ν•˜κ³  랜덀 λŒ€μΉ­ μ•”ν˜Έν™”ν‚€, 데이터 등을 νšλ“ν•œλ‹€.

  7. μ„œλ²„λŠ” 랜덀 λŒ€μΉ­ μ•”ν˜Έν™”ν‚€λ‘œ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ— λŒ€ν•œ 응닡을 μ•”ν˜Έν™”ν•˜μ—¬ μ „μ†‘ν•œλ‹€.

  8. ν΄λΌμ΄μ–ΈνŠΈλŠ” 랜덀 λŒ€μΉ­ μ•”ν˜Έν™”ν‚€λ₯Ό μ΄μš©ν•΄ λ³΅ν˜Έν™”ν•˜κ³  데이터λ₯Ό μ΄μš©ν•œλ‹€.

https://user-images.githubusercontent.com/33534771/75338777-a1d9bf80-58d2-11ea-9754-809110475c89.png

μΈμ¦μ„œμ— ν¬ν•¨λœ λ‚΄μš©

  • μ„œλ²„μΈ‘ κ³΅κ°œν‚€(public key)

  • κ³΅κ°œν‚€ μ•”ν˜Έν™” 방법

  • μΈμ¦μ„œλ₯Ό μ‚¬μš©ν•œ μ›Ήμ„œλ²„μ˜ URL

  • μΈμ¦μ„œλ₯Ό λ°œν–‰ν•œ κΈ°κ΄€ 이름

λͺ¨λ“  μ›ΉνŽ˜μ΄μ§€μ—μ„œ HTTPSλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. μ΄μœ λŠ” 평문 톡신에 λΉ„ν•΄μ„œ μ•”ν˜Έν™” 톡신은 CPUλ‚˜ λ©”λͺ¨λ¦¬ λ“± λ¦¬μ†ŒμŠ€λ₯Ό 많이 ν•„μš”λ‘œ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 톡신할 λ•Œλ§ˆλ‹€ μ•”ν˜Έν™”λ₯Ό ν•˜λ©΄ λ¦¬μ†ŒμŠ€λ₯Ό μ†ŒλΉ„ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„ ν•œ λŒ€λ‹Ή μ²˜λ¦¬ν•  수 μžˆλŠ” Request μˆ˜κ°€ μ€„μ–΄λ“€κ²Œ λœλ‹€.

λ”°λΌμ„œ λ―Όκ°ν•œ 정보λ₯Ό λ‹€λ£° λ•Œλ§Œ HTTPS에 μ˜ν•œ μ•”ν˜Έν™” 톡신을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

κ³΅κ°œν‚€ μ•”ν˜Έ, λŒ€μΉ­ν‚€ μ•”ν˜Έ

✨ λŒ€μΉ­ν‚€ μ•”ν˜Έν™”

  • μ•”ν˜Έν™”μ— μ‚¬μš©λ˜λŠ” 킀와 λ³΅ν˜Έν™”μ— μ‚¬μš©λ˜λŠ” ν‚€κ°€ λ™μΌν•œ μ•”ν˜Έν™” 기법이닀.

  • λŒ€μΉ­ν‚€ μ•”ν˜Έ λ°©μ‹μœΌλ‘œ μ•”ν˜Έν™”ν•œ 정보λ₯Ό λˆ„κ΅°κ°€μ—κ²Œ 보낼 λ•Œ, μ•”ν˜Έν‚€λ„ ν•¨κ»˜ 보내야 ν•œλ‹€. μ•”ν˜Έν‚€ μžμ²΄λŠ” μ•”ν˜Έν™”κ°€ λ˜μ§€ μ•Šμ€ ν‰λ¬ΈμœΌλ‘œ λΆ„μ‹€ν•˜κ±°λ‚˜ νƒ€μΈμ—κ²Œ λ…ΈμΆœλ˜λ©΄ λ³΄μ•ˆμ— 맀우 μ·¨μ•½ν•  수 μžˆλ‹€.

  • ν‚€ 전달 및 관리에 어렀움이 μžˆμ§€λ§Œ, λŒ€μΉ­ν‚€ μ•”ν˜Έν™” 방식은 μ•”ν˜Έν™” μ—°μ‚° 속도가 λΉ λ₯΄κΈ° λ•Œλ¬Έμ— 효율적인 μ•”ν˜Έ μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

  • 블둝 μ•”ν˜Έν™”, 슀트림 μ•”ν˜Έν™”κ°€ μžˆλ‹€.

✨ κ³΅κ°œν‚€ μ•”ν˜Έν™”

  • λŒ€μΉ­ν‚€ μ•”ν˜Έν™” λ°©μ‹μ˜ ν‚€ μ „λ‹¬μ˜ 취약점을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚˜μ˜¨ 방식이닀. μ•”ν˜Έν™”μ— μ‚¬μš©ν•˜λŠ” 킀와 λ³΅ν˜Έν™”μ— μ‚¬μš©ν•˜λŠ” ν‚€λ₯Ό λΆ„λ¦¬ν–ˆλ‹€. λ”°λΌμ„œ λΉ„λŒ€μΉ­ν‚€ μ•”ν˜Έν™”λΌκ³ λ„ λΆ€λ₯Έλ‹€.

  • μžμ‹ μ΄ 가지고 μžˆλŠ” κ³ μœ ν•œ μ•”ν˜Έν‚€(κ°œμΈν‚€ ν˜Ήμ€ λΉ„λ°€ν‚€)둜만 λ³΅ν˜Έν™”ν•  수 μžˆλŠ” μ•”ν˜Έν‚€(κ³΅κ°œν‚€)λ₯Ό λŒ€μ€‘μ—κ²Œ κ³΅κ°œν•œλ‹€.

  • κ³΅κ°œν‚€ μ•”ν˜Έν™” λ°©μ‹μ˜ 진행과정

    1. B μ‚¬μš©μžλŠ” μžμ‹ μ˜ κ³΅κ°œν‚€λ₯Ό κ³΅κ°œν•œλ‹€. 이 κ³΅κ°œν‚€λŠ” μ•”ν˜Έν™”μ— μ‚¬μš©λ˜λŠ” 킀이며, λˆ„κ΅¬λ“ μ§€ μ—΄λžŒμ΄ κ°€λŠ₯ν•˜λ‹€. (λ³΅ν˜Έν™”μ— μ‚¬μš©λ˜λŠ” ν‚€λŠ” B μžμ‹ λ§Œ 가지고 μžˆλ‹€. μžƒμ–΄λ²„λ¦¬λ©΄ μ•ˆλœλ‹€.)

    2. A μ‚¬μš©μžλŠ” B μ‚¬μš©μžμ˜ κ³΅κ°œν‚€λ‘œ 데이터λ₯Ό μ•”ν˜Έν™”ν•œλ‹€.

    3. μ•”ν˜Έν™”λœ λ¬Έμ„œλ₯Ό B μ‚¬μš©μžμ—κ²Œ μ „μ†‘ν•œλ‹€.

    4. B μ‚¬μš©μžλŠ” μžμ‹ λ§Œμ˜ κ°œμΈν‚€(λ³΅ν˜Έν™”ν‚€)λ₯Ό μ΄μš©ν•˜μ—¬ 전솑받은 μ•”ν˜Έν™” λ¬Έμ„œλ₯Ό λ³΅ν˜Έν™”ν•˜μ—¬ 데이터λ₯Ό μ—΄λžŒν•œλ‹€.

  • λŒ€μΉ­ν‚€ μ•”ν˜Έν™” λ°©μ‹μ˜ ν‚€ 전달 문제λ₯Ό ν•΄κ²°ν–ˆμ§€λ§Œ μ•”ν˜Έν™”, λ³΅ν˜Έν™”λ₯Ό μœ„ν•΄ λ³΅μž‘ν•œ μˆ˜ν•™ 연산을 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— λŒ€μΉ­ν‚€ 방식에 λΉ„ν•΄ 속도가 느리고 λ³΅μž‘ν•˜λ‹€λŠ” 단점이 μžˆλ‹€.

λŒ€μΉ­ν‚€ μ•”ν˜Έν™”μ˜ μž₯점과 κ³΅κ°œν‚€ μ•”ν˜Έν™”μ˜ μž₯점을 μ±„νƒν•˜μ—¬ μš©λŸ‰μ΄ 큰 μ •λ³΄λŠ” λŒ€μΉ­ν‚€λ‘œ μ•”ν˜Έν™”ν•˜κ³ , μ•”ν˜Έν™”μ— μ‚¬μš©λœ λŒ€μΉ­ν‚€λŠ” κ³΅κ°œν‚€λ‘œ μ•”ν˜Έν™”ν•˜μ—¬ λŒ€μƒμ—κ²Œ μ „λ‹¬ν•˜λŠ” ν•˜μ΄λΈŒλ¦¬λ“œ μ•”ν˜Έν™” 방법이 일반적으둜 μ‚¬μš©λ˜κ³  μžˆλ‹€.

κ³΅κ°œν‚€ 기반 ꡬ쑰

νŠΉμ • μ‚¬λžŒμ˜ κ°œμΈν‚€μ™€ κ³΅κ°œν‚€λŠ” μ–΄λ–»κ²Œ 생성할 것이며, μ–΄λ–»κ²Œ 배포할 것이고 μ–΄λ–»κ²Œ 관리해야 ν•˜λŠ”κ°€μ— λŒ€ν•œ μ΄μŠˆκ°€ μ‘΄μž¬ν•œλ‹€. λ˜ν•œ, μ–΄λ–€ κ³΅κ°œν‚€κ°€ νŠΉμ •ν•œ μ‚¬λžŒμ˜ κ³΅κ°œν‚€λΌλŠ” 것을 μ–΄λ–»κ²Œ 보μž₯ν•  수 μžˆλŠ”μ§€μ— λŒ€ν•œ μ΄μŠˆλ„ μ‘΄μž¬ν•œλ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 디지털 μΈμ¦μ„œλ₯Ό λ„μž…ν–ˆκ³  이λ₯Ό ν™œμš©ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄, ν•˜λ“œμ›¨μ–΄, μ •μ±…, μ œλ„, μ‚¬μš©μž 등을 μ΄μΉ­ν•΄μ„œ κ³΅κ°œν‚€ 기반 ꡬ쑰라고 ν•œλ‹€.

✨ TLS/SSL HandShake

HTTPSμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°„ 톡신 μ „ SSL μΈμ¦μ„œλ‘œ μ‹ λ’°μ„± μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜κΈ° μœ„ν•΄ μ—°κ²°ν•˜λŠ” 방식

https://user-images.githubusercontent.com/34904741/139517776-f2cac636-5ce5-4815-981d-33905283bf13.png

진행 μˆœμ„œ

  1. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—κ²Œ client hello λ©”μ‹œμ§€λ₯Ό λ‹΄μ•„ μ„œλ²„λ‘œ 보낸닀. μ΄λ•Œ μ•”ν˜Έν™”λœ 정보λ₯Ό ν•¨κ»˜ λ‹΄λŠ”λ°, 버전, μ•”ν˜Έ μ•Œκ³ λ¦¬μ¦˜, μ••μΆ• 방식 등을 λ‹΄λŠ”λ‹€.

  2. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μ•”ν˜Έ μ•Œκ³ λ¦¬μ¦˜κ³Ό μ••μΆ• 방식을 λ°›κ³ , μ„Έμ…˜ ID와 CA 곡개 μΈμ¦μ„œλ₯Ό server hello λ©”μ‹œμ§€μ™€ ν•¨κ»˜ λ‹΄μ•„ μ‘λ‹΅ν•œλ‹€. 이 CA μΈμ¦μ„œμ—λŠ” μ•žμœΌλ‘œ 톡신 이후 μ‚¬μš©ν•  λŒ€μΉ­ν‚€κ°€ μƒμ„±λ˜κΈ° μ „, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ handshake κ³Όμ • 속 μ•”ν˜Έν™”μ— μ‚¬μš©ν•  κ³΅κ°œν‚€λ₯Ό λ‹΄κ³  μžˆλ‹€.

  3. ν΄λΌμ΄μ–ΈνŠΈ 츑은 μ„œλ²„μ—μ„œ 보낸 CA μΈμ¦μ„œμ— λŒ€ν•΄ μœ νš¨ν•œ 지 CA λͺ©λ‘μ—μ„œ ν™•μΈν•˜λŠ” 과정을 μ§„ν–‰ν•œλ‹€.

  4. CA μΈμ¦μ„œμ— λŒ€ν•œ 신뒰성이 ν™•λ³΄λ˜μ—ˆλ‹€λ©΄, ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‚œμˆ˜ λ°”μ΄νŠΈλ₯Ό μƒμ„±ν•˜μ—¬ μ„œλ²„μ˜ κ³΅κ°œν‚€λ‘œ μ•”ν˜Έν™”ν•œλ‹€. 이 λ‚œμˆ˜ λ°”μ΄νŠΈλŠ” λŒ€μΉ­ν‚€λ₯Ό μ •ν•˜λŠ”λ° μ‚¬μš©μ΄ 되고, μ•žμœΌλ‘œ μ„œλ‘œ λ©”μ‹œμ§€λ₯Ό 톡신할 λ•Œ μ•”ν˜Έν™”ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

  5. λ§Œμ•½ 2번 λ‹¨κ³„μ—μ„œ μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈ μΈμ¦μ„œλ₯Ό ν•¨κ»˜ μš”κ΅¬ν–ˆλ‹€λ©΄, ν΄λΌμ΄μ–ΈνŠΈμ˜ μΈμ¦μ„œμ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ κ°œμΈν‚€λ‘œ μ•”ν˜Έν™”λœ μž„μ˜μ˜ λ°”μ΄νŠΈ λ¬Έμžμ—΄μ„ ν•¨κ»˜ 보내쀀닀.

  6. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μΈμ¦μ„œλ₯Ό 확인 ν›„, λ‚œμˆ˜ λ°”μ΄νŠΈλ₯Ό μžμ‹ μ˜ κ°œμΈν‚€λ‘œ λ³΅ν˜Έν™” ν›„ λŒ€μΉ­ λ§ˆμŠ€ν„° ν‚€ 생성에 ν™œμš©ν•œλ‹€.

  7. ν΄λΌμ΄μ–ΈνŠΈλŠ” handshake 과정이 μ™„λ£Œλ˜μ—ˆλ‹€λŠ” finished λ©”μ‹œμ§€λ₯Ό μ„œλ²„μ— λ³΄λ‚΄λ©΄μ„œ, μ§€κΈˆκΉŒμ§€ 보낸 κ΅ν™˜ 내역듀을 ν•΄μ‹± ν›„ κ·Έ 값을 λŒ€μΉ­ν‚€λ‘œ μ•”ν˜Έν™”ν•˜μ—¬ 같이 λ‹΄μ•„ 보내쀀닀.

  8. μ„œλ²„λ„ λ™μΌν•˜κ²Œ κ΅ν™˜ λ‚΄μš©λ“€μ„ ν•΄μ‹±ν•œ λ’€ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 보내쀀 κ°’κ³Ό μΌμΉ˜ν•˜λŠ” 지 ν™•μΈν•œλ‹€. μΌμΉ˜ν•˜λ©΄ μ„œλ²„λ„ λ§ˆμ°¬κ°€μ§€λ‘œ finished λ©”μ‹œμ§€λ₯Ό μ΄λ²ˆμ— λ§Œλ“  λŒ€μΉ­ν‚€λ‘œ μ•”ν˜Έν™”ν•˜μ—¬ 보낸닀.

  9. ν΄λΌμ΄μ–ΈνŠΈλŠ” ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό λŒ€μΉ­ν‚€λ‘œ λ³΅ν˜Έν™”ν•˜μ—¬ μ„œλ‘œ 톡신이 κ°€λŠ₯ν•œ 신뒰받은 μ‚¬μš©μžλž€ κ±Έ μΈμ§€ν•˜κ³ , μ•žμœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” ν•΄λ‹Ή λŒ€μΉ­ν‚€λ‘œ 데이터λ₯Ό 주고받을 수 있게 λœλ‹€.

REST & RESTfulμ΄λž€?

RESTλž€ Representational State Transfer의 μ•½μžλ‘œ μ›Ήμ˜ μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλŠ” Client와 Server κ°„ 톡신 방식 쀑 ν•˜λ‚˜μ΄λ‹€.

섀계 κΈ°λ³Έ κ·œμΉ™μœΌλ‘œ HTTP URIλ₯Ό 톡해 μžμ›μ„ λͺ…μ‹œν•˜κ³  HTTP method(GET, POST, PUT, DELETE)λ₯Ό 톡해 μžμ›μ„ μ²˜λ¦¬ν•˜λ„λ‘ μ„€κ³„λœ μ•„ν‚€ν…μ²˜μ΄λ‹€.

RESTful은 RESTλΌλŠ” μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ²ƒμœΌλ‘œ REST 원리λ₯Ό λ”°λ₯΄λŠ” μ‹œμŠ€ν…œμ„ RESTfulμ΄λΌλŠ” μš©μ–΄λ‘œ μ§€μΉ­ν•œλ‹€.

HTTPλŠ” λΉ„μƒνƒœμ„±(Stateless) ν”„λ‘œν† μ½œλ‘œ μƒνƒœ 정보λ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€. 연결을 μœ μ§€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ¦¬μ†ŒμŠ€ λ‚­λΉ„κ°€ μ€„μ–΄λ“œλŠ” 것은 큰 μž₯μ μ΄μ§€λ§Œ 톡신할 λ•Œλ§ˆλ‹€ 맀번 μ—°κ²° 섀정을 ν•΄μ•Ό ν•˜λ©°, 이전 μš”μ²­κ³Ό ν˜„μž¬ μš”μ²­μ΄ 같은 μ‚¬μš©μžμ˜ μš”μ²­μΈμ§€ μ•Œ 수 μ—†λ‹€λŠ” 단점이 μ‘΄μž¬ν•œλ‹€.

쿠킀와 μ„Έμ…˜μ„ ν†΅ν•΄μ„œ HTTP의 Statelessν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•  수 μžˆλ‹€.

[μ €μž₯ μœ„μΉ˜]

  • μΏ ν‚€ : ν΄λΌμΈμ–΄νŠΈμ˜ μ›Ή λΈŒλΌμš°μ €κ°€ μ§€μ •ν•˜λŠ” λ©”λͺ¨λ¦¬ or ν•˜λ“œ λ””μŠ€ν¬

  • μ„Έμ…˜ : μ„œλ²„μ˜ λ©”λͺ¨λ¦¬

[만료 μ‹œμ ]

  • μΏ ν‚€ : μ €μž₯ν•  λ•Œ, expires 속성을 μ •μ˜ν•˜μ—¬ λ¬΄νš¨ν™”μ‹œν‚€λ©΄ μ‚­μ œλ  λ‚ μ§œλ₯Ό 지정할 수 μžˆλ‹€.

  • μ„Έμ…˜ : ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‘œκ·Έμ•„μ›ƒν•˜κ±°λ‚˜ μ„€μ • μ‹œκ°„ λ™μ•ˆ λ°˜μ‘μ΄ μ—†μœΌλ©΄ λ¬΄νš¨ν™”λ˜κΈ° λ•Œλ¬Έμ— μ •ν™•ν•œ μ‹œμ μ„ μ•Œ 수 μ—†λ‹€.

[λ¦¬μ†ŒμŠ€]

  • μΏ ν‚€ : ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯되고 ν΄λΌμ΄μ–ΈνŠΈμ˜ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„ μžμ›μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • μ„Έμ…˜ : μ„œλ²„μ— μ €μž₯되고, μ„œλ²„ λ©”λͺ¨λ¦¬λ‘œ λ‘œλ”©λ˜κΈ° λ•Œλ¬Έμ— μ„Έμ…˜μ΄ 생길 λ•Œλ§ˆλ‹€ λ¦¬μ†ŒμŠ€λ₯Ό μ°¨μ§€ν•œλ‹€.

[μš©λŸ‰ μ œν•œ]

  • μΏ ν‚€ : ν΄λΌμ΄μ–ΈνŠΈλ„ λͺ¨λ₯΄κ²Œ μ ‘μ†λ˜λŠ” μ‚¬μ΄νŠΈμ— μ˜ν•˜μ—¬ 섀정될 수 있기 λ•Œλ¬Έμ— μΏ ν‚€λ‘œ 인해 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” κ±Έ λ§‰κ³ μž ν•œ 도메인당 20개, ν•˜λ‚˜μ˜ μΏ ν‚€λ‹Ή 4KB둜 μ œν•œν•΄ λ‘μ—ˆλ‹€.

  • μ„Έμ…˜ : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ ‘μ†ν•˜λ©΄ μ„œλ²„μ— μ˜ν•΄ μƒμ„±λ˜λ―€λ‘œ κ°œμˆ˜λ‚˜ μš©λŸ‰ μ œν•œμ΄ μ—†λ‹€.

[λ³΄μ•ˆ]

  • μΏ ν‚€ : ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— λ³΄μ•ˆμ— μ·¨μ•½ν•˜λ‹€.

  • μ„Έμ…˜ : μ„œλ²„μ— μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— 쿠킀에 λΉ„ν•΄μ„œλŠ” λ³΄μ•ˆμ— μš°μˆ˜ν•˜λ‹€.

λ©΄μ ‘ μ§ˆλ¬Έμ—μ„œλ„ μ’…μ’… λ‚˜μ˜€λŠ” 방식이닀. μ΄ν•΄ν•˜κΈ° 전에 IP μ£Όμ†Œμ™€ 도메인에 λŒ€ν•œ 사전 지식이 ν•„μš”ν•˜λ‹€.

IP μ£Όμ†Œ

  • IP μ£Όμ†Œλž€ λ§Žμ€ 컴퓨터듀이 인터넷 μƒμ—μ„œ μ„œλ‘œλ₯Ό μΈμ‹ν•˜κΈ° μœ„ν•΄ 지정받은 μ‹λ³„μš© 번호라고 μƒκ°ν•˜λ©΄ λœλ‹€.

  • ν˜„μž¬λŠ” IPv4 버전(32λΉ„νŠΈ)둜 κ΅¬μ„±λ˜μ–΄ 있으며, ν•œλ²ˆμ”©μ€ 듀어봀을 λ²•ν•œ 127.0.0.1 같은 μ£Όμ†Œλ₯Ό λ§ν•œλ‹€.

  • μ‹œκ°„μ΄ 갈수둝 IPv4 μ£Όμ†Œμ˜ λΆ€μ‘±μœΌλ‘œ IPv6κ°€ μƒκ²ΌλŠ”λ°, 128λΉ„νŠΈλ‘œ κ΅¬μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμ— IP μ£Όμ†Œκ°€ λΆ€μ‘±ν•˜μ§€ μ•Šλ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

도메인 λ„€μž„(Domain Name)

  • IP μ£Όμ†ŒλŠ” 12자리의 숫자둜 λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ‚¬λžŒμ΄ μ™Έμš°κΈ° νž˜λ“€λ‹€λŠ” 단점이 μžˆλ‹€.

  • κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 12자리의 IP μ£Όμ†Œλ₯Ό 문자둜 ν‘œν˜„ν•œ μ£Όμ†Œλ₯Ό 도메인 λ„€μž„μ΄λΌκ³  ν•œλ‹€.

  • λ‹€μ‹œ λ§ν•΄μ„œ, 도메인 λ„€μž„μ€ 'naver.com'처럼 λͺ‡ 개의 μ˜λ―ΈμžˆλŠ” λ¬Έμžλ“€κ³Ό .의 μ‘°ν•©μœΌλ‘œ κ΅¬μ„±λœλ‹€.

  • 도메인 λ„€μž„μ€ μ‚¬λžŒμ˜ νŽΈμ˜μ„±μ„ μœ„ν•΄ λ§Œλ“  μ£Όμ†Œμ΄λ―€λ‘œ μ‹€μ œλ‘œλŠ” 컴퓨터가 이해할 수 μžˆλŠ” IP μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜λŠ” μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€.

  • μ΄λ•Œ, μ‚¬μš©ν•  수 μžˆλ„λ‘ 미리 도메인 λ„€μž„κ³Ό ν•¨κ»˜ ν•΄λ‹Ήν•˜λŠ” IP μ£Όμ†Œκ°’μ„ ν•œ 쌍으둜 μ €μž₯ν•˜κ³  μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό DNS(Domain Name System) 이라고 λΆ€λ₯Έλ‹€.

  • 도메인 λ„€μž„μœΌλ‘œ μž…λ ₯ν•˜λ©΄ DNSλ₯Ό μ΄μš©ν•΄ μ»΄ν“¨ν„°λŠ” IP μ£Όμ†Œλ₯Ό λ°›μ•„ μ°Ύμ•„κ°ˆ 수 μžˆλ‹€.

μž‘λ™ 방식

https://camo.githubusercontent.com/1d907c5b70e225e976ae41bb729c65e4c7e047a550aea90cd7fc7576aff72f32/68747470733a2f2f74312e6461756d63646e2e6e65742f6366696c652f746973746f72792f393946303939333735433132344232443032

  1. μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ— 도메인 λ„€μž„([www.naver.com)을](http://www.naver.㯘%29-8040a/) μž…λ ₯ν•œλ‹€.

  2. μ‚¬μš©μžκ°€ μž…λ ₯ν•œ URL μ£Όμ†Œ μ€‘μ—μ„œ 도메인 λ„€μž„(Domain Name) 뢀뢄을 DNS μ„œλ²„μ—μ„œ κ²€μƒ‰ν•˜κ³ , DNS μ„œλ²„μ—μ„œ ν•΄λ‹Ή 도메인 λ„€μž„μ— ν•΄λ‹Ήν•˜λŠ” IP μ£Όμ†Œλ₯Ό μ°Ύμ•„ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ URL 정보와 ν•¨κ»˜ μ „λ‹¬ν•œλ‹€.

  3. νŽ˜μ΄μ§€ URL 정보와 전달받은 IP μ£Όμ†ŒλŠ” HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ HTTP μš”μ²­ λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜κ³ , μ΄λ ‡κ²Œ μƒμ„±λœ HTTP μš”μ²­ λ©”μ‹œμ§€λŠ” TCP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ 인터넷을 거쳐 ν•΄λ‹Ή IP μ£Όμ†Œμ˜ μ»΄ν“¨ν„°λ‘œ μ „μ†‘λœλ‹€.

  4. μ΄λ ‡κ²Œ λ„μ°©ν•œ HTTP μš”μ²­ λ©”μ‹œμ§€λŠ” HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€ URL μ •λ³΄λ‘œ λ³€ν™˜λ˜μ–΄ μ›Ή νŽ˜μ΄μ§€ URL 정보에 ν•΄λ‹Ήν•˜λŠ” 데이터λ₯Ό κ²€μƒ‰ν•œλ‹€.

  5. κ²€μƒ‰λœ μ›Ή νŽ˜μ΄μ§€ λ°μ΄ν„°λŠ” 또 λ‹€μ‹œ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ HTTP 응닡 λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜κ³  TCP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ 인터넷을 거쳐 μ›λž˜ μ»΄ν“¨ν„°λ‘œ μ „μ†‘λœλ‹€.

  6. λ„μ°©ν•œ HTTP 응닡 λ©”μ‹œμ§€λŠ” HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€ λ°μ΄ν„°λ‘œ λ³€ν™˜λ˜μ–΄ μ›Ή λΈŒλΌμš°μ €μ— μ˜ν•΄ 좜λ ₯λ˜μ–΄ μ‚¬μš©μžκ°€ λ³Ό 수 있게 λœλ‹€.

μ΄λ ‡κ²Œ λ§ν•˜λ©΄ μ–΄λŠ 정도 μ„€λͺ…ν•  수 μžˆμ§€λ§Œ, λ­”κ°€ λΆ€μ‘±ν•˜λ‹€. 쑰금 더 μ•Œμ•„λ³΄μž.

DHCP & ARP

λŒ€λΆ€λΆ„μ˜ κ°€μ •μ§‘μ—μ„œλŠ” DHCP둜 인터넷 접속을 ν•˜κ³  μžˆλ‹€. DHCPλŠ” Dynamic Host Configuration Protocol의 μ•½μžλ‘œ, 호슀트의 IP μ£Όμ†Œ 및 TCP / IP 섀정을 ν΄λΌμ΄μ–ΈνŠΈμ— μžλ™μœΌλ‘œ μ œκ³΅ν•˜λŠ” ν”„λ‘œν† μ½œμ΄λ‹€. μ‚¬μš©μžμ˜ PCλŠ” DHCP μ„œλ²„μ—μ„œ μ‚¬μš©μž μžμ‹ μ˜ IP μ£Όμ†Œ, κ°€μž₯ κ°€κΉŒμš΄ λΌμš°ν„°μ˜ IP μ£Όμ†Œ, κ°€μž₯ κ°€κΉŒμš΄ DNS μ„œλ²„μ˜ IP μ£Όμ†Œλ₯Ό λ°›λŠ”λ‹€. 이후, ARP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•˜μ—¬ IP μ£Όμ†Œλ₯Ό 기반으둜 κ°€μž₯ κ°€κΉŒμš΄ λΌμš°ν„°μ˜ MAC μ£Όμ†Œλ₯Ό μ•Œμ•„λ‚Έλ‹€.

https://camo.githubusercontent.com/a73920d2cb4265753f0c557225fb233d1710818c60502355a0e0ba92446af6da/68747470733a2f2f74312e6461756d63646e2e6e65742f6366696c652f746973746f72792f323637424343343035383730393134393230

DHCP μ„œλ²„μ˜ λ™μž‘ κ°œλ…λ„ - ν΄λΌμ΄μ–ΈνŠΈκ°€ 인터넷 접속을 μ‹œλ„ν•˜λ©΄ IP와 κΈ°λ³Έ 정보λ₯Ό μ œκ³΅ν•΄μ€€λ‹€.

IP 정보 μˆ˜μ‹ 

μœ„μ˜ 과정을 톡해 외뢀와 톡신할 μ€€λΉ„λ₯Ό λ§ˆμ³€μœΌλ―€λ‘œ, DNS Queryλ₯Ό DNS μ„œλ²„μ— μ „μ†‘ν•œλ‹€. DNS μ„œλ²„λŠ” 이에 λŒ€ν•œ 결과둜 μ›Ή μ„œλ²„μ˜ IP μ£Όμ†Œλ₯Ό μ‚¬μš©μž PC에 λŒλ €μ€€λ‹€. DNS μ„œλ²„κ°€ 도메인에 λŒ€ν•œ IP μ£Όμ†Œλ₯Ό μ†‘μ‹ ν•˜λŠ” 과정은 μ•½κ°„ λ³΅μž‘ν•˜λ‹€.

κ³Όμ • (www.naver.com 이라고 κ°€μ •ν•˜μž.)

μ‚¬μš©μžμ˜ PCλŠ” κ°€μž₯ λ¨Όμ € μ§€μ •λœ DNS μ„œλ²„(μš°λ¦¬λ‚˜λΌμ˜ 경우, ν†΅μ‹ μ‚¬λ³„λ‘œ μ§€μ •λœ DNS μ„œλ²„κ°€ μžˆλ‹€.)에 DNS Queryλ₯Ό μ†‘μ‹ ν•œλ‹€. κ·Έ ν›„ μ§€μ •λœ DNS μ„œλ²„λŠ” Root λ„€μž„μ„œλ²„μ— www.naver.com을 μ§ˆμ˜ν•˜κ³ , Root λ„€μž„μ„œλ²„λŠ” .com λ„€μž„μ„œλ²„μ˜ ip μ£Όμ†Œλ₯Ό μ•Œλ €μ€€λ‹€.

κ·Έ ν›„ .com λ„€μž„μ„œλ²„μ— www.naver.com을 μ§ˆμ˜ν•˜λ©΄ naver.com λ„€μž„μ„œλ²„μ˜ ip μ£Όμ†Œλ₯Ό λ°›κ³  그곳에 질의λ₯Ό 또 μ†‘μ‹ ν•˜λ©΄ www.naver.com의 IP μ£Όμ†Œλ₯Ό μˆ˜μ‹ ν•˜κ²Œ λœλ‹€.

이와 같이 μ—¬λŸ¬λ²ˆ μ™”λ‹€κ°”λ‹€ ν•˜λŠ” μ΄μœ λŠ”, λ„λ©”μΈμ˜ 계측화 ꡬ쑰에 따라 DNS μ„œλ²„λ„ 계측화 λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ΄λ‹€. μ΄λ ‡κ²Œ κ³„μΈ΅ν™”λ˜μ–΄ μžˆμœΌλ―€λ‘œ λ„λ©”μΈμ˜ κ°€μž₯ μ΅œμƒλ‹¨, 즉 κ°€μž₯ λ’·μͺ½(.com, .kr λ“±λ“±)을 λ‹΄λ‹Ήν•˜λŠ” DNS μ„œλ²„λŠ” 전세계에 13개 뿐이닀.

μ›Ή μ„œλ²„ 접속

이제 μ›Ή μ„œλ²„μ˜ IP μ£Όμ†ŒκΉŒμ§€ μ•Œμ•˜λ‹€. Http Requestλ₯Ό μœ„ν—€ TCP Socket을 κ°œλ°©ν•˜κ³  μ—°κ²°ν•œλ‹€. 이 κ³Όμ •μ—μ„œ 3-way hand shaking 과정이 μΌμ–΄λ‚œλ‹€. TCP 연결에 μ„±κ³΅ν•˜λ©΄, Http Requestκ°€ TCP Socket을 톡해 보내진닀. 이에 λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ μ›Ή νŽ˜μ΄μ§€μ˜ 정보가 μ‚¬μš©μžμ˜ PC둜 λ“€μ–΄μ˜¨λ‹€.

λ‘œλ“œ λ°ΈλŸ°μ‹±

λ‘˜ μ΄μƒμ˜ CPU or μ €μž₯ μž₯μΉ˜μ™€ 같은 컴퓨터 μžμ›λ“€μ—κ²Œ μž‘μ—…μ„ λ‚˜λˆ„λŠ” 것

μš”μ¦˜ μ‹œλŒ€μ—λŠ” μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•˜λŠ” 인원이 κΈ‰κ²©ν•˜κ²Œ λŠ˜μ–΄λ‚˜κ²Œ λ˜μ—ˆλ‹€.

λ”°λΌμ„œ 이 μ‚¬λžŒλ“€μ— λŒ€ν•΄ λͺ¨λ“  νŠΈλž˜ν”½μ„ κ°λ‹Ήν•˜κΈ°μ—” 1λŒ€μ˜ μ„œλ²„λ‘œλŠ” λΆ€μ‘±ν•˜λ‹€.

λŒ€μ‘ λ°©μ•ˆμœΌλ‘œ ν•˜λ“œμ›¨μ–΄μ˜ μ„±λŠ₯을 μ˜¬λ¦¬κ±°λ‚˜(Scale-up) μ—¬λŸ¬λŒ€μ˜ μ„œλ²„κ°€ λ‚˜λˆ μ„œ μΌν•˜λ„λ‘ λ§Œλ“œλŠ” 것(Scale-out)이 μžˆλ‹€.

ν•˜λ“œμ›¨μ–΄ ν–₯상 λΉ„μš©μ΄ λ”μš± 비싸기도 ν•˜κ³ , μ„œλ²„κ°€ μ—¬λŸ¬ λŒ€ μ‘΄μž¬ν•˜λ©΄ 무쀑단 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” ν™˜κ²½ ꡬ성이 μš©μ΄ν•˜λ―€λ‘œ Scale-out이 νš¨κ³Όμ μ΄λ‹€.

μ΄λ•Œ, μ—¬λŸ¬ μ„œλ²„μ—κ²Œ κ· λ“±ν•˜κ²Œ νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œμΌœμ£ΌλŠ” 것이 λ°”λ‘œ λ‘œλ“œ λ°ΈλŸ°μ‹±μ΄λ‹€.

Scale-up : Serverκ°€ 더 λΉ λ₯΄κ²Œ λ™μž‘ν•˜κΈ° μœ„ν•΄ ν•˜λ“œμ›¨μ–΄μ˜ μ„±λŠ₯을 μ˜¬λ¦¬λŠ” 방법.

Scale-out : ν•˜λ‚˜μ˜ Serverλ³΄λ‹€λŠ” μ—¬λŸ¬ λŒ€μ˜ Serverκ°€ λ‚˜λˆ μ„œ 일을 ν•˜λŠ” 방법.

λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ μ„œλ²„λ₯Ό μ„ νƒν•˜λŠ” 방식

  • λΌμš΄λ“œ 둜빈 : CPU μŠ€μΌ€μ€„λ§μ˜ λΌμš΄λ“œ 둜빈 방식 ν™œμš©

  • Least Connections : μ—°κ²° κ°―μˆ˜κ°€ κ°€μž₯ 적은 μ„œλ²„ 선택(νŠΈλž˜ν”½μœΌλ‘œ 인해 μ„Έμ…˜μ΄ κΈΈμ–΄μ§€λŠ” 경우 ꢌμž₯)

  • Source : μ‚¬μš©μž IPλ₯Ό ν•΄μ‹±ν•˜μ—¬ λΆ„λ°°(νŠΉμ • μ‚¬μš©μžκ°€ 항상 같은 μ„œλ²„λ‘œ μ—°κ²°λ˜λŠ” 것을 보μž₯)

λ‘œλ“œ λ°ΈλŸ°μ„œ μž₯μ•  λŒ€λΉ„

μ„œλ²„λ₯Ό λΆ„λ°°ν•˜λŠ” λ‘œλ“œ λ°ΈλŸ°μ„œμ— λ¬Έμ œκ°€ 생길 수 있기 λ•Œλ¬Έμ— λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό μ΄μ€‘ν™”ν•˜μ—¬ λŒ€λΉ„ν•œλ‹€.

  • Active μƒνƒœ

  • Passive μƒνƒœ

Stateful vs Stateless μ„œλΉ„μŠ€μ™€ HTTP 및 REST

reference

HTTP λ™μž‘ κ³Όμ •κ³Ό HTTP Method, μƒνƒœμ½”λ“œ

HyperText Transfer Protocal의 μ•½μžλ‘œμ¨ 인터넷 톡신을 μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν”„λ‘œν† μ½œμ΄λ‹€.

✨ HTTP λ™μž‘

Clientκ°€ λΈŒλΌμš°μ €λ₯Ό 톡해 URI을 톡해 νŠΉμ • μš”μ²­(Request)을 보내면, ServerλŠ” ν•΄λ‹Ή μš”μ²­(Request)을 λ°›μ•„ 처리λ₯Ό ν•˜μ—¬ Clientμ—κ²Œ 응닡(Response)을 ν•˜λŠ” ν˜•νƒœ

✨ HTTP νŠΉμ§•

  • TCP/IP을 μ΄μš©ν•œ μ‘μš© ν”„λ‘œν† μ½œμ΄λ‹€.

  • μ—°κ²° μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ” λΉ„μ—°κ²°μ„± ν”„λ‘œν† μ½œμ΄λ‹€.

  • μš”μ²­κ³Ό 응닡 λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ— μ˜ν•΄ HTTP 메세지가 ν•΄μ„λœλ‹€.

✨ HTTP Method

✨ HTTP Status Code

정보전솑 μž„μ‹œμ‘λ‹΅ (1xx)

성곡 (2xx)

λ¦¬λ‹€μ΄λ ‰μ…˜ (3xx)

ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 였λ₯˜ (4xx)

μ„œλ²„μ—λŸ¬ (5xx)

Blocking, Non-blocking & Synchronous, Asynchronous

동기/λΉ„λ™κΈ°λŠ” μš°λ¦¬κ°€ 일상 μƒν™œμ—μ„œ 많이 듀을 수 μžˆλŠ” 말이닀.

Blockingκ³Ό Synchronous, 그리고 Non-blockingκ³Ό Asysnchronousλ₯Ό
μ„œλ‘œ 같은 κ°œλ…μ΄λΌκ³  μ°©κ°ν•˜κΈ° 쉽닀.

각자 μ–΄λ–€ 의미λ₯Ό κ°€μ§€λŠ”μ§€ κ°„λ‹¨ν•˜κ²Œ μ‚΄νŽ΄λ³΄μž

https://camo.githubusercontent.com/b7b28ae739c50d5ed8a4594f52f24e671aeeae234befd0991e5230561ba303bf/68747470733a2f2f696d67312e6461756d63646e2e6e65742f7468756d622f523132383078302f3f73636f64653d6d746973746f72793226666e616d653d6874747073253341253246253246626c6f672e6b616b616f63646e2e6e6574253246646e25324664613530597a2532466274713044736a65345a562532466c47653848386e5a676442646746766f3749637a5330253246696d672e706e67

homoefficioλ‹˜ λΈ”λ‘œκ·Έμ— λ‚˜μ˜¨ 2λŒ€2 맀트릭슀둜 잘 μ •λ¦¬λœ 사진이닀. 이 μ‚¬μ§„λ§Œ 보고 λͺ¨λ‘ 이해가 λœλ‹€λ©΄, 차이점에 λŒ€ν•΄ 잘 μ•Œκ³  μžˆλŠ” 것이닀.

✨ Blocking/Non-blocking

λΈ”λŸ­/λ…ΌλΈ”λŸ­μ€ κ°„λ‹¨νžˆ λ§ν•΄μ„œ 호좜된 ν•¨μˆ˜κ°€ ν˜ΈμΆœν•œ ν•¨μˆ˜μ—κ²Œ μ œμ–΄κΆŒμ„ κ±΄λ„€μ£ΌλŠ” 유무의 차이라고 λ³Ό 수 μžˆλ‹€.

ν•¨μˆ˜ A, Bκ°€ 있고, A μ•ˆμ—μ„œ Bλ₯Ό ν˜ΈμΆœν–ˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž. μ΄λ•Œ ν˜ΈμΆœν•œ ν•¨μˆ˜λŠ” Aκ³ , 호좜된 ν•¨μˆ˜λŠ” Bκ°€ λœλ‹€. ν˜„μž¬ Bκ°€ ν˜ΈμΆœλ˜λ©΄μ„œ BλŠ” μžμ‹ μ˜ 일을 진행해야 ν•œλ‹€. (μ œμ–΄κΆŒμ΄ Bμ—κ²Œ 주어진 상황)

  • Blocking : ν•¨μˆ˜ BλŠ” λ‚΄ ν•  일을 λ‹€ 마칠 λ•ŒκΉŒμ§€ μ œμ–΄κΆŒμ„ 가지고 μžˆλŠ”λ‹€. AλŠ” Bκ°€ λ‹€ 마칠 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•œλ‹€.

  • Non-blocking : ν•¨μˆ˜ BλŠ” ν•  일을 λ§ˆμΉ˜μ§€ μ•Šμ•˜μ–΄λ„ Aμ—κ²Œ μ œμ–΄κΆŒμ„ λ°”λ‘œ λ„˜κ²¨μ€€λ‹€. AλŠ” Bλ₯Ό κΈ°λ‹€λ¦¬λ©΄μ„œλ„ λ‹€λ₯Έ 일을 진행할 수 μžˆλ‹€.

즉, 호좜된 ν•¨μˆ˜μ—μ„œ 일을 μ‹œμž‘ν•  λ•Œ λ°”λ‘œ μ œμ–΄κΆŒμ„ λ¦¬ν„΄ν•΄μ£ΌλŠλƒ, ν•  일을 마치고 λ¦¬ν„΄ν•΄μ£ΌλŠλƒμ— 따라 λΈ”λŸ­κ³Ό λ…ΌλΈ”λŸ­μœΌλ‘œ λ‚˜λˆ„μ–΄μ§„λ‹€κ³  λ³Ό 수 μžˆλ‹€.

✨ Synchronous/Asynchronous

동기/λΉ„λ™κΈ°λŠ” 일을 μˆ˜ν–‰ 쀑인 λ™μ‹œμ„±μ— μ£Όλͺ©ν•˜μž

μ•„κΉŒμ²˜λŸΌ ν•¨μˆ˜ A와 B라고 λ˜‘κ°™μ΄ μƒκ°ν–ˆμ„ λ•Œ, B의 μˆ˜ν–‰ κ²°κ³Όλ‚˜ μ’…λ£Œ μƒνƒœλ₯Ό Aκ°€ μ‹ κ²½μ“°κ³  μžˆλŠ” 유무의 차이라고 μƒκ°ν•˜λ©΄ λœλ‹€.

  • Synchronous : ν•¨μˆ˜ AλŠ” ν•¨μˆ˜ Bκ°€ 일을 ν•˜λŠ” 쀑에 κΈ°λ‹€λ¦¬λ©΄μ„œ, ν˜„μž¬ μƒνƒœκ°€ 어떀지 계속 μ²΄ν¬ν•œλ‹€.

  • Asynchronous : ν•¨μˆ˜ B의 μˆ˜ν–‰ μƒνƒœλ₯Ό B 혼자 직접 μ‹ κ²½μ“°λ©΄μ„œ μ²˜λ¦¬ν•œλ‹€. (Callback)

즉, 호좜된 ν•¨μˆ˜(B)λ₯Ό ν˜ΈμΆœν•œ ν•¨μˆ˜(A)κ°€ μ‹ κ²½μ“°λŠ”μ§€, 호좜된 ν•¨μˆ˜(B) 슀슀둜 μ‹ κ²½μ“°λŠ”μ§€λ₯Ό 동기/비동기라고 μƒκ°ν•˜λ©΄ λœλ‹€.

λΉ„λ™κΈ°λŠ” ν˜ΈμΆœμ‹œ Callback을 μ „λ‹¬ν•˜μ—¬ μž‘μ—…μ˜ μ™„λ£Œ μ—¬λΆ€λ₯Ό ν˜ΈμΆœν•œ ν•¨μˆ˜μ—κ²Œ λ‹΅ν•˜κ²Œ λœλ‹€. (Callback이 였기 μ „κΉŒμ§€ ν˜ΈμΆœν•œ ν•¨μˆ˜λŠ” 신경쓰지 μ•Šκ³  λ‹€λ₯Έ 일을 ν•  수 있음)

μœ„ 그림처럼 총 4κ°€μ§€μ˜ κ²½μš°κ°€ λ‚˜μ˜¬ 수 μžˆλ‹€. 이걸 μ’€ 더 μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ Case λ³„λ‘œ μ˜ˆμ‹œλ₯Ό 톡해 λ³΄λ©΄μ„œ μ΄ν•΄ν•˜κ³  λ„˜μ–΄κ°€λ³΄μž

상황 : μΉ˜ν‚¨μ§‘μ— 직접 μΉ˜ν‚¨μ„ μ‚¬λŸ¬κ°

1) Blocking & Synchronous

λ‚˜ : 사μž₯λ‹˜ μΉ˜ν‚¨ ν•œλ§ˆλ¦¬λ§Œ 포μž₯ν•΄μ£Όμ„Έμš” 사μž₯λ‹˜ : λ„€ κΈˆλ°©λ˜λ‹ˆκΉŒ μž μ‹œλ§Œμš”! λ‚˜ : λ„Ή -- 사μž₯λ‹˜ μΉ˜ν‚¨ νŠ€κΈ°λŠ” 쀑-- λ‚˜ : (μ•„ μ–Έμ œ λ˜μ§€?..κΆκΈˆν•œλ° κ·Έλƒ₯ λ©€λš±νžˆ μ„œμ„œ μΉ˜ν‚¨ νŠ€κΈ°λŠ”κ±° λ³΄λ©΄μ„œ κΈ°λ‹€λ¦Ό)

2) Blocking & Asynchronous

λ‚˜ : 사μž₯λ‹˜ μΉ˜ν‚¨ ν•œλ§ˆλ¦¬λ§Œ 포μž₯ν•΄μ£Όμ„Έμš” 사μž₯λ‹˜ : λ„€ κΈˆλ°©λ˜λ‹ˆκΉŒ μž μ‹œλ§Œμš”! λ‚˜ : μ•— λ„Ή -- 사μž₯λ‹˜ μΉ˜ν‚¨ νŠ€κΈ°λŠ” 쀑-- λ‚˜ : (μ–Έμ œ λ˜λŠ”μ§€ μ•ˆ κΆκΈˆν•¨, μž μ‹œλ§Œμ΄λž˜μ„œ λ‹€ λ λ•ŒκΉŒμ§€ μ„œμ„œ λΆ™μž‘νžŒ 상황)

3) Non-blocking & Synchronous

λ‚˜ : 사μž₯λ‹˜ μΉ˜ν‚¨ ν•œλ§ˆλ¦¬λ§Œ 포μž₯ν•΄μ£Όμ„Έμš” 사μž₯λ‹˜ : λ„€~ μ£Όλ¬Έ λ°€λ €μ„œ μ‹œκ°„ μ’€ κ±Έλ¦¬λ‹ˆκΉŒ 볼일 λ³΄μ‹œλ‹€ μ˜€μ„Έμš” λ‚˜ : λ„Ή -- 사μž₯λ‹˜ μΉ˜ν‚¨ νŠ€κΈ°λŠ” 쀑-- (5λΆ„λ’€) λ‚˜ : 제꺼 λ‚˜μ™”λ‚˜μš”? 사μž₯λ‹˜ : μ•„μ§μ΄μš” (10λΆ„λ’€) λ‚˜ : 제꺼 λ‚˜μ™”λ‚˜μš”? 사μž₯λ‹˜ : μ•„μ§μ΄μš”γ…  (15λΆ„λ’€) λ‚˜ : 제꺼 λ‚˜μ™”λ‚˜μš”? 사μž₯λ‹˜ : μ•„μ§μ΄μš”γ… γ… 

4) Non-blocking & Asynchronous

λ‚˜ : 사μž₯λ‹˜ μΉ˜ν‚¨ ν•œλ§ˆλ¦¬λ§Œ 포μž₯ν•΄μ£Όμ„Έμš” 사μž₯λ‹˜ : λ„€~ μ£Όλ¬Έ λ°€λ €μ„œ μ‹œκ°„ μ’€ κ±Έλ¦¬λ‹ˆκΉŒ 볼일 λ³΄μ‹œλ‹€ μ˜€μ„Έμš” λ‚˜ : λ„Ή -- 사μž₯λ‹˜ μΉ˜ν‚¨ νŠ€κΈ°λŠ” 쀑-- λ‚˜ : (μ•‰μ•„μ„œ λ‹€λ₯Έ 일 ν•˜λŠ” 쀑) ... 사μž₯λ‹˜ : μΉ˜ν‚¨ λ‚˜μ™”μŠ΅λ‹ˆλ‹€ λ‚˜ : μž˜λ¨Ήκ² μŠ΅λ‹ˆλ‹€~

Blocking & Non-Blocking I/O

I/O μž‘μ—…μ€ Kernel levelμ—μ„œλ§Œ μˆ˜ν–‰ν•  수 μžˆλ‹€. λ”°λΌμ„œ, Process, ThreadλŠ” μ»€λ„μ—κ²Œ I/Oλ₯Ό μš”μ²­ν•΄μ•Ό ν•œλ‹€.

  1. Blocking I/O

    I/O Blocking ν˜•νƒœμ˜ μž‘μ—…μ€

    (1) Process(Thread)κ°€ Kernelμ—κ²Œ I/Oλ₯Ό μš”μ²­ν•˜λŠ” ν•¨μˆ˜λ₯Ό 호좜

    (2) Kernel이 μž‘μ—…μ„ μ™„λ£Œν•˜λ©΄ μž‘μ—… κ²°κ³Όλ₯Ό λ°˜ν™˜ λ°›μŒ.

    • νŠΉμ§•

      • I/O μž‘μ—…μ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆ user Process(Thread) λŠ” μžμ‹ μ˜ μž‘μ—…μ„ μ€‘λ‹¨ν•œ 채 λŒ€κΈ°

      • Resource λ‚­λΉ„κ°€ 심함(I/O μž‘μ—…μ΄ CPU μžμ›μ„ 거의 쓰지 μ•ŠμœΌλ―€λ‘œ)

    μ—¬λŸ¬ Client κ°€ μ ‘μ†ν•˜λŠ” μ„œλ²„λ₯Ό Blocking λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜λŠ” 경우 -> I/O μž‘μ—…μ„ μ§„ν–‰ν•˜λŠ” μž‘μ—…μ„ 쀑지 -> λ‹€λ₯Έ Clientκ°€ 진행쀑인 μž‘μ—…μ„ μ€‘μ§€ν•˜λ©΄ μ•ˆλ˜λ―€λ‘œ, client λ³„λ‘œ λ³„λ„μ˜ Threadλ₯Ό 생성해야 함 -> μ ‘μ†μž μˆ˜κ°€ 맀우 λ§Žμ•„μ§

    이둜 인해, λ§Žμ•„μ§„ Threads 둜 μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ νšŸμˆ˜κ°€ 증가함,,, λΉ„νš¨μœ¨μ μΈ λ™μž‘ 방식

  2. Non-Blocking I/O

    I/O μž‘μ—…μ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆ User Process의 μž‘μ—…μ„ μ€‘λ‹¨ν•˜μ§€ μ•ŠμŒ.

    • 진행 μˆœμ„œ

      1. User Processκ°€ recvfrom ν•¨μˆ˜ 호좜 (μ»€λ„μ—κ²Œ ν•΄λ‹Ή SocketμœΌλ‘œλΆ€ν„° dataλ₯Ό λ°›κ³  μ‹Άλ‹€κ³  μš”μ²­ν•¨)

      2. Kernel은 이 μš”μ²­μ— λŒ€ν•΄μ„œ, κ³§λ°”λ‘œ recvBufferλ₯Ό μ±„μ›Œμ„œ 보내지 λͺ»ν•˜λ―€λ‘œ, "EWOULDBLOCK"을 return함.

      3. Blocking 방식과 달리, User ProcessλŠ” λ‹€λ₯Έ μž‘μ—…μ„ 진행할 수 있음.

      4. recvBuffer에 userκ°€ 받을 수 μžˆλŠ” 데이터가 μžˆλŠ” 경우, Bufferλ‘œλΆ€ν„° 데이터λ₯Ό λ³΅μ‚¬ν•˜μ—¬ λ°›μ•„μ˜΄.

        μ΄λ•Œ, recvBufferλŠ” Kernel이 가지고 μžˆλŠ” λ©”λͺ¨λ¦¬μ— μ μž¬λ˜μ–΄ μžˆμœΌλ―€λ‘œ, Memoryκ°„ λ³΅μ‚¬λ‘œ 인해, I/O보닀 훨씬 λΉ λ₯Έ μ†λ„λ‘œ dataλ₯Ό λ°›μ•„μ˜¬ 수 있음.

      5. recvfrom ν•¨μˆ˜λŠ” λΉ λ₯Έ μ†λ„λ‘œ dataλ₯Ό λ³΅μ‚¬ν•œ ν›„, λ³΅μ‚¬ν•œ data의 길이와 ν•¨κ»˜ λ°˜ν™˜ν•¨.

DNS round robin

✨ DNS Round Robin λ°©μ‹μ˜ 문제점

  1. μ„œλ²„μ˜ 수 만큼 곡인 IP μ£Όμ†Œκ°€ ν•„μš”ν•¨ λΆ€ν•˜ 뢄산을 μœ„ν•΄ μ„œλ²„μ˜ λŒ€μˆ˜λ₯Ό 늘리기 μœ„ν•΄μ„œλŠ” κ·Έ 만큼의 곡인 IP κ°€ ν•„μš”ν•˜λ‹€.

  2. κ· λ“±ν•˜κ²Œ λΆ„μ‚°λ˜μ§€ μ•ŠμŒ λͺ¨λ°”일 μ‚¬μ΄νŠΈ λ“±μ—μ„œ λ¬Έμ œκ°€ 될 수 μžˆλŠ”λ°, 슀마트폰의 접속은 캐리어 κ²Œμ΄νŠΈμ›¨μ΄ 라고 ν•˜λŠ” ν”„λ‘μ‹œ μ„œλ²„λ₯Ό 경유 ν•œλ‹€. ν”„λ‘μ‹œ μ„œλ²„μ—μ„œλŠ” μ΄λ¦„λ³€ν™˜ κ²°κ³Όκ°€ 일정 μ‹œκ°„ λ™μ•ˆ μΊμ‹±λ˜λ―€λ‘œ 같은 ν”„λ‘μ‹œ μ„œλ²„λ₯Ό 경유 ν•˜λŠ” 접속은 항상 같은 μ„œλ²„λ‘œ μ ‘μ†λœλ‹€. λ˜ν•œ PC 용 μ›Ή λΈŒλΌμš°μ €λ„ DNS 질의 κ²°κ³Όλ₯Ό μΊμ‹±ν•˜κΈ° λ•Œλ¬Έμ— κ· λ“±ν•˜κ²Œ λΆ€ν•˜λΆ„μ‚° λ˜μ§€ μ•ŠλŠ”λ‹€. DNS λ ˆμ½”λ“œμ˜ TTL 값을 짧게 μ„€μ •ν•¨μœΌλ‘œμ¨ μ–΄λŠ 정도 ν•΄μ†Œκ°€ λ˜μ§€λ§Œ, TTL 에 따라 μΊμ‹œλ₯Ό ν•΄μ œν•˜λŠ” 것은 μ•„λ‹ˆλ―€λ‘œ λ°˜λ“œμ‹œ μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€.

  3. μ„œλ²„κ°€ λ‹€μš΄λ˜λ„ 확인 λΆˆκ°€ DNS μ„œλ²„λŠ” μ›Ή μ„œλ²„μ˜ λΆ€ν•˜λ‚˜ 접속 수 λ“±μ˜ 상황에 따라 질의결과λ₯Ό μ œμ–΄ν•  수 μ—†λ‹€. μ›Ή μ„œλ²„μ˜ λΆ€ν•˜κ°€ λ†’μ•„μ„œ 응닡이 λŠλ €μ§€κ±°λ‚˜ μ ‘μ†μˆ˜κ°€ 꽉 μ°¨μ„œ 접속을 μ²˜λ¦¬ν•  수 μ—†λŠ” 상황인 지λ₯Ό μ „ν˜€ 감지할 μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ–΄λ–€ μ›μΈμœΌλ‘œ λ‹€μš΄λ˜λ”λΌλ„ 이λ₯Ό κ²€μΆœν•˜μ§€ λͺ»ν•˜κ³  μœ μ €λ“€μ—κ²Œ μ œκ³΅ν•œλ‹€. μ΄λ•Œλ¬Έμ— μœ μ €λ“€μ€ κ°„ν˜Ή λ‹€μš΄λœ μ„œλ²„λ‘œ 연결이 λ˜κΈ°λ„ ν•œλ‹€. DNS λΌμš΄λ“œ λ‘œλΉˆμ€ μ–΄λ””κΉŒμ§€λ‚˜ λΆ€ν•˜λΆ„μ‚° 을 μœ„ν•œ 방법이지 닀쀑화 방법은 μ•„λ‹ˆλ―€λ‘œ λ‹€λ₯Έ S/W 와 μ‘°ν•©ν•΄μ„œ 관리할 ν•„μš”κ°€ μžˆλ‹€.

Round Robin 방식을 기반으둜 단점을 ν•΄μ†Œν•˜λŠ” DNS μŠ€μΌ€μ€„λ§ μ•Œκ³ λ¦¬μ¦˜μ΄ μ‘΄μž¬ν•œλ‹€. (μΌλΆ€λ§Œ μ†Œκ°œ)

Weighted round robin (WRR)

각각의 μ›Ή μ„œλ²„μ— κ°€μ€‘μΉ˜λ₯Ό κ°€λ―Έν•΄μ„œ λΆ„μ‚° λΉ„μœ¨μ„ λ³€κ²½ν•œλ‹€. λ¬Όλ‘  κ°€μ€‘μΉ˜κ°€ 큰 μ„œλ²„μΌμˆ˜λ‘ λΉˆλ²ˆν•˜κ²Œ μ„ νƒλ˜λ―€λ‘œ 처리λŠ₯λ ₯이 높은 μ„œλ²„λŠ” κ°€μ€‘μΉ˜λ₯Ό λ†’κ²Œ μ„€μ •ν•˜λŠ” 것이 μ’‹λ‹€.

Least connection

접속 ν΄λΌμ΄μ–ΈνŠΈ μˆ˜κ°€ κ°€μž₯ 적은 μ„œλ²„λ₯Ό μ„ νƒν•œλ‹€. λ‘œλ“œλ°ΈλŸ°μ„œμ—μ„œ μ‹€μ‹œκ°„μœΌλ‘œ connection 수λ₯Ό κ΄€λ¦¬ν•˜κ±°λ‚˜ 각 μ„œλ²„μ—μ„œ 주기적으둜 μ•Œλ €μ£ΌλŠ” 것이 ν•„μš”ν•˜λ‹€.

Connection Management

Last updated