본문 바로가기

World Wide Web/TCP-IP

IP, TCP/UDP, Port에 관해

누구에게 보낼지를 알아야 한다

HTTP 등의 응용 프로토콜로 통신을 할 때, 누구에게 보낼지를 알아야 한다. 예를 들어, 우리가 보내고 싶은 메시지가 있다면, 그 메시지를 누가 받는지 주소와 연락처를 알아야 제대로 메시지를 보낼 수 있다. 이 때 그러한 주소, 연락처 역할을 하는 것이 IP이다.

 

이 IP는 글로벌한지 혹은 사설인지에 따라 나뉜다. 글로벌 IP는 우리의 주민등록 상의 주소와 같다. 한 지붕 아래 두 집 살림이 아닌 이상, 동일한 집주소를 가진 경우는 없다. 이게 글로벌 IP이다. 반면에 가족끼리 집 주소를 이야기할 때는, 보통 '우리집'이라는 말을 많이 쓴다. 이렇게 간단히 '우리집'으로 말하는 것이 사설 IP이다.

 

메시지를 보내는 방식에 차이가 있다.

연락처(IP)를 알았다면, 이에 메시지를 상대방에게 보낼 수 있다. 헌데 이 메시지를 보내는 방식에는 두 가지 방식이 존재한다. 하나는 TCP이고, 하나는 UDP이다. TCP는 우리가 일반적으로 메시지와 같은 리얼타임이 중요하지 않은 데이터를 보낼 때 사용하는 방식이다. 안정성이 높은 방식이라 할 수 있다. 헌데, 동영상과 같은 매체가 웹 서비스에서 중요하게 됨에 따라 리얼타임으로 보내는 방식이 필요해졌는데, 그것이 UDP이다.

 

TCP/UDP 이외에 포트라는 것이 존재한다. 위 그림을 보면 우리가 상대방에게 정보를 보내고 정보를 받을 때 상자와 같은 형태로 정보를 주고 받는 것을 알 수 있다. 이것을 패킷이라 한다. 우리가 메시지, 동영상, 이미지 어떤 것을 보내건 정보를 상자의 형태로 쪼개서 통신하게 된다.

 

이럴 경우의 문제점은 정보들이 쪼개져서 상대방에게 전달되기 때문에, 상대 입장에서는 이것이 본래 어떠한 정보였는지 알기 어렵다는 문제가 생긴다. 이것을 해결하기 위해 나온 것이 포트이다.

 

각 패킷이 들어갈 항구라는 의미에서 Port이다.

정보를 상자의 형태로 쪼개서 보내기 때문에 이것이 본래 어떤 정보였는지를 명시해주어야 한다. 그래야 정보를 받는 입장에서 표기 대로 차곡차곡 정리해서 원래 정보를 복원할 수 있다. 이것이 포트이다. 배가 항구에 들어갈 때 어떤 항구에 들어갈지를 명시해주는 것처럼 각 정보마다 도착해야할 항구가 다르다고 표기해주는 것이 Port이다.

 

일반적으로 HTTP 통신은 80 포트를 사용한다. 각 응용 프로토콜(SSH, FTP, Telnet 등) 마다 지정된 포트가 존재한다. 마찬가지로 웹 서버와 데이터 베이스 서버 간에도 포트가 존재한다. 데이터 베이스는 각 DBMS 마다 고유의 포트가 존재한다. 일반적으로 MongoDB는 27017, MySQL은 3306 포트를 사용한다.