본 포스팅은 [인프런] 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 바탕으로 공부하고 정리한 글입니다.
인터넷에서 컴퓨터 둘은 어떻게 통신하는 것인지 알아보자.
IP (인터넷 프로토콜)
컴퓨터는 IP 주소를 부여 받아 인터넷 망을 통해 데이터를 주고 받게 된다.
역할
- 지정한 IP 주소(IP Address)에 데이터를 전달한다.
- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.
- 출발지IP, 목적지IP, 전송데이터 등의 정보를 담아 패킷을 만들어 인터넷 망에 전달한다.
- 클라이언트 패킷, 서버 패킷을 서로 전달하며 데이터를 주고 받는다.
한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 클라이언트는 대상 서버가 패킷을 받을 수 있는 상태인지 모른다.
- 비신뢰성
- 중간에 패킷이 사라질 수 있음
- 패킷이 의도한 순서대로 안올 수 있음
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상일 경우 문제 발생 (인터넷 게임 하면서 음악도 듣고 할 경우)
TCP, UDP 프로토콜
앞서 설명한 IP 프로토콜은 패킷 소실, 패킷 순서 문제 등 다양한 문제점을 가진다.
이러한 문제점을 TCP가 해결해준다.
인터넷 프로토콜 스택의 4계층
- 어플리케이션 계층 : HTTP, FTP
- 전송 계층 : TCP, UDP
- 인터넷 계층 : IP
- 네트워크 인터페이스 계층
채팅 프로그램을 통해 Hello라는 메세지를 전송하고자 하는 경우
- SOCKET 라이브러리를 통해 os계층에 메세지를 전달한다.
- os계층에서 TCP는 메세지에 TCP 정보를 씌운다.
- TCP 밑 IP계층에서 TCP 정보 위에 IP 정보를 씌워 IP 패킷을 생성한다.
- 실제 네트워크 인터페이스인 LAN 카드를 통해서 인터넷 망으로 나갈때 Ethernet frame을 포함해서 나가게 된다.
💡 TCP/IP 패킷 정보
- TCP 정보 : 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등
- IP 정보 : 출발지 IP, 목적지 IP 등
패킷이란
패키지 + 버킷, 말 그대로 택배 박스에 물건을 넣어 보내는 것이라 생각하면 된다.
TCP 특징
- 전송 제어 프로토콜(Transmission Control Protocol)이다.
- 연결 지향 - TCP 3 way handshake (가상연결)
- 연결이 되었나 확인 후 메세지를 전송한다.
- 데이터 전달 보증
- 데이터 전송 시 서버에서 데이터 받았다고 전송해준다.
- 전송했는데 서버에서 응답이 없는 경우 전달이 잘 안됐음을 확인할 수 있다.
- 순서 보장
- 중간에 잘못오면 서버가 클라이언트한테 2번부터 다시 보내라는 식으로 전송해준다.
- 신뢰할 수 있는 프로토콜이기 때문에 현재는 대부분의 어플리케이션에서 TCP 프로토콜을 사용한다.
TCP 3 way handshake
- 클라이언트가 연결 요청 SYN을 보내면,
- 서버는 요청 수락 ACK을 하면서 연결 요청 SYN을 보낸다.
- 클라이언트도 요청 수락 ACK를 보내면,
- 클라이언트와 서버의 연결이 완료된다.
- 연결이 확인 된 후에 데이터를 전송한다.
UDP 특징
- 사용자 데이터 프로토콜(User Datagram Protocol)이다.
- 기능이 거의 없다.
- 연결지향 X
- 데이터 전달 보증 X
- 순서보장 X
- IP와 거의 같지만, PORT + 체크섬이 추가되었다.
- 하나의 IP로 여러 어플리케이션(채팅, 게임 등) 실행하는 경우 여러 패킷이 들어오는데,
게임용 패킷과, 채팅용 패킷을 구분하기 위해 PORT를 사용한다.
- 하나의 IP로 여러 어플리케이션(채팅, 게임 등) 실행하는 경우 여러 패킷이 들어오는데,
- UDP는 전달 및 순서가 보장되지 않지만, 단순하고 빠르다는 장점이 있어 최근에 각광받고 있다.
PORT
- 같은 서버 안에서 실행되는 애플리케이션을 구분하는 것이 PORT이다.
- TCP/IP 패킷 정보 : 출발 IP + PORT와 도착 IP + PORT 정보가 담겨있다.
- IP(서버, 아파트)
- PORT(어플리케이션, 동호수)
- 0 ~65535 할당 가능
- 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋다.
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS(HTTP + 보안) - 443
DNS
IP는 기억하기 어렵고 변경될 수 있기 때문에 DNS를 사용한다.
- DNS란 도메인 네임 시스템(Domain Name System)이다.
- DNS 서버는 도메인 명을 IP 주소로 변환해준다.
- 클라이언트가 도메인 명(google.com)으로 요청하면 DNS 서버가 IP로 변환해주기 때문에
- IP 주소를 기억해야 되는 것과, IP 주소 변경의 문제를 해결할 수 있다.
정리
두개의 컴퓨터가 서로 복잡한 인터넷 망을 통해 메세지를 보내기 위해서는 IP 프로토콜이 있어야 한다.
IP 프로토콜만 가지고는 메세지가 잘 전달됐는지 확인도 어렵고, PORT라는 개념도 없으며, 전송 순서가 꼬일수 있는 등 한계점이 있기 때문에 TCP 프로토콜을 더해준다.
PORT는 같은 IP 내에서 동작하는 어플리케이션 중 통신을 원하는 어플리케이션을 구분하기 위해서 사용하며,
DNS는 IP가 변하기 쉽고 외우기 어렵기 때문에 도메인을 등록해 사용할 수 있도록 도와준다.
'💻 Computer Science > HTTP' 카테고리의 다른 글
[HTTP] 헤더1 - 일반 헤더 (0) | 2022.03.10 |
---|---|
[HTTP] HTTP 상태코드 (0) | 2022.03.08 |
[HTTP] HTTP 메소드 (1) | 2022.03.07 |
[HTTP] HTTP 기본 (0) | 2022.03.07 |
[HTTP] URI, 웹 브라우저 요청 흐름 (0) | 2022.03.04 |