해당 내용은 그림으로 배우는 Http&Network Basic 책내용을 정리한것 입니다.
1. 웹은 HTTP로 나타낸다.
브라우저 주소입력 란에 URL(www.google.com)을 입력하면 웹페이지를 볼수 있다. 이는 브라우저가 지정된 URL의 웹서버로 부터 리소스를 얻고 있는 것이다. 이때 주소를 입력하여 요청하는 쪽을 클라이언트 라고 한다.
이러한 클라이언트 에서 서버까지의 일련의 흐름을 결정하는 것이 바로 웹에서 HTTP 라고 불리는 프로토콜 이다. 프로토콜은 '약속' 이다. 즉 웹은 HTTP라는 약속을 기반으로한 통신으로 이루어져있다.
2. HTTP는 이렇게 태어났고 성장했다.
- CREN(유럽 입자 물리학 연구소) 팀에서 지식공유 목적으로 시스템고안
- 문서 기술 언어 HTML, 문서 전송 프로토콜 HTTP, 문서 주소지정 방법 URL
- 95년 마이크로소프트 사의 익스플로러 1.0과 2.0 출시
- 96년 HTTP/1.0 으로 RFC1945 발행
- 97년 1월 HTTP/1.1 출시 현재 가장많이 사용되는 버전 출시 당시 RFC2068, 현재는 개정판인 RFC2616이 최신버전이다.
3. 네트워크의 기본은 TCP/IP
3.1 TCP/IP는 프로토콜의 집합
- 컴퓨터와 네트워크 기기가 통신을 하기 위해서는 서로같은 방법으로 통신을 해야한다. 이렇게 서로 다른 하드웨어와 운영체제 등을 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요하게 되는데 이러한 규칙을 프로토콜 이라고 한다.
- 프로토콜에는 여러가지가 있지만 인터넷과 관련된 프로토콜들을 모아둔 집합체를 TCP/IP 라고 부른다. (DNS, TCP, HTTP, IP, FTP 등등...)
3.2 계층으로 관리하는 TCP/IP
- TCP/IP는 '애플리케이션 계층', '트랜스포트 계층', '네트워크 계층', '링크 계층' 이렇게 4계층 으로 나누어져 있다. 계층화 되어 있는 이유는 프로토콜 사양이 변경되었을 때 전체를 바꾸지 않고 해당 계층만 수정하면 된다는 장점이 있다. 또한 네트워크 설계시 자기 자신이 담당하는 부분만 고려하면 된다는 장점도 있다. 각 계층의 내부는 자유롭게 설계가 가능하다.
- 애플리케이션 계층
- 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정
- TCP/IP 에는 여러가지 공통 애플리케이션이 존재한다.(FTP, DNS)
- HTTP 또한 이 계층에 포함된다.
- 트랜스포트 계층
- 애플리케이션 계층에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공 한다.
- 서로 다른 성질을 가진 TCP 와 UDP 두 가지 프로콜이 있다.
- 네트워크 계층(혹은 인터넷 계층)
- 네트워크 상에서 패킷의 이동을 다룬다.
- 패킷이란 전송하는 데이터의 최소단위이다.
- 어떠한 경로를 거쳐 상대의 컴퓨터까지 패킷을 보낼지 결정
- 인터넷의 경우 상대 컴퓨터에 패킷이 도달하기 까지 여러대의 컴퓨터와 네트워크를 거쳐서 전달되는데, 이러한 여러 선택지중 하나의 길을 결정하는 것이 네트워크 계층의 역할이다.
- 링크 계층(혹은 데이터링크 계층, 네트워크 인터페이스 계층)
- 네트워크에 접속하는 하드웨어를 다룬다.
- 운영체제가 하드웨어를 제어하기 때문에 드라이버, 케이블등 물리적인 부분을 포함한 하드웨어적 측면은 모두 링크계층의 역할이다.
3.3 TCP/IP 통신의 흐름
- TCP/IP 통신을 할때는 계층을 순서대로 거쳐 상대와 통신한다.
- 송신(클라이언트) 측은 애플리케이션 계층부터 내려가고 수신(웹서버) 측은 애플리케이션 계층으로 올라간다.
- HTTP 의 순서는 송신측 클라이언트가 애플리케이션 계층에서 HTTP 리퀘스트를 지시하여 트랜스포트 계층에 전달한다.
- 그 다음 트랜스포트 계층(TCP) 에서는 전달받은 HTTP 메세지를 통신하기 쉽게 패킷단위로 조각내어 안내번호와 포트번호를 붙여 네트워크 계층에 전달한다.
- 그럼 네트워크 계층(IP) 에서는 수신지 MAC 주소를 추가하여 링크계층에 전달하면 네트워크를 통해 송신할 준비가 완료된다.
- 수신측 서버는 링크계층 에서 데이터를 받아들여 순서대로 위의 계층에 전달하여 애플리케이션 계층까지 도달한다.
- 애플리케이션 계층에 도달하게 되면 클라이언트가 발신했던 HTTP 요청 내용을 수신할수 있게 된다.
- 이 때 송신측에서는 각 계층을 거칠때 반드시 해당 계층마다 필요한 정보를 헤더에 추가한다.
- 반대로 수신측 에서는 각 계층을 거칠때 마다 반드시 사용된 헤더를 삭제한다.
- 이렇게 정보를 감싸는 것을 캡슐화라고 한다.
4. HTTP와 관계가 깊은 프로토콜은 IP/TCP/DNS
4.1 배송을 담당하는 IP
- IP(Internet Protocol)는 네트워크 계층에 해당된다.
- IP의 역할은 개개의 패킷을 상대방에게 전달하는것
- 패킷은 전달할때 대표되는 요소는 IP주소 와 MAC(Media Access Control Address) 주소이다.
- IP 주소는 각 노드에 부여된 주소를 가르키고, MAC 주소는 각 네트워크 카드에 할당된 고유의 주소이다.
- IP 주소와 MAC 주소는 연관성이 있다.
- IP 주소는 변경가능하지만, MAC 주소는 변경할수 없다.
- IP 통신은 MAC 주소에 의존하여 통신한다. 인터넷 통신상대가 같은 랜선내에 있는 경우는 드물다
- 보통의 경우에는 여러대의 컴퓨터와 네트워크 기기를 중계하여 상대방에게 도착한다.
- 중계하는 동안 다음으로 중계할곳의 MAC 주소를 사용하여 목적지를 찾아가는데, 이때 ARP(Address Resolution Protocal) 이라는 프로토콜이 사용된다.
- ARP는 주소를 해결하기 위한 프로토콜중 하나로 수신지의 IP 주소를 바탕으로 MAC 주소를 추측할수 있다.
- 목적지 까지 중계하는 도중에 컴퓨터와 라우터등 네트워크 기기는 대략적인 목적지만 알고있다.
- 예를 들면, A허브로 택배를 운송하는 운송기사가 택배 각각의 최종 목적지를 알필요가 없는 느낌이다.
4.2 신뢰성을 담당하는 TCP
- TPC(Transfer Control Protocol) 는 트랜스포트 계층에 해당된다.
- 특징으로는 신뢰성있는 바이트 스트림 서비스를 제공한다.
- 바이트 스트림 서비스란 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트 라는 단위의 패킷으로 작게 분해하여 관리하는 것을 말한다.
- 신뢰성 있는 서비스란 상대방에게 보내는 서비스를 의미한다.
- TCP는 대용량의 데이터를 보내기 쉽게 작에 분해하여 상대방에게 보내고, 동시에 정확하게 도착했는지 확인하는 역할을 담당하고 있다.
- 상대방에게 확실하게 데이터를 보내기 위해서 쓰리웨이 핸드셰이킹(three way handshaking) 방법을 사용한다.
- 쓰리웨이 핸드셰이킹 이란 패킷을 보내고 바로 끝내는것이 아니라 확실하게 보내졌는지의 여부를 상대방에게 확인하러 가는 방식이다. 이것은 'SYN' 그리고 'ACK' 라는 TCP 플래그를 사용한다.
- 송신측 에서는 'SYN' 플래그로 상대에게 접속함과 동시에 패킷을 전송합니다.
- 수신측 에서는 'SYN/ACK' 플래그로 송신측에 접속함과 동시에 패킷을 수신하였다는 플래그를 전송합니다.
- 마지막으로 송신측이 'ACK' 플래그를 전송하여 패킷 교환이 완료됨을 인지합니다.
- 이 과정에서 통신이 도중에 끊어지면 TCP는 끊어짐과 동시에 같은 수순으로 패킷을 재전송 합니다.
- TCP 는 쓰리웨이 핸드셰이킹 이외에도 통신의 신뢰성을 보증하기 위하여 다양한 시스템을 갖추고 있습니다.
4.3 이름 해결을 담당하는 DNS
- DNS(Domain Name Service) 는 HTTP와 같이 애플리케이션 계층으로 도메인 이름과 IP 주소 이름 확인을 제공합니다.
- 사용자에게 친숙한 영어나 숫자로 도메인명을 입력하면, 이에 매치되는 IP 주소를 조사하는 서비스를 제공하고 있습니다.
4.4 각각과 HTTP와의 관계
5. URI와 URL
- URI 와 URL은 다르지만 URL이 URI의 서브셋이다.
- URI의 스키마는 30여개 정도이고 그중 하나가 http://... 형식인 URL 이다.
- 예를들면 https://www.google.com 이 바로 URL 이다.
- URL 의 모든 옵션을 알아보자 https://user:pass@www.google.com:80/index.html?uid=1#ch1
- 스키마(https:) : 리소스를 얻기위해 사용하는 프로토콜을 지시 대소문자는 무시되고 : 콜론이 붙는다. "data:", "javascript:" 같이 프로그램을 지정할수도 있다.
- 자격정보(user:pass) : 서버로부터 리소스를 취득하기위해 자격정보가 필요하다. 유저명과 패스워드를 지정할수 있다. (optional)
- 서버주소(www.google.com) : 주소는 도메인이름 이나 IPv4, IPv6 주소를 사용할수 있다.
- 서버포트 (80) : 서버의 접속 대상이되는 네트워크 포트를 지정합니다. 생략하면 디폴트 포트가 사용됩니다 (optional)
- 계층적 파일 패스 (index.html) : 특정 리소스를 식별하기 위해서 서버상의 파일 경로를 지정합니다.
- 쿼리문자열 (?uid=1) : 파일경로 지정된 리소스에 임의의 파라미터를 전달하기 위해 쿼리문자열을 사용합니다 (optional)
- 프래그멘트 식별자 (#ch1) : 주로 취득한 리소스에서 서브 리소스를 가리키기 위해서 사용됩니다. (optional)