[그림으로 배우는 H&N CH.1]
1. HTTP
- 클라이언트 : 서버에 의뢰를 하는 웹 브라우저
- HTTP: 웹의 흐름을 이루고 있는 프로토콜(약속, 규칙)
- HTTP가 만들어진 배경을 자세하게 설명하고 있는데 경쟁을 많이 했구나~ 어느 정도 이후로는 http가 버전 업그레이드가 안되고 있구나~ 정도로만 이해하고 넘어갔음
- HTTP 는 TCP/IP 중 하나
2. TCP/IP
- TCP/IP : 프로토콜 중 인터넷과 관련된 프로토콜, IP 프로토콜을 사용한 통신에서 사용되고 있는 프로토콜을 총칭해서 TCP/IP라고 함
- 프로토콜 : 서로 다른 하드웨어와 운영체제 등을 가지고 통신을 하기 위해 필요한 규칙
2.1 계층
- TCP/IP 의 계층
- 애플리케이션 계층 : 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임 결정 (ex. FTP, DNS, HTTP)
- 트랜스포트 계층 : 두 컴퓨터 사이의 데이터 흐름을 제공 (ex. TCP, UDP)
- 네트워크 계층 : 네트워크 상에서 패킷이 이동하는 경로를 결정
- 링크 계층 : 네트워크에 접속하는 하드웨어적인 면 ( ex. 디바이스 드라이버, 네트워크 인터페이스 카드, 케이블, ...)
- 계층화의 장점
- 사양이 변경된 해당 계층만 변경 가능
- 설계가 편함
2.2 TCP/IP 통신의 흐름
- 통신을 할 때 송신하는 측은 애플리케이션 계층부터 내려간다. 수신하는 측은 애플리케이션 계층으로 올라간다.
- TCP 헤더에는 안내 번호와 포트 번호가 들어간다.
- IP 헤더에는 수신지 MAC(media access control address) 주소가 들어간다.
- 각 계층마다 해당 계층에 필요한 정보를 추가하고 수신측에서는 각 계층을 거칠 때마다 사용한 헤더를 삭제한다.
- 캡슐화 : 정보를 감싸는 것
3. HTTP와 관계가 깊은 프로토콜
3.1 IP
- IP : 네트워크 층에 해당하며 인터넷을 활용하는 대부분의 시스템이 이용하는 프로토콜
- IP의 역할 : 패킷들을 상대에 전달
- 전달하기 위해 필요한 요소 : ip 주소, Mac 주소
- ip 주소 : 각 노드에 부여된 주소, 변경 가능하다.
- Mac 주소 : 네트워크 카드에 할당된 고유의 주소, 변경 불가능하다.
- ip 주소와 Mac 주소는 결부되어있다.
IP와 IP 주소는 다른 것임. 혼동하지 말 것!
- IP통신은 Mac 주소를 통해 통신하는데 ARP라는 프토토콜을 이용하여 수신지의 IP 주소를 바탕으로 MAC 주소를 조사할 수 있다.
- 송신하는 측에서 수신하는 측으로 데이터를 전송할 때 라우터를 지나는데 라우터는 데이터의 내용은 알지 못하고 목적지만 알 수 있다.
3.2 TCP
- TCP : 트랜스포트 층에 해당하며 대용량의 데이터를 tcp 세그먼트로 작게 분해하여 상대에게 보내고 정확하게 도착했는지 확인하는 역할을 담당하는 프로토콜
- three way handshaking : 확실하게 데이터가 도착했는지 확인하는 방법
-
송신 측에서 'SYN'플래그로 패킷을 보냄
-
수신 측에서 'SYN/ACK' 플래그로 패킷을 수신했다고 알려줌
-
송신 측에서 'ACK' 플래그를 보내 패킷 교환이 완료되었다고 전함
** 중간에 이 과정에 오류가 생겨서 끊어지면 같은 수순으로 패킷 재전송
3.3 DNS
- DNS : 응용 계층 시스템에서 도메인 이름과 IP 주소 이름 확인 제공
- 도메인명에서 IP 주소를 조사 or IP 주소에서 도메인명을 조사하는 서비스 제공
4. URI & URL
4.1 URI
- URI : Uniform Resource Identifiers
- uniform : 여러 리소스들의 지정 방법을 통일시킴, 새로운 스키마(ex. http:, ftp, ...) 도입을 용이하게 함
- resource : 식별 가능한 모든 것 (ex. 도큐먼트 파일, 이미지, 서비스 등)
- identifiers : 리소스를 식별하기 위한 식별자
→ URI는 리소스를 식별하기 위한 문자열 전반
- URI 종류
- 완전 수식 절대 URI(URL) : 필요한 정보 전체를 지정
- 상대 URL : 기준 URI에서 상대적 위치를 지정
4.2 URL
- URL : 웹 브라우저 등으로 웹 페이지를 표시하기 위해 입력하는 주소 (ex. https://www.google.co.kr) = 리소스의 장소 → URL은 URI의 하위집합
- URL 포맷 (ex. http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1 )
- 스키마 ( http: , https:) : 리소스를 얻기 위해 사용하는 프로토콜 지시. 대소문자 무시, 끝에 콜론이 하나 붙음.
- 자격정보(크리덴셜) (user:pass) : 서버에서 리소스를 취득하기 위해 필요함. 유저명, 패스워드 지정 가능
- 서버주소 (www.example.jp) : 완전 수식 절대 URI에서는 필요함. DNS 이름, IPv4, IPv6주소 사용
- 서버포트 (80) : 서버의 접속 대상이 되는 네트워크 포트 번호 지정. 생략하면 디폴트 포트 사용
- 계층적 파일 패스 (/dir/index.htm) : 특정 리소스에 해당하는 서버 상의 파일 패스
- 쿼리 문자열 (uid=1) : 리소스에 임의의 파라미터를 넘겨주기 위한 쿼리 문자열
- 프래그먼트 식별자 (ch1) : 서브 리소스(도큐먼트 중간에 위치)를 가리키기 위해 사용
cf) 서브 리소스 : 특정한 관계를 맺고 있는 리소스들 중 하나
ex. /users/tom/cars 라고 한다면 cars 는 서브 리소스 중 하나이다
- REST API에서 서브 리소스 표현 방법
- 서브 리소스의 관계를 명시하여 표현하는 방법
- HTTP Get /users/tom/likes/subjects