웹이나 HTTP도 인터넷 네트워크 망을 기반으로 동작하기에 기초 지식을 배워보자
인터넷 통신
인터넷에서 컴퓨터 둘은 어떻게 통신할까? 그냥 케이블 연결해서 하면 되지 않아?
그럼 엄청 멀리 떨어져 있는 컴퓨터들 (해외에 있다면?) 어떻게 통신해?
인터넷을 통해 전달을 하려하는데 인터넷은 되게 복잡한 구조로 되어 있어서 여러 규칙들에 의해 전달됨
그럼 그 규칙은 무엇일까?

IP (인터넷 프로토콜)
그 규칙은 IP 즉,
인터넷 프로토콜
을 이용하는 방법이다. 클라이언트(나)와 서버(친구)에게 각각 다른 IP 주소
를 부여한다.인터넷 프로토콜의 역할은 지정한 IP 주소에 데이터를 전달하는 것이다. 이 때,
패킷(Packet)
이라는 통신 단위를 사용한다. IP 패킷에는 출발지 IP
, 목적지 IP
, 기타 내용을 작성하고 전송 데이터
를 담아 인터넷에 전달한다. 그럼 인터넷 망에 있는 노드가 목적지 IP를 찾아 전달 전달 전달 되어 목적지에 도착하게 된다.그러나 이 방법에는 다음과 같은 한계가 있다.
- 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
ex) 친구가 컴퓨터를 꺼둔 상태일수도 있지만 그냥 패킷 전송함 마치 친구가 이사간지도 모르고 그 주소로 편지를 보내는 것 처럼.. 친구가 그 집에 없어도 편지는 결국 그 집으로 도착할테니까..
- 비신뢰성: 노드 서버의 문제로 중간에 패킷이 사라질 수도 있고, 패킷이 전송 순서대로 도착하지 않을 수도 있다.
- 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 두개 이상일 때 어떻게 구분할 지도 문제이다.
그렇다면 이와 같은 문제를 해결할 수 있는 방법은 무엇일까?
TCP, UDP
바로 TCP이다.
TCP
는 전송 제어 프로토콜
로 앞서 말한 문제를 해결하는 특징을 가지고 있다.- 연결지향적:
3 way handshake
방법을 통해 클라이언트와 서버가 연결되었는지 확인할 수 있다. SYN
(씬): 클라이언트가 서버에게 접속 요청SYN
+ACK
(에크): 서버가 요청을 수락하고, 자신도 클라이언트에게 접속 요청ACK
: 클라이언트도 요청을 수락- 데이터 전송 * 참고로 3,4번을 동시에 진행하기도 함

- 데이터 전달 보증: 클라이언트가 서버에게 데이터를 전송하면, 서버에서 데이터를 잘 받았다고 클라이언트에게 다시 알려준다.
- 순서 보장: 클라이언트가 패킷 1,2,3 순서로 전송했는데 만약 서버에서 1,3,2 순서로 도착하면 서버에서 패킷 2부터 다시보내라고 알려준다.
이와 같이 안정적인 전달이 가능하여, 신뢰할 수 있는 프로토콜이라고 불린다. 현재 대부분 TCP를 사용하고 있다.
이러한 전달이 가능한 것은
TCP
로 감쌀 때 전달되는 정보들 덕분이다. 여기서 PORT
는 같은 IP에서 여러 애플리케이션을 사용할 때를 구분하기 위한 것인데, 아래에서 더 자세히 다룬다.
참고 - 프로토콜 계층과 데이터를 전송하는 과정을 나타냄

그리고
UDP
는 사용자 데이터그램 프로토콜
인데, 거의 기능이 없다. TCP처럼 연결지향적이지도 않고, 데이터 전달 및 순서도 보장되지 않는다. IP와 유사하지만 PORT
와 이를 체크하는 체크섬
정도만 추가되어 있다. 따라서 이를 더 최적화하고 싶다면 애플리케이션에서 추가 작업이 필요하다.PORT
한 번에 둘 이상을 연결해야 할 때, 즉 하나의 IP 주소에서 여러 애플리케이션을 구분해야할 때 사용하는 것이
PORT
이다. TCP/IP 패킷에 출발지 IP,
PORT
, 목적지 IP,
PORT
가 들어가 있어 같은 IP 내에서 프로세스를 구분할 수 있다. 아래의 그림을 보면 상세히 알 수 있다.
예를 들어, 게임을
IP
가 100.100.100.1
이고 PORT
가 8090
에 연결해두고 게임 서버를 연결하기 위한 요청을 IP
가 200.200.200.2
이고 PORT
가 11220
인 곳에 보낸다. 그러면 그 서버는 IP
와 PORT
가 게임을 가리키는 것을 알고 요청을 수락할 것이다. 이렇게 같은 IP
에서 여러 애플리케이션을 구분할 때는 각자 다른 PORT
번호를 사용하면 된다.PORT
번호는 0 ~ 65535
범위 내에서 할당 가능하며, 0 ~ 1023
는 잘 알려진 포트로 사용하지 않는 것이 좋다.DNS
DNS는
도메인 네임 시스템
이다. 약간 전화번호부 같은 느낌인데, 기억하기 어렵고 바뀔 수도 있는 IP 주소를 도메인 명과 함께 기억해둔다. 그리고 클라이언트가 요청을 하면 DNS 서버에서 도메인 명을 IP 주소로 바꿔준다.