통신 프로토콜이란?
웹에서 사용되는 기본 네트워크 구조는 클라이언트 <-> 인터넷 <-> 서버
이다. 이를 관리하는 규칙을 프로토콜
혹은 IP
라 부른다. 데이터는 패킷
이라는 단위로 전송되며, 이 패킷은 정해진 경로가 아니라, 각 노드를 통해 도착지까지 전송된다. 하지만, 이러한 프로토콜에는 문제점이 있다. 예를 들면, 비연결성, 비신뢰성(데이터가 중간에 사라지거나 순서대로 도착하지 않음), 서버가 같은 IP를 사용하는 등의 문제가 있다. 이러한 문제를 해결하기 위해 TCP/UDP
프로토콜이 사용된다.
신뢰할 수 있는 패킷의 전송이 가능한가?
TCP
는 연결지향적이며, 데이터 전달 보증, 순서 보장 등의 특징을 가진다. 이는 3 way handshake
를 통해 이루어진다. 이 과정은 아래와 같다.
- 클라이언트는 서버에게 연결 가능 여부를 확인하는
SYN
패킷을 보낸다. - 서버는 클라이언트에게 연결 가능함을 응답하고, 반대로 서버가 데이터를 받을 수 있는지 확인하는
SYN+ACK
패킷을 보낸다. - 클라이언트는 마지막으로 서버에게 데이터 수신이 가능하다는
ACK
패킷을 보낸다.
이렇게 하면 클라이언트와 서버 모두 데이터 수신이 가능하다는 것을 확인할 수 있다. 그리고, 이 정보는 출발지와 목적지의 IP와 포트, 전송 제어, 순서, 검증 정보 등과 함께 HTTP 메시지에 포함된다.
다른 방법은 없을까?
UDP
라는 프로토콜도 있다. 이는 포트
와 체크섬
(데이터의 정확성 검증)을 관리한다. TCP
와 비교해 UDP
는 기본적으로 기능이 적어, 사용자가 필요에 맞게 쉽게 커스텀 할 수 있다는 장점이 있다. 이러한 장점 때문에 최근 HTTP 3
에서 UDP
가 다시 주목받고 있다.
더 알아야할 것은?
PORT
는 같은 IP 내에서 각각의 프로세스를 구분한다. 범위는 0~65535
이며, 0~1023
은 잘 알려진 포트로 보통 사용하지 않는 것이 좋다. 예를 들면, FTP
는 20, 21, TELNET
은 23, HTTP
는 80, HTTPS
는 443이다. 또한, DNS
는 IP를 기억하기 어려울 때 사용되는데, 이는 숫자로 된 IP 주소를 사용자 친화적인 도메인 이름으로 변환해준다. 예를 들어, 1.1.1.1
같은 IP를 google.com
처럼 사용할 수 있게 해준다.