GET

GET은 클라이언트가 서버에서 정보를 요청하기 위해 보내는 메서드

정보를 조회 할 때 대부분 사용한다.

GET은 URL 주소 끝에 파라미터로 포함되어 전송시키며 URL 뒤의 ? 뒤에 파라미터를 추가(쿼리스트링)하여 어디의 정보를 가져 올 것인지 주소를 정해준다.

www.example.com/show?name1=value1&name2=value2

name1=value1&name2=value2← 쿼리스트링

GET의 특징

  • GET 요청은 캐시를 통해서 저장되어 브라우저에서 리소스를 반환 할 수 있다.
  • GET 요청은 길이 제한이 있다.
  • GET 요청은 정보가 노출 되는 구조로 구성되어있기에 보안이 필요한 정보에 사용하지 않아야한다.
  • GET은 데이터를 요청할때만 사용 된다.

POST

클라이언트가 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드

게시글 작성 및 수정에 사용된다.

POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보낸다.

POST 로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에 많이 사용된다.

( 하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있는건 똑같다. )

POST를 통한 데이터 전송은 보통 HTML form 을 통해 서버로 전송된다.

 

post의 특징

  • POST 요청은 캐시되지 않는다.
  • POST 요청은 데이터 길이에 제한이 없다

GET과 POST의 특징만 보아도 차이가 나긴하지만 추가적으로 차이점을 정리해보면 다음과 같다.

  • 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
  • DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
  • 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
  • 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다.

** 멱등성이란?

반복되는 요청을 진행해도 같은 정보가 반복되는 것 

 

'CS > 네트워크' 카테고리의 다른 글

TCP 연결과 해제  (0) 2023.01.10
우리가 구글 페이지를 어떻게 들어갈까?  (0) 2023.01.10
인증과 인가 ( 쿠키/세션/토큰/JWT)  (0) 2023.01.06
IPv4와 IPv6  (0) 2023.01.05
도메인과 DNS  (0) 2023.01.05

TCP(Transmission Control Protocol)에 대해서 TCP 는 네트워크 프로토콜의 국제표준기준 OSI 7 계층(Open System Interconnect)의 4 계층 (Transport) 속하며, 3 계층(Network)의 IP 프로토콜과 같이 사용되기 때문에, “TCP/IP” 라고도 불 린다. TCP 의 사용의 가장 큰 목적은 컴퓨터에서 실행되는 프로그램 간 데이터 유실 없이 안정적으로 전송하는 것이다.

 

 

 

데이터 유실을 최소화 하기 위하여 현재 가장 대표적으로 사용중인 전송 프로토콜이다.

 

 

 

TCP는 신뢰성있는 연결을 추구하기 때문에 연결을 생성하고 종료하는 순간에도 나름의 신뢰성 확보를 위해 핸드쉐이크(Handshake)라고 하는 특별한 과정을 거치게 된다. TCP를 사용하여 통신을 하는 각 종단은 핸드쉐이크 과정을 통해 어떤 TCP 옵션들을 사용할 지, 패킷의 순서 번호 동기화와 같이 통신에 필요한 몇 가지 정보를 주고 받는다.

 

 

TCP는 전화를 거는 것처럼 상대와 연결을 설정하고 통신을 시작한다. 절차는 아래와 같다.

Three Way Handshake

1) 클라이언트가 TCP 연결을 위하여 SYN패킷을 보내어 연결 요청 =

상대에게 통신을 하고 싶다는 메시지를 보낸다. (SYN)  


2) 서버가 SYN 패킷을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 전송 해 준다. 

상대는 그 메시지에 대한 응답 + 나도 통신 준비가 되었다는 메시지를 보낸다. (SYN-ACK)


3)클라이언트는 SYN + ACK 신호를 받았다는 의미로 ACK 패킷을 서버에 다시 보내어준다.

2번에서 받은 메시지에 응답을 보낸다. (ACK)

이와 같은 과정을 통해 나와 상대가 통신준비를 마쳤고, 현재 통신이 연결되어 있음을 보장하게 된다. 기존의 회선교환 방식과 유사하지만 단순히 서로 연결되어 있다는 것만 보장한다.

 

TCP 연결 해제 4-way Handshaking 사용

 

1)클라이언트는 서버에게 TCP 연결 종료를 위하여 TCP 헤더 flag에 있는 FIN을 보낸다.

통신종료 요청

 

2)서버는 FIN을 받고, 남은 데이터 저장을 위한 ACK를 클라이언트에게 보낸다.

 종료요청을 받고 남은데이터를 발신자에게 보냄

 

3)그 이후, FIN을 클라이언트에게 보내어 연결 해제를 확인 했다는 신호를 보내어준다.

2번을 거친 후 연결해제 완료 신호를 발신자에게 보냄 

 

