인터넷 통신

두 컴퓨터 간에 통신을 하려면 어떻게 해야할까요? 두 컴퓨터 간의 네트워크가 간단하다면 별로 고민할 필요가 없습니다.

하지만 노드 간 통신은 인터넷이라는 복잡한 네트워크 망을 통해 이루어집니다.
이러한 복잡한 망(인터넷)에서 통신이 이루어지려면 그들만의 규칙이 존재해야 합니다.
그중 첫번째가 바로 IP(인터넷 프로토콜)입니다.

IP(Internet Protocol)

Internet Protocol을 통해 통신하는 두 노드는 우선 IP 주소를 가지고 있어야 합니다. 그러면 주어진 주소와 데이터, 그리고 기타 정보를 하나로 패킹해서 인터넷 망에 뿌려줍니다. 참고로 이렇게 패킹된 꾸러미(?)를 IP패킷 이라고 합니다.

하지만 Internet protocol만으로는 인터넷에서의 노드 간 통신이 완벽하게 이루어지지 않습니다.

  • 비연결성: 패킷을 받을 대상이 없거나, 서비스 불능 상태여도 패킷이 일단 전송됩니다.
  • 비신뢰성: 중간에 패킷이 사라진다거나, 패킷의 순서가 뒤바뀌어도 알 수 없습니다
  • 프로그램 구분: 하나의 IP에서 여러 애플리케이션을 사용하면 데이터가 어떤 PORT로 데이터를 주어야할 지 모릅니다.

이러한 한계로 인터넷에서의 통신을 위해서는 조금 더 세밀한 약속(protocol)이 필요합니다. 그것이 바로 TCP입니다.

TCP

밑에 그림과 같이 IP 패킹이 되기 전에 TCP 패킹이 먼저 이루어짐으로써 IP를 통한 통신을 좀 더 안정적으로 만들어줍니다.

TCP는 노드가 서로 인터넷 망에 연결되었는지 확인된 후에 데이터를 전달하고(Handshake), 데이터의 순서를 보장하기 때문에 IP 보다 더 신뢰성 있는 프로토콜을 제공합니다.

밑에 그림은 인터넷 통신을 위한 프로토콜의 모든 계층과 패킷이 되는 과정을 보여주는 그림입니다.

PORT

  • 같은 IP내에서 프로세스를 구분해주는 역할

TCP의 특징 중 하나는 노드 안에서도 프로그램에 따라 서로 다른 포트를 부여함으로써, 동시에 여러 노드로부터 전송되는 데이터가 섞이지 않고 잘 분류되도록 해준다는 것입니다.

앞으로는 TCP와 IP를 하나로 묶어서 TCP/IP 라고 하도록 하겠습니다.

DNS(Domain Name Server)

지금까지 두 노드가 통신하기 위해서는 자기 자신과 서로의 IP를 모두 알고 있어야 된다고 했는데, 그러면 우리는 매번 네이버, 구글과 같은 서버와 통신하기 위해서는 그들의 IP를 모두 알고 있어야 한다. 하지만 IP는 의미가 크지 않은 숫자들의 나열이기 때문에 사실상 모든 IP 주소를 외우는 것은 불가능하다. 그리고 IP주소는 나중에 변경될 수 있기 때문에, 결론적으로 IP는 궁극적인 해결책이 되지 못한다. 이러한 이유로 DNS라고 하는 서버에 IP주소와 도메인 네임을 매핑하면 더이상 IP주소로 접근할 필요가 없다.

Tags:

Categories:

Updated: