네트워크

HTTP 정리 - 인터넷 통신이 이루어지는 방식

ghtis1798 2021. 5. 9. 10:28

인터넷 네트워크

인터넷 통신을 이해하기 위해서는 4가지 주요 개념에 대한 이해가 필요했다.

  1. IP
  2. TCP, UDP
  3. PORT
  4. DNS

웹 프로젝트를 할 때면, 네트워크 관련 지식이 부족해 통신을 하는 과정을 명확히 이해하기가 어려웠다. 이번 기회에 통신과 관련된 기본 개념들을 정리해보았다.

📌IP

PC와 PC가 통신을 하기 위해서는 각 PC의 주소가 필요하다. PC는 자신의 IP주소, 목적지 IP주소, 그리고 전송할 데이터를 인터넷 망으로 전송한다. 그럼 인터넷 망은 정해진 규칙(프로토콜)에 의해 목적지 주소로 패킷을 전달한다.

인터넷 망 안에서는 수 많은 노드(서버)들을 거쳐 목적지에 전달될 것이다. 이 구체적인 과정은 데이터 통신이나 컴퓨터 통신 시간에 배웠떤 내용들을 다시 복기할 필요가 있을 것 같다.

하지만 IP만을 사용하기에는 다음과 같은 한계점들이 있을 수 있다.

  1. 전송 중 중간 서버가 다운될 경우?
  2. 전송 중 패킷이 소실될 경우?
  3. 전송 중 패킷 순서가 바뀔 경우?
  4. 전송이 완료되었으나, PC 내 어떤 프로그램과 통신중인지 구분할 방법?

정리하면 비연결성, 비신뢰성, 프로그램 구분 방법에 대한 추가적인 정보가 필요하다.

이를 보완하기 위해 나온 것이 TCP(Transmission Control Protocol)이다.

📌TCP 

TCP(Transmission Control Protocol)는 IP의 한계점인 비연결성, 비신뢰성, 프로그램 구분 방법을 보완한 방식이다.

1. 연결성

TCP는 3-way handshake 방식을 통해 통신 간 연결을 보장한다. 3-way handshake 방식은 syn과 ack를 통해 서로가 연결되어 있는 것을 확인함으로써 가상 연결(논리적 연결)을 보장하는 방식이다. 하지만 실질적인 물리적 연결을 보장하는 것은 아니다. syn, ack를 정상적으로 수신한 경우 이를 연결이 잘 되어 있구나. 라고 확인하는 정도.

3-way handshake 방식은 다음과 같이 동작한다.

  1. 송신자가 syn 정보를 수신자에게 보낸다.
  2. 수신자는 잘 받았다는 ack와 syn 정보를 다시 수신자에게 보낸다.
  3. 송신자도 잘 받았다는 ack 정보를 수신자에게 보내면 통신 준비가 끝난다.

최근에는 3단계에서 ack 정보와 데이터를 함께 보내는 piggybacking 방식을 많이 사용한다.

2. 신뢰성

TCP는 데이터 전송 시 패킷 손실과 패킷 순서 변경에 대한 신뢰성을 보장한다.

  • 송신측에서 데이터를 보내면, 수신측에서 잘 받았다는 ACK를 보냄으로써 패킷이 손실되지 않았음을 확인시켜준다.
  • 패킷 순서의 경우 수신측에서 변경되었을 경우 다시 재전송 요청을 함으로써 순서를 보장한다.

3. 프로그램 구분

TCP는 같은 PC 내의 프로세스들을 구분하기 위해 PORT정보를 추가적으로 전달한다. 이 PORT를 통해 송신자가 어떤 프로그램에 데이터를 전달하는 지를 구분한다.

TCP는 안정적인 통신을 보장하지만, 3-way handshaking 방식을 사용하므로 통신 속도는 UDP에 비해 느린편이다.

📌UDP 

UDP(User Diagram Protocol)는 TCP와 달리 비연결성, 비신뢰성이라는 특징을 가진다. 반면 가장 큰 장점은 TCP보다 통신 속도가 빠르다는 것이다. 3-way handshaking 방식을 사용하지 않으므로 연결성을 보장하지도, 신뢰성있는 통신을 보장하지 않는다. 다만 빠르게 전송이 가능하다. 최근에는 HTTP3에서 사용되며 각광을 받고 있는 추세이다.

IP에서 추가된 점을 프로세스를 구분하는 PORT정보와 CHECKSUM 정보가 추가되어 있다는 점이 다르다.

📌DNS

DNS(Domain Name Service)는 IP 주소가 기억하기 어렵고 변경 가능하다는 점을 보완하기 위해 나온 개념이다. DNS는 도메인 명에 IP주소를 할당하므로 IP주소를 기억할 필요가 없다. 또한 IP주소가 변경되더라도 문제가 발생하지 않는다는 장점이 있다.

이 글은 김영한님의 모든 개발자를 위한 HTTP 웹 기본강의를 듣고 학습한 내용을 정리하였습니다. 

'네트워크' 카테고리의 다른 글

HTTP정리 - URL과 웹 브라우저 요청 흐름  (0) 2021.05.15