[HTTP] 1. 인터넷 네트워크
모든 개발자를 위한 HTTP 웹 기본 지식 (김영한) 강의 수강 후 정리한 자료입니다.
❗인터넷은 어떤 방식으로 통신할까?❗
✨ IP (인터넷 프로토콜)
정의
- 지정한 IP 주소를 전달할 수 있도록 정해 놓은 규칙
- IP 주소에 데이터를 전달한다.
- IP 패킷 규칙을 사용
-> 출발지 IP, 목적지 IP, 데이터 등을 포함 패킷
통신 단위로 전달
cf) 패킷이란?
-> 패키지 + 버킷의 합성어로, 데이터가 들어 있는 박스라고 생각하면 쉽다
IP 프로토콜의 한계
- 비연결설
- 비신뢰성
- 프로그램 구분의 모호성
# 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
-> 상대방의 PC가 꺼져 있는 경우 등에도 전달
# 비신뢰성
- 중간에 패킷이 손실되는 경우
-> 노드를 통해 전달되므로 소실 가능성 존재 - 패킷이 순서대로 오지 않는 경우
-> 용량이 큰 경우 1500 바이트 단위로 끊어서 보내므로 순서대로 오지 않을 수 있다
# 프로그램 구분의 모호성
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상인 경우
ex) 하나의 PC에서 노래도 듣고 게임도 하며 둘 이상의 프로그램에서 요청을 보내는 경우
이를 “TCP 프로토콜”을 통해 해결할 수 있다.
TCP/UDP를 이해하기 위해서는 인터넷 프로토콜 4계층을 알아야 한다.
✨ 인터넷 프로토콜 4계층
세부적인 전달 과정
- 프로그램에서 메시지 생성
- 애플리케이션 계층 내부의 socket 라이브러리를 통해 메시지 전달
- OS 계층 내부의 TCP에서 메시지 데이터를 포함한 TCP 정보 생성
- OS 계층 내부의 IP에서 TCP 데이터를 포함한 IP 패킷 생성
✨ TCP/UDP
- IP 프로토콜의 한계를 극복하기 위해 TCP/UDP로 감싸준다.
-> PORT, 전송 제어, 순서 등의 정보를 담고 있다.
TCP
: 전송 제어 프로토콜 (Transmisson Control Protocol)
특징
- 연결 지향 - TCP 3 way handshake (가상 연결)
-> 연결 후 메시지를 보냄 - 데이터 전달 보증
-> 누락 확인이 가능 - 순서 보장
- 이러한 특징으로 인해, TCP는 신뢰할 수 있는 프로토콜이라고도 불리며, 대부분의 애플리케이션에서 TCP를 사용하고 있다.
TCP 3 handshake
- 데이터 전달 보증을 위해 서버-클라이언트 간 세 번의 통신을 보낸다.
- 클라이언트 -> 서버 (SYN)
- 서버 -> 클라이언트 : SYN + ACK
- 클라이언트 -> 서버 : ACK
-> SYN: 접속 요청, ACK: 요청 수락 - 데이터 전송
- 요즘은 최적화되어 3번 과정과 동시에 데이터 전송도 가능하다
- 개념적으로 연결된 것일 뿐, 물리적인 연결이 아니라는 사실을 알아두자!
순서 보장의 경우 다음과 같은 과정을 거친다.
- 여러 개의 패킷 전송
- 순서가 잘못된 경우 서버에서 클라이언트로 재요청
UDP
: User Datagram Protocol
- TCP와 같은 계층에 존재
- TCP의 세 가지 특징 모두 지원 X (TCP 3 way handshake, 데이터 전달 보증, 순서 보장)
- 단순하고 빠름
- IP에서 port + 메시지 확인 여부 기능만 추가된 프로토콜이라고 생각하면 된다.
왜 쓰는가? 이러한 의문이 들 수도 있다.
그러나 최대의 장점은 단순하고 빠르다는 것. 요즘은 백지 상태의 UDP에서 필요 없는 부분을 추가하지 않은 채 커스텀하여 많이 사용되는 추세이다. (최적화와 관련)
✨ PORT
정의
: 논리적인 접속 장소
- 여러 애플리케이션에서 요청을 보낼 때 구분하기 위해 사용한다.
- IP가 목적지를 찾는 용도로 사용된다면, PORT는 하나의 서버 안 여러 개의 애플리케이션을 구분하는 데 사용된다.
대표적인 포트 번호
- FTP : 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
✨ DNS
정의
: Domain Name System
- 우리가 흔히 볼 수 있는 “인터넷 링크”가 바로 도메인 이름이다.
- 그렇다면 Domain Name System이란? 도메인명과 IP를 저장하는 일종의
전화번호부
- DNS가 없다면 많은 IP 번호를 외워야 할 것이다. 뿐만 아니라, IP가 변경된다면 접근이 불가능하다는 단점이 있다.
-> 이를 해결하기 위해DNS
사용
사용
- DNS는 도메인명을 IP 주소로 변환해준다.
- DNS 서버에 도메인을 등록해두고 요청 시 IP 주소를 반환하는 방식으로 진행된다.
ex) 도메인명 : google.com, IP: 200.200.200.2
과정
- 클라이언트에서 DNS 서버에 도메인으로 요청
- DNS 서버 -> 클라이언트로 도메인을 IP로 전환하여 응답
- 클라이언트 -> 서버로 IP를 통해 접근