본문 바로가기
CS 기본지식/HTTP

인터넷은 어떻게 동작할까?

by YellowCow 2022. 7. 14.

벡엔드 개발자로서 HTTP 프로토콜을 이용하여 개발을 하면 할 수록,

뜬구름 잡는 느낌으로 개발을 하고 있다는 느낌이 들었다.

 

그래서, 기본적인 네크워크 지식부터 HTTP 프로토콜에 대한 지식을 좀 정리해야겠다는 생각이 들어서

이 글을 작성하게 되었다.

 

먼저, 인터넷에서 통신하는 주체는 클라이언트와 서버로 구성된다.

클라이언트가 서버에 요청을 보내면

서버는 요청에 대한 응답을 클라이언트에게 전송한다.

 

1. IP 프로토콜

인터넷 통신에서도 우편물을 주고 받을 때처럼

송/수신자가 누군지 지정할 수 있는 규칙이 필요하다.

그런 역할을 해주는 프로토콜이 IP프로로콜이다.

아래 그림과 같이,

IP프로토콜에서는 IP주소를 부여함으로써,

송/수신자가 누군지 지정할 수 있게 했다.

IP 프로토콜에서는 데이터를 패킷이라는 단위로 데이터를 쪼개어 전송한다

한번에 보낼 경우, 너무 많은 대역폭을 차지하기 때문이다.

IP 프로토콜에서의 패킷은 아래와 같이 구성되어 있다.

 

하지만 IP 프로토콜에는 몇가지 한계가 있었다.

  • 중간에 장애 같은 문제로 패킷이 유실되는 경우
    • 서버 동작불능
    • 통신선로 문제
  • 패킷이 순서대로 도착하지 않는 경우
  • 같은 IP를 사용하는 서버에서 통신하는 Application이 여러개인 경우

2. TCP/UDP 프로토콜

위와 같은 IP프로토콜의 한계를 해결하기 위해 TCP/UDP 프로토콜이 등장했다.

자세한 설명은 아래에서 진행하겠다.

1. TCP 프로토콜

TCP 프로토콜은 아래와 같은 특징이 있다.

  • 3 way Handshake - 연결상태 확인
  • 데이터 전달 보증 - 전송결과 확인
  • 패킷 전달 순서 보장

 

1) 3 way Handshake

3 way는 아래와 같이 동작한다.

- 접속요청: 클라이언트가 서버와 통신하기 위해 접속을 요청한다.

- 수락: 서버가 클라이언트의 요청을 수락한다.

- 서버 측 수락 확인: 클라이언트가 서버의 접속수락을 확인했음을 알린다.

- 데이터 전송: 클라이언트에서 데이터를 서버에게 전송한다.

 

2) 데이터 전달 보증

TCP 프로토콜에서는

클라이언트가 데이터를 보내면

서버에서 데이터를 잘 받았다고 ACK를 보내게 되어있다.

이런 방법으로 데이터가 잘 전송됐는지 알 수 있도록 했다.

 

3) 패킷 순서 보장

인터넷 상에서는 패킷이 여러 경로를 통해서 전송되기 때문에

출발지인 클라이언트에서 패킷을 순서대로 전송했다고 해서

도착지인 서버에 꼭 순서대로 도착하지 않는다

그래서 TCP 프로토콜에서는 아래와 같이 해결했다.

  1. 데이터 전송
  2. 순서확인
  3. 순서대로 받지 못한 경우 순서가 뒤바뀐 패킷부터 전송요청

 

TCP 프로토콜에서는 몇 가지 단점이 있었는데

- 적은양의 데이터를 보낼 때에도 3 way Handshake, 데이터 전달 보증, 패킷 순서 보장을 지원하기 위해

  헤더의 사이즈가 커지는 경우가 발생한다.

- 헤더의 사이즈가 커짐에 따라, 전송속도에 한계가 있다.

 

2. UDP 프로토콜

UDP 프로토콜은 아래와 같은 특징을 갖고 있다.

  • 3 way Handshake 지원 X
  • 데이터 전달보증 X
  • 패킷 순서 보장 X
  • 프로토콜이 단순하고 빠름
  • IP와 거의 같다(Port와 Checksum 정도만 추가됨)
  • 애플리케이션 단에서 추가 작업 필요(최적화 할 수 있는 여지가 있음)

 

상대적으로 UDP 프로토콜이 TCP 프로토콜보다 가볍기 때문에

성능 최적화 면에서 최근 주목받고 있다.

 

3. Port

Port는 한 서버 내에서 어떤 Process에게 데이터를 전달할 지 식별하기 위해 사용된다.

 

4. DNS

앞에서 송/수신자를 지정하기 위해 IP 주소를 이용한다고 했다.

그런데 만약 수신자의 IP 주소가 변경된다면 어떻게 될까?

IP 주소가 변경될 때마다 IP주소를 받아서 전송해야한다.

 

이런 불편함을 해결하고자 DNS가 등장했다.

 

DNS(Domain Name Server)

Domain Name이란, IP주소에 이름을 붙이는 것이다.

 

Domain Name만 유지된다면, IP주소가 바뀌어도 서버에 데이터를 전송하거나 요청을 보낼 수 있다.

 

클라이언트가 DNS를 통해 서버에 접속하는 과정은 아래와 같다.

  1. 클라이언트가 DNS에 Domain Name을 전달한다.
  2. DNS가 Domain Name과 매핑되는 IP주소를 찾아 클라이언트에게 전달한다.
  3. 전달받은 IP주소로 서버에 접속을 요청한다.

 

다시 정리하자면,

인터넷 프로토콜에는 아래와 같이 4가지가 존재한다.

  • IP - 송/수신자 지정
  • TCP/UDP - 연결상태 체크, 데이터 전달보증, 패킷 순서 보증 
  • PORT - 어떤 Process가 데이터나 요청을 받을 것인지 지정하기 위해 사용
  • DNS - IP에 이름을 붙여 IP가 변경됐을 때도 사용할 수 있도록 하기 위해 사용

 

위 프로토콜을 이용하여

클라이언트와 서버 간 통신을 하게 되는 것이다.

'CS 기본지식 > HTTP' 카테고리의 다른 글

HTTP Status Code  (0) 2022.07.27
HTTP Method 활용  (0) 2022.07.26
HTTP Method(REST API)  (0) 2022.07.25
HTTP 개론  (0) 2022.07.21
URI  (0) 2022.07.16

댓글