네트워크 프로토콜에 대해서
대부분의 네트워크는 메시지를 보낸 다음 응답을 받을 때 특별한 규칙들을 사용하곤 한다. 예를 들어 보자면, 어떤 환경에서는 파일 전송 메시지를 받으면 목적지에서는 메시지 수신을 나타내는 응답 패킷을 반드시 보내도록 요구받을 수도 있다. 다른 환경에서는, 응답 패킷을 기대하지 않을 수도 있는 것이다. 컴퓨터가 서로 통신할 시 지켜야 할 약속의 집합을 다른 말로 '프로토콜'이라고 부른다. 라우터-라우터 프로토콜, 호스트-호스트 프로토콜 등 다양한 프로토콜이 존재하는 것이다.
네트워크는 서로 다른 프로토콜이 층 구조를 이루고 있는 일명, 프로토콜 스택을 사용한다. 각 층에서는 서로 다른 이슈를 처리한다고 보면 된다. 예로, 프로토콜의 아래층에는 비트 스트림에서 패킷의 시작, 그리고 끝이 어디인지 등을 정의한다. 그 위에 있는 층에서는 소스에서 목적지까지 복잡한 네트워크를 통해서 패킷을 라우팅 하는 방법을 다룬다고 보면 된다. 그 위에 층에서는 길이가 긴 메시지가 여러 패킷으로 나누어져 전송될 때 손실된 것이 없이 순서대로 잘 도착했는지를 검증한다. 이런 방식으로 여러 가지 프로토콜 작업이 층 구조로 처리되는 것이라고 보면 된다.
대부분의 분산 시스템이 인터넷을 기반으로 하기에, 두 개의 핵심 프로토콜은 IP 그리고 TCP이다. IP는 데이터그램 프로토콜로 전송자는 최대 64KB 크기의 데이터그램을 네트워크로 보낸다. 어떤 보장도 이뤄지지는 않는다. 데이터그램은 인터넷을 통과하는 중, 여러 개의 작은 패킷으로 나뉘어질 수도 있다. 패킷은 서로 독립적으로 전송되며 서로 다른 길로 라우팅 될 수도 있다. 모든 조각이 목적지에 도착한 후에는, 순서대로 합쳐지고 사용자에게 전달된다고 보면 된다.
현재 자주 사용되고 있는 IP는 2개의 버전, 즉 v4와 v6이 있다. 현재는 v4가 많이 사용되고 있지만 새로 등장한 v6도 지속적으로 영역을 넓혀나가고 있다. 각 v4 패킷은 40바이트 헤더로 시작하곤 하며, 여기에는 32비트 소스 주소, 그리고 32비트 목적지 주소가 존재한다. 이 주소는 IP주소라고 불리며 점으로 구분된 0~255 범위의 십진수 4개로 구성된다. 예로, 152.112.151.105이다. 패킷이 라우터에 도착하면 헤더에 있는 목적지 주소에 따라 라우팅이 된다.
IP 데이터그램은 응답 패킷을 사용하지 않는다. IP 혼자만으로는 신뢰성 있는 통신을 제공하기가 어렵다. 신뢰성 있는 통신을 제공하기 위해서는 TCP가 IP 층 위에서 사용된다고 보면 된다. TCP는 IP 상에서 연결 지향 스트림을 제공한다. 한 프로세스가 TCP를 사용하려고 한다면, 우선 원격 프로세스로 연결 설정이 필요하다. 요청된 프로세스는 자신이 존재하는 기계의 IP 주소, 그리고 그 기계 상에서 포트 번호로 표시된다.
포트란 관련된 프로세스가 연결 요청 패킷을 기다리며 듣고 있는 곳이라고 보면 된다. 일단 연결이 설정되고 나면, 연결에 데이터를 전송했을 때 수신자가 손실 없이 순서대로 받는 것이 보장된다고 보면 된다. TCP는 이를 위해서 내부적으로 체크섬, 패킷 재전송 등의 별도 방법을 사용하는데 이와 같은 방법이 전송자, 그리고 수신자에게는 투명하다고 보면 된다.
프로토콜의 상호 작용을 보고자 하면 아주 작은 크기의 메시지를 보내는 경우를 생각해 보는 것이 좋다. 호스트는 인터넷에 연결된 이더넷에 존재한다. 사용자 프로세스는 메시지를 생성하고 이미 설정된 TCP 설정을 통해 전송하기 위해 시스템 호출을 요청한다. 커널 프로토콜 스택은 TCP 헤더, 그리고 IP 헤더를 메시지 앞에 추가한다. 또한, 이더넷 드라이버에게 전달한다. 여기서 이더넷 헤더를 추가하고 패킷을 이더넷의 라우터로 보낸다.
원격 호스트와 연결을 설정하기 위해, 목적지의 IP 주소를 꼭 알아야만 한다. 32비트 IP 주소를 직접 관리하는 것은 확실히 불편하다. 그래서 DNS라고 불리는 ASCII 이름을 IP 주소로 변환하는 데이터베이스가 개발된 것이다. 즉, 152.112.151.105와 같은 IP 주소를 일일이 외우고 입력하는 대신, light.co.kr 등과 같은 DNS 이름을 사용할 수 있게 되었다.
인터넷 이메일 주소는 user-name@DNS-host-name으로 사용되기에 DNS 이름은 이미 보편화되었다고 볼 수 있다. 전송자 시스템의 이메일 프로그램은 목적지 호스트의 IP 주소를 DNS 데이터베이스에서 검색하며, 목적지 호스트에 있는 이메일 데몬 프로세스와 연결 설정을 하고 메시지를 파일로 보낸다. User-name은 메시지가 전달되는 동안 메일 박스를 결정할 때 사용된다고 볼 수 있다.