4)클라이언트는 FIN을 받고, ACK를 보냄으로써 연결 해제가 된다.

발신자는 종료메세지를 수신자에게 받고 연결 해제 

'CS > 네트워크' 카테고리의 다른 글

GET과 POST  (0) 2023.02.03
우리가 구글 페이지를 어떻게 들어갈까?  (0) 2023.01.10
인증과 인가 ( 쿠키/세션/토큰/JWT)  (0) 2023.01.06
IPv4와 IPv6  (0) 2023.01.05
도메인과 DNS  (0) 2023.01.05

  1. 브라우저의 주소창에 google.com 을 친다.
  2. 브라우저에서 google.com 과 대응 되는 ip주소를 브라우저 캐시 에서 찾는다 (이미 방문했던 사이트인지 ) 방문하지 않았다면 → OS캐시를 체크 (사용자 컴퓨터에 저장이 되어있는지) →컴퓨터에도 없다면 라우터캐시를 체크 - > 없다면 ISP(인터넷공급망)캐시를 확인
  3. 요청된 URL이 저장되어있지 않다면 GOOGLE.COM을 호스트하는 서버의 주소를 찾기위해 DNS서버에 쿼리를 보내서 IP를 찾는다
  4. GOOGLE.COM 과 매칭되는 값(IP)를 찾아서 목적지 (GOOGLE.COM의 IP주소)를 찾아가는 경로를 라우팅을 통해 확인 (이 과정에서 찾지 못한다면 요청실패에러) 실패가 아닌 성공이라면 올바른 IP를 받고 브라우저로 돌아오게 된다.
  5. 브라우저가 올바른 IP주소를 받았다면 받은 IP주소로 인터넷 프로토콜을 사용한다 (일반적으로 TCP/IP 사용 ,
  6. 프로토콜을 연결하고 요청을 보내기 위해 TCP/IP three-way handshake라고 불려지는 과정을 사용해서 수립
    1. 클라이언트는 인터넷 상에서 SYN 패킷을 서버에게 보내서 새로운 연결이 열려있는지 물어봅니다.
    2. 서버가 수용할 수 있는 새로운 포트가 열려 있고 새로운 연결을 시작할 수 있다면 SYN/ACK 패킷을 사용해서 SYN 패킷의 ACKnowledgement를 응답합니다.
    3. 클라이언트는 서버로부터 SYN/ACK 패킷을 받을 것이고 ACK 패킷을 보냄으로써 응답합니다.
  7. TCP연결이 연결이 되었다면 데이터를 전송 브라우저 → GOOGLE.COM 웹서버로 HTTP요청
  8. 브라우저에서 HTTP - GET REQUEST (GET 요청)을 한다.
  9. 요청을 받은 구글의 웹서버는 응답을 받고 특정한 포멧을 통해 응답을 분석
  10. 구글의 웹서버는 HTTP 응답을 보낸다.
  • 1xx는 정보 메세지를 나타낸다.
  • 2xx는 성공을 나타낸다.
  • 3xx는 다른 URL로 클라이언트를 리다이렉션한다.
  • 4xx는 클라이언트 측에서 에러가 났음을 나타낸다.
  • 5xx는 서버측에서 에러가 났음을 나타낸다.
  1. 구글 웹서버에서 보낸 응답을 브라우저에서 받고 받은 데이터를 통해 HTML컨텐츠 등에 대한 데이터에 대해 추가 요청을 보낸다. ( CSS,이미지,JAVAscriptsFiles 등 웹 페이지를 구성하기 위한 추가요소를 get요청)
  2. 추가요소를 렌더링 시켜주며 우리가 보는 google페이지 도착!

'CS > 네트워크' 카테고리의 다른 글

GET과 POST  (0) 2023.02.03
TCP 연결과 해제  (0) 2023.01.10
인증과 인가 ( 쿠키/세션/토큰/JWT)  (0) 2023.01.06
IPv4와 IPv6  (0) 2023.01.05
도메인과 DNS  (0) 2023.01.05

세션 기반 인증과 토큰 기반 인증

세션과 토큰을 설명하기 전에!

  • 바로 직전의 통신도 기억 못하는 HTTP

HTTP는 stateless한 특성을 가지기 때문에 각 통신의 상태는 저장되지 않는다

하지만 우리가 웹 서비스를 사용할 때를 생각해봅시다.

매번 새 페이지를 요청 할 때마다 로그인을 해야 한다면 사용이 불가능할 것입니다.

이를 보완하기 위해 세션과 토큰을 사용!

유저가 로그인을 시도할 때 서버상에서 일치하는 유저 정보를 찾았다면

인증(Authentication) 확인의 표시로 세션이나 토큰을 발급/전달해줍니다.

그럼 웹 브라우저 측에서 해당 세션/토큰 정보를 받아 간직하고 있다가

새로운 request를 보낼 때마다 **인가(Authorization)**를 위해 해당 세션/토큰을 함께 보냅니다.

인증과 인가

세션 기반 인가와 토큰 기반 인가에 대해 알아보기 이전에 먼저, 인증과 인가가 무엇인지 부터 알아야할 필요가 있다. 인증과 인가를 같거나 비슷한 개념이라고 생각하는 사람들이 많을텐데, 엄밀하게는 서로 다른 개념이다. 인증과 인가는 요약하자면 시스템의 자원을 적절하고 유효한 사용자에게 전달하고 공개하는 방법이다.

인증에는 클라이언트의 쿠키 저장소에 Key-Value 형식의 문자열 방식을 저장시켜 고유 정보 식별 가능!

인증 (Authentication)

인증은 쉽게 말하자면, 로그인 이다. 클라이언트가 자기자신이라고 주장하고 있는 사용자가 맞는지를 검증하는 과정이다. 예를 들어 로그인 화면에서 내가 유저 아이디를 USER1 로 입력하고 패스워드를 입력해 제출하면, 서버에서는 내가 진짜로 USER1 이라는 유저가 맞는지 확인한다.

인가 (Authorization)

인가는 인증 작업 이후에 행해지는 작업으로, 인증된 사용자에 대한 자원에 대한 접근 확인 절차를 의미한다. 쉽게 말해서 권한! 기본 장고에서는 유저가 동일한지 함수로 체크했지만

DRF에서는 Permission를 통해 권한을 부여했음

여기에 일반 유저인 USER1과 USER2가 있다. 일반 유저인 USER1 은 글 작성, 조회, 수정, 삭제 등 일반적인 작업에 대한 권한이 부여되어 있다. 하지만 USER1 은 USER2가 작성한 글을 수정하거나 제거할 수는 없다. 타인의 리소스에 대해서는 인가되어 있지 않기 때문이다. 또한 USER1과 USER2 는 모두 관리자 페이지에 접속할 수 없다. 일반 유저는 관리자 페이지에 대해 인가되어 있지 않기 때문이다.

쿠키-세션-토큰(JWT)

1.쿠키 (Cookie) - 클라이언트의 브라우저에 설치

쿠키는 Key-Value 형식의 문자열 덩어리이다.

클라이언트가 어떠한 웹사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 파일이다.

각 사용자마다의 브라우저에 정보를 저장하니 고유 정보 식별이 가능한 것이다.

Cookie 인증방식의 단점

  • 보안에 취약함 가장 큰 문제 .요청 시 쿠키의 값을 그대로 보내기 때문에 유출 및 조작 당할 위험이 존재한다.
  • 웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저간 공유가 불가능하다.
  • 쿠키에는 용량 제한이 있음
  • 쿠키 사이즈가 크면 네트워크 부하가 심해짐.

2. 세션 Session - 서버에 저장

이러한 쿠키의 보안적인 이슈 때문에, 세션은 비밀번호 등 클라이언트의 민감한 인증 정보를 브라우저가 아닌 서버 측에 저장하고 관리한다.

서버의 메모리에 저장하기도 하고, 서버의 로컬 파일이나 데이터베이스에 저장하기도 한다.

핵심 골자는 민감한 정보는 클라이언트에 보내지 말고 서버에서 모두 관리한다는 점이다.

 

Session 방식의 단점

  • 쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인정보를 담고 있지 않는다.그러나 해커가 세션 ID 자체를 탈취하여 클라이언트인척 위장할 수 있다는 한계가 존재한다. (이는 서버에서 IP특정을 통해 해결 할 수 있긴 하다)
  • 서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하가 심해진다.

3.Token 인증

토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 '토큰'을 부여한다.

이 토큰은 유일하며 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다.

그러면 서버에서는 클라이언트로부터 받은 토큰을 서버에서 제공한 토큰과의 일치 여부를 체크하여 인증 과정을 처리하게 된다.

기존의 세션기반 인증은 서버가 파일이나 데이터베이스에 세션 정보를 가지고 있어야 하고 이를 조회하는 과정이 필요하기 때문에 많은 오버 헤드가 발생한다.

하지만 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다.

토큰 자체에 데이터가 들어있기 때문에 클라이언트에서 받아 위조되었는지 판별만 하면 되기 떄문이다.

토큰은 앱과 서버가 통신 및 인증 할 때 가장 많이 사용된다.

왜냐하면 웹에는 쿠키와 세션이 있지만 앱에서는 없기 때문이다.

Token 방식의 단점

  1. 쿠키/세션과 다르게 토큰 자체의 데이터 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해질수 있다.
  2. Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다.
  3. 토큰을 탈취당하면 대처하기 어렵다. (따라서 사용 기간 제한을 설정하는 식으로 극복한다

4.JWT Token

JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.

그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다

JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다.

따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.

 

 

JWT 구조

JWT는 . 을 구분자로 나누어지는 세 가지 문자열의 조합이다.

.을 기준으로 좌측부터 HeaderPayloadSignature를 의미한다.

JWT 장점

  1. Header와 Payload를 가지고 Signature를 생성하므로 데이터 위변조를 막을 수 있다.
  2. 인증 정보에 대한 별도의 저장소가 필요없다.
  3. JWT는 토큰에 대한 기본 정보와 전달할 정보 및 토큰이 검증됬음을 증명하는 서명 등 필요한 모든 정보를 자체적으로 지니고 있다.
  4. 클라이언트 인증 정보를 저장하는 세션과 다르게 , 가 되어 서버 확장성이 우수해질 수 있다.서버는 무상태
  5. 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다. (쿠키와 차이)
  6. OAuth의 경우 Facebook, Google 등 소셜 계정을 이용하여 다른 웹 서비스에서도 로그인을 할 수 있다.
  7. 모바일 어플리케이션 환경에서도 잘 동작한다. (모바일은 세션 사용 불가능)

JWT 단점

  1. Self-contained : 토큰 자체에 정보를 담고 있으므로 양날의 검이 될 수 있다.
  2. 토큰 길이 : 토큰의 Payload에 3종류의 클레임을 저장하기 때문에, 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있다.
  3. Payload 인코딩 : payload 자체는 암호화 된 것이 아니라 BASE64로 인코딩 된 것이기 때문에, 중간에 Payload를 탈취하여 디코딩하면 데이터를 볼 수 있으므로, payload에 중요 데이터를 넣지 않아야 한다.
  4. Store Token : stateless 특징을 가지기 때문에, 토큰은 클라이언트 측에서 관리하고 저장한다. 때문에 토큰 자체를 탈취 당하면 대처하기가 어렵게 된다.

JWT의 Access Token / Refresh Token 방식

JWT도 제 3자에게 토큰 탈취의 위험성이 있기 때문에, 그대로 사용하는것이 아닌 Access Token, Refresh Token 으로 이중으로 나누어 인증을 하는 방식을 현업에선 취한다.

Access Token 과 Refresh Token은 둘다 똑같은 JWT이다. 다만 토큰이 어디에 저장되고 관리되느냐에 따른 사용 차이일 뿐이다.

  • Access Token : 클라이언트가 갖고 있는 실제로 유저의 정보가 담긴 토큰으로, 클라이언트에서 요청이 오면 서버에서 해당 토큰에 있는 정보를 활용하여 사용자 정보에 맞게 응답을 진행
  • Refresh Token: 새로운 Access Token을 발급해주기 위해 사용하는 토큰으로 짧은 수명을 가지는 Access Token에게 새로운 토큰을 발급해주기 위해 사용. 해당 토큰은 보통 데이터베이스에 유저 정보와 같이 기록.

 

개념이 생소할수 있지만 Access Token은 우리가 지금까지 설명한 JWT를 말하는 것이라고 보면 된다.

정리하자면, Access Token은 접근에 관여하는 토큰, Refresh Token은 재발급에 관여하는 토큰의 역할로 사용되는 JWT인 것이다.

참조- https://inpa.tistory.com/entry/WEB-📚-JWTjson-web-token-란-💯-정리

참조 - https://hudi.blog/cookie-and-session/

 

'CS > 네트워크' 카테고리의 다른 글

TCP 연결과 해제  (0) 2023.01.10
우리가 구글 페이지를 어떻게 들어갈까?  (0) 2023.01.10
IPv4와 IPv6  (0) 2023.01.05
도메인과 DNS  (0) 2023.01.05
프로토콜(protocol)이란?  (0) 2023.01.03

인터넷에 연결된 컴퓨터의 고유한 주소이다.

기존의 IPv4를 통해 IP주소를 부여했지만 , 네트워크 수요가 급증하여 IPv4 자원이 고갈되는 상태

이를 개선하기 위해 IPv6로 IP주소를

IPv4 = 111.11.234.13.56

IPv6 = 1111:1111:aaaa:ffff:0000:0000:ffff:0000

  • IPv4 주소 체계는 32비트를 8비트씩 4부분으로 나누어 각 부분을 점(.)으로 구분하며, 10진 숫자로 표현하고 각 자리는 0부터 255까지의 숫자를 사용한다.
  • IPv4의 32비트 주소 체계로는 전 세계의 증가하는 호스트에 주소를 할당하기 어렵기 때문에, 1994년부터 개발하기 시작한 128비트의 주소 체계 IPv6이 사용된다.

IPv4

  • 기존의 IPv4는 5개의 클래스로 클래스 기반 주소 지정
  • IPv4 주소 체계는 32비트를 8비트씩 4부분으로 나누어 각 부분을 점(.)으로 구분하며, 10진 숫자로 표현하고 각 자리는 0부터 255까지의 숫자를 사용한다.

네트워크와 호스트 주소의 크기에 따라 A, B, C, D, E 클래스로 나누어 구분하며, 이 중 A, B, C가 일반 사용자용, D는 멀티캐스트용, E는 연구용으로 사용

 

 

 

 

비교의 기초 IPv4 IPv6

주소 구성 수동 및 DHCP 구성을 지원합니다. 자동 구성 및 번호 다시 매기기 지원
종단 간 연결 무결성 달성하기 어려운 달성 가능
주소 공간 4.29 x 10 9 주소를 생성 할 수 있습니다. 상당히 많은 수의 주소를 생성 할 수 있습니다 (예 : 3.4 x 10 38 .
보안 기능 보안은 응용 프로그램에 따라 다릅니다. IPSEC은 IPv6 프로토콜에 내장되어 있습니다.
주소 길이 32 비트 (4 바이트) 128 비트 (16 바이트)
주소 표현 십진수로 16 진법으로
에 의해 수행 된 단편화 발신자 및 전달 라우터 발신자 만
패킷 흐름 식별 사용 불가 머리글의 흐름 레이블 필드를 사용할 수 있으며 사용합니다.
체크섬 필드 유효한 사용 불가
메시지 전송 방식 방송 멀티 캐스팅 및 애니 캐스팅
암호화 및 인증 제공되지 않음 제공됨

기존 네트워크 인프라를 v6 호환되는 장비로 전면 교체해야되서 그럼. $$$ 문제

IPv6

1996년 표준화된 IPv6는 기존 IPv4의 길이를 4배 확장한 128-비트 (2128, 약 43억 x 43억 x 43억 x 43억) 길이 주소로 구성돼 있다.

  • IPv6 주소 체계는 128비트를 16비트씩 8부분으로 나누어 각 부분을 콜론(:)으로 구분한다.

(예-1111:1111:aaaa:ffff:0000:0000:ffff:0000)

  • IPv6는 주소의 각 부분을 16진수로 표현하며 0이 연속되는 경우 '::'으로 생략할 수 있다.
  • IP주소는 미국은 InterNIC, 대한민국을 비롯한 기타 나라들은 각국의 망 관리 센터에서 발급한다.

대한민국의 경우에는 한국 인터넷 진흥원(NIDA)에서 발급한다.

  • IPv6은 유니캐스트, 멀티캐스트, 애니캐스트의 3가지 종류의 주소로 분류됨
  • IPv6의 특징 : IP 주소의 대폭적인 확장, 실시간 멀티미디어 처리 기능의 강화 , IP의 보안성 강화

기존의 웹은 IPv4 체계로 이루어져있으며 보안 또한 IPv4에 맞춰졌음,

IPv4는 네트워크 관리자로 수동으로 IP부여 ↔ IPv6은 자동으로 IP가 부여

IPv6으로 DDOS공격이나 다른 네트워크 공격을 받는다면 트래킹와 차단이 어려움

아직 IPv6에 대한 인프라나 시스템이 정비되지 않았음,

'CS > 네트워크' 카테고리의 다른 글

우리가 구글 페이지를 어떻게 들어갈까?  (0) 2023.01.10
인증과 인가 ( 쿠키/세션/토큰/JWT)  (0) 2023.01.06
도메인과 DNS  (0) 2023.01.05
프로토콜(protocol)이란?  (0) 2023.01.03
동기와 비동기  (0) 2023.01.03

 

도메인(domain)이란?

ip는 사람이 이해하고 기억하기 어렵기 때문에 이를 위해서 각 ip에 이름을 부여할 수 있게 했는데, 이것을 도메인이라고 한다. (DNS라는 시스템을 이용해서 IP와 도메인을 매칭한다)

인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력할 수 있도록 문자(영문 한글)로 만든 인터넷 주소

ICNN , KISA

ip(internet protocol)란?

인터넷에 연결되어 있는 장치(컴퓨터, 스마트폰, 타블릿, 서버 등등)들은 각각의 장치를 식별할 수 있는 주소를 가지고 있는데 이를 ip라고 한다. 예) 115.68.24.88, 192.168.0.1

도메인의 구성요소

컴퓨터의 이름과 최상위 도메인으로 구성되어 있다. 예를들면 아래와 같다.

  • opentutorials.org
    • opentutorials : 컴퓨터의 이름
    • org : 최상위 도메인 - 비영리단체
  • daum.co.kr
    • daum(도메인이름) : 컴퓨터의 이름
    • co(SLD 차상위 도메인) : 국가 형태의 최상위 도메인을 의미
    • kr (최상위 국가 도메인) : 대한민국의 NIC에서 관리하는 도메인을 의미

URL의 이해

 

DNS란? (도메인이름과 IP주소를 매칭시켜주는 방법)

브라우저의 검색창에 도메인 이름을 입력하여 해당 사이트로 이동하기 위해서는,

해당 도메인 이름과 매칭된 IP 주소를 확인하는 작업이 반드시 필요하다.

네트워크에는 이것을 위한 서버가 별도로 있다.이 서버가 바로 DNS 서버이다.

DNS는 Domain Name System의 줄임말로, 데이터베이스 시스템이다.

호스트의 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템이다.

  1. 브라우저의 검색창 naver.com을 입력
  2. 이 요청은 DNS에서 IP 주소(125.209.222.142)를 찾는다.
  3. 그리고 이 IP 주소에 해당하는 웹 서버로 요청을 전달 하여 클라이언트와 서버가 통신

 

아마존 Route53

  1. 사용자가 웹 브라우저를 열어 주소 표시줄에 www.example.com을 입력하고 Enter 키를 누릅니다.
  2. www.example.com에 대한 요청은 일반적으로 케이블 인터넷 공급업체, DSL 광대역 공급업체 또는 기업 네트워크 같은 인터넷 서비스 제공업체(ISP)가 관리하는 DNS 해석기로 라우팅됩니다.
  3. ISP의 DNS 해석기는 www.example.com에 대한 요청을 DNS 루트 이름 서버에 전달합니다.
  4. ISP의 DNS 해석기는 www.example.com에 대한 요청을 이번에는 .com 도메인의 TLD 이름 서버 중 하나에 다시 전달합니다. .com 도메인의 이름 서버는 example.com 도메인과 연관된 4개의 Amazon Route 53 이름 서버의 이름을 사용하여 요청에 응답합니다.
  5. ISP의 DNS 해석기는 Amazon Route 53 이름 서버 하나를 선택해 www.example.com에 대한 요청을 해당 이름 서버에 전달합니다.
  6. Amazon Route 53 이름 서버는 example.com 호스팅 영역에서 www.example.com 레코드를 찾아 웹 서버의 IP 주소 192.0.2.44 등 연관된 값을 받고 이 IP 주소를 DNS 해석기로 반환합니다.
  7. ISP의 DNS 해석기가 마침내 사용자에게 필요한 IP 주소를 확보하게 됩니다. 해석기는 이 값을 웹 브라우저로 반환합니다. 또한, DNS 해석기는 다음에 누군가가 example.com을 탐색할 때 좀 더 빠르게 응답할 수 있도록 사용자가 지정하는 일정 기간 example.com의 IP 주소를 캐싱(저장)합니다. 자세한 내용은 Time to Live(TTL)를 참조하세요.
  8. 웹 브라우저는 DNS 해석기로부터 얻은 IP 주소로 www.example.com에 대한 요청을 전송합니다. 여기가 콘텐츠가 있는 곳으로, 예를 들어 웹 사이트 엔드포인트로 구성된 Amazon S3 버킷 또는 Amazon EC2 인스턴스에서 실행되는 웹 서버입니다.
  9. 192.0.2.44에 있는 웹 서버 또는 그 밖의 리소스는 www.example.com의 웹 페이지를 웹 브라우저로 반환하고, 웹 브라우저는 이 페이지를 표시합니다.

아마존 ROUTE53

'CS > 네트워크' 카테고리의 다른 글

인증과 인가 ( 쿠키/세션/토큰/JWT)  (0) 2023.01.06
IPv4와 IPv6  (0) 2023.01.05
프로토콜(protocol)이란?  (0) 2023.01.03
동기와 비동기  (0) 2023.01.03
OSI 7계층과 TCP/IP 4계층  (0) 2023.01.03

통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 즉 상호간에 미리 약속된 통신 규약 및 약속이다.

프로토콜은 데이터를 송수신하기 위한 규칙을 말한다.

손님이 주문을 받는 사람에게 대뜸 찾아가, 외계어로 주문을 할 수 없다.

주문을 하기 위해서는 꼭 지켜야 하는 약속이 몇가지 존재한다.

통신하기 위한 다양한 방법이 존재한다.

직원에게 주문, 앱에서 주문, 키오스크 주문을 할 수 있다.

이러한 방법 하나하나를 전부 프로토콜이라고 할 수 있다.프로토콜은 각각의 프로토콜마다 지켜야 하는 규약이 존재한다.

MDN에서의 “HTTP 메시지” 라는 항목을 잘 살펴보면, HTTP 만의 규칙이 있음을 발견할 수 있다.

송신자와 수신자 사이에 "데이터 구조는 이런식으로하고", "그건 이런 의미이고", "속도는 어느 정도로 보내고" 그런식으로 보내기로하자. 라고 약속을 한 것

프로토콜의 기본 요소

  • 구문(Syntax) : 전송하고자 하는 데이터의 형식(Format), 부호화(Coding), 신호 레벨(Signal Level) 등을 규정
  • 의미(Semantics) : 두 기기 간의 효율적이고 정확한 정보 전송을 위한 협조 사항과 오류 관리를 위한 제어 정보를 규정 (제어정보를 통해 에러처리)
  • 시간(Timing) : 두 기기 간의 통신 속도, 메시지의 순서 제어 등을 규정 (시스템간의 정보전송을 위한 속도와 시간순서 관리)

프로토콜 종류

프로토콜의 기능

**단편화(Fragmentation)와 재합성(Assembly)**단편화 : 송신 측에서는 긴 데이터 블록을 손쉽게 전송할 수 있도록 크기가 똑같은 작은 블록으로 나누어 전송재합성 : 수신 측에서 쪼개진 작은 데이터 블록을 재합성하여 원래의 메시지로 복원하는 기능

(패킷 단위로 나눠진 데이터들을 규약에 따라 다시 재조합하거나 , 패킷단위로 나누는것)

**캡슐화(Encapsulation)**각 프로토콜에 적합한 데이터 블록을 만들려고 데이터에 정보를 추가하는 것플래그, 주소, 제어 정보, 오류 검출 부호 등을 부착하는 기능

(각각의 데이터블록의 내용들을 소형 상장에 담아 큰 상자에 넣어준 뒤 필요 데이터를 헤더에 담아서 보냄 )

**연결 제어(Connection Control)비연결 데이터 전송(데이터그램)과 연결 위주 데이터 전송(가상회선)을 위한 통신로를 개설·유지·종결하는 기능흐름 제어(Flow Control)데이터양이나 통신속도 등이 수신 측의 처리 능력을 초과하지 않도록 조정하는 기능오류 제어(Error Control)데이터 전송 중 발생할 수 있는 오류나 착오 등을 검출하고 정정하는 기능순서 결정(Sequencing)**연결 위주의 데이터를 전송할 때 송신 측이 보내는 데이터 단위 순서대로 수신 측에 전달하는 기능

(각 데이터의 전송 시간과 양을 조절한다)

동기화

**주소 설정(Addressing)발생지, 목적지 등의 주소를 명기하여 데이터를 정확하게 전달하는 기능동기화(Synchronization)두 통신 객체의 상태(시작, 종류, 검사 등)를 일치시키는 기능다중화(Multiplexing)하나의 통신로를 여러 개로 나누거나 회선 여러 개를 하나의 통신로로 변환시켜 다수의 가입자가 동시에 사할 수 있도록 하는 기능전송 서비스(Transmission Service)**통신 객체를 사용하기 쉽도록 별도로 추가 서비스(패리티 검사, 보안도, 서비스 등급, 우선순위 등)를 제공하는 기능

(어떤 통신을 통해서 데이터를 보내고 싶은지와 어디로 보낼지 위치표시)

 

 

OSI 7 Layer 테코톡- 영상

OSI 7 Layer별 주요 프로토콜 설명

  • OSI 7 계층을 보면 네트워크에 대한 개념을 알 수 있다.
  • 데이터 통신은 OSI 참조 모델에 의한 ‘단계와 순서’로 이해한다.
  • ISO 단체에서 네트워크 계층에 대한 표준을 만들었다.
  • OSI 참조 모델은 일곱개의 계층으로 나뉘어 있으며, 각각은 독립해 있다.
  • OSI 7 계층은 기종이 서로 다른 컴퓨터 간의 정보 교환을 위해 네트워크를 이루고 있는 구성 요소를 계층적으로 나누고 각 계층을 표준화 한 것이다.
  • 계층을 구분하는 이유는 모듈화를 함으로써 문제가 생겼을 때 해당 계층만 수정할 수 있기 때문이다.OSI는 상위 계층(7~4)과 하위 계층(1~3)이 있다.
  • 하위 계층은 상위 계층을 위해 일하고 상위 계층은 하위 계층에 대해 관여하지 않는다.

응용 계층 (Application)

사용자가 OSI 환경에 접근할 수 있도록 서비스를 제공프로토콜을 이용해서 서비스를 사용하는 것을 의미한다.

표현 계층 (Presentation)

알아 볼 수있게 표현해주는 계층응용 계층에서 받은 데이터를 세션 계층에 맞게 변환하거나, 세션 계층에서 받은 데이터를 응용 계층에 맞게 변환한다.코드 변화, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식 변환

세션 계층 (Session)

송수신측 간의 관련성을 유지시킨다.송수신측 간의 대화 제어를 담당한다.동기 제어, 데이터 교환 관리

전송 계층 (Transport)

전송 할 수 있게 연결을 설정 및 해제데이터가 실제 전송되는 구간관련 장비 : 게이트웨어(출입문)

네트워크 계층 (=망계층) (Network)

네트워크 연결을 관리한다. (경로 설정, 연결, 해제, 패킷 전송)데이터 교환의 중계한다.관련 장비 : 라우터(네비게이션, 최적의 경로 찾아준다.)

데이터 링크 계층 (Data Link)

두 개의 인접한 개방 시스템들 끼리 신뢰성있고 효율적인 정보 전송 가능하게 한다.흐름 제어, 프레임 동기화, 오류 제어, 순서 제어 기능링크(찾아가는 길) 확립, 유지, 단절을 제공한다.관련 장비 : 랜카드, 브리지, 스위치

물리 계층 (Physical)

전송에 필요한 두 장치간 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성을 정의한다.전기 신호를 전송한다. (만든다.)제어 신호를 전송한다.클럭 신호를 전송한다.관련 장비 : 리피터(증폭기), 허브

'CS > 네트워크' 카테고리의 다른 글

인증과 인가 ( 쿠키/세션/토큰/JWT)  (0) 2023.01.06
IPv4와 IPv6  (0) 2023.01.05
도메인과 DNS  (0) 2023.01.05
동기와 비동기  (0) 2023.01.03
OSI 7계층과 TCP/IP 4계층  (0) 2023.01.03

동기와 비동기

동기 (Synchronous : 동시에 일어나는)

  • 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다는 약속이다.
  • 바로 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 한다.
  • 요청과 결과가 한 자리에서 동시에 일어난다.
  • 요청이 들어온 순서대로 순차적으로 처리된다.

ex ) 카페에서 줄을 서서 커피를 주문했을 때 맨 앞 사람이 주문한 커피를 받을 때까지 다음 주문을 받지 않음

장점 : 설계가 매우 간단하고 직관적

단점 : 결과가 주어질 때까지 아무것도 못하고 대기해야 한다, 웹에서 응답을 받을 때까지 요청이 처리되지 않아서 실시간으로 처리하기가 어렵다.

비동기 (Asynchronous: 동시에 일어나지 않는)

  • 동시에 일어나지 않는다를 의미한다. 요청과 결과가 동시에 일어나지 않을 것이라는 약속이다.
  • 요청한 그 자리에서 결과가 주어지지 않는다.
  • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
  • 대기 시간동안 다른 작업을 수행 할 수 있다.

ex ) 카페에서 줄을 서서 커피를 주문했을 때 점원 한명이 커피 주문을 받고 다른 점원이 커피를 건네주는 것이 비동기 방식의 예시다.

