본 게시물은 김영한님의 HTTP 웹 기본 지식 강의를 듣고 정리, 요약한 것입니다. 더 자세히 알고 싶으시면 아래의 링크의 강의를 추천드립니다.
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC#
들어가며
모든 것이 HTTP 기반 위에서 동작 : 우리가 사용하는 거의 모든 서비스들이 HTTP 기반하에 사용되고 있음
개발자는 평생 HTTP 기반위에서 개발해야한다.
언젠가 한번은 HTTP 정리를 해야한다.
위와 같은 이유로 영한님의 강의를 듣고 스스로 정리를 해보고자 합니다.
인터넷 네트워크
목차
- 인터넷 통신
- IP (Internet Protocol)
- TCP, UDP
- PORT
- DNS
인터넷 통신
인터넷에서 서버와 클라이언트 or 두개의 컴퓨터는 서로 어떻게 통신을 수행할 수 있을까 ?
--> 인터넷은 해저 케이블, 위성, 근거리, 원거리 등의 다양한 네트워크들이 연결되서 구성되어 있다.
IP (Internet Protocol)
복잡하게 구성되어 있는 네트워크에서 서로의 목적지를 찾는 방법은 무엇일까 ?
--> 서로의 IP Address를 활용한다. ( ex) 100.100.1.1 -> 200.200.1.1 )
이를 위해서 인터넷 프로토콜은 다음과 같은 역활을 수행한다.
- 지정한 IP 주소에 데이터 전달
- 패킷이라는 통신 단위로 데이터 전달
--> 즉 지정한 주소로 패킷을 보냄으로서 서로 통신을 할 수 있는 것이다.
그렇다면 이러한 패킷에는 어떤 정보가 들어있을까 ?
우선 IP 측면에서만 바라보면 "출발지 IP, 목적지 IP, 기타 + 전송하고자 하는 데이터"로 구성되어있다.
이렇게 구성된 패킷을 인터넷에 전송하게 되면 다양한 노드를 탐색하면서 목적지로 도달할 수 있게 된다. 사실 이런 기능을 수행하기 위해서는 다양한 계층을 거치면서 가게되는데 IP 측면에서만 보면 목적지를 적어서 데이터를 보내면 여러 프로토콜을 통해서 통신을 할 수 있게 되는 것이다.
그래서 인터넷 프로토콜만을 사용하면 한계를 가진다.
IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송됨
- 비신뢰성
- 중간에 패킷이 사라질 수도 패킷의 순서가 섞일 수도 있다.
- 프로그램의 구분
- 같은 IP를 사용하는 서버에서 통신하는 어플리케이션을 서로 구별할 수 없다.
이러한 문제를 보완하기 위해서 TCP/UDP 프로토콜을 사용하게 된다.
TCP, UDP
인터넷 프로토콜 스택의 4계층
- 어플리케이션 계층 : HTTP, FTP
- 전송 계층 : TCP, UDP
- 인터넷 계층 : IP
- 네트워크 인터페이스 계층 : 물리적(랜카드, 랜드라이버 등등)
이런 4계층을 거치면 아래와 같이 데이터가 감싸진다.
Ethernet Frame + IP + TCP + HTTP + DATA
이떄 그렇다면 TCP에서는 어떤 정보가 들어갈까 ?
--> 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등등이 들어간다.
이를 통해서 이전의 문제를 보완할 수 있다.
따라서 TCP는 아래와 같은 특징을 가진다.
TCP : Transmission Control Protocol
- 연결 지향 : TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 순서 보장
- 신뢰할 수 있는 프로토콜
- 대부분의 시스템이 TCP를 사용
3 way handshake : 이는 가상 연결이다. ( 개념적으로 연결 )
- (1) 클라이언트가 SYN 메시지를 전송
- (2) 서버가 SYN + ACK 메시지 전송
- (3) 클라이언트가 ACK 메시지 전송
--> 서로 통신이 되고 있는지 확인한 후에 통신을 시작한다.
데이터 전달 보증
데이터를 전송하면 데이터를 받았음을 확인해 준다.
순서 보장
(1) -> (2) -> (3) 으로 보냈는데 (1) -> (3) -> (2)으로 받았다면 (2) 부터 다시 보낼 것을 요청한다. ( 서버의 내부구조, 최적화 방법에 따라서 다름 but 기본적으로 다시보내는 것을 기본으로 한다. )
이를 통해서 순서가 보증이 가능하다. 이는 전송 제어, 순서, 검증 정보들을 토대로 진행할 수 있다.
UDP
UDP : User Datagram Protocol
UDP 특징
- 하얀 도화지에 비유할 수 있다. (기본 기능이 거의 없음)
- 연결을 지향하지 않는다.
- 데이터 전달 보증을 하지 않는다.
- 순서를 보장하지 않는다.
- 하지만 빠르다는 장점이 있다.
즉 IP에서 PORT num + CHECK SUM 만 추가된 것과 유사하다. 따라서 어플리케이션에서의 추가 작업이 필요하다.
최근에는 UDP가 유연하기 때문에 많이 사용되고 있다.
PORT
한 컴퓨터(클라이언트 or 서버)가 여러 프로그램을 사용중에 있고 여러 (서버 or 클라이언트)와 통신을 진행해야 한다면 어떤 프로그램이 어떤 통신을 요청하는지 구별하기 힘들다.
따라서 PORT NUMBER라는 프로그램을 알려주는 특정 숫자를 알려주게 된다.
즉 IP는 목적지 서버를 찾는 것이고, 목적지에서의 프로그램을 찾는 것이 PORT NUM라고 할 수 있다.
ex) 111.111.111.1 : 8080 -> 222.222.222.1 : 11220
--> 주소 111.111.111.1 프로그램 8080가 주소 222.222.222.1 프로그램 11220로 보낸다.
Port num
- 0 ~ 65535 : 할당 가능
- 0 ~ 1023 : 잘 알려진 포트로 충돌 가능성이 있기 때문에 사용하지 않는 것이 좋음
- ftp : 20, 21
- telnet : 23
- http : 80
- https : 443
DNS
IP Address는 . 으로 구분된 숫자로 이루어져 있고, IP는 계속해서 변경될 가능성이 있다.
따라서 IP 자체를 기억하고 통신을 하는 것에는 어려움이 있다.
그래서 사용하는 것이 DNS (Domain Name System)을 사용한다. 이는 도메인 명을 IP주소로 변환하는 것이다. 다음과 같은 과정을 살펴보자.
- (1) 도메인 명 입력 (ex) naver.com )
- (2) DNS 서버로 IP Address 요청
- (3) 111.222.111.1로 응답을 받음
- (4) 원하는 서버로 접속 가능
'💻Computer Science > 📓네트워크 (Network)' 카테고리의 다른 글
[네트워크][HTTP] 2. URI와 웹 브라우저 요청 흐름 (0) | 2021.06.03 |
---|