loop-study 2021. 12. 8. 16:23

김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하면서 HTTP 내용을 정리한다.

자세한 정보가 궁금하면 수강을 추천드립니다.

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com


인터넷 통신

클라이언트가 hello world를 보내면 서버에서는 ok 응답을 보내준다.

이 과정을 통해, 인터넷은 어떻게 통신을 할까?

서버가 하나만 있는 것도 아니고 많이 존재하는데 어떻게 찾아갈까?

어떻게 찾아갈까?


IP (인터넷 프로토콜)

클라이언트에서 서버로 찾아가는 방법은 IP를 이용하는 것이다.

 

인터넷 프로토콜의 역할 

- 인터넷 프로토콜은 지정한 IP 주소 (IP Adress)로 데이터를 전달한다.

IP로 서로 찾아간다.

- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.

    - 출발 IP, 도착 IP, 전송 데이터로 구성된다. 

클라이언트에서 서버로 요청을 전달한다.
서버에서 클라이언트로 응답을 보내준다.

IP 프로토콜의 한계

위의 그림을 보면 통신을 하는 과정에서 많은 노드를 거치게 되는데, 클라이언트와 서버가 서로 연결 안된걸 볼 수 있다.

이 과정에서 문제가 생기기도 한다.

 

- 비연결성

    - 패킷을 받을 대상이 없거나 서비스 불능 대상이여도 패킷을 전송한다. (대상 서버가 패킷을 받을 수 있는지 알 수 없다)

- 비신뢰성

    - 노드를 거치다가 해당 노드에 문제가 생겨서 중간에 패킷이 사라지면? 

    - 패킷이 순서대로 안오면? 패킷이 정해진 노드대로 오지않고 중간에 경로가 바뀔 수도 있다. 

- 프로그램 구분

    - 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 2개 이상이면?


TCP, UDP

이전에 언급된 IP 프로토콜의 한계를 해결해주는게 TCP와 UDP 이다. 

먼저 IP 계층을 알아보자.

- 애플리케이션 계층 : HTTP, FTP

- 전송 계층 : TCP, UDP 

- 인터넷 계층 : IP

- 네트워크 인터페이스 계층

 

TODO : OSI 7계층 간단히 알아보기. 

 

프로토콜 계층

컴퓨터를 바라보면 간단하게 애플리케이션, 운영체제, 네트워크 관련된 구조로 3가지로 나눠진다.

여기서 채팅 프로그램을 통해 해외에 있는 친구에게 메시지를 보낸다면 다음과 같은 그림을 볼 수 있다. 

순서대로 보면 HTTP -> TCP -> IP -> 이더넷프레임 차례대로 정보가 포함되어 서버로 전송이 된다.

 

IP 패킷 정보

 

 

IP 패킷 정보에는 출발지 IP, 목적지 IP 등를 포함한다.

* 패킷은 수하물을 뜻하는 패키지와 덩어리를 뜻하는 버킷의 합성어다. 

 

TCP/IP 패킷 정보

TCP/IP 패킷은 IP 패킷 정보에 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 담긴다.

 

TCP는 전송 제어 프로토콜(Transmission Control Protocol)로 다음과 같은 특징을 가진다. 

- 연결지향 - TCP 3 way handshake (가상 연결)

 

 

1. 클라이언트에서 서버로 SYN(접속 요청) 메시지를 보낸다.

2. 서버에서 클라이언트로 SYN+ACK 메시지를 보낸다.

3. 클라이언트에서 서버로 ACK 메시지와 데이터를 보낸다. 

1,2 과정을 통해 서로 응답을 확인하고 나서 3번 과정을 통해 데이터를 보낸다.

* 실제로 물리적으로 연결된 게 아니라 개념적으로 연결이 된거다. 

 

- 데이터 전달 보증

- 순서 보증

- 신뢰할 수 있는 프로토콜

- 현재 대부분 TCP 사용

 

UDP (User Datagram Protocol)

사용자 데이터그램 프로토콜로 다음과 같은 특징을 가진다.

- 하얀 도화지에 비유 (기능이 없다고 보면됨)

- 연결지향 - TCP 3 way handshake 없음 

- 데이터 전달 보증도 하지 않음

- 순서 보장도 없음

- 그냥 단순하고 빠르다. 

 

IP와 비교하자면

- PORT, 체크섬 정도만 추가된다.

- 애플리케이션에서 추가 작업이 필요하다.


PORT

지금까지 클라이언트와 서버로 1:1 통신을 기준으로 알아봤다.

그런데 보통 게임에서 팀으로 진행하면 게임 서버, 팀과 화상통화, 웹 브라우저로 게임 정보 검색 등 1:n 으로 통신하면 어떻게 해야할까?

동시에 여러 서버로 통신하면 어떻게 구분할까?

 

TCP/IP 정보를 다시 확인해보자.

IP만으로 구분하기 힘들기 때문에 출발지 PORT, 목적지 PORT가 존재한다.

정리하면 IP와 PORT 2가지로 구분하게 된다.   

- 출발지 IP, PORT

- 목적지 IP, PORT

 

PORT란?

같은 IP 내에서 프로세스를 구분하는 걸 PORT라고 한다.

IP, PORT로 구분

 

PORT의 범위

0 ~ 65535 까지 할당이 가능하다.

0 ~ 1023는 기본적으로 사용하고 있기 때문에, 건들지 않는 것이 좋다. 다음은 대표적으로 사용 중인 PORT 번호다

  • FTP - 20, 21
  • TELNET - 23
  • HTTP - 80
  • HTTPS - 443

DNS (Domain Name System)

지금까지 IP로 클라이언트와 서버가 서로 통신하는 걸 알 수 있었다.

하지만 일반적인 사용자의 입장에서 인터넷을 사용할 때 생각해보면 IP 100.100.100.1 같은 주소를 외우긴 힘들다. 

https://www.naver.com  같이 도메인 주소를 입력해서 인터넷을 사용하는 게 대부분이다. 

또한 IP 주소는 변경이 될 수 있다.  

IP를 외워서 사용하기엔 많은 불편함이 있다.

 

이런 문제를 쉽게 해결해주는 것이 도메인 네임 시스템이다.

 

DNS이란?

IP 계의 전화번호부 역할을 한다.

도메인 명을 IP 주소로 변환시켜준다.

도메인 -> IP로 변환