( 커피가 앞의 사람의 커피보다 더 빨리 만들어져서 먼저 받을 수 있다)

장점 :

1.결과가 주어지는데 시간이 걸리더라도 그 시간 동안에 다른 작업을 할 수 있으므로 자원들을 효율적으로 사용 할 수 있다.

  1. 응답이 끝나지 않더라도 다른 작업을 할 수 있기 때문에 화면이 하얗게(요청을 다시 보내서 다시받는 작업을 안해도 된다) 안된다.

단점 : 동기보다 복잡한 설계 , 리소스를 많이 먹음

 

 

 

 

 

 

 

자바스크립트의 콜백

이벤트 루프를 알아두자.이벤트 루프 덕분에 비동기 작업을 수행할 수 있다.

코드를 실행하면서 비동기 작업은, "실행해!"라는 명령을 담아 어딘가로 던져진다.

이 **"어딘가"**가 이벤트 루프이다. 이벤트 루프가 비동기 작업을 담당 및 처리한다.

덕분에 자바스크립트 엔진은

"무거운 작업"을 어딘가에 위임하고, "동기적으로" 바로 다음 코드를 실행할 수 있다.

그리고 언젠가 이벤트 루프에서 작업이 완료되면??

비동기 작업을 만들 때 콜백 함수를 함께 지정하는데, 콜백함수를 가지고 후속 작업을 진행한다.

 

 

 

'CS > 네트워크' 카테고리의 다른 글

인증과 인가 ( 쿠키/세션/토큰/JWT)  (0) 2023.01.06
IPv4와 IPv6  (0) 2023.01.05
도메인과 DNS  (0) 2023.01.05
프로토콜(protocol)이란?  (0) 2023.01.03
OSI 7계층과 TCP/IP 4계층  (0) 2023.01.03

+ Recent posts