클라이언트가 두 개 이상의 서버에 연결해야 한다면, 한 번에 여러 컴퓨터와 통신하게 된다. 이럴 경우 패킷이 혼동 될 수 있어 통신 마다 패킷을 구분할 필요가 있다. 이 때 이용되는 것이 포트인데, 영어로 항구, 항만 이런 뜻을 가지고 있는 단어인 만큼 지정된 항구에 지정된 배가 오가며 화물과 승객을 내리는 것이 연상된다.
TCP에서는 출발지 포트와 목적지 포트를 IP주소와 함께 포함한다. 이 포트를 이용해 같은 IP주소 내에서 애플리케이션의 프로세스를 구분 한다. 위 이미지에서 게임은 8090, 화상통화는 21000, 웹 브라우저는 10010번 포트로 정보가 들어오는 것을 볼 수 있다. 비유를 하자면, IP가 "00아파트"까지를 나타내는 주소라고 하면, 포트는 상세한 동, 호수 등을 나타내는 정보라고 할 수 있다.
하나의 IP 주소를 가진 클라이언트에서 여러 요청을 받아도 서버는 각각 정확한 응답을 할 수 있게 되는 것이다.
서버에 요청을 하기 위해서는 상대방의 IP주소와 포트 번호를 알고 있어야하는데, IP주소와 포트번호를 매번 외우기엔 쉽지가 않다. 그리고 서버에서 새로운 IP를 발급받는다면 클라이언트입장에서 어떤 IP로 변경됐는지 소식을 듣지 못하면 아예 그 서버로 갈 수 없게 된다. 이런 문제를 위해 등장한 것이 DNS(Domain Name System)이다.
전화번호를 저장하고 관리하는 전화번호부 같은 서버를 제공해 도메인명을 등록하고, IP주소로 변환할 수 있는 원리다. 예를 들어 "google.com" 이라는 도메인을 구매해 등록하면 도메인명을 IP주소로 변환해서 관리하는 DNS 서버를 이용할 수 있게 된다. DNS서버에 저장되어 있는 도메인명을 통해 IP 주소를 모두 기억하지 않아도 되고, 변경하더라도 접근 할 수 있다.
URI(Uniform Resource Identifier)
- Uniform - 리소스를 식별하는 통일된 방식
- Resource - 자원, URI로 식별할 수 있는 모든 것(제한 없음), html파일 뿐만 아니라 식별할 수 있는 모든 data 자원을 의미한다.
- Identifier - 다른 항목과 구분하는데 필요한 정보.
한마디로 URI는 "자원을 식별하는 통합된 방법" 을 뜻한다. URI는 URL(Uniform Resource Locator)과 URN(Uniform Resource Name)을 포함하는 개념이다.
구글을 예시로 한 URL을 살펴보면
https://www.google.com:443/search?q=hello&hl=ko
아래와 같이 분석해 볼 수 있다.
https
- 프로토콜, 생략 가능하다.www.google.com
- DNS 서버에 호스트명이 저장되어 있으며 이는 IP 주소와 대응된다.443
- 생략 가능하다/search
서버에 도착하면 서버 요청하고자 하는 특정 페이지에 대한 디렉토리까지의 경로.q=hello&hl=ko
- 'key=value' 형태를 띄고 있다. 웹 서버에 제공하는 파라미터로, 클라이언트가 서버에게 요청할 때 건내주는 인자에 해당한다. 보면 알겠지만 우리가 보낸 쿼리는 hello에 대한 검색이고, 그에 대한 결과는 한국어 페이지(ko)로 띄워달라는 파라미터이다. ?로 시작하며 &로 파라미터를 추가할 수 있다.REFERENCE: 모든 개발자를 위한 HTTP 웹 기본 지식