계층을 나눈 이유는 통신이 일어나는 과정이 단계별로 파악할 수 있기 때문이다.
흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉽고,
7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있기 때문이다.
물리 계층
통신 케이블/리피터/허브로 데이터를 전송, 비트단위로 전송(1,0)
데이터 전달만 할뿐 데이터가 무엇인지, 어떤 에러가 있는지 신경 X
데이터 링크 계층
물리계층에서 송수신 되는 정보의 오류와 흐름을 관리해 안전히 정보전달을 할 수 있도록 하는 역할.
통신의 오류도 찾고, 재전송도함.
맥주소(프레임의 물리적 주소)를 통해 통신함
네트워크 계층
데이터를 목적지까지 안전하고 빠르게 전달하는 기능(라우팅)
주소부여(IP), 경로 설정(라우팅)
전송 계층
통신을 활성화 하기 위한 계층, TCP프로토콜을 보통이용
데이터가 반드시 전달되는 것을 보장하는 프로토콜로 다음 특징들을 갖는다
6. 표현 계층
데이터 표현이 상이한 프로세스의 독립성을 제공하고 암호화 함.
코드간의 번역을 담당함
인코딩/디코딩하는부분, 해당 데이터가 TExt인지, 그림인지 구분해줌
클라이언트: 브라우저를 통해 서버에 요청( 프로토콜 + 도메인 + URL)
서버 : 클라이언트로 받은 요청을 처리하여 결과 응답
1)Connectionless + Stateless
2)Keep-Alive
HTTP요청을 보낼때 어떤 URI에 어떤 method를 사용할지 사용하는 규약 (GET, POST, DELETE, PATCH)
강점 : 메소드와 URL을 조합해서 예측가능하고 일정한 요청을 보낼 수 있음!
어떤 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해 URI(Resource)로 요청을 보내는 것
1. Uniform Interface(일관된 인터페이스)
통일된 요청으로 특정언어나 기술,플램폼에 종속되지 않아 모든 HTTP플랫폼에서 사용가능
2. Stateless(무상태성)
각각의 요청은 별개임 --> 이전요청이 다음 요청에 연관 X --> 세션/쿠키 활용 하여 상태저장 X
3. Client-Server Architecture (서버-클라이언트 구조)
두 관계간 역할을 구분하여 서로 의존성을 줄임
4. Self-Descriptiveness(자체 표현)
요청만 보고도 이를 쉽게 이해할수 있는 구조임(Post, Put 등)
RestFul API - Rest 규약을 잘 지키면서 설계한 API를 제공하는것
Rest API는 URI로 연결되어있기 떄문에 부분적으로 원하는 정보를 얻을 때는 여러번의 요청을 거치게 된다.
하지만 Graph QL은 필요한 정보를 한번의 요청으로 쏙 뽑아서 사용할 수 있기 떄문에 편리함. 또한 상황마다(사용하는 기기, 유저)마다 필요한 정보가 다르기 떄문에 그부분에 있어서는 훨씬 유연하게 대처 가능.
또한 여러 Depth 의 정보들을 한번에 받아올수 있어서 더욱 편리 ( Class, student , name 모든 depth의 것들 한번에 받아올수 있다 )
Post ( Query ) 수정/삭제 (Mutation)으로 구현한다.
받아오고자 하는 정보가 많을때에는 일일이 작성해서 graph QL로 가져 오는것보다 URL한줄로 요청하는 Rest API가 더 편리하다.
쿠키를 이용해서 서버는 브라우저에 데이터를 넣을수 있음(로그인 데이터, 언어설정)
쿠키는 받은곳으로만 다시보냄 (유투브에서 받았으면 유투브로)
쿠키는 유효기간이 있음
클라이언트에 저장(텍스트 형태)
HTTP의 Stateless속성때문에 연결이 끊기면 우리가 누군지 잊어버림.
그래서 Session ID를 이용하여 우리가 누군지 말해줌.
Request시 쿠키 + Session ID 를 서버로 보내면 서버에서 알수 있음
서버에 유저정보가있고 유저는 session ID만가짐
쿠키는 세션ID를 전달하기위한 매개체일뿐
세션 DB를 가지고 있어야해서 유저가 늘어날수록 점점 DB가 커지게됨(객체)
1. 브라우저의 URL 파싱
URL을 받은 브라우저는 URL의 구조를 해석한다.
2. HSTS 목록 조회
HSTS는 HTTP가아닌 HTTPS로 연결을 사용하는 기능이다.
HTTP로 요청이오면 HTTP응답 헤더에 "Strict Transport Security"라는 필드를 포함하여 응답하고 이를 확인한 브라우저는 해당 서버에 요청할 때 HTTPS만을 통해 통신하게 된다.
그리고 자신의 HSTS캐시에 해당 URL을 저장하는데 이를 HSTS 목록이라고 부른다.
--> HTST목록에 해당 URL이 있으면 HTTP를 통해 요청해도 HTTPS로 요청한다.
3.URL을 IP주소로 변환
www.naver.com 같은 주소는 컴퓨터간 통신을 할 수 없다. 컴퓨터간 상호작용 가능한 IP주소로 변환한다.
도메인 주소를 IP주소로 변환해주는 DNS(Domain Name System)서버에 요청해 URL을 IP주소로 변환한다.
4.라우터를 통해 해당 서버의 게이트웨이로 이동.
라우팅 테이블(경로)을 통해 해당 IP의 서버로 간다.
5. ARP을 통해 IP주소를 MAC 주소로 반환
실질적인 통신을 위해 논리 주소인 IP주소를 물리 주소인 MAC 주소로 변환한다.
--> APR: IP와 MAC을 매칭시키는 프로토콜
6. 대상 서버와 TCP 소켓 연결
이제 서버와 통신하기위해 TCP 소켓 연결을 한다. 연결은 3-way-handshake라는 과정으로 이루어 진다.
이 과정은 마치 전화를 거는 것과 유사하다. 서버에게 전화를 걸고, 서버는 해당 전화를 확인하고 전화를 받습니다. 그리고 전화를 건 사람은 말합니다. "여보세요"라고 하는 것처럼요.
7. HTTP(HTTPS)프로토콜로 요청, 응답
연결이 되고나면 www.naver.com 페이지를 달라고 서버에 요청한다.
서버는 요청을 받고 수락할수 있는지 검사한후 응답을 브라우저에 전달한다.
8.브라우저에서 응답을 해석
서버에서 응답한 해석은 HTML,CSS,Javascript등을 포함하고 있다. 이를 브라우저에서 해석하여 원하는 URL이 그려진다.