HTTP 기본
웹은 HTTP 기반으로 만들어졌다ㅎ
아니 모든 애플리케이션은 HTTP 기반이다.
(*OSI 7 계층에서 Application계층(7계층) 은 HTTP 프로토콜을 쓴다)
그래서 HTTP 기술을 사용하는 개발자는 거의 대부분의 개발자들,
모바일 앱, 웹 프론트엔드, 백엔드 개발자들이고 이들은 HTTP 에 대한 지식을 이해할 필요가 있다.
HTTP 에 대해 자세히 알기 전에 인터넷 네트워크를 탐색해보자!
인터넷 네트워크는
- 인터넷 통신
- IP(Internet Protocol)
- TCP, UDP
- PORT
- DNS
가 있다.
하나씩 알아보자!
1. 인터넷 통신
컴퓨터는 인터넷으로 연결되는데 인터넷에는 노드(일종의 서버)라는 지점들의 연결망으로 이뤄져있다.
따라서 Client(클라이언트) 와 Server(서버)는 노드로 연결된 망을 타고 정보를 주고 받는다.
2. IP(Internet Protocol, 인터넷 프로토콜)
- 예를 들면 IP : 100.100.100.1 이런식으로 구성되어 있다.
- 지정한 IP주소(IP Address)에 데이터를 전달한다.
- Packet(패킷)이라는 통신단위로 데이터를 전달한다: 한마디로 IP 패킷이 전송데이터를 감싸는 형태
- IP 패킷 == 출발지의 IP + 목적지 IP + 기타 ~ + 데이터
순서를 보자.
이제 Client 컴퓨터에서 Server로 정보를 전달할때,
출발지 IP(본인의 IP)와 목적지 IP(서버 IP)를 패킷으로 감싼 전송데이터 3가지 정보를 가지고 전달한다.
노드로 된 경로를 타고 서버에 도착한다.
< IP 프로토콜의 한계 >
- 비연결성(Connectionless): 패킷을 받을 대상이 없거나 서비스 불능 상태(ex. pc가 꺼져있는 상태 등)이어도 패킷을 전송한다.
- 비신뢰성(Unreliable) : 중간에 패킷이 사라지거나?, 패킷이 순서대로 안온다면?
- 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면? (ex. 게임서버, 유튜브서버, 음악사이트서버 등 동시에 여러개를 쓴다면?)
예를 들면,
보통, IP주소가 1500byte정도 되면 정보를 끊어서 보낸다 -> 서로 다른 노드를 탈 수 있다 -> 패킷 전달 순서에 문제가 발생한다.
그래서 우리는 TCP(Transmission Control Protocol) or UDP(User Datagram Protocol)를 쓴다
cf. <OSI 7계층 : OSI 7 Layer>
* OSI : Open Systems Interconnection의 약자, 개방형 시스템
서로 이질적인 네트워크 간의 연결에 어려움이 많아 호환성의 결여를 막기 위한 것으로
ISO(국제 표준화 기구)에서는 OSI 참조 모델을 제시.
- 응용 계층 - HTTP, FTP, NFS, 텔넷, SMTP, SNMP
- 표현 계층 - XDR, SMB, AFP
- 세션 계층 - TLS, SSL
- 전송 계층 - TCP, UDP, RTP
- 네트워크 계층 - IP, ICMP, IGMP, ARP, DDP
- 데이터 링크 계층 - 이더넷, 토큰링, 무선랜, ATM
- 물리 계층 - 전선, 전파, 광섬유, 리피터, 모뎀
계층을 나눈 이유
ⓐ 통신이 일어나는 과정을 단계별로 알 수 있고
ⓑ 오류가 났을때 유지보수 파악이 쉽다.
계층이란?
상하구조관계를 가진다. 하위계층이 완벽하게 작동되어야 상위계층이 작동한다.
<인터넷 프로토콜 스택의 4계층: Internet Protocol Stack 4 Layer, TCP/IP Protocol Suit>
- 애플리케이션 계층 - HTTP, FTP, DNS, SSH
- 전송계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층 - 이더넷, Wi-Fi
- 각 계층의 할일들(애플리케이션, OS, 네트워크)
- Application 계층 : Hello, World!라는 메세지를 생성해서 SOCKET 라이브러리를 통해 OS계층으로 전달한다.
- OS 계층 : TCP와 UDP를 가지고 있는데 먼저 SOCKET 라이브러리에 TCP정보를 묶어서 생성한다(메세지 데이터를 포함) 그리고 IP패킷을 생성한다(TCP 데이터, 메세지 데이터 포함)
(바깥)
IP패킷
TCP 데이터
메세지 데이터
(안)
- 네트워크 인터페이스 : LAN드라이버와 LAN장비, 그리고 인터넷을 통해 서버로 연결되는 통로인 LAN 카드가 있다.
- HTTP메세지를 감싼 패킷들의 형태
============ Ethernet Frame ==========
------------------------ IP패킷 -----------------------
++++++++++++ TCP 데이터 ++++++++++++
메세지 데이터
+++++++++++++++++++++++++++++++++
--------------------------------------------------------
=================================
< IP 패킷 VS TCP / IP 패킷 >
- IP 패킷 정보 : 출발지 IP, 목적지 IP, 전송데이터, 기타
- TCP/IP 패킷 정보 : 출발지 IP, 목적지 IP, 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보, 전송데이터, 기타(TCP관련 정보가 들어간다)
* Transport 계층의 패킷 : Segment
3-1. TCP (Transmission Control Protocol, 전송제어 프로토콜)
특징
- 연결지향 : TCP 3 way handshake(가상연결)
- 데이터 전달 보증
- 순서보장
- 신뢰할 수 있는 프로토콜
- 데이터의 흐름 제어와 혼잡제어를 수행한다.
- 패킷의 추적 및 관리를 담당
- HTTP 1.x , HTTP 2.x 는 TCP를 주로 사용한다.
- network congestion avoidance algorithm 을 사용한다.
* 흐름제어: 송신 측과 수신 측의 데이터 속도차이를 해결하기 위한 기법
* 혼잡제어 : 송신 측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
< TCP 3 way handshake(가상연결) >
4단계로 이뤄지는 연결
* SYN : 접속요청
* ACK : 요청수락
1. SYN (Client → Server)
2. SYN + ACK (Client ← Server)
3. ACK (Client → Server)
4. 데이터 전송
3-2. UDP (User Datagram Protocol : 사용자 데이터 프로토콜)
특징
- 기능이 거의 없는 흰도화지라 생각하면 된다.
- 비연결형 프로토콜
- IP와 비슷하고 PORT(하나의 IP 에 여러가지 패킷을 구분해주는 기능을 가짐, 시작port와 도착port를 가진다) 와 체크섬(오류검출), 3가지를 가진다.
- 애플리케이션에서 추가 작업이 필요하다.
- 연결지향 - TCP 3 way handshake X
- 데이터 전달 및 순서가 보장되지 않지만 단순하고 빠르다.
- 매번 트렌드마다 쓰는게 다른데, HTTP3는 UDP를 사용한다.
- 최근의 스트리밍 서비스, 온라인 게임의 경우 UDP를 사용한다.
- 빠르고 multiplexing 정보와 demultiplexing 정보가 있다.
TCP는 전송속도가 느리고 최적화가 불가능해서 UDP로 뭔가를 만들어 사용한다.
4. PORT
한번에 둘 이상의 서버를 연결해야한다면?
- 애플리케이션 구분의 용도로 쓴다.
- 0 ~ 65535 할당가능
- 0 ~ 1023 : 잘 알려진 포트로 사용하지 않는 것이 좋다.
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
5. DNS (Domain Name System, 도메인 네임 시스템)
- IP는 기억하기가 어렵고ㅎ 변경이 가능하다.
- 도메인은 네트워크상에서 컴퓨터를 식별하는 호스트, 웹주소를 말한다.
- Application Layer Protocol이다. Transport Layer Protocol을 하나를 사용해야되는데(TCP와 UDP 중) DNS request는 UDP Segment에 꼭 들어갈 정도로 작다.
- 그래서 DNS라는 도메인 네임 시스템을 만듬!
- 쉽게 말해 전화번호부라 생각하기
- 순서
Client가 DNS 서버(Server)에 접속, 도메인명(Domain Name)으로 IP(주소)를 찾고, 이를 응답하면 IP로 접속한다.
REFERENCE
- 인프런, 모든 개발자를 위한 HTTP 지식
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=neoul0&logNo=120011890773
- https://snyung.com/content/2020-08-31--%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EC%B4%88-osi-7-%EA%B3%84%EC%B8%B5%EA%B3%BC-tcp-ip-%EA%B3%84%EC%B8%B5/
- http://wiki.hash.kr/index.php/DNS
- https://gyoogle.dev/blog/computer-science/network/%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%20&%20%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4.html
'Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] DNS Round Robin Algorithm (0) | 2022.03.10 |
---|---|
[네트워크] 하드웨어 환경, Server?, 서버 프로그램 구현은 어떻게 설계하는게 좋을까? (0) | 2022.03.04 |
[네트워크]HTTP is Everywhere! and Feature 1탄 (0) | 2022.03.03 |
[네트워크] URI와 웹브라우저 요청 흐름 (0) | 2022.03.03 |
[네트워크 정리 01] REST 알기 (0) | 2022.02.05